├── docs ├── CNAME ├── latest_version.txt ├── .gitignore ├── favicon.ico ├── img │ ├── spacer.gif │ ├── logo-2x.png │ ├── logo-rss.png │ ├── footer-logo.png │ ├── jekyll-og.png │ ├── octojekyll.png │ ├── footer-arrow.png │ ├── twitter-card.png │ ├── article-footer.png │ ├── jekyll-sticker.jpg │ ├── jekyll-sticker.png │ └── jekylllayoutconcept.png ├── fonts │ ├── FontAwesome.eot │ ├── FontAwesome.ttf │ ├── FontAwesome.woff │ ├── lato-v14-latin-300.woff │ ├── lato-v14-latin-700.woff │ ├── lato-v14-latin-900.woff │ ├── lato-v14-latin-300.woff2 │ ├── lato-v14-latin-700.woff2 │ ├── lato-v14-latin-900.woff2 │ ├── lato-v14-latin-italic.woff │ ├── lato-v14-latin-italic.woff2 │ ├── lato-v14-latin-regular.woff │ ├── lato-v14-latin-regular.woff2 │ ├── lato-v14-latin-300italic.woff │ ├── lato-v14-latin-300italic.woff2 │ ├── lato-v14-latin-700italic.woff │ ├── lato-v14-latin-700italic.woff2 │ ├── lato-v14-latin-900italic.woff │ └── lato-v14-latin-900italic.woff2 ├── _docs │ ├── markdown-101.md │ ├── migrations.md │ ├── community │ │ └── bug.md │ ├── deployment.md │ ├── configuration │ │ ├── webrick.md │ │ └── sass.md │ ├── liquid.md │ ├── installation │ │ ├── ubuntu.md │ │ └── other-linux.md │ ├── configuration.md │ ├── upgrading.md │ ├── installation.md │ └── plugins │ │ └── filters.md ├── _includes │ ├── search │ │ ├── input.html │ │ └── script.html │ ├── docs_version_badge.html │ ├── improve_doc_link.html │ ├── primary-nav-items.html │ ├── docs_variables_table.html │ ├── news_contents_mobile.html │ ├── mobile-nav-items.html │ ├── analytics.html │ ├── tutorials_contents.html │ ├── docs_contents_mobile.html │ ├── docs_contents.html │ ├── tutorials_contents_mobile.html │ ├── footer.html │ ├── header.html │ ├── news_item.html │ ├── news_item_archive.html │ └── top.html ├── pages │ ├── redirects │ │ ├── github.html │ │ └── issues.html │ ├── news.html │ ├── releases.html │ ├── showcase.html │ ├── team.md │ └── 404.html ├── _data │ ├── ruby.yml │ ├── tutorials.yml │ ├── primary_nav.yml │ └── docs_nav.yml ├── css │ └── screen.scss ├── _layouts │ ├── news.html │ ├── page.html │ ├── docs.html │ ├── error.html │ ├── step.html │ ├── default.html │ └── news_item.html ├── _posts │ ├── 2025-01-29-jekyll-4-4-1-released.markdown │ ├── 2023-12-28-jekyll-3-9-4-released.markdown │ ├── 2018-11-04-jekyll-3-8-5-released.markdown │ ├── 2018-06-04-jekyll-3-8-3-released.markdown │ ├── 2023-01-29-jekyll-3-9-3-released.markdown │ ├── 2016-05-18-jekyll-3-1-5-released.markdown │ ├── 2024-09-16-jekyll-4-3-4-released.markdown │ ├── 2013-12-09-jekyll-1-4-1-released.markdown │ ├── 2024-06-23-jekyll-3-10-0-released.markdown │ ├── 2014-11-12-jekyll-2-5-2-released.markdown │ ├── 2022-03-27-jekyll-3-9-2-released.markdown │ ├── 2013-10-28-jekyll-1-3-0-rc1-released.markdown │ ├── 2023-12-27-jekyll-4-3-3-released.markdown │ ├── 2016-11-14-jekyll-3-3-1-released.markdown │ ├── 2013-12-16-jekyll-1-4-2-released.markdown │ ├── 2014-07-29-jekyll-2-2-0-released.markdown │ ├── 2021-04-08-jekyll-3-9-1-released.markdown │ ├── 2015-02-26-introducing-jekyll-talk.markdown │ ├── 2014-03-24-jekyll-1-5-0-released.markdown │ ├── 2016-05-19-jekyll-3-1-6-released.markdown │ ├── 2016-04-19-jekyll-3-1-3-released.markdown │ ├── 2016-01-20-jekyll-3-0-2-released.markdown │ ├── 2019-07-02-jekyll-3-8-6-released.markdown │ ├── 2014-12-22-jekyll-2-5-3-released.markdown │ ├── 2013-09-14-jekyll-1-2-1-released.markdown │ ├── 2018-05-18-jekyll-3-8-2-released.markdown │ ├── 2014-06-04-jekyll-stickers-1-dollar-stickermule.markdown │ ├── 2014-03-27-jekyll-1-5-1-released.markdown │ ├── 2022-10-26-jekyll-4-3-1-released.markdown │ ├── 2013-11-26-jekyll-1-3-1-released.markdown │ ├── 2015-01-20-jekyll-meet-and-greet.markdown │ ├── 2018-05-01-jekyll-3-8-1-released.markdown │ ├── 2013-06-07-jekyll-1-0-3-released.markdown │ ├── 2018-02-25-jekyll-3-7-3-released.markdown │ ├── 2016-08-02-jekyll-3-2-1-released.markdown │ ├── 2016-04-26-jekyll-3-0-5-released.markdown │ ├── 2013-07-25-jekyll-1-0-4-released.markdown │ ├── 2013-07-25-jekyll-1-1-2-released.markdown │ ├── 2014-05-08-jekyll-2-0-3-released.markdown │ ├── 2014-07-01-jekyll-2-1-1-released.markdown │ ├── 2016-04-19-jekyll-3-0-4-released.markdown │ ├── 2013-07-24-jekyll-1-1-1-released.markdown │ ├── 2014-12-17-alfredxing-welcome-to-jekyll-core.md │ ├── 2017-07-17-jekyll-3-5-1-released.markdown │ ├── 2015-11-17-jekyll-3-0-1-released.markdown │ ├── 2020-05-08-jekyll-4-0-1-released.markdown │ ├── 2013-05-06-jekyll-1-0-0-released.markdown │ ├── 2013-05-08-jekyll-1-0-1-released.markdown │ ├── 2013-07-14-jekyll-1-1-0-released.markdown │ ├── 2020-08-05-jekyll-3-9-0-released.markdown │ └── 2013-09-06-jekyll-1-2-0-released.markdown ├── readme.md └── _sass │ └── _font-awesome.scss ├── .gitattributes ├── test ├── safe_glob_test[ │ └── find_me.txt ├── source │ ├── .gitattributes │ ├── _includes │ │ ├── tmp │ │ ├── include.html │ │ ├── sig.markdown │ │ ├── params.html │ │ └── params@2.0.html │ ├── symlink-test │ │ ├── _data │ │ ├── symlinked-dir │ │ ├── symlinked-file │ │ └── symlinked-file-outside-source │ ├── _glob_include_test │ │ ├── _not_dir │ │ └── _is_dir │ │ │ └── include_me.txt │ ├── _data │ │ ├── products.yml │ │ ├── languages.yml │ │ ├── greetings.yml │ │ ├── i18n.yml │ │ ├── categories │ │ │ └── dairy.yaml │ │ ├── categories.01 │ │ │ └── dairy.yaml │ │ ├── members.yaml │ │ └── members.json │ ├── _methods │ │ ├── um_hi.md │ │ ├── with.dots │ │ │ ├── .htaccess │ │ │ └── .gitignore │ │ ├── extensionless_static_file │ │ ├── trailing-dots...md │ │ ├── site │ │ │ ├── initialize.md │ │ │ ├── generate.md │ │ │ └── _dont_include_me_either.md │ │ ├── escape-+ #%20[].md │ │ ├── 3940394-21-9393050-fifif1323-test.md │ │ ├── _do_not_read_me.md │ │ ├── sanitized_path.md │ │ ├── collection │ │ │ └── entries │ │ ├── yaml_with_dots.md │ │ └── configuration.md │ ├── _layouts │ │ ├── simple.html │ │ ├── post │ │ │ └── simple.html │ │ └── default.html │ ├── _sass │ │ └── _grid.scss │ ├── _includes_custom │ │ └── custom.html │ ├── _posts │ │ ├── 2009-06-22-no-yaml.markdown │ │ ├── 2013-03-19-not-a-post.markdown │ │ │ └── .gitkeep │ │ ├── 2011-04-12-text-extension.text │ │ ├── 2013-08-01-mkdn-extension.mkdn │ │ ├── 2014-11-24-Rmd-extension.Rmd │ │ ├── 2009-06-22-empty-yaml.markdown │ │ ├── include_relative │ │ │ ├── rel_include.html │ │ │ └── params.html │ │ ├── 2009-05-18-empty-tag.markdown │ │ ├── 2009-05-18-tag.markdown │ │ ├── 2010-01-08-triple-dash.markdown │ │ ├── 2009-05-18-empty-tags.markdown │ │ ├── 2015-12-27-extra-spaces.markdown │ │ ├── 2009-03-12-hash-#1.markdown │ │ ├── 2014-03-03-yaml-with-dots.md │ │ ├── 2014-01-06-permalink-traversal.md │ │ ├── 2018-10-12-trailing-dots...markdown │ │ ├── 2013-01-12-nil-layout.markdown │ │ ├── 2009-01-27-no-category.markdown │ │ ├── 2014-03-22-escape-+ %20[].markdown │ │ ├── 2010-01-16-override-data.markdown │ │ ├── 2008-10-18-foo-bar.markdown │ │ ├── 2013-01-12-no-layout.markdown │ │ ├── 2013-03-19-not-a-post │ │ │ └── dubious.markdown │ │ ├── 2009-01-27-category.markdown │ │ ├── 2009-01-27-empty-category.markdown │ │ ├── 2009-05-18-tags.markdown │ │ ├── 2008-12-13-include.markdown │ │ ├── 2009-01-27-empty-categories.markdown │ │ ├── 2008-02-02-published.markdown │ │ ├── 2013-05-10-number-category.markdown │ │ ├── 2008-11-21-complex.markdown │ │ ├── 2009-01-27-categories.markdown │ │ ├── 2010-01-09-date-override.markdown │ │ ├── 2015-02-20-extensionless-permalink.markdown │ │ ├── 2010-01-09-time-override.markdown │ │ ├── 2014-07-05-mixed-case-category.markdown │ │ ├── es │ │ │ └── 2008-11-21-nested.markdown │ │ ├── 2016-11-26-special-chars-(+).markdown │ │ ├── 2008-02-02-not-published.markdown │ │ ├── 2014-07-05-another-mixed-case-category.markdown │ │ ├── 2017-2-5-i-dont-like-zeroes.md │ │ ├── 2010-01-09-timezone-override.markdown │ │ ├── 2009-01-27-array-categories.markdown │ │ ├── 2008-12-03-permalinked-post.markdown │ │ ├── 2013-12-20-properties.text │ │ ├── 2013-04-11-custom-excerpt.markdown │ │ ├── 2013-01-02-post-excerpt.markdown │ │ ├── 2018-05-15-excerpt-whitespace-control-variable.md │ │ ├── 2015-01-08-post-excerpt-separator.markdown │ │ ├── 2011-04-12-md-extension.md │ │ ├── 2008-02-03-wrong-extension.yml │ │ ├── 2018-05-15-closed-liquid-block-excerpt-whitespace-control.md │ │ ├── 2018-05-15-open-liquid-block-excerpt-whitespace-control.md │ │ ├── 2018-01-28-open-liquid-block-excerpt.markdown │ │ ├── 2018-01-28-closed-liquid-block-excerpt.markdown │ │ ├── 2013-07-22-post-excerpt-with-layout.markdown │ │ ├── 2016-08-16-indented-link-references.markdown │ │ ├── 2013-12-17-include-variable-filters.markdown │ │ ├── 2018-11-15-excerpt-liquid-block.md │ │ └── 2014-09-02-relative-includes.markdown │ ├── assets │ │ ├── base.js │ │ ├── application.coffee │ │ └── test-styles.scss │ ├── css │ │ └── main.scss │ ├── trailing-dots...md │ ├── _thanksgiving │ │ ├── black-friday.md │ │ └── 2015-11-26-thanksgiving.md │ ├── _roles │ │ ├── unnamed.md │ │ └── named.md │ ├── _with.dots │ │ ├── all.dots │ │ │ └── 2.4.0.md │ │ ├── file.with.dots.md │ │ ├── mit.txt │ │ └── permalink.with.slash.tho.md │ ├── _broken │ │ └── bad_post.md │ ├── _slides │ │ ├── example-slide-5.html │ │ ├── example-slide-1.html │ │ ├── octojekyll.png │ │ ├── example-slide-Upper-Cased.html │ │ ├── example-slide-3.html │ │ ├── example-slide-2.html │ │ ├── non-outputted-slide.html │ │ ├── example-slide-7.md │ │ ├── example-slide-6.html │ │ └── example-slide-4.html │ ├── products.yml │ ├── _dates │ │ ├── date_without_time.md │ │ ├── time_with_timezone.md │ │ └── time_without_timezone.md │ ├── about.html │ ├── contacts.html │ ├── exploit.md │ ├── _config.dev.toml │ ├── contacts │ │ ├── bar.html │ │ ├── index.html │ │ ├── humans.txt │ │ └── foo.md │ ├── pgp.key │ ├── environment.html │ ├── info.md │ ├── _urls_differ_by_case_invalid │ │ ├── page1.html │ │ └── page2.html │ ├── _urls_differ_by_case_valid │ │ └── page1.html │ ├── deal.with.dots.html │ ├── dynamic_file.php │ ├── + │ │ ├── %# +.md │ │ └── foo.md │ ├── category │ │ └── _posts │ │ │ └── 2008-09-23-categories.markdown │ ├── _encodings │ │ ├── Unicode16LECRLFandBOM.md │ │ └── UTF8CRLFandBOM.md │ ├── unpublished.html │ ├── properties.html │ ├── win │ │ └── _posts │ │ │ └── 2009-05-24-yaml-linebreak.markdown │ ├── z_category │ │ └── _posts │ │ │ └── 2008-09-23-categories.markdown │ ├── foo │ │ └── _posts │ │ │ └── bar │ │ │ └── 2008-12-12-topical-post.markdown │ ├── .htaccess │ ├── _plugins │ │ ├── dummy.rb │ │ └── custom_block.rb │ ├── static_files.html │ ├── _tutorials │ │ ├── tip-of-the-iceberg.md │ │ ├── getting-started.md │ │ ├── graduation-day.md │ │ ├── dive-in-and-publish-already.md │ │ ├── lets-roll.md │ │ └── extending-with-plugins.md │ ├── _drafts │ │ └── draft-properties.text │ ├── _config_folded.yml │ ├── js │ │ └── coffeescript.coffee │ └── index.html ├── fixtures │ ├── test-theme │ │ ├── _symlink │ │ ├── assets │ │ │ ├── img │ │ │ │ ├── another-logo.png │ │ │ │ └── logo.png │ │ │ ├── base.js │ │ │ ├── application.coffee │ │ │ └── style.scss │ │ ├── _sass │ │ │ ├── test-theme-red.scss │ │ │ └── test-theme-black.scss │ │ ├── _data │ │ │ ├── greetings.yml │ │ │ ├── i18n │ │ │ │ └── testimonials.yml │ │ │ ├── cars.yml │ │ │ └── categories │ │ │ │ └── dairy.yaml │ │ ├── _layouts │ │ │ └── default.html │ │ ├── _includes │ │ │ ├── include.html │ │ │ └── testimonials.html │ │ ├── test-theme.gemspec │ │ └── _config.yml │ ├── test-theme-w-empty-data │ │ ├── _data │ │ │ └── .gitkeep │ │ ├── _layouts │ │ │ └── default.html │ │ └── test-theme-w-empty-data.gemspec │ ├── webrick │ │ ├── bar.html │ │ └── bar │ │ │ ├── baz.html │ │ │ └── foo.xhtml │ ├── sample.csv │ ├── sample.tsv │ ├── empty_permalink.erb │ ├── front_matter.erb │ ├── broken_front_matter2.erb │ ├── no_liquid.erb │ ├── test-theme-skinny │ │ ├── _layouts │ │ │ ├── home.html │ │ │ └── default.html │ │ └── test-theme-skinny.gemspec │ ├── exploit_front_matter.erb │ ├── physical.html │ ├── broken_front_matter1.erb │ ├── broken_front_matter3.erb │ ├── test-theme-symlink │ │ └── test-theme-symlink.gemspec │ └── test-dependency-theme │ │ └── test-dependency-theme.gemspec ├── simplecov_custom_profile.rb ├── test_site_drop.rb ├── test_ansi.rb ├── test_command.rb ├── test_liquid_extensions.rb └── test_win_tz.rb ├── .github ├── actions │ └── spelling │ │ ├── only.txt │ │ ├── reject.txt │ │ └── allow.txt ├── FUNDING.yml ├── first-timers.yml ├── ISSUE_TEMPLATE │ ├── config.yml │ └── documentation.md ├── dependabot.yml ├── config.yml ├── workflows │ ├── actions │ │ └── memprof.rb │ ├── release.yml │ └── benchmark.yml └── SUPPORT.markdown ├── lib ├── theme_template │ ├── _layouts │ │ ├── default.html │ │ ├── page.html │ │ └── post.html │ ├── example │ │ ├── _config.yml.erb │ │ ├── style.scss │ │ └── _post.md │ ├── Gemfile │ ├── gitignore.erb │ └── theme.gemspec.erb ├── blank_template │ ├── assets │ │ └── css │ │ │ └── main.scss │ ├── index.md │ ├── _config.yml │ ├── _sass │ │ └── base.scss │ └── _layouts │ │ └── default.html ├── site_template │ ├── .gitignore │ ├── index.markdown │ ├── 404.html │ └── about.markdown └── jekyll │ ├── version.rb │ ├── generator.rb │ ├── drops │ ├── static_file_drop.rb │ ├── excerpt_drop.rb │ ├── collection_drop.rb │ ├── jekyll_drop.rb │ ├── unified_payload_drop.rb │ └── theme_drop.rb │ ├── page_without_a_file.rb │ ├── publisher.rb │ ├── readers │ ├── collection_reader.rb │ ├── static_file_reader.rb │ └── page_reader.rb │ ├── liquid_extensions.rb │ ├── page_excerpt.rb │ ├── utils │ ├── exec.rb │ └── thread_event.rb │ ├── errors.rb │ ├── inclusion.rb │ └── commands │ └── help.rb ├── .jrubyrc ├── script ├── bootstrap ├── memprof ├── cucumber ├── fmt ├── cibuild ├── profile-docs ├── rubies ├── branding ├── rubyprof ├── proof ├── default-site └── console ├── rubocop ├── jekyll.rb └── jekyll │ ├── no_p_allowed.rb │ └── no_puts_allowed.rb ├── benchmark ├── symbol-to-proc ├── string-concat ├── sequential-assignment ├── proc-call-vs-yield ├── hash-fetch ├── string-replacement ├── parse-date ├── flat-map ├── capture-assign.rb ├── local-require ├── end-with-vs-regexp ├── sanitize-url.rb └── native-vs-pathutil-relative ├── .editorconfig ├── .gitignore ├── rake ├── rubocop.rake └── release.rake ├── .rubocop_todo.yml ├── .devcontainer └── devcontainer.json ├── .codeclimate.yml └── LICENSE /docs/CNAME: -------------------------------------------------------------------------------- 1 | jekyllrb.com 2 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | -------------------------------------------------------------------------------- /docs/latest_version.txt: -------------------------------------------------------------------------------- 1 | 4.4.1 2 | -------------------------------------------------------------------------------- /test/safe_glob_test[/find_me.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/source/.gitattributes: -------------------------------------------------------------------------------- 1 | * -text 2 | -------------------------------------------------------------------------------- /test/source/_includes/tmp: -------------------------------------------------------------------------------- 1 | ../../../tmp/ -------------------------------------------------------------------------------- /test/source/symlink-test/_data: -------------------------------------------------------------------------------- 1 | ../_data -------------------------------------------------------------------------------- /test/fixtures/test-theme/_symlink: -------------------------------------------------------------------------------- 1 | _layouts -------------------------------------------------------------------------------- /test/source/_glob_include_test/_not_dir: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/source/_data/products.yml: -------------------------------------------------------------------------------- 1 | ../products.yml -------------------------------------------------------------------------------- /test/source/_includes/include.html: -------------------------------------------------------------------------------- 1 | included 2 | -------------------------------------------------------------------------------- /test/source/_methods/um_hi.md: -------------------------------------------------------------------------------- 1 | ./site/generate.md -------------------------------------------------------------------------------- /test/source/symlink-test/symlinked-dir: -------------------------------------------------------------------------------- 1 | ../css -------------------------------------------------------------------------------- /.github/actions/spelling/only.txt: -------------------------------------------------------------------------------- 1 | ^docs/.*\.md$ 2 | -------------------------------------------------------------------------------- /test/fixtures/test-theme-w-empty-data/_data/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/source/_data/languages.yml: -------------------------------------------------------------------------------- 1 | - java 2 | - ruby 3 | -------------------------------------------------------------------------------- /test/source/_glob_include_test/_is_dir/include_me.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/source/_layouts/simple.html: -------------------------------------------------------------------------------- 1 | <<< {{ content }} >>> -------------------------------------------------------------------------------- /test/source/_sass/_grid.scss: -------------------------------------------------------------------------------- 1 | .half { width: 50%; } -------------------------------------------------------------------------------- /test/source/symlink-test/symlinked-file: -------------------------------------------------------------------------------- 1 | ../index.html -------------------------------------------------------------------------------- /lib/theme_template/_layouts/default.html: -------------------------------------------------------------------------------- 1 | {{ content }} 2 | -------------------------------------------------------------------------------- /test/fixtures/webrick/bar.html: -------------------------------------------------------------------------------- 1 | Content of bar.html 2 | -------------------------------------------------------------------------------- /test/fixtures/webrick/bar/baz.html: -------------------------------------------------------------------------------- 1 | Content of baz.html 2 | -------------------------------------------------------------------------------- /test/source/_includes_custom/custom.html: -------------------------------------------------------------------------------- 1 | custom_included -------------------------------------------------------------------------------- /test/source/_posts/2009-06-22-no-yaml.markdown: -------------------------------------------------------------------------------- 1 | No YAML. -------------------------------------------------------------------------------- /test/source/_posts/2013-03-19-not-a-post.markdown/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/source/assets/base.js: -------------------------------------------------------------------------------- 1 | alert("From your site."); 2 | -------------------------------------------------------------------------------- /test/fixtures/sample.csv: -------------------------------------------------------------------------------- 1 | id,field_a 2 | 1,"foo" 3 | 2,"bar" 4 | -------------------------------------------------------------------------------- /test/fixtures/sample.tsv: -------------------------------------------------------------------------------- 1 | id field_a 2 | 1 "foo" 3 | 2 "bar" 4 | -------------------------------------------------------------------------------- /test/fixtures/test-theme/assets/img/another-logo.png: -------------------------------------------------------------------------------- 1 | logo.png -------------------------------------------------------------------------------- /test/source/_layouts/post/simple.html: -------------------------------------------------------------------------------- 1 | <<< {{ content }} >>> 2 | -------------------------------------------------------------------------------- /test/source/_methods/with.dots/.htaccess: -------------------------------------------------------------------------------- 1 | I should be copied 2 | -------------------------------------------------------------------------------- /test/source/css/main.scss: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | @import "grid"; -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | _site/ 2 | .idea/ 3 | *.swp 4 | pkg/ 5 | test/ 6 | -------------------------------------------------------------------------------- /test/source/_methods/with.dots/.gitignore: -------------------------------------------------------------------------------- 1 | I should be copied 2 | -------------------------------------------------------------------------------- /test/source/symlink-test/symlinked-file-outside-source: -------------------------------------------------------------------------------- 1 | /etc/passwd -------------------------------------------------------------------------------- /lib/theme_template/example/_config.yml.erb: -------------------------------------------------------------------------------- 1 | theme: <%= theme_name %> 2 | -------------------------------------------------------------------------------- /test/fixtures/test-theme/assets/base.js: -------------------------------------------------------------------------------- 1 | alert("From your theme."); 2 | -------------------------------------------------------------------------------- /test/source/_posts/2011-04-12-text-extension.text: -------------------------------------------------------------------------------- 1 | Best **post** ever 2 | -------------------------------------------------------------------------------- /test/source/_posts/2013-08-01-mkdn-extension.mkdn: -------------------------------------------------------------------------------- 1 | Best **post** ever 2 | -------------------------------------------------------------------------------- /test/source/_posts/2014-11-24-Rmd-extension.Rmd: -------------------------------------------------------------------------------- 1 | Best **post** ever 2 | -------------------------------------------------------------------------------- /test/source/trailing-dots...md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ellipsis Path 3 | --- 4 | -------------------------------------------------------------------------------- /test/source/_data/greetings.yml: -------------------------------------------------------------------------------- 1 | foo: "Hello! I’m foo. And who are you?" 2 | -------------------------------------------------------------------------------- /test/source/_methods/extensionless_static_file: -------------------------------------------------------------------------------- 1 | I have no front matter. 2 | -------------------------------------------------------------------------------- /test/source/_posts/2009-06-22-empty-yaml.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | Empty YAML. -------------------------------------------------------------------------------- /test/source/_posts/include_relative/rel_include.html: -------------------------------------------------------------------------------- 1 | relative_included 2 | -------------------------------------------------------------------------------- /test/source/_thanksgiving/black-friday.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | {{ page.title }} 4 | -------------------------------------------------------------------------------- /.jrubyrc: -------------------------------------------------------------------------------- 1 | backtrace.mask=true 2 | backtrace.color=true 3 | backtrace.style=mri 4 | -------------------------------------------------------------------------------- /lib/blank_template/assets/css/main.scss: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | @import "base"; 5 | -------------------------------------------------------------------------------- /test/source/_methods/trailing-dots...md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ellipsis Path 3 | --- 4 | -------------------------------------------------------------------------------- /test/source/assets/application.coffee: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | alert "From your site." 4 | -------------------------------------------------------------------------------- /docs/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/favicon.ico -------------------------------------------------------------------------------- /script/bootstrap: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | script/branding 4 | bundle install -j8 5 | -------------------------------------------------------------------------------- /test/fixtures/empty_permalink.erb: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: '' 3 | --- 4 | Empty Permalink 5 | -------------------------------------------------------------------------------- /test/fixtures/test-theme/_sass/test-theme-red.scss: -------------------------------------------------------------------------------- 1 | .sample { 2 | color: red; 3 | } 4 | -------------------------------------------------------------------------------- /test/source/_includes/sig.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | Tom Preston-Werner 3 | github.com/mojombo 4 | -------------------------------------------------------------------------------- /test/source/_methods/site/initialize.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | Page without title. 5 | -------------------------------------------------------------------------------- /test/source/_roles/unnamed.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | No `name` in front matter. 5 | -------------------------------------------------------------------------------- /test/source/_with.dots/all.dots/2.4.0.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: v2.4.0 3 | --- 4 | 5 | v2.4.0 -------------------------------------------------------------------------------- /test/source/_with.dots/file.with.dots.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | I'm a file with dots. 5 | -------------------------------------------------------------------------------- /docs/img/spacer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/img/spacer.gif -------------------------------------------------------------------------------- /test/fixtures/front_matter.erb: -------------------------------------------------------------------------------- 1 | --- 2 | test: good 3 | --- 4 | Real content starts here 5 | -------------------------------------------------------------------------------- /test/fixtures/test-theme/_data/greetings.yml: -------------------------------------------------------------------------------- 1 | foo: "Hello! I’m bar. What’s up so far?" 2 | -------------------------------------------------------------------------------- /test/fixtures/test-theme/_sass/test-theme-black.scss: -------------------------------------------------------------------------------- 1 | .sample { 2 | color: black; 3 | } 4 | -------------------------------------------------------------------------------- /test/source/_broken/bad_post.md: -------------------------------------------------------------------------------- 1 | --- 2 | bad yaml: [ 3 | --- 4 | Real content starts here 5 | -------------------------------------------------------------------------------- /test/source/_slides/example-slide-5.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: slide 3 | --- 4 | 5 | Wooot 6 | -------------------------------------------------------------------------------- /test/source/products.yml: -------------------------------------------------------------------------------- 1 | - name: sugar 2 | price: 5.3 3 | - name: salt 4 | price: 2.5 5 | -------------------------------------------------------------------------------- /docs/img/logo-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/img/logo-2x.png -------------------------------------------------------------------------------- /docs/img/logo-rss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/img/logo-rss.png -------------------------------------------------------------------------------- /lib/theme_template/_layouts/page.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 | {{ content }} 6 | -------------------------------------------------------------------------------- /lib/theme_template/_layouts/post.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 | {{ content }} 6 | -------------------------------------------------------------------------------- /test/fixtures/test-theme/_layouts/default.html: -------------------------------------------------------------------------------- 1 | default.html from test-theme: {{ content }} 2 | -------------------------------------------------------------------------------- /test/fixtures/test-theme/assets/application.coffee: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | alert "From your theme." 4 | -------------------------------------------------------------------------------- /test/source/_thanksgiving/2015-11-26-thanksgiving.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | Happy {{ page.title }} ! 4 | -------------------------------------------------------------------------------- /docs/img/footer-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/img/footer-logo.png -------------------------------------------------------------------------------- /docs/img/jekyll-og.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/img/jekyll-og.png -------------------------------------------------------------------------------- /docs/img/octojekyll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/img/octojekyll.png -------------------------------------------------------------------------------- /test/fixtures/broken_front_matter2.erb: -------------------------------------------------------------------------------- 1 | --- 2 | bad yaml: [ 3 | --- 4 | Real content starts here 5 | -------------------------------------------------------------------------------- /test/fixtures/no_liquid.erb: -------------------------------------------------------------------------------- 1 | --- 2 | render_with_liquid: false 3 | --- 4 | {% raw %}{% endraw %} 5 | -------------------------------------------------------------------------------- /test/fixtures/test-theme/_data/i18n/testimonials.yml: -------------------------------------------------------------------------------- 1 | header: Testimonials 2 | footer: Design by FTC 3 | -------------------------------------------------------------------------------- /test/source/_dates/date_without_time.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2015-10-01 3 | --- 4 | Here is the content. 5 | -------------------------------------------------------------------------------- /test/source/about.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: About 3 | permalink: /about/ 4 | --- 5 | 6 | About the site 7 | -------------------------------------------------------------------------------- /test/source/contacts.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Contact Information 3 | --- 4 | 5 | Contact Information 6 | -------------------------------------------------------------------------------- /test/source/exploit.md: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: /%2e%2e/%2e%2e/%2e%2e/baddie.html 3 | --- 4 | 5 | # Test 6 | -------------------------------------------------------------------------------- /docs/fonts/FontAwesome.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/fonts/FontAwesome.eot -------------------------------------------------------------------------------- /docs/fonts/FontAwesome.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/fonts/FontAwesome.ttf -------------------------------------------------------------------------------- /docs/img/footer-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/img/footer-arrow.png -------------------------------------------------------------------------------- /docs/img/twitter-card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/img/twitter-card.png -------------------------------------------------------------------------------- /lib/site_template/.gitignore: -------------------------------------------------------------------------------- 1 | _site 2 | .sass-cache 3 | .jekyll-cache 4 | .jekyll-metadata 5 | vendor 6 | -------------------------------------------------------------------------------- /test/fixtures/test-theme/_includes/include.html: -------------------------------------------------------------------------------- 1 | include.html from test-theme 2 | -------------------------------------------------------------------------------- /test/source/_config.dev.toml: -------------------------------------------------------------------------------- 1 | baseurl = "/you-beautiful-blog-you" 2 | title = "My magnificent site, wut" 3 | -------------------------------------------------------------------------------- /test/source/_data/i18n.yml: -------------------------------------------------------------------------------- 1 | testimonials: 2 | header: Kundenstimmen 3 | # footer omitted by design 4 | -------------------------------------------------------------------------------- /test/source/_methods/escape-+ #%20[].md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Jekyll.escape" 3 | --- 4 | 5 | Signs are nice 6 | -------------------------------------------------------------------------------- /test/source/_posts/2009-05-18-empty-tag.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: A Tag 3 | tag: 4 | --- 5 | 6 | Whoa. 7 | -------------------------------------------------------------------------------- /test/source/_posts/2009-05-18-tag.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: A Tag 3 | tag: code 4 | --- 5 | 6 | Whoa. 7 | -------------------------------------------------------------------------------- /test/source/_roles/named.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: launcher 3 | --- 4 | 5 | `name` defined in front matter. 6 | -------------------------------------------------------------------------------- /test/source/_with.dots/mit.txt: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | I should be output to `/with.dots/mit/index.html`. 5 | -------------------------------------------------------------------------------- /test/source/assets/test-styles.scss: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | @import "{{ site.skin | default: 'grid' }}"; 5 | -------------------------------------------------------------------------------- /test/source/contacts/bar.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Contact Information 3 | --- 4 | 5 | Contact Information 6 | -------------------------------------------------------------------------------- /test/source/contacts/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Contact Information 3 | --- 4 | 5 | Contact Information 6 | -------------------------------------------------------------------------------- /test/source/pgp.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP PUBLIC KEY BLOCK----- 2 | Version: GnuPG/MacGPG2 v2.0.17 (Darwin) 3 | -------------------------------------------------------------------------------- /docs/fonts/FontAwesome.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/fonts/FontAwesome.woff -------------------------------------------------------------------------------- /docs/img/article-footer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/img/article-footer.png -------------------------------------------------------------------------------- /docs/img/jekyll-sticker.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/img/jekyll-sticker.jpg -------------------------------------------------------------------------------- /docs/img/jekyll-sticker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/img/jekyll-sticker.png -------------------------------------------------------------------------------- /lib/jekyll/version.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module Jekyll 4 | VERSION = "4.4.1" 5 | end 6 | -------------------------------------------------------------------------------- /lib/theme_template/Gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | source "https://rubygems.org" 4 | gemspec 5 | -------------------------------------------------------------------------------- /test/fixtures/webrick/bar/foo.xhtml: -------------------------------------------------------------------------------- 1 | Content of foo.xhtml 2 | -------------------------------------------------------------------------------- /test/source/_posts/2010-01-08-triple-dash.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: Foo --- Bar 3 | --- 4 | 5 | Triple the fun! -------------------------------------------------------------------------------- /lib/theme_template/gitignore.erb: -------------------------------------------------------------------------------- 1 | *.gem 2 | .bundle 3 | .jekyll-cache 4 | .sass-cache 5 | _site 6 | Gemfile.lock 7 | -------------------------------------------------------------------------------- /test/fixtures/test-theme-skinny/_layouts/home.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 | Message: {{ content }} 6 | -------------------------------------------------------------------------------- /test/source/_dates/time_with_timezone.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2015-10-01 01:00:00 +0800 3 | --- 4 | Here is the content. 5 | -------------------------------------------------------------------------------- /test/source/_dates/time_without_timezone.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2015-10-01 01:00:00 3 | --- 4 | Here is the content. 5 | -------------------------------------------------------------------------------- /test/source/_methods/3940394-21-9393050-fifif1323-test.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "this is a test!" 3 | --- 4 | 5 | wheee 6 | -------------------------------------------------------------------------------- /test/source/_posts/2009-05-18-empty-tags.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: Some Tags 3 | tags: 4 | --- 5 | 6 | Awesome! 7 | -------------------------------------------------------------------------------- /test/source/_posts/2015-12-27-extra-spaces.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | extra: spaces 3 | --- 4 | 5 | Best **post** ever 6 | -------------------------------------------------------------------------------- /test/source/_slides/example-slide-1.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Example slide 3 | layout: slide 4 | --- 5 | 6 | Wooot 7 | -------------------------------------------------------------------------------- /docs/_docs/markdown-101.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Markdown 101 3 | permalink: /docs/markdown-101/ 4 | --- 5 | 6 | # TO WRITE 7 | -------------------------------------------------------------------------------- /docs/_includes/search/input.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/fonts/lato-v14-latin-300.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/fonts/lato-v14-latin-300.woff -------------------------------------------------------------------------------- /docs/fonts/lato-v14-latin-700.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/fonts/lato-v14-latin-700.woff -------------------------------------------------------------------------------- /docs/fonts/lato-v14-latin-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/fonts/lato-v14-latin-900.woff -------------------------------------------------------------------------------- /docs/img/jekylllayoutconcept.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/img/jekylllayoutconcept.png -------------------------------------------------------------------------------- /script/memprof: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | file="memprof.txt" 4 | mode="core" 5 | bundle exec rake profile:memory[$file,$mode] 6 | -------------------------------------------------------------------------------- /test/fixtures/exploit_front_matter.erb: -------------------------------------------------------------------------------- 1 | --- 2 | test: !ruby/hash:DoesNotExist {} 3 | --- 4 | Real content starts here 5 | -------------------------------------------------------------------------------- /test/source/_slides/octojekyll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/test/source/_slides/octojekyll.png -------------------------------------------------------------------------------- /docs/fonts/lato-v14-latin-300.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/fonts/lato-v14-latin-300.woff2 -------------------------------------------------------------------------------- /docs/fonts/lato-v14-latin-700.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/fonts/lato-v14-latin-700.woff2 -------------------------------------------------------------------------------- /docs/fonts/lato-v14-latin-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/fonts/lato-v14-latin-900.woff2 -------------------------------------------------------------------------------- /docs/pages/redirects/github.html: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: /github.html 3 | redirect_to: https://github.com/jekyll/jekyll 4 | --- 5 | -------------------------------------------------------------------------------- /lib/jekyll/generator.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module Jekyll 4 | Generator = Class.new(Plugin) 5 | end 6 | -------------------------------------------------------------------------------- /test/fixtures/physical.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Physical file 3 | permalink: /physical/ 4 | --- 5 | 6 | A physical file entity 7 | -------------------------------------------------------------------------------- /test/fixtures/test-theme/assets/style.scss: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | @import "test-theme-{{ site.theme-color | default: 'red' }}"; 4 | -------------------------------------------------------------------------------- /test/source/_posts/2009-03-12-hash-#1.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Hash #1 4 | --- 5 | 6 | Hashes are nice 7 | -------------------------------------------------------------------------------- /test/source/_posts/2014-03-03-yaml-with-dots.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Test Post Where YAML Ends in Dots 3 | ... 4 | 5 | # Test 6 | -------------------------------------------------------------------------------- /test/source/environment.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: I'm a Jekyll environment exchequer 3 | --- 4 | 5 | {{ jekyll.environment }} 6 | -------------------------------------------------------------------------------- /test/source/info.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Information 3 | --- 4 | 5 | # Information 6 | 7 | Very important information is here 8 | -------------------------------------------------------------------------------- /docs/fonts/lato-v14-latin-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/fonts/lato-v14-latin-italic.woff -------------------------------------------------------------------------------- /docs/fonts/lato-v14-latin-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/fonts/lato-v14-latin-italic.woff2 -------------------------------------------------------------------------------- /docs/fonts/lato-v14-latin-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/fonts/lato-v14-latin-regular.woff -------------------------------------------------------------------------------- /docs/fonts/lato-v14-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/fonts/lato-v14-latin-regular.woff2 -------------------------------------------------------------------------------- /docs/pages/redirects/issues.html: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: /issues.html 3 | redirect_to: https://github.com/jekyll/jekyll/issues 4 | --- 5 | -------------------------------------------------------------------------------- /script/cucumber: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | time ruby -S bundle exec cucumber \ 4 | --format progress --publish-quiet "$@" 5 | -------------------------------------------------------------------------------- /test/fixtures/broken_front_matter1.erb: -------------------------------------------------------------------------------- 1 | # Some stuff on the first line 2 | --- 3 | test: good 4 | --- 5 | Real content starts here 6 | -------------------------------------------------------------------------------- /test/fixtures/broken_front_matter3.erb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/test/fixtures/broken_front_matter3.erb -------------------------------------------------------------------------------- /test/source/_methods/_do_not_read_me.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The unreadable wonder 3 | --- 4 | 5 | Don't read me, you fool! FILTER ME 6 | -------------------------------------------------------------------------------- /test/source/_posts/2014-01-06-permalink-traversal.md: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: /%2e%2e/%2e%2e/%2e%2e/baddie.html 3 | --- 4 | 5 | # Test 6 | -------------------------------------------------------------------------------- /test/source/_posts/2018-10-12-trailing-dots...markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ellipsis Path 3 | --- 4 | 5 | Lorem ipsum dolor sit amet 6 | -------------------------------------------------------------------------------- /test/source/_slides/example-slide-Upper-Cased.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Example Slide 3 | layout: slide 4 | --- 5 | 6 | Cased! 7 | -------------------------------------------------------------------------------- /test/source/_urls_differ_by_case_invalid/page1.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: About 3 | permalink: /about/ 4 | --- 5 | 6 | About the site 7 | -------------------------------------------------------------------------------- /test/source/_urls_differ_by_case_invalid/page2.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: About 3 | permalink: /About/ 4 | --- 5 | 6 | About the site 7 | -------------------------------------------------------------------------------- /test/source/_urls_differ_by_case_valid/page1.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: About 3 | permalink: /about/ 4 | --- 5 | 6 | About the site 7 | -------------------------------------------------------------------------------- /test/source/deal.with.dots.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Deal with dots 3 | --- 4 | 5 | Let's test if jekyll deals properly with dots. 6 | -------------------------------------------------------------------------------- /docs/fonts/lato-v14-latin-300italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/fonts/lato-v14-latin-300italic.woff -------------------------------------------------------------------------------- /docs/fonts/lato-v14-latin-300italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/fonts/lato-v14-latin-300italic.woff2 -------------------------------------------------------------------------------- /docs/fonts/lato-v14-latin-700italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/fonts/lato-v14-latin-700italic.woff -------------------------------------------------------------------------------- /docs/fonts/lato-v14-latin-700italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/fonts/lato-v14-latin-700italic.woff2 -------------------------------------------------------------------------------- /docs/fonts/lato-v14-latin-900italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/fonts/lato-v14-latin-900italic.woff -------------------------------------------------------------------------------- /docs/fonts/lato-v14-latin-900italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/docs/fonts/lato-v14-latin-900italic.woff2 -------------------------------------------------------------------------------- /test/source/_data/categories/dairy.yaml: -------------------------------------------------------------------------------- 1 | name: Dairy 2 | products: 3 | - name: cheese 4 | price: 5.3 5 | - name: milk 6 | price: 2.5 -------------------------------------------------------------------------------- /test/source/_posts/2013-01-12-nil-layout.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: nil 3 | title: No layout 4 | --- 5 | 6 | This post has no layout. 7 | -------------------------------------------------------------------------------- /test/source/_slides/example-slide-3.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Override permalink 3 | layout: slide 4 | permalink: /slide/3/ 5 | --- 6 | -------------------------------------------------------------------------------- /test/source/dynamic_file.php: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | I'm a Jekyll file! I should be output as dynamic_file.php, no .html to be found. 5 | -------------------------------------------------------------------------------- /docs/_data/ruby.yml: -------------------------------------------------------------------------------- 1 | min_version: 2.7.0 2 | current_version: 3.4.1 3 | current_version_output: ruby 3.4.1 (2024-12-25 revision 48d4efcb85) 4 | -------------------------------------------------------------------------------- /test/fixtures/test-theme/assets/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/test/fixtures/test-theme/assets/img/logo.png -------------------------------------------------------------------------------- /test/source/+/%# +.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title : Page name with non-alphabetic character 4 | --- 5 | Line 1 6 | {{ page.title }} 7 | -------------------------------------------------------------------------------- /test/source/_data/categories.01/dairy.yaml: -------------------------------------------------------------------------------- 1 | name: Dairy 2 | products: 3 | - name: cheese 4 | price: 5.5 5 | - name: milk 6 | price: 2.75 7 | -------------------------------------------------------------------------------- /test/source/_posts/2009-01-27-no-category.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Category in YAML 4 | --- 5 | 6 | Best *post* ever 7 | -------------------------------------------------------------------------------- /test/source/_posts/2014-03-22-escape-+ %20[].markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Plus space percent 4 | --- 5 | 6 | Signs are nice 7 | -------------------------------------------------------------------------------- /test/source/contacts/humans.txt: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: /contacts/humans/ 3 | --- 4 | 5 | I should be output to `/contacts/humans/index.html`. 6 | -------------------------------------------------------------------------------- /test/source/_methods/site/generate.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Site#generate" 3 | layout: default 4 | --- 5 | 6 | Run your generators! {{ page.layout }} 7 | -------------------------------------------------------------------------------- /test/source/_posts/2010-01-16-override-data.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2010-01-10 13:07:09 3 | tags: A string 4 | --- 5 | 6 | Best **post** ever 7 | -------------------------------------------------------------------------------- /test/source/category/_posts/2008-09-23-categories.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Categories 4 | --- 5 | 6 | Categories _should_ work -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | # github: jekyll 4 | open_collective: jekyll 5 | tidelift: rubygems/jekyll 6 | -------------------------------------------------------------------------------- /test/source/+/foo.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title : Page inside + 4 | permalink: /+/plus+in+url.html 5 | --- 6 | Line 1 7 | {{ page.title }} 8 | -------------------------------------------------------------------------------- /test/source/_encodings/Unicode16LECRLFandBOM.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexwlchan/jekyll/master/test/source/_encodings/Unicode16LECRLFandBOM.md -------------------------------------------------------------------------------- /test/source/_methods/site/_dont_include_me_either.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Don't Include Me Either 3 | --- 4 | 5 | Don't include me either. FILTER ME PLZ 6 | -------------------------------------------------------------------------------- /test/source/_posts/2008-10-18-foo-bar.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Foo Bar 4 | --- 5 | 6 | # {{ page.title }} 7 | 8 | Best **post** ever -------------------------------------------------------------------------------- /test/source/_posts/2013-01-12-no-layout.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: I have no layout 3 | --- 4 | 5 | This post will be rendered with the "post" layout. 6 | -------------------------------------------------------------------------------- /test/source/_posts/2013-03-19-not-a-post/dubious.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: What Am I? 3 | --- 4 | 5 | I am not a post. 6 | Am I a document then..? 7 | -------------------------------------------------------------------------------- /test/source/unpublished.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Not published! 4 | published: false 5 | --- 6 | 7 | This should *not* be published! 8 | -------------------------------------------------------------------------------- /test/source/_posts/2009-01-27-category.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Category in YAML 4 | category: foo 5 | --- 6 | 7 | Best *post* ever 8 | -------------------------------------------------------------------------------- /test/source/_posts/2009-01-27-empty-category.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Category in YAML 4 | category: 5 | --- 6 | 7 | Best *post* ever 8 | -------------------------------------------------------------------------------- /test/source/_posts/2009-05-18-tags.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: Some Tags 3 | tags: 4 | - food 5 | - cooking 6 | - pizza 7 | --- 8 | 9 | Awesome! 10 | -------------------------------------------------------------------------------- /test/source/_posts/2008-12-13-include.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Include 4 | --- 5 | 6 | {% include sig.markdown %} 7 | 8 | This _is_ cool 9 | -------------------------------------------------------------------------------- /test/source/_posts/2009-01-27-empty-categories.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Category in YAML 4 | categories: 5 | --- 6 | 7 | Best *post* ever 8 | -------------------------------------------------------------------------------- /test/source/properties.html: -------------------------------------------------------------------------------- 1 | --- 2 | foo: bar 3 | layout: default 4 | permalink: /properties/ 5 | title: Properties Page 6 | --- 7 | 8 | All the properties. 9 | -------------------------------------------------------------------------------- /test/source/win/_posts/2009-05-24-yaml-linebreak.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Test title" 4 | tag: "Ruby" 5 | --- 6 | 7 | This is the content -------------------------------------------------------------------------------- /test/fixtures/test-theme/_data/cars.yml: -------------------------------------------------------------------------------- 1 | manufacturer: Mercedes 2 | models: 3 | - model: A-Klasse 4 | price: 32,000.00 5 | - model: B-Klasse 6 | price: 35,000.00 7 | -------------------------------------------------------------------------------- /test/source/_methods/sanitized_path.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Jekyll.sanitized_path" 3 | --- 4 | 5 | `{{ page.title }}` is used to make sure your path is in your source. 6 | -------------------------------------------------------------------------------- /test/source/_posts/2008-02-02-published.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Publish 4 | category: publish_test 5 | --- 6 | 7 | This should be published. 8 | -------------------------------------------------------------------------------- /test/source/_posts/2013-05-10-number-category.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Number Category in YAML 4 | category: 2013 5 | --- 6 | 7 | Please make me pass -------------------------------------------------------------------------------- /test/source/_slides/example-slide-2.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Override title 3 | layout: slide 4 | nested: 5 | test1: override1 6 | test2: override2 7 | --- 8 | -------------------------------------------------------------------------------- /docs/_includes/docs_version_badge.html: -------------------------------------------------------------------------------- 1 | {{ include.version }} 2 | -------------------------------------------------------------------------------- /lib/blank_template/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: "Happy Jekylling!" 4 | --- 5 | 6 | ## You're ready to go! 7 | 8 | Start developing your Jekyll website. 9 | -------------------------------------------------------------------------------- /rubocop/jekyll.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | Dir[File.join(File.expand_path("jekyll", __dir__), "*.rb")].each do |ruby_file| 4 | require ruby_file 5 | end 6 | -------------------------------------------------------------------------------- /test/source/_data/members.yaml: -------------------------------------------------------------------------------- 1 | - name: Jack 2 | age: 27 3 | blog: http://example.com/jack 4 | 5 | - name: John 6 | age: 32 7 | blog: http://example.com/john 8 | -------------------------------------------------------------------------------- /test/source/_methods/collection/entries: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Collection#entries" 3 | --- 4 | 5 | I have no file extension but I should still be a part of the collection. 6 | -------------------------------------------------------------------------------- /test/source/_posts/2008-11-21-complex.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Complex 4 | --- 5 | 6 | url: {{ page.url }} 7 | date: {{ page.date }} 8 | id: {{ page.id }} -------------------------------------------------------------------------------- /test/source/_posts/2009-01-27-categories.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Categories in YAML 4 | categories: foo bar baz 5 | --- 6 | 7 | Best *post* ever 8 | -------------------------------------------------------------------------------- /test/source/_posts/2010-01-09-date-override.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2010-01-10 3 | --- 4 | 5 | Post with a front matter date 6 | 7 | {{ page.date | date_to_string }} 8 | -------------------------------------------------------------------------------- /test/source/_slides/non-outputted-slide.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Non outputted slide 3 | layout: slide 4 | published: false 5 | --- 6 | 7 | This should not be output 8 | -------------------------------------------------------------------------------- /test/fixtures/test-theme/_data/categories/dairy.yaml: -------------------------------------------------------------------------------- 1 | name: Cheese Dairy 2 | products: 3 | - name: spread cheese 4 | price: 1.2 5 | - name: cheddar cheese 6 | price: 4.5 7 | -------------------------------------------------------------------------------- /test/source/_posts/2015-02-20-extensionless-permalink.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: ~ 3 | title: Extensionless Permalink 4 | permalink: /:title 5 | --- 6 | 7 | {{ page.url }} 8 | -------------------------------------------------------------------------------- /test/source/_slides/example-slide-7.md: -------------------------------------------------------------------------------- 1 | --- 2 | am_i_convertible: yes 3 | permalink: /slides/example-slide-7.php 4 | --- 5 | 6 | Am I convertible? {{ page.am_i_convertible }} 7 | -------------------------------------------------------------------------------- /test/source/contacts/foo.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Contact Information 3 | --- 4 | 5 | ## {{ page.title }} 6 | 7 | In case of emergency, contact Mr. John Doe, 1234, Foo Road, Foo. 8 | -------------------------------------------------------------------------------- /test/source/z_category/_posts/2008-09-23-categories.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Categories 4 | --- 5 | 6 | Categories _should_ work. Even if ordered after index. -------------------------------------------------------------------------------- /.github/first-timers.yml: -------------------------------------------------------------------------------- 1 | repository: jekyll 2 | labels: 3 | - good first issue 4 | - help-wanted 5 | - first-time-only 6 | template: .github/first-timers-issue-template.md 7 | -------------------------------------------------------------------------------- /test/source/_posts/2010-01-09-time-override.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2010-01-10 13:07:09 3 | --- 4 | 5 | Post with a front matter time 6 | 7 | {{ page.date | date_to_string }} 8 | -------------------------------------------------------------------------------- /test/source/_posts/2014-07-05-mixed-case-category.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Mixed Case Category in YAML 4 | category: MixedCase 5 | --- 6 | 7 | Best *post* ever 8 | -------------------------------------------------------------------------------- /test/source/_posts/es/2008-11-21-nested.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Nested 4 | --- 5 | 6 | url: {{ page.url }} 7 | date: {{ page.date }} 8 | id: {{ page.id }} 9 | -------------------------------------------------------------------------------- /test/source/foo/_posts/bar/2008-12-12-topical-post.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Topical Post 4 | --- 5 | 6 | h1. {{ page.title }} 7 | 8 | This post has a topic. 9 | -------------------------------------------------------------------------------- /.github/actions/spelling/reject.txt: -------------------------------------------------------------------------------- 1 | ^attache$ 2 | benefitting 3 | occurences? 4 | ^dependan.* 5 | ^oer$ 6 | Sorce 7 | ^[Ss]pae.* 8 | ^untill$ 9 | ^untilling$ 10 | ^wether.* 11 | -------------------------------------------------------------------------------- /test/source/.htaccess: -------------------------------------------------------------------------------- 1 | --- 2 | layout: nil 3 | --- 4 | ErrorDocument 404 /404.html 5 | ErrorDocument 500 /500.html 6 | {% for post in site.posts %} 7 | # {{ post.url }} 8 | {% endfor %} -------------------------------------------------------------------------------- /test/source/_posts/2016-11-26-special-chars-(+).markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Special Characters 4 | --- 5 | 6 | url: {{ page.url }} 7 | date: {{ page.date }} 8 | id: {{ page.id }} -------------------------------------------------------------------------------- /test/source/_with.dots/permalink.with.slash.tho.md: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: /with.dots/permalink.with.slash.tho/ 3 | --- 4 | 5 | I'm a file with dots BUT I have a permalink which ends with a slash. 6 | -------------------------------------------------------------------------------- /test/source/_plugins/dummy.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module Jekyll 4 | class Dummy < Generator 5 | priority :high 6 | 7 | def generate(site) end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /test/source/_posts/2008-02-02-not-published.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Not published! 4 | published: false 5 | category: publish_test 6 | --- 7 | 8 | This should *not* be published! 9 | -------------------------------------------------------------------------------- /test/source/_posts/2014-07-05-another-mixed-case-category.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Another Mixed Case Category in YAML 4 | category: Mixedcase 5 | --- 6 | 7 | Best *post* ever 8 | -------------------------------------------------------------------------------- /test/source/_posts/2017-2-5-i-dont-like-zeroes.md: -------------------------------------------------------------------------------- 1 | --- 2 | foo: bar 3 | --- 4 | I have an abbreviated date. Instead of "2017-02-05", I am instead "2017-2-5". 5 | Zeros have always seemed superfluous. 6 | -------------------------------------------------------------------------------- /test/source/_posts/2010-01-09-timezone-override.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2010-01-10 13:07:09 +00:00 3 | --- 4 | 5 | Post with a front matter time with timezone 6 | 7 | {{ page.date | date_to_string }} 8 | -------------------------------------------------------------------------------- /test/source/static_files.html: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | {% for file in site.static_files %} 4 | - {{ file.path }} last edited at {{ file.modified_time | date:"%H:%m" }} with extname {{ file.extname }}{% endfor %} 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: true 2 | contact_links: 3 | - name: Jekyll Community Forum 4 | url: https://talk.jekyllrb.com/ 5 | about: Please ask and answer questions here. 6 | -------------------------------------------------------------------------------- /test/source/_posts/2009-01-27-array-categories.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Array categories in YAML 4 | categories: 5 | - foo 6 | - bar 7 | - baz 8 | --- 9 | 10 | Best *post* ever 11 | -------------------------------------------------------------------------------- /test/source/_tutorials/tip-of-the-iceberg.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Tip of the Iceberg" 3 | lesson: 4 4 | --- 5 | 6 | Now that you know some of the basics, learn more about working with [Jekyll](https://jekyllrb.com). 7 | -------------------------------------------------------------------------------- /benchmark/symbol-to-proc: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'benchmark/ips' 3 | 4 | Benchmark.ips do |x| 5 | x.report('block') { (1..100).map { |i| i.to_s } } 6 | x.report('&:to_s') { (1..100).map(&:to_s) } 7 | end 8 | -------------------------------------------------------------------------------- /lib/blank_template/_config.yml: -------------------------------------------------------------------------------- 1 | url: "" # the base hostname & protocol for your site, e.g. http://example.com 2 | baseurl: "" # the subpath of your site, e.g. /blog 3 | title: "" # the name of your site, e.g. ACME Corp. 4 | -------------------------------------------------------------------------------- /test/source/_includes/params.html: -------------------------------------------------------------------------------- 1 | {{include.param}} 2 | 3 | -------------------------------------------------------------------------------- /test/source/_includes/params@2.0.html: -------------------------------------------------------------------------------- 1 | {{include.param}} 2 | 3 | -------------------------------------------------------------------------------- /test/source/_methods/yaml_with_dots.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "YAML with Dots" 3 | whatever: foo.bar 4 | ... 5 | 6 | Use `{{ page.title }}` to build a full configuration for use w/Jekyll. 7 | 8 | Whatever: {{ page.whatever }} 9 | -------------------------------------------------------------------------------- /test/source/_methods/configuration.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Jekyll.configuration" 3 | whatever: foo.bar 4 | --- 5 | 6 | Use `{{ page.title }}` to build a full configuration for use w/Jekyll. 7 | 8 | Whatever: {{ page.whatever }} 9 | -------------------------------------------------------------------------------- /test/source/_posts/2008-12-03-permalinked-post.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: Post with Permalink 3 | permalink: my_category/permalinked-post 4 | --- 5 | 6 | h1. {{ page.title }} 7 | 8 | 9 |

Best post ever

-------------------------------------------------------------------------------- /benchmark/string-concat: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'benchmark/ips' 3 | 4 | url = "https://jekyllrb.com" 5 | 6 | Benchmark.ips do |x| 7 | x.report('+=') { url += '/' } 8 | x.report('<<') { url << '/' } 9 | end 10 | -------------------------------------------------------------------------------- /lib/site_template/index.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | # Feel free to add content and custom Front Matter to this file. 3 | # To modify the layout, see https://jekyllrb.com/docs/themes/#overriding-theme-defaults 4 | 5 | layout: home 6 | --- 7 | -------------------------------------------------------------------------------- /test/source/_drafts/draft-properties.text: -------------------------------------------------------------------------------- 1 | --- 2 | categories: foo bar baz 3 | foo: bar 4 | layout: default 5 | tags: ay bee cee 6 | title: Properties Draft 7 | --- 8 | 9 | All the properties. 10 | 11 | Plus an excerpt. 12 | -------------------------------------------------------------------------------- /test/source/_posts/include_relative/params.html: -------------------------------------------------------------------------------- 1 | {{include.param}} 2 | 3 | 8 | -------------------------------------------------------------------------------- /docs/css/screen.scss: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | @import "mixins"; 5 | @import "normalize"; 6 | @import "gridism"; 7 | @import "pygments"; 8 | @import "font-awesome"; 9 | @import "fonts"; 10 | @import "docsearch"; 11 | @import "style"; 12 | -------------------------------------------------------------------------------- /test/source/_posts/2013-12-20-properties.text: -------------------------------------------------------------------------------- 1 | --- 2 | categories: foo bar baz MixedCase 3 | foo: bar 4 | layout: default 5 | tags: ay bee cee 6 | title: Properties Post 7 | --- 8 | 9 | All the properties. 10 | 11 | Plus an excerpt. 12 | -------------------------------------------------------------------------------- /test/source/_config_folded.yml: -------------------------------------------------------------------------------- 1 | folded_string: > 2 | This string of text will ignore 3 | newlines till the next key. 4 | foo: bar 5 | clean_folded_string: >- 6 | This string of text will ignore 7 | newlines till the next key. 8 | baz: foo 9 | -------------------------------------------------------------------------------- /test/source/_posts/2013-04-11-custom-excerpt.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: ~ 3 | excerpt: 'I can set a custom excerpt' 4 | --- 5 | 6 | This is not my excerpt. 7 | 8 | Neither is this. 9 | 10 | I can use the excerpt: {{page.excerpt}} -------------------------------------------------------------------------------- /test/fixtures/test-theme-skinny/_layouts/default.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Skinny 6 | 7 | 8 |

Hello World

9 | {{ content }} 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/source/_data/members.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "Jack", 4 | "age": 27, 5 | "blog": "http://example.com/jack" 6 | }, 7 | { 8 | "name": "John", 9 | "age": 32, 10 | "blog": "http://example.com/john" 11 | } 12 | ] 13 | -------------------------------------------------------------------------------- /test/fixtures/test-theme-w-empty-data/_layouts/default.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Skinny 6 | 7 | 8 |

Hello World

9 | {{ content }} 10 | 11 | 12 | -------------------------------------------------------------------------------- /lib/theme_template/example/style.scss: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | // Here, you can test out the Sass/SCSS that you include in your theme. 5 | // Simply `@import` the necessary file(s) to get the proper styles on the site. 6 | // E.g.: 7 | // @import "a-file-from-my-theme"; 8 | -------------------------------------------------------------------------------- /test/source/_posts/2013-01-02-post-excerpt.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: ~ 3 | title: Post Excerpt 4 | --- 5 | 6 | First paragraph with [link ref][link]. 7 | 8 | Second paragraph 9 | 10 | --- 11 | 12 | Third paragraph 13 | 14 | [link]: https://jekyllrb.com/ 15 | -------------------------------------------------------------------------------- /test/source/_posts/2018-05-15-excerpt-whitespace-control-variable.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: LIQUID_TAG_REGEX excerpt whitespace control test 3 | layout: post 4 | --- 5 | 6 | {%- assign xyzzy = 'You are in a maze of twisty little passages, all alike.' %} 7 | {{- xyzzy -}} 8 | -------------------------------------------------------------------------------- /docs/_includes/improve_doc_link.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |  Improve this page 4 | 5 |
6 | -------------------------------------------------------------------------------- /script/fmt: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo "RuboCop $(bundle exec rubocop --version)" 3 | bundle exec rubocop -D --disable-pending-cops $@ 4 | success=$? 5 | if ((success != 0)); then 6 | echo -e "\nTry running \`script/fmt -a\` to automatically fix errors" 7 | fi 8 | exit $success 9 | -------------------------------------------------------------------------------- /benchmark/sequential-assignment: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'benchmark/ips' 3 | 4 | Benchmark.ips do |x| 5 | x.report('parallel assignment') do 6 | a, b = 1, 2 7 | end 8 | x.report('multi-line assignment') do 9 | a = 1 10 | b = 2 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | end_of_line = lf 8 | indent_size = 2 9 | indent_style = space 10 | insert_final_newline = true 11 | trim_trailing_whitespace = true 12 | 13 | [*.md] 14 | trim_trailing_whitespace = false 15 | -------------------------------------------------------------------------------- /.github/actions/spelling/allow.txt: -------------------------------------------------------------------------------- 1 | azion 2 | builtins 3 | github 4 | hakiri 5 | https 6 | Linting 7 | Microsoft 8 | ssh 9 | Statictastic 10 | statictastic 11 | supranode 12 | ubuntu 13 | Wikipedia 14 | workaround 15 | workaround 16 | workarounds 17 | WSL 18 | decapcms 19 | tina 20 | -------------------------------------------------------------------------------- /test/source/_tutorials/getting-started.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Getting Started" 3 | lesson: 1 4 | approx_time: 10 mins 5 | --- 6 | 7 | The first thing you need is a working installation of Ruby. Install from [the official website](https://www.ruby-lang.org/en/documentation/installation/). 8 | -------------------------------------------------------------------------------- /test/source/js/coffeescript.coffee: -------------------------------------------------------------------------------- 1 | --- 2 | message: "I knew it!" 3 | --- 4 | 5 | $ -> 6 | list = [1, 2, 3, 4, 5] 7 | square = (x) -> x * x 8 | cube = (x) -> square(x) * x 9 | cubes = (math.cube num for num in list) 10 | 11 | alert "{{ page.message }}" if elvis? 12 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "github-actions" 4 | directory: "/" 5 | schedule: 6 | interval: "weekly" 7 | - package-ecosystem: bundler 8 | reviewers: 9 | - "jekyll/core" 10 | directory: / 11 | schedule: 12 | interval: weekly 13 | -------------------------------------------------------------------------------- /benchmark/proc-call-vs-yield: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'benchmark/ips' 3 | 4 | def fast 5 | yield 6 | end 7 | 8 | def slow(&block) 9 | block.call 10 | end 11 | 12 | Benchmark.ips do |x| 13 | x.report('yield') { fast { (0..9).to_a } } 14 | x.report('block.call') { slow { (0..9).to_a } } 15 | end 16 | -------------------------------------------------------------------------------- /test/simplecov_custom_profile.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require "simplecov" 4 | 5 | SimpleCov.profiles.define "gem" do 6 | add_filter "/test/" 7 | add_filter "/features/" 8 | add_filter "/autotest/" 9 | 10 | add_group "Binaries", "/bin/" 11 | add_group "Libraries", "/lib/" 12 | end 13 | -------------------------------------------------------------------------------- /test/source/_posts/2015-01-08-post-excerpt-separator.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: ~ 3 | title: Post Excerpt Separator 4 | excerpt_separator: "\n---\n" 5 | --- 6 | 7 | First paragraph with [link ref][link]. 8 | 9 | Second paragraph 10 | 11 | --- 12 | 13 | Third paragraph 14 | 15 | [link]: https://jekyllrb.com/ 16 | -------------------------------------------------------------------------------- /docs/pages/news.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: news 3 | title: News 4 | permalink: /news/ 5 | author: all 6 | --- 7 | 8 | {% for post in site.posts -%} 9 | {% if forloop.index == 1 -%} 10 | {% include news_item.html -%} 11 | {% else -%} 12 | {% include news_item_archive.html -%} 13 | {% endif -%} 14 | {% endfor -%} 15 | -------------------------------------------------------------------------------- /test/source/_posts/2011-04-12-md-extension.md: -------------------------------------------------------------------------------- 1 | --- 2 | date: 2011-04-12 13:07:09 3 | --- 4 | 5 | under default configuration, this post should get processed by the identity converter. By changing 6 | textile extension or markdown extension configuration parameters, you should be able to associate 7 | it with either of those converters -------------------------------------------------------------------------------- /docs/_data/tutorials.yml: -------------------------------------------------------------------------------- 1 | - title: Tutorials 2 | tutorials: 3 | - home 4 | - video-walkthroughs 5 | - navigation 6 | - orderofinterpretation 7 | - custom-404-page 8 | - convert-site-to-jekyll 9 | - using-jekyll-with-bundler 10 | - csv-to-table 11 | 12 | #- title: Another section 13 | # tutorials: 14 | # - sample 15 | -------------------------------------------------------------------------------- /test/source/_posts/2008-02-03-wrong-extension.yml: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: This file extension is skipped 4 | category: test_post_reader 5 | --- 6 | 7 | `jekyll serve` used to crash if there's a post (document) with a wrong file extension. 8 | This file is used in `./test/test_post_reader.rb` to verify that this doesn't happen anymore. 9 | -------------------------------------------------------------------------------- /docs/_docs/migrations.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Blog Migrations 3 | permalink: /docs/migrations/ 4 | --- 5 | 6 | If you’re switching to Jekyll from another blogging system, Jekyll’s importers 7 | can help you with the move. To learn more about importing your site to Jekyll, 8 | visit our [`jekyll-import` docs site](https://import.jekyllrb.com/docs/home/). 9 | -------------------------------------------------------------------------------- /lib/blank_template/_sass/base.scss: -------------------------------------------------------------------------------- 1 | $backgroundColor: #ffffff; 2 | $bodyColor: #000000; 3 | $bodyFont: -apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; 4 | 5 | body { 6 | background: $backgroundColor; 7 | color: $bodyColor; 8 | font-family: $bodyFont; 9 | } 10 | -------------------------------------------------------------------------------- /test/source/_tutorials/graduation-day.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Graduation Day" 3 | lesson: 6 4 | approx_time: 10 mins 5 | --- 6 | 7 | Congratulations! You now know enough to start Jekylling! 8 | 9 | Want to report a bug you found? Or give something back to the community? 10 | Head over to the [Jekyll Repo](https://github.com/jekyll/jekyll) at GitHub 11 | -------------------------------------------------------------------------------- /benchmark/hash-fetch: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'benchmark/ips' 3 | 4 | h = {:bar => 'uco'} 5 | 6 | Benchmark.ips do |x| 7 | x.report('fetch with no block') { h.fetch(:bar, (0..9).to_a) } 8 | x.report('fetch with a block') { h.fetch(:bar) { (0..9).to_a } } 9 | x.report('brackets with an ||') { h[:bar] || (0..9).to_a } 10 | end 11 | -------------------------------------------------------------------------------- /docs/_layouts/news.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 |
6 |
7 | {% include news_contents_mobile.html -%} 8 |
9 | {{- content -}} 10 |
11 | {% include news_contents.html -%} 12 |
13 |
14 |
15 | -------------------------------------------------------------------------------- /docs/pages/releases.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: news 3 | title: Releases 4 | permalink: /news/releases/ 5 | author: all 6 | --- 7 | 8 | {% for post in site.categories.release -%} 9 | {% if forloop.index == 1 -%} 10 | {% include news_item.html -%} 11 | {% else -%} 12 | {% include news_item_archive.html -%} 13 | {% endif -%} 14 | {% endfor -%} 15 | -------------------------------------------------------------------------------- /script/cibuild: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | script/branding 4 | 5 | set -e 6 | 7 | if [[ -z "$TEST_SUITE" ]] 8 | then 9 | script/fmt 10 | script/test ci 11 | script/cucumber 12 | script/default-site 13 | elif [[ -x "script/$TEST_SUITE" ]] 14 | then 15 | script/$TEST_SUITE 16 | else 17 | echo "Unknown test suite." 18 | exit 1 19 | fi 20 | -------------------------------------------------------------------------------- /test/fixtures/test-theme/_includes/testimonials.html: -------------------------------------------------------------------------------- 1 |
2 |

{{ site.data.i18n.testimonials.header }}

3 | 4 | … 5 | 6 | 9 |
10 | -------------------------------------------------------------------------------- /docs/_data/primary_nav.yml: -------------------------------------------------------------------------------- 1 | - title: Home 2 | link: / 3 | show_on_mobile: true 4 | - title: Docs 5 | link: /docs/ 6 | show_on_mobile: true 7 | - title: Resources 8 | link: /resources/ 9 | show_on_mobile: true 10 | - title: Showcase 11 | link: /showcase/ 12 | show_on_mobile: false 13 | - title: News 14 | link: /news/ 15 | show_on_mobile: true 16 | -------------------------------------------------------------------------------- /test/source/_posts/2018-05-15-closed-liquid-block-excerpt-whitespace-control.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: LIQUID_TAG_REGEX excerpt whitespace control test 3 | layout: post 4 | --- 5 | 6 | {%- for post in site.posts -%} 7 | You are in a maze of twisty little passages, all alike. 8 | There's lots more to say about this, but that's enough for now. 9 | {%- endfor -%} 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Jekyll 2 | _site/ 3 | *-cache/ 4 | .jekyll-metadata 5 | 6 | # Ruby 7 | .bundle/ 8 | .byebug_history 9 | .ruby-gemset 10 | .ruby-version 11 | *.gem 12 | Gemfile.lock 13 | 14 | # Files 15 | .analysis 16 | .DS_Store 17 | *.swp 18 | *~ 19 | 20 | # Folders 21 | /vendor 22 | bbin/ 23 | bin/ 24 | coverage 25 | gh-pages/ 26 | pkg/ 27 | test/dest 28 | tmp/* 29 | -------------------------------------------------------------------------------- /test/source/_posts/2018-05-15-open-liquid-block-excerpt-whitespace-control.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: LIQUID_TAG_REGEX excerpt whitespace control test 3 | layout: post 4 | --- 5 | 6 | {%- for post in site.posts -%} 7 | You are in a maze of twisty little passages, all alike. 8 | 9 | There's lots more to say about this, but that's enough for now. 10 | {%- endfor -%} 11 | -------------------------------------------------------------------------------- /docs/_includes/search/script.html: -------------------------------------------------------------------------------- 1 | 2 | 10 | -------------------------------------------------------------------------------- /docs/_posts/2025-01-29-jekyll-4-4-1-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 4.4.1 Released' 3 | date: 2025-01-29 18:15:32 +0530 4 | author: ashmaroli 5 | version: 4.4.1 6 | category: release 7 | --- 8 | 9 | Publishing a patch release to restore existing behavior around defining front matter defaults 10 | where a scope with path containing glob patterns are lax in matching paths on disk. 11 | -------------------------------------------------------------------------------- /test/source/_posts/2018-01-28-open-liquid-block-excerpt.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | --- 4 | 5 | {% 6 | highlight 7 | ruby 8 | %} 9 | {% assign foo = 'foobar' %} 10 | {% raw 11 | %} 12 | def print_hi(name) 13 | puts "Hi, #{name}" 14 | end 15 | 16 | print_hi('Tom') 17 | #=> prints 'Hi, Tom' to STDOUT. 18 | {% endraw %} 19 | {% endhighlight %} 20 | 21 | So let's talk business. 22 | -------------------------------------------------------------------------------- /.github/config.yml: -------------------------------------------------------------------------------- 1 | updateDocsComment: > 2 | Thanks for opening this pull request! The maintainers of this repository would appreciate it if you would update some of our documentation based on your changes. 3 | 4 | updateDocsWhiteList: 5 | - bug 6 | - fix 7 | - Backport 8 | - dev 9 | - Update 10 | - WIP 11 | - chore 12 | 13 | updateDocsTargetFiles: 14 | - README 15 | - docs/ 16 | -------------------------------------------------------------------------------- /docs/_posts/2023-12-28-jekyll-3-9-4-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 3.9.4 Released' 3 | date: 2023-12-28 14:45:05 -0800 4 | author: parkr 5 | version: 3.9.4 6 | categories: [release] 7 | --- 8 | 9 | Hey Jekyllers! 10 | 11 | This release, 3.9.4, is to bring Ruby 3.3 support to Jekyll. You can find 12 | the details in [the changelog]({% link _docs/history.md %}#v3-9-4). 13 | 14 | Happy Jekylling! 15 | -------------------------------------------------------------------------------- /test/fixtures/test-theme/test-theme.gemspec: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | Gem::Specification.new do |s| 4 | s.name = "test-theme" 5 | s.version = "0.1.0" 6 | s.licenses = ["MIT"] 7 | s.summary = "This is a theme used to test Jekyll" 8 | s.authors = ["Jekyll"] 9 | s.files = ["lib/example.rb"] 10 | s.homepage = "https://github.com/jekyll/jekyll" 11 | end 12 | -------------------------------------------------------------------------------- /test/source/_tutorials/dive-in-and-publish-already.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Dive-In and Publish Already!" 3 | lesson: 3 4 | approx_time: 30 mins 5 | --- 6 | 7 | Jekyll converts Markdown documents to HTML by default. Don't know what's Markdown? 8 | Read this [documentation](https://daringfireball.net/projects/markdown/) 9 | While you're at it, might as well learn about [Kramdown](https://kramdown.gettalong.org/) 10 | -------------------------------------------------------------------------------- /docs/_includes/primary-nav-items.html: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /test/source/_posts/2018-01-28-closed-liquid-block-excerpt.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | --- 4 | 5 | {% 6 | highlight 7 | ruby 8 | %} 9 | {% assign foo = 'foobar' %} 10 | {% raw 11 | %} 12 | def print_hi(name) 13 | puts "Hi, #{name}" 14 | end 15 | print_hi('Tom') 16 | #=> prints 'Hi, Tom' to STDOUT. 17 | {% 18 | endraw 19 | %} 20 | {% 21 | endhighlight 22 | %} 23 | 24 | So let's talk business. 25 | -------------------------------------------------------------------------------- /test/source/_plugins/custom_block.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # For testing excerpt handling of custom tags 4 | 5 | module Jekyll 6 | class DoNothingBlock < Liquid::Block 7 | end 8 | 9 | class DoNothingOther < Liquid::Tag 10 | end 11 | end 12 | 13 | Liquid::Template.register_tag("do_nothing", Jekyll::DoNothingBlock) 14 | Liquid::Template.register_tag("do_nothing_other", Jekyll::DoNothingOther) 15 | -------------------------------------------------------------------------------- /script/profile-docs: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # Build Jekyll's Documentation site in 'debug' mode and outputs the site's profile stats. 4 | # Helps detecting *hard* breaking-changes (`jekyll build` aborts) and optimizations 5 | # in the `build` process. 6 | # 7 | # Usage: bash script/profile-docs 8 | 9 | SOURCE_DIR=$PWD/docs 10 | bundle exec jekyll build -s $SOURCE_DIR -d $SOURCE_DIR/_site --profile --trace --verbose 11 | -------------------------------------------------------------------------------- /test/fixtures/test-theme-skinny/test-theme-skinny.gemspec: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | Gem::Specification.new do |s| 4 | s.name = "test-theme-skinny" 5 | s.version = "0.1.0" 6 | s.licenses = ["MIT"] 7 | s.summary = "This is a theme with just layouts used to test Jekyll" 8 | s.authors = ["Jekyll"] 9 | s.files = ["lib/example.rb"] 10 | s.homepage = "https://github.com/jekyll/jekyll" 11 | end 12 | -------------------------------------------------------------------------------- /test/source/_posts/2013-07-22-post-excerpt-with-layout.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Post Excerpt with Layout 4 | categories: 5 | - bar 6 | - baz 7 | - z_category 8 | - MixedCase 9 | tags: 10 | - first 11 | - second 12 | - third 13 | - jekyllrb.com 14 | --- 15 | 16 | First paragraph with [link ref][link]. 17 | 18 | Second paragraph 19 | 20 | --- 21 | 22 | Third paragraph 23 | 24 | [link]: https://jekyllrb.com/ 25 | -------------------------------------------------------------------------------- /lib/jekyll/drops/static_file_drop.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module Jekyll 4 | module Drops 5 | class StaticFileDrop < Drop 6 | extend Forwardable 7 | delegate_methods :name, :extname, :modified_time, :basename 8 | delegate_method_as :relative_path, :path 9 | delegate_method_as :type, :collection 10 | 11 | private delegate_method_as :data, :fallback_data 12 | end 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /docs/_posts/2018-11-04-jekyll-3-8-5-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 3.8.5 Released' 3 | date: 2018-11-04 20:58:20 +0100 4 | author: oe 5 | version: 3.8.5 6 | category: release 7 | --- 8 | 9 | This release fixes a bug where multiple Liquid tags were not supported in 10 | excerpts. 11 | 12 | Thanks to @ashmaroli for fixing this issue in [#7250]. 13 | 14 | Happy Jekylling! 15 | 16 | [#7250]: https://github.com/jekyll/jekyll/pull/7250 17 | -------------------------------------------------------------------------------- /test/fixtures/test-theme-symlink/test-theme-symlink.gemspec: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | Gem::Specification.new do |s| 4 | s.name = "test-theme-symlink" 5 | s.version = "0.1.0" 6 | s.licenses = ["MIT"] 7 | s.summary = "This is a theme with a symlink used to test Jekyll" 8 | s.authors = ["Jekyll"] 9 | s.files = ["lib/example.rb"] 10 | s.homepage = "https://github.com/jekyll/jekyll" 11 | end 12 | -------------------------------------------------------------------------------- /docs/_includes/docs_variables_table.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | {% for var in include.scope -%} 11 | 12 | 13 | 14 | 15 | {% endfor -%} 16 | 17 |
VariableDescription

{{ var.name }}

{{- var.description -}}

18 |
19 | -------------------------------------------------------------------------------- /lib/blank_template/_layouts/default.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {{ page.title }} - {{ site.title }} 7 | 8 | 9 | 10 | {{ content }} 11 | 12 | 13 | -------------------------------------------------------------------------------- /test/fixtures/test-theme/_config.yml: -------------------------------------------------------------------------------- 1 | title: Hello World 2 | baseurl: "/test-theme" 3 | include: ["_extras/banner.md"] 4 | exclude: 5 | - README.md 6 | - CHANGELOG.md 7 | - Rakefile 8 | - test/**/* 9 | 10 | # theme-specific settings 11 | test_theme: 12 | skin: aero # aero / chrome / dark / neon 13 | date_format: "%b -d %Y" # any format supported by strftime 14 | header_links: true # generate header links automatically 15 | -------------------------------------------------------------------------------- /docs/_docs/community/bug.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Report a bug 3 | permalink: "/docs/community/bug/" 4 | --- 5 | 6 | If you think you've found a bug within a Jekyll plugin, open an issue in that plugin's repository — First [look for the plugin on rubygems](https://rubygems.org/) then click on the `Homepage` link to access the plugin repository. 7 | 8 | If you think you've found a bug within Jekyll itself, [open an issue](https://github.com/jekyll/jekyll/issues/new). 9 | -------------------------------------------------------------------------------- /benchmark/string-replacement: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'benchmark/ips' 3 | 4 | def str 5 | 'http://baruco.org/2014/some-talk-with-some-amount-of-value' 6 | end 7 | 8 | Benchmark.ips do |x| 9 | x.report('#tr') { str.tr('some', 'a') } 10 | x.report('#gsub') { str.gsub('some', 'a') } 11 | x.report('#gsub!') { str.gsub!('some', 'a') } 12 | x.report('#sub') { str.sub('some', 'a') } 13 | x.report('#sub!') { str.sub!('some', 'a') } 14 | end 15 | -------------------------------------------------------------------------------- /docs/_layouts/page.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 |
6 |
7 |
8 |
9 | {%- if page.permalink contains "resources" %} 10 | {% include improve_doc_link.html %} 11 | {% endif -%} 12 |

{{ page.title }}

13 | {{ content }} 14 |
15 |
16 |
17 |
18 |
19 | -------------------------------------------------------------------------------- /lib/jekyll/drops/excerpt_drop.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module Jekyll 4 | module Drops 5 | class ExcerptDrop < DocumentDrop 6 | def layout 7 | @obj.doc.data["layout"] 8 | end 9 | 10 | def date 11 | @obj.doc.date 12 | end 13 | 14 | def excerpt 15 | nil 16 | end 17 | 18 | def name 19 | @obj.doc.data["name"] || @obj.doc.basename 20 | end 21 | end 22 | end 23 | end 24 | -------------------------------------------------------------------------------- /test/fixtures/test-theme-w-empty-data/test-theme-w-empty-data.gemspec: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | Gem::Specification.new do |s| 4 | s.name = "test-theme-w-empty-data" 5 | s.version = "0.1.0" 6 | s.licenses = ["MIT"] 7 | s.summary = "This is a theme with just one layout and an empty _data folder used to test Jekyll" 8 | s.authors = ["Jekyll"] 9 | s.files = ["lib/example.rb"] 10 | s.homepage = "https://github.com/jekyll/jekyll" 11 | end 12 | -------------------------------------------------------------------------------- /docs/_layouts/docs.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 |
6 |
7 | {% include docs_contents_mobile.html -%} 8 |
9 |
10 | {% include improve_doc_link.html %} 11 |

{{ page.title }}

12 | {{ content }} 13 |
14 |
15 | {% include docs_contents.html -%} 16 |
17 |
18 |
19 | -------------------------------------------------------------------------------- /test/source/_tutorials/lets-roll.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Let's Roll!" 3 | lesson: 2 4 | approx_time: 1 min 5 | --- 6 | 7 | Now that you have installed Ruby, Jekyll and Bundler, lets get Jekylling! 8 | Enter the following in your terminal: 9 | 10 | $ jekyll new my blog 11 | 12 | Then preview your new project in your browser right away by entering the following and pointing your browser to `http://localhost:4000` : 13 | 14 | $ bundle exec jekyll serve 15 | 16 | Go ahead. Try it. 17 | -------------------------------------------------------------------------------- /docs/_posts/2018-06-04-jekyll-3-8-3-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 3.8.3 Released' 3 | date: 2018-06-05 09:00:00 -0500 4 | author: pathawks 5 | version: 3.8.3 6 | category: release 7 | --- 8 | 9 | This release fixes a regression in 3.8 where collections with `published: false` 10 | do not show when using the `--unpublished` flag. 11 | 12 | Thanks to @philipbelesky for reporting and fixing this issue; collections with 13 | `published: false` now behave the same way as Posts. 14 | -------------------------------------------------------------------------------- /test/source/_posts/2016-08-16-indented-link-references.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | This is the first paragraph. It [has][link_0] [lots][link_1] [of][link_2] 5 | [links][link_3]. 6 | 7 | This is the second paragraph. It has sample code that should not be extracted: 8 | 9 | [fakelink]: www.invalid.com 10 | 11 | And here are the real links: 12 | 13 | [link_0]: www.example.com/0 14 | [link_1]: www.example.com/1 15 | [link_2]: www.example.com/2 16 | [link_3]: www.example.com/3 17 | -------------------------------------------------------------------------------- /lib/jekyll/drops/collection_drop.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module Jekyll 4 | module Drops 5 | class CollectionDrop < Drop 6 | extend Forwardable 7 | 8 | mutable false 9 | 10 | delegate_method_as :write?, :output 11 | delegate_methods :label, :docs, :files, :directory, :relative_directory 12 | 13 | private delegate_method_as :metadata, :fallback_data 14 | 15 | def to_s 16 | docs.to_s 17 | end 18 | end 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /docs/_posts/2023-01-29-jekyll-3-9-3-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 3.9.3 Released' 3 | date: 2023-01-29 18:30:22 2023 -0800 4 | author: parkr 5 | version: 3.9.3 6 | categories: [release] 7 | --- 8 | 9 | Jekyll 3.9.3 is a bug fix release loosening version restrictions for 10 | dependencies `i18n` and `tzinfo` gems. You can now use Jekyll v3.9 with 11 | newer versions of these gems! 12 | 13 | More details in [the full release notes]({% link _docs/history.md %}#v3-9-3). 14 | 15 | Happy Jekylling! 16 | -------------------------------------------------------------------------------- /lib/jekyll/page_without_a_file.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module Jekyll 4 | # A Jekyll::Page subclass to handle processing files without reading it to 5 | # determine the page-data and page-content based on Front Matter delimiters. 6 | # 7 | # The class instance is basically just a bare-bones entity with just 8 | # attributes "dir", "name", "path", "url" defined on it. 9 | class PageWithoutAFile < Page 10 | def read_yaml(*) 11 | @data ||= {} 12 | end 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /test/fixtures/test-dependency-theme/test-dependency-theme.gemspec: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | Gem::Specification.new do |s| 4 | s.name = "test-dependency-theme" 5 | s.version = "0.1.0" 6 | s.licenses = ["MIT"] 7 | s.summary = "This is another theme used to test Jekyll" 8 | s.authors = ["Jekyll"] 9 | s.files = ["lib/example.rb"] 10 | s.homepage = "https://github.com/jekyll/jekyll" 11 | 12 | s.add_runtime_dependency "jekyll_test_plugin" 13 | end 14 | -------------------------------------------------------------------------------- /test/source/_tutorials/extending-with-plugins.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Extending with Plugins" 3 | lesson: 5 4 | approx_time: 1 min 5 | --- 6 | 7 | A lot can be accomplished by using Jekyll out-of-the-box. But a lot more can be achieved by using plugins that extend Jekyll's functionality. There are numerous plugins supported by the official team and many other third-party plugins provided by the Jekyll Community. 8 | 9 | Check this [documentation page](https://jekyllrb.com/docs/plugins/) dedicated to working with plugins. 10 | -------------------------------------------------------------------------------- /docs/_docs/deployment.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Deployment 3 | permalink: /docs/deployment/ 4 | redirect_from: "/docs/deployment-methods/index.html" 5 | --- 6 | 7 | Sites built using Jekyll can be deployed in a large number of ways due to the static nature of the generated output. Here's some of the most common ways: 8 | 9 | * [Manually]({{ '/docs/deployment/manual/' | relative_url }}) 10 | * [Automated]({{ '/docs/deployment/automated/' | relative_url }}) 11 | * [Third Party]({{ '/docs/deployment/third-party/' | relative_url }}) 12 | -------------------------------------------------------------------------------- /docs/_includes/news_contents_mobile.html: -------------------------------------------------------------------------------- 1 |
2 | 11 |
-------------------------------------------------------------------------------- /script/rubies: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ----------------------------------------------------------------------------- 3 | # If you send us a ruby then we use that, if you do not then we test with 4 | # whatever we can detect, this way you can run both suites when you test out 5 | # your source, we expect full coverage now, not just MRI. 6 | # ----------------------------------------------------------------------------- 7 | 8 | rubies=() 9 | for r in ruby jruby; do 10 | if which "$r" > /dev/null 2>&1 11 | then 12 | echo $r 13 | fi 14 | done 15 | -------------------------------------------------------------------------------- /.github/workflows/actions/memprof.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'jekyll' 4 | require 'memory_profiler' 5 | 6 | MemoryProfiler.report(allow_files: ['lib/jekyll/', 'lib/jekyll.rb']) do 7 | Jekyll::PluginManager.require_from_bundler 8 | Jekyll::Commands::Build.process({ 9 | "source" => File.expand_path(ARGV[0]), 10 | "destination" => File.expand_path("#{ARGV[0]}/_site"), 11 | "disable_disk_cache" => true, 12 | }) 13 | puts '' 14 | end.pretty_print(scale_bytes: true, normalize_paths: true) 15 | -------------------------------------------------------------------------------- /lib/site_template/404.html: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: /404.html 3 | layout: page 4 | --- 5 | 6 | 19 | 20 |
21 |

404

22 | 23 |

Page not found :(

24 |

The requested page could not be found.

25 |
26 | -------------------------------------------------------------------------------- /benchmark/parse-date: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require_relative '../lib/jekyll' 4 | require 'benchmark/ips' 5 | 6 | date = "2014-08-02 14:43:06 PDT".freeze 7 | time = Time.parse(date) 8 | 9 | Benchmark.ips do |x| 10 | x.report('Time.parse') do 11 | Time.parse(date) 12 | end 13 | 14 | x.report('localtime') do 15 | Time.parse(date).localtime 16 | end 17 | 18 | x.report('localtime parsed') do 19 | time.localtime 20 | end 21 | 22 | x.report('Utils.parse_date') do 23 | Jekyll::Utils.parse_date(date) 24 | end 25 | end 26 | -------------------------------------------------------------------------------- /test/source/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Tom Preston-Werner 4 | --- 5 | 6 | h1. Welcome to my site 7 | 8 | {{ layout.front_matter_var }} 9 | 10 | h2. Please read our {{ site.posts | size }} Posts 11 | 12 | 17 | 18 | {% assign first_post = site.posts.first %} 19 |
20 |

{{ first_post.title }}

21 |
22 | {{ first_post.content }} 23 |
24 |
25 | -------------------------------------------------------------------------------- /docs/_posts/2016-05-18-jekyll-3-1-5-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 3.1.5 Released' 3 | date: 2016-05-18 21:35:27 -0700 4 | author: parkr 5 | version: 3.1.5 6 | category: release 7 | --- 8 | 9 | There's always at least one bug, right? :) 10 | 11 | Hot on the trails of [v3.1.4](/news/2016/05/18/jekyll-3-1-4-released/), we 12 | bring you v3.1.5! It fixes one bug around requiring the `ExcerptDrop`, 13 | which only affects Linux. For the gory details, see [the pull 14 | request for the fix](https://github.com/jekyll/jekyll/pull/4912). 15 | 16 | Happy Jekylling! 17 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/documentation.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Documentation 3 | about: Found a typo or something that isn't crystal clear in our docs? 4 | title: '[Docs]: ' 5 | labels: documentation 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | 12 | ## Motivation 13 | 14 | 15 | 16 | 17 | 18 | ## Suggestion 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /docs/_layouts/error.html: -------------------------------------------------------------------------------- 1 | {% include top.html %} 2 | 3 | 4 |
5 |
6 |
7 |

8 | 9 | Jekyll 10 | Jekyll Logo 11 | 12 |

13 |
14 |
15 |
16 | 17 | {{ content }} 18 | 19 | {% include anchor_links.html %} 20 | {% include analytics.html %} 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /docs/_layouts/step.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 |
5 |
6 | {% include docs_contents_mobile.html -%} 7 |
8 |
9 | {% include improve_doc_link.html %} 10 |

Step by Step Tutorial

11 |

{{ page.position }}. {{ page.title }}

12 | {{ content }} 13 | {% include step-index.html -%} 14 |
15 |
16 | {% include docs_contents.html -%} 17 |
18 |
19 |
20 | -------------------------------------------------------------------------------- /docs/_posts/2024-09-16-jekyll-4-3-4-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 4.3.4 Released' 3 | date: 2024-09-16 21:34:22 +0530 4 | author: ashmaroli 5 | version: 4.3.4 6 | category: release 7 | --- 8 | 9 | Hello Jekyllers! 10 | 11 | Publishing a small bug-fix release with the following patches: 12 | 13 | * Relax version-constraint on gem `wdm` in Gemfile created by `jekyll new`. 14 | * Patch `Jekyll::Drops::ThemeDrop#root` to render absolute path to theme-gem only if `JEKYLL_ENV` is explicitly set 15 | to string `development`. 16 | 17 | That is all for now. 18 | Happy Jekyllin'!! 19 | -------------------------------------------------------------------------------- /rubocop/jekyll/no_p_allowed.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module RuboCop 4 | module Cop 5 | module Jekyll 6 | class NoPAllowed < Base 7 | MSG = "Avoid using `p` to print things. Use `Jekyll.logger` instead." 8 | RESTRICT_ON_SEND = %i[p].freeze 9 | 10 | def_node_search :p_called?, <<-PATTERN 11 | (send _ :p _) 12 | PATTERN 13 | 14 | def on_send(node) 15 | if p_called?(node) 16 | add_offense(node.loc.selector) 17 | end 18 | end 19 | end 20 | end 21 | end 22 | end 23 | -------------------------------------------------------------------------------- /test/test_site_drop.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require "helper" 4 | 5 | class TestSiteDrop < JekyllUnitTest 6 | context "a site drop" do 7 | setup do 8 | @site = fixture_site( 9 | "collections" => ["thanksgiving"] 10 | ) 11 | @site.process 12 | @drop = @site.to_liquid.site 13 | end 14 | 15 | should "respond to `key?`" do 16 | assert_respond_to @drop, :key? 17 | end 18 | 19 | should "find a key if it's in the collection of the drop" do 20 | assert @drop.key?("thanksgiving") 21 | end 22 | end 23 | end 24 | -------------------------------------------------------------------------------- /lib/jekyll/publisher.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module Jekyll 4 | class Publisher 5 | def initialize(site) 6 | @site = site 7 | end 8 | 9 | def publish?(thing) 10 | can_be_published?(thing) && !hidden_in_the_future?(thing) 11 | end 12 | 13 | def hidden_in_the_future?(thing) 14 | thing.respond_to?(:date) && !@site.future && thing.date.to_i > @site.time.to_i 15 | end 16 | 17 | private 18 | 19 | def can_be_published?(thing) 20 | thing.data.fetch("published", true) || @site.unpublished 21 | end 22 | end 23 | end 24 | -------------------------------------------------------------------------------- /docs/_includes/mobile-nav-items.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/_posts/2013-12-09-jekyll-1-4-1-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 1.4.1 Released' 3 | date: 2013-12-09 20:44:13 -0600 4 | author: mattr- 5 | version: 1.4.1 6 | category: release 7 | --- 8 | 9 | Another quick turnover, anyone? A [critical 10 | bug]({{ site.repository }}/issues/1794) in the reading of 11 | posts snuck itself into the 1.4.0 release. 12 | 13 | To address this issue, we're releasing v1.4.1 of Jekyll so that you can 14 | keep on writing without any problems. 15 | 16 | As always, you can find the full list of fixes in this release in the 17 | [change log](/docs/history/)! 18 | -------------------------------------------------------------------------------- /benchmark/flat-map: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'benchmark/ips' 3 | 4 | enum = (0..50).to_a 5 | nested = enum.map { |i| [i] } 6 | 7 | def do_thing(blah) 8 | blah * 1 9 | end 10 | 11 | Benchmark.ips do |x| 12 | x.report('.map.flatten with nested arrays') { nested.map { |i| do_thing(i) }.flatten(1) } 13 | x.report('.flat_map with nested arrays') { nested.flat_map { |i| do_thing(i) } } 14 | 15 | x.report('.map.flatten with no nested arrays') { enum.map { |i| do_thing(i) }.flatten(1) } 16 | x.report('.flat_map with no nested arrays') { enum.flat_map { |i| do_thing(i) } } 17 | end 18 | -------------------------------------------------------------------------------- /docs/_posts/2024-06-23-jekyll-3-10-0-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 3.10.0 Released' 3 | date: 2024-06-23 21:56:58 -0700 4 | author: parkr 5 | version: 3.10.0 6 | categories: [release] 7 | --- 8 | 9 | As Ruby continues to march on, the maintainers have made the decision to 10 | drop some previously-bundled gems. This release makes Jekyll depend 11 | directly on those gems so that whether your Ruby installation has them 12 | bundled or not, your experience can continue uninterrupted. 13 | 14 | More details [are in the changelog]({% link _docs/history.md %}#v3-10-0). 15 | 16 | Happy Jekylling! 17 | -------------------------------------------------------------------------------- /rubocop/jekyll/no_puts_allowed.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module RuboCop 4 | module Cop 5 | module Jekyll 6 | class NoPutsAllowed < Base 7 | MSG = "Avoid using `puts` to print things. Use `Jekyll.logger` instead." 8 | RESTRICT_ON_SEND = %i[puts].freeze 9 | 10 | def_node_search :puts_called?, <<-PATTERN 11 | (send nil? :puts _) 12 | PATTERN 13 | 14 | def on_send(node) 15 | if puts_called?(node) 16 | add_offense(node.loc.selector) 17 | end 18 | end 19 | end 20 | end 21 | end 22 | end 23 | -------------------------------------------------------------------------------- /docs/_includes/analytics.html: -------------------------------------------------------------------------------- 1 | {% if site.google_analytics_id -%} 2 | 3 | 12 | {% endif -%} 13 | -------------------------------------------------------------------------------- /docs/_posts/2014-11-12-jekyll-2-5-2-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 2.5.2 Released' 3 | date: 2014-11-12 18:49:08 -0800 4 | author: parkr 5 | version: 2.5.2 6 | category: release 7 | --- 8 | 9 | A very minor release, 2.5.2 fixes a bug with path sanitation that 2.5.1 10 | introduced. It also improves the `post_url` tag such that it checks the 11 | posts' name (e.g. `2014-03-03-my-cool-post`) instead of a compiled time and 12 | name. This fixes issues where posts are created and the day changes based 13 | on timezone discrepancies. 14 | 15 | [Full history here.](/docs/history/) 16 | 17 | Happy Jekylling! 18 | -------------------------------------------------------------------------------- /docs/_posts/2022-03-27-jekyll-3-9-2-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 3.9.2 Released' 3 | date: 2022-03-27 13:20:00 -0700 4 | author: parkr 5 | version: 3.9.2 6 | categories: [release] 7 | --- 8 | 9 | Hey Jekyllers, 10 | 11 | Quick bug-fix release for you all today: 12 | 13 | 1. Ruby 3.0 and 3.1 support :tada: (you will need to run `bundle add webrick` for `jekyll serve` to work) 14 | 2. `jekyll serve` will no longer inject a charset into the MIME type for 15 | binary types 16 | 3. Incremental regeneration now handles includes in collection files 17 | correctly 18 | 19 | That's all, Happy Jekylling! 20 | -------------------------------------------------------------------------------- /lib/jekyll/readers/collection_reader.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module Jekyll 4 | class CollectionReader 5 | SPECIAL_COLLECTIONS = %w(posts data).freeze 6 | 7 | attr_reader :site, :content 8 | 9 | def initialize(site) 10 | @site = site 11 | @content = {} 12 | end 13 | 14 | # Read in all collections specified in the configuration 15 | # 16 | # Returns nothing. 17 | def read 18 | site.collections.each_value do |collection| 19 | collection.read unless SPECIAL_COLLECTIONS.include?(collection.label) 20 | end 21 | end 22 | end 23 | end 24 | -------------------------------------------------------------------------------- /lib/site_template/about.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: About 4 | permalink: /about/ 5 | --- 6 | 7 | This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at [jekyllrb.com](https://jekyllrb.com/) 8 | 9 | You can find the source code for Minima at GitHub: 10 | [jekyll][jekyll-organization] / 11 | [minima](https://github.com/jekyll/minima) 12 | 13 | You can find the source code for Jekyll at GitHub: 14 | [jekyll][jekyll-organization] / 15 | [jekyll](https://github.com/jekyll/jekyll) 16 | 17 | 18 | [jekyll-organization]: https://github.com/jekyll 19 | -------------------------------------------------------------------------------- /docs/_posts/2013-10-28-jekyll-1-3-0-rc1-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 1.3.0.rc1 Released' 3 | date: 2013-10-28 20:14:39 -0500 4 | author: mattr- 5 | version: 1.3.0.rc1 6 | category: release 7 | --- 8 | 9 | Jekyll 1.3.0 is going to be a big release! In order to make sure we 10 | didn't screw anything up too badly, we're making a release candidate 11 | available for any early adopters who want to give the latest and 12 | greatest code a spin without having to clone a repository from git. 13 | 14 | Please take this prerelease for a spin and [let us 15 | know](https://github.com/jekyll/jekyll/issues/new) if you run into any 16 | issues! 17 | -------------------------------------------------------------------------------- /docs/_posts/2023-12-27-jekyll-4-3-3-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 4.3.3 Released' 3 | date: 2023-12-27 11:15:00 -0600 4 | author: mattr- 5 | version: 4.3.3 6 | category: release 7 | --- 8 | 9 | Hello Jekyllers! 10 | 11 | This is a very small release containing two things: 12 | 13 | - A fix for using Jekyll with Ruby 3.3 and the new `logger` gem included with that release. 14 | - A test fix for newer versions of Ruby for packagers that run the test suite 15 | as part of their packaging process. 16 | 17 | Nothing new in the way of features for this release. You'll need to wait for v4.4 for that. 😄 18 | 19 | Happy Jekylling!! 20 | -------------------------------------------------------------------------------- /lib/jekyll/liquid_extensions.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module Jekyll 4 | module LiquidExtensions 5 | # Lookup a Liquid variable in the given context. 6 | # 7 | # context - the Liquid context in question. 8 | # variable - the variable name, as a string. 9 | # 10 | # Returns the value of the variable in the context 11 | # or the variable name if not found. 12 | def lookup_variable(context, variable) 13 | lookup = context 14 | 15 | variable.split(".").each do |value| 16 | lookup = lookup[value] 17 | end 18 | 19 | lookup || variable 20 | end 21 | end 22 | end 23 | -------------------------------------------------------------------------------- /benchmark/capture-assign.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require "liquid" 3 | require "benchmark/ips" 4 | 5 | puts "Ruby #{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" 6 | puts "Liquid #{Liquid::VERSION}" 7 | 8 | template1 = '{% capture foobar %}foo{{ bar }}{% endcapture %}{{ foo }}{{ foobar }}' 9 | template2 = '{% assign foobar = "foo" | append: bar %}{{ foobar }}' 10 | 11 | def render(template) 12 | Liquid::Template.parse(template).render("bar" => "42") 13 | end 14 | 15 | puts render(template1) 16 | puts render(template2) 17 | 18 | Benchmark.ips do |x| 19 | x.report('capture') { render(template1) } 20 | x.report('assign') { render(template2) } 21 | end 22 | -------------------------------------------------------------------------------- /docs/_posts/2016-11-14-jekyll-3-3-1-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 3.3.1 Released' 3 | date: 2016-11-14 14:29:59 -0800 4 | author: parkr 5 | version: 3.3.1 6 | category: release 7 | --- 8 | 9 | Hello! We have a bugfix release of Jekyll hot off the presses for you. Key 10 | fixes to call out: 11 | 12 | 1. Only warn about auto-regeneration issues on Windows instead of disabling 13 | 2. Exclude very specific `vendor/` subdirectories instead of all of `vendor/` 14 | 3. Allow permalink templates to have plaintext underscores 15 | 16 | ..and lots more! Check out the [full history for more](/docs/history/#v3-3-1). 17 | 18 | Happy Jekylling! 19 | -------------------------------------------------------------------------------- /docs/_includes/tutorials_contents.html: -------------------------------------------------------------------------------- 1 |
2 | 16 |
17 | -------------------------------------------------------------------------------- /docs/_posts/2013-12-16-jekyll-1-4-2-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 1.4.2 Released' 3 | date: 2013-12-16 19:48:13 -0500 4 | author: parkr 5 | version: 1.4.2 6 | category: release 7 | --- 8 | 9 | This release fixes [a regression][] where Maruku fenced code blocks were turned 10 | off, instead of the previous default to on. We've added a new default 11 | configuration to our `maruku` config key: `fenced_code_blocks` and set it to 12 | default to `true`. 13 | 14 | If you do not wish to use Maruku fenced code blocks, you may turn this option 15 | off in your site's configuration file. 16 | 17 | [a regression]: https://github.com/jekyll/jekyll/pull/1830 18 | -------------------------------------------------------------------------------- /docs/_posts/2014-07-29-jekyll-2-2-0-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 2.2.0 Released' 3 | date: 2014-07-29 18:59:13 -0400 4 | author: parkr 5 | version: 2.2.0 6 | category: release 7 | --- 8 | 9 | Jekyll 2.2.0 contains a few key updates: 10 | 11 | 1. A warning will now fire if you specify a layout in any of your pages or 12 | posts that doesn't exist. 13 | 2. Certain Pygments options are now whitelisted in safe mode 14 | 3. Categories in a post's path are now respected (i.e. folders in `_posts` 15 | will now work properly). 16 | 17 | As always, a full list of the updates are on the 18 | [history page](/docs/history/#v2-2-0). Happy Jekylling! 19 | -------------------------------------------------------------------------------- /docs/_posts/2021-04-08-jekyll-3-9-1-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 3.9.1 Released' 3 | date: 2021-04-08 10:51:12 -0400 4 | author: parkr 5 | version: 3.9.1 6 | categories: [release] 7 | --- 8 | 9 | This patch release of the 3.9 series is released to fix a bug where the 10 | `include` tag does not allow valid filename characters. For example, this 11 | would previously fail: 12 | 13 | {% raw %} 14 | ```text 15 | {% include my-logo@2x.svg %} 16 | ``` 17 | {% endraw %} 18 | 19 | This release adds support for the following characters in filenames: 20 | 21 | - `@` 22 | - `-` 23 | - `(` and `)` 24 | - `+` 25 | - `~` 26 | - `#` 27 | 28 | Happy Jekylling! 29 | -------------------------------------------------------------------------------- /docs/_posts/2015-02-26-introducing-jekyll-talk.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Join the Discussion at Jekyll Talk' 3 | date: 2015-02-26 21:06:51 -0800 4 | author: alfredxing 5 | categories: [community] 6 | --- 7 | 8 | We're super excited to announce the launch of [Jekyll Talk](https://talk.jekyllrb.com), a Discourse forum for anything related to Jekyll! 9 | 10 | The forum was set up by [@envygeeks](https://github.com/envygeeks) to build a community more accessible to Jekyll users and more suitable for general discussion. 11 | 12 | There's already been a lot of interesting topics, including a site showcase and a poll for Jekyll 3.0 priorities. 13 | 14 | Come join the fun! 15 | -------------------------------------------------------------------------------- /test/test_ansi.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require "helper" 4 | 5 | class TestAnsi < JekyllUnitTest 6 | context nil do 7 | setup do 8 | @subject = Jekyll::Utils::Ansi 9 | end 10 | 11 | Jekyll::Utils::Ansi::COLORS.each_key do |color| 12 | should "respond_to? #{color}" do 13 | assert_respond_to(@subject, color) 14 | end 15 | end 16 | 17 | should "be able to strip colors" do 18 | assert_equal "hello", @subject.strip(@subject.yellow(@subject.red("hello"))) 19 | end 20 | 21 | should "be able to detect colors" do 22 | assert @subject.has?(@subject.yellow("hello")) 23 | end 24 | end 25 | end 26 | -------------------------------------------------------------------------------- /docs/_posts/2014-03-24-jekyll-1-5-0-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 1.5.0 Released' 3 | date: 2014-03-24 20:37:59 -0400 4 | author: parkr 5 | version: 1.5.0 6 | category: release 7 | --- 8 | 9 | As work continues on Jekyll 2.0.0, we felt it was important to address two key 10 | issues of Jekyll 1.4.3, namely the `safe_yaml` dependency below 1.0 and the 11 | inability to use Jekyll 1.4.3 on Windows due to a [fun issue with path sanitizing][]. 12 | 13 | For a full changelog, check out our [history][] page. 14 | 15 | Now, back to work on 2.0.0! 16 | 17 | [fun issue with path sanitizing]: https://github.com/jekyll/jekyll/issues/1948 18 | [history]: /docs/history/#v1-5-0 19 | -------------------------------------------------------------------------------- /docs/_posts/2016-05-19-jekyll-3-1-6-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 3.1.6 Released' 3 | date: 2016-05-19 12:48:14 -0700 4 | author: parkr 5 | version: 3.1.6 6 | category: release 7 | --- 8 | 9 | Upon releasing 3.1.5 and kicking the tires, we noticed a glaring bug: our 10 | beloved `jsonify` filter doesn't work! With that, our work was cut out for 11 | us and we decided a 3.1.6 was necessary. This release restores sanity to 12 | our object-to-JSON generation in Liquid and we hope you enjoy. 13 | 14 | For the gory details, see [the pull 15 | request](https://github.com/jekyll/jekyll/pull/4914) or [the 16 | changelog](/docs/history/#v3-1-6). 17 | 18 | Happy Jekylling! 19 | -------------------------------------------------------------------------------- /rake/rubocop.rake: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | namespace :rubocop do 4 | desc "Format existing `.rubocop.yml` to improve readability" 5 | task :format_config do 6 | require_relative "./task_utils/rubocop_config_formatter" 7 | 8 | config_file = File.expand_path("../.rubocop.yml", __dir__) 9 | if File.exist?(config_file) 10 | print " Configuration File: " 11 | puts config_file 12 | puts "formating...".rjust(20) 13 | else 14 | puts "#{config_file} not found! Exiting." 15 | exit! 16 | end 17 | 18 | Jekyll::TaskUtils::RuboCopConfigFormatter.new(config_file).format! 19 | puts "done!".rjust(26) 20 | end 21 | end 22 | -------------------------------------------------------------------------------- /docs/_docs/configuration/webrick.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: WEBrick Options 3 | permalink: "/docs/configuration/webrick/" 4 | --- 5 | You can provide custom headers for your site by adding them to `_config.yml` 6 | 7 | ```yaml 8 | # File: _config.yml 9 | webrick: 10 | headers: 11 | My-Header: My-Value 12 | My-Other-Header: My-Other-Value 13 | ``` 14 | 15 | ### Defaults 16 | 17 | Jekyll provides by default `Content-Type` and `Cache-Control` response 18 | headers: one dynamic in order to specify the nature of the data being served, 19 | the other static in order to disable caching so that you don't have to fight 20 | with Chrome's aggressive caching when you are in development mode. 21 | -------------------------------------------------------------------------------- /script/branding: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | echo " ---------------------------------------------------------- " 4 | echo " _ ______ _ __ __ __ _ _ " 5 | echo " | | | ____| | |/ / \ \ / / | | | | " 6 | echo " | | | |__ | ' / \ \_/ / | | | | " 7 | echo " _ | | | __| | < \ / | | | | " 8 | echo " | |__| | | |____ | . \ | | | |____ | |____ " 9 | echo " \____/ |______| |_|\_\ |_| |______| |______| " 10 | echo " " 11 | echo " ---------------------------------------------------------- " 12 | -------------------------------------------------------------------------------- /lib/jekyll/page_excerpt.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module Jekyll 4 | class PageExcerpt < Excerpt 5 | attr_reader :doc 6 | alias_method :id, :relative_path 7 | 8 | EXCERPT_ATTRIBUTES = (Page::ATTRIBUTES_FOR_LIQUID - %w(excerpt)).freeze 9 | private_constant :EXCERPT_ATTRIBUTES 10 | 11 | def to_liquid 12 | @to_liquid ||= doc.to_liquid(EXCERPT_ATTRIBUTES) 13 | end 14 | 15 | def render_with_liquid? 16 | return false if data["render_with_liquid"] == false 17 | 18 | Jekyll::Utils.has_liquid_construct?(content) 19 | end 20 | 21 | def inspect 22 | "#<#{self.class} id=#{id.inspect}>" 23 | end 24 | end 25 | end 26 | -------------------------------------------------------------------------------- /docs/_posts/2016-04-19-jekyll-3-1-3-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 3.1.3 Released' 3 | date: 2016-04-19 10:26:16 -0700 4 | author: parkr 5 | version: 3.1.3 6 | category: release 7 | --- 8 | 9 | v3.1.3 is a patch release which fixes the follow two issues: 10 | 11 | - Front matter defaults may not have worked for collection documents and posts due to a problem where they were looked up by their URL rather than their path relative to the site source 12 | - Running `jekyll serve` with SSL enabled was broken due to a bad configuration. 13 | 14 | Both of these issues have been resolved. For more information, check out [the full history](/docs/history/#v3-1-3). 15 | 16 | Happy Jekylling! 17 | -------------------------------------------------------------------------------- /lib/jekyll/drops/jekyll_drop.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module Jekyll 4 | module Drops 5 | class JekyllDrop < Liquid::Drop 6 | class << self 7 | def global 8 | @global ||= JekyllDrop.new 9 | end 10 | end 11 | 12 | def version 13 | Jekyll::VERSION 14 | end 15 | 16 | def environment 17 | Jekyll.env 18 | end 19 | 20 | def to_h 21 | @to_h ||= { 22 | "version" => version, 23 | "environment" => environment, 24 | } 25 | end 26 | 27 | def to_json(state = nil) 28 | JSON.generate(to_h, state) 29 | end 30 | end 31 | end 32 | end 33 | -------------------------------------------------------------------------------- /docs/_posts/2016-01-20-jekyll-3-0-2-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 3.0.2 Released' 3 | date: 2016-01-20 14:08:18 -0800 4 | author: parkr 5 | version: 3.0.2 6 | category: release 7 | --- 8 | 9 | A crucial bug was found in v3.0.1 which caused invalid post dates to go 10 | unnoticed in the build chain until the error that popped up was unhelpful. 11 | v3.0.2 [throws errors as you'd expect](https://github.com/jekyll/jekyll/issues/4375) 12 | when there is a post like `_posts/2016-22-01-future.md` or a post has an 13 | invalid date like `date: "tuesday"` in their front matter. 14 | 15 | This should make the experience of working with Jekyll just a little 16 | better. 17 | 18 | Happy Jekylling! 19 | -------------------------------------------------------------------------------- /docs/_posts/2019-07-02-jekyll-3-8-6-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 3.8.6 Released' 3 | date: 2019-07-02 11:21:02 -0400 4 | author: parkr 5 | version: 3.8.6 6 | categories: [release] 7 | --- 8 | 9 | We have another patch release in the 3.8 series! This time, we have one security patch 10 | and a handful of bug patches, including: 11 | 12 | - Filter symlinks from theme gems 13 | - Fix excerpt handling of some Liquid tags 14 | - Handle case where a theme directory doesn't exist 15 | - A few internal optimizations to reduce memory overhead 16 | 17 | ... and a few more! You can check out the patches and see all the details in [the release notes](/docs/history/#v3-8-6) 18 | 19 | Happy Jekylling! 20 | -------------------------------------------------------------------------------- /docs/pages/showcase.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: Showcase 4 | permalink: /showcase/ 5 | redirect_from: 6 | - /docs/sites/ 7 | --- 8 | 9 |

Jekyll powers many company websites; here are a few nice ones:

10 | 11 | 24 | -------------------------------------------------------------------------------- /lib/jekyll/drops/unified_payload_drop.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module Jekyll 4 | module Drops 5 | class UnifiedPayloadDrop < Drop 6 | mutable true 7 | 8 | attr_accessor :content, :page, :layout, :paginator, 9 | :highlighter_prefix, :highlighter_suffix 10 | 11 | def jekyll 12 | JekyllDrop.global 13 | end 14 | 15 | def site 16 | @site_drop ||= SiteDrop.new(@obj) 17 | end 18 | 19 | def theme 20 | @theme_drop ||= ThemeDrop.new(@obj.theme) if @obj.theme 21 | end 22 | 23 | private 24 | 25 | def fallback_data 26 | @fallback_data ||= {} 27 | end 28 | end 29 | end 30 | end 31 | -------------------------------------------------------------------------------- /docs/_layouts/default.html: -------------------------------------------------------------------------------- 1 | {%- include top.html -%} 2 | 3 | 4 | {%- include header.html -%} 5 | 6 | {{- content -}} 7 | 8 | {%- include footer.html -%} 9 | {%- include anchor_links.html -%} 10 | {%- include analytics.html -%} 11 | {%- include search/script.html -%} 12 | 13 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /lib/jekyll/utils/exec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require "open3" 4 | 5 | module Jekyll 6 | module Utils 7 | module Exec 8 | extend self 9 | 10 | # Runs a program in a sub-shell. 11 | # 12 | # *args - a list of strings containing the program name and arguments 13 | # 14 | # Returns a Process::Status and a String of output in an array in 15 | # that order. 16 | def run(*args) 17 | stdin, stdout, stderr, process = Open3.popen3(*args) 18 | out = stdout.read.strip 19 | err = stderr.read.strip 20 | 21 | [stdin, stdout, stderr].each(&:close) 22 | [process.value, out + err] 23 | end 24 | end 25 | end 26 | end 27 | -------------------------------------------------------------------------------- /lib/jekyll/readers/static_file_reader.rb: -------------------------------------------------------------------------------- 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 26 | -------------------------------------------------------------------------------- /docs/_includes/docs_contents_mobile.html: -------------------------------------------------------------------------------- 1 |
2 | 15 |
16 | -------------------------------------------------------------------------------- /docs/_posts/2014-12-22-jekyll-2-5-3-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll Release for the Holidays! v2.5.3 Out' 3 | date: 2014-12-22 09:03:30 -0500 4 | author: parkr 5 | version: 2.5.3 6 | category: release 7 | --- 8 | 9 | Happy Holidays, everyone. 10 | 11 | Jekyll v2.5.3 is a quick patch release, containing some minor fixes. See the 12 | [full history](/docs/history/) for more info. If you notice any problems, 13 | please [let us know]({{ site.repository }}). 14 | 15 | This release also marks the start of Jekyll 3 development. I wrote about it 16 | over on my personal blog: [Jekyll 3 — The Road Ahead](https://byparker.com/blog/2014/jekyll-3-the-road-ahead/). 17 | Feel free to chime in over on GitHub. 18 | 19 | Happy Jekylling! 20 | -------------------------------------------------------------------------------- /docs/_includes/docs_contents.html: -------------------------------------------------------------------------------- 1 |
2 | 18 |
19 | -------------------------------------------------------------------------------- /docs/_includes/tutorials_contents_mobile.html: -------------------------------------------------------------------------------- 1 |
2 | 14 |
-------------------------------------------------------------------------------- /benchmark/local-require: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | require 'benchmark/ips' 5 | require 'jekyll' 6 | require 'json' 7 | 8 | DATA = {"foo"=>"bar", "alpha"=>{"beta"=>"gamma"}, "lipsum"=>["lorem", "ipsum", "dolor"]} 9 | 10 | def local_require 11 | require 'json' 12 | JSON.pretty_generate(DATA) 13 | end 14 | 15 | def global_require 16 | JSON.pretty_generate(DATA) 17 | end 18 | 19 | def graceful_require 20 | Jekyll::External.require_with_graceful_fail("json") 21 | JSON.pretty_generate(DATA) 22 | end 23 | 24 | Benchmark.ips do |x| 25 | x.report("local-require") { local_require } 26 | x.report("global-require") { global_require } 27 | x.report("graceful-require") { graceful_require } 28 | x.compare! 29 | end 30 | -------------------------------------------------------------------------------- /script/rubyprof: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require "ruby-prof" 4 | require File.expand_path("../lib/jekyll", __dir__) 5 | 6 | result = RubyProf.profile do 7 | Jekyll::Commands::Build.process({ 8 | "source" => File.expand_path("../docs", __dir__), 9 | "destination" => File.expand_path("../docs/_site", __dir__), 10 | }) 11 | end 12 | 13 | puts "\nProcessing result.." 14 | 15 | dir_path = File.expand_path("../tmp", __dir__) 16 | file_path = File.join(dir_path, "rubyprof-#{Time.now.strftime('%Y%m%d%H%M%S')}") 17 | 18 | FileUtils.mkdir_p(dir_path) unless Dir.exist?(dir_path) 19 | File.open(file_path, "wb") do |file| 20 | RubyProf::FlatPrinter.new(result).print(file) 21 | end 22 | 23 | puts "Profile result printed to #{file_path.cyan}" 24 | -------------------------------------------------------------------------------- /benchmark/end-with-vs-regexp: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'benchmark/ips' 3 | 4 | Benchmark.ips do |x| 5 | path_without_ending_slash = '/some/very/very/long/path/to/a/file/i/like' 6 | x.report('no slash regexp') { path_without_ending_slash =~ /\/$/ } 7 | x.report('no slash end_with?') { path_without_ending_slash.end_with?("/") } 8 | x.report('no slash [-1, 1]') { path_without_ending_slash[-1, 1] == "/" } 9 | end 10 | 11 | Benchmark.ips do |x| 12 | path_with_ending_slash = '/some/very/very/long/path/to/a/file/i/like/' 13 | x.report('slash regexp') { path_with_ending_slash =~ /\/$/ } 14 | x.report('slash end_with?') { path_with_ending_slash.end_with?("/") } 15 | x.report('slash [-1, 1]') { path_with_ending_slash[-1, 1] == "/" } 16 | end 17 | -------------------------------------------------------------------------------- /docs/_posts/2013-09-14-jekyll-1-2-1-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 1.2.1 Released' 3 | date: 2013-09-14 20:46:50 -0400 4 | author: parkr 5 | version: 1.2.1 6 | category: release 7 | --- 8 | 9 | Quick turnover, anyone? A [recent incompatibility with Liquid 10 | v2.5.2](https://github.com/jekyll/jekyll/pull/1525) produced a nasty bug in 11 | which `include` tags were not rendered properly within `if` blocks. 12 | 13 | This release also includes a better handling of detached servers (prints pid and 14 | the command for killing the process). **Note**: the `--detach` flag and 15 | `--watch` flags are presently incompatible in 1.2.x. Fix for that coming soon! 16 | 17 | For a full list of the fixes in this release, check out [the change 18 | log](/docs/history/)! 19 | -------------------------------------------------------------------------------- /lib/theme_template/theme.gemspec.erb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | Gem::Specification.new do |spec| 4 | spec.name = <%= theme_name.inspect %> 5 | spec.version = "0.1.0" 6 | spec.authors = [<%= user_name.inspect %>] 7 | spec.email = [<%= user_email.inspect %>] 8 | 9 | spec.summary = "TODO: Write a short summary, because Rubygems requires one." 10 | spec.homepage = "TODO: Put your gem's website or public repo URL here." 11 | spec.license = "MIT" 12 | 13 | spec.files = `git ls-files -z`.split("\x0").select { |f| f.match(%r!^(<%= theme_directories.join("|") %>|LICENSE|README|_config\.yml)!i) } 14 | 15 | spec.add_runtime_dependency "jekyll", "~> <%= jekyll_version_with_minor %>" 16 | end 17 | -------------------------------------------------------------------------------- /benchmark/sanitize-url.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require "benchmark/ips" 4 | 5 | PATH = "/../../..../...//.....//lorem/ipsum//dolor///sit.xyz" 6 | 7 | def sanitize_with_regex 8 | "/" + PATH.gsub(%r!/{2,}!, "/").gsub(%r!\.+/|\A/+!, "") 9 | end 10 | 11 | def sanitize_with_builtin 12 | "/#{PATH}".gsub("..", "/").gsub("./", "").squeeze("/") 13 | end 14 | 15 | if sanitize_with_regex == sanitize_with_builtin 16 | Benchmark.ips do |x| 17 | x.report("sanitize w/ regexes") { sanitize_with_regex } 18 | x.report("sanitize w/ builtin") { sanitize_with_builtin } 19 | x.compare! 20 | end 21 | else 22 | puts "w/ regexes: #{sanitize_with_regex}" 23 | puts "w/ builtin: #{sanitize_with_builtin}" 24 | puts "" 25 | puts "Thank you. Do try again :(" 26 | end 27 | -------------------------------------------------------------------------------- /docs/_posts/2018-05-18-jekyll-3-8-2-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 3.8.2 Released' 3 | date: 2018-05-19 10:30:00 -0500 4 | author: pathawks 5 | version: 3.8.2 6 | category: release 7 | --- 8 | 9 | Hello Jekyllers!! 10 | 11 | Today we are releasing `v3.8.2`, which fixes the way Jekyll generates excerpts 12 | for posts when the first paragraph of the post contains Liquid tags that take 13 | advantage of [Liquid's whitespace control feature][Liquid whitespace]. 14 | 15 | Big thanks to @kylebarbour, who first reported this issue and also very quickly 16 | submitted a fix. Also thanks to @nickskalkin for making sure that we are using 17 | the latest version of Rubocop to lint our code. 18 | 19 | [Liquid whitespace]: https://shopify.github.io/liquid/basics/whitespace/ 20 | -------------------------------------------------------------------------------- /lib/jekyll/readers/page_reader.rb: -------------------------------------------------------------------------------- 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 26 | -------------------------------------------------------------------------------- /lib/jekyll/utils/thread_event.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module Jekyll 4 | module Utils 5 | # Based on the pattern and code from 6 | # https://emptysqua.re/blog/an-event-synchronization-primitive-for-ruby/ 7 | class ThreadEvent 8 | attr_reader :flag 9 | 10 | def initialize 11 | @lock = Mutex.new 12 | @cond = ConditionVariable.new 13 | @flag = false 14 | end 15 | 16 | def set 17 | @lock.synchronize do 18 | yield if block_given? 19 | @flag = true 20 | @cond.broadcast 21 | end 22 | end 23 | 24 | def wait 25 | @lock.synchronize do 26 | @cond.wait(@lock) unless @flag 27 | end 28 | end 29 | end 30 | end 31 | end 32 | -------------------------------------------------------------------------------- /test/source/_encodings/UTF8CRLFandBOM.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "UTF8CRLFandBOM" 4 | date: 2017-04-05 16:16:01 -0800 5 | categories: bom 6 | --- 7 | This file was created with CR/LFs, and encoded as UTF8 with a BOM 8 | 9 | You’ll find this post in your `_posts` directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run `bundle exec jekyll serve`, which launches a web server and auto-regenerates your site when a file is updated. 10 | 11 | To add new posts, simply add a file in the `_posts` directory that follows the convention `YYYY-MM-DD-name-of-post.ext` and includes the necessary front matter. Take a look at the source for this post to get an idea about how it works. 12 | -------------------------------------------------------------------------------- /test/source/_slides/example-slide-6.html: -------------------------------------------------------------------------------- 1 | --- 2 | slug: Well, so what is Jekyll, then? 3 | layout: slide 4 | --- 5 | 6 | Jekyll is a simple, blog-aware, static site generator. It takes a template 7 | directory containing raw text files in various formats, runs it through 8 | [Markdown](http://daringfireball.net/projects/markdown/) (or 9 | [Textile](http://redcloth.org/textile)) and 10 | [Liquid](https://help.shopify.com/themes/liquid/basics) 11 | converters, and spits out a complete, ready-to-publish static website suitable 12 | for serving with your favorite web server. Jekyll also happens to be the engine 13 | behind [GitHub Pages](https://pages.github.com/), which means you can use Jekyll 14 | to host your project’s page, blog, or website from GitHub’s servers **for 15 | free**. 16 | -------------------------------------------------------------------------------- /test/source/_posts/2013-12-17-include-variable-filters.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: Post 3 | layout: post 4 | include1: include.html 5 | include2: include 6 | include3: INCLUDE 7 | include4: params 8 | include5: clude 9 | --- 10 | 11 | Liquid tests 12 | - 1 {% include {{ page.include1 }} %} 13 | - 2 {% include {{ page.include2 | append: '.html' }} %} 14 | - 3 {% include {{ page.include3 | downcase | append: '.html' }} %} 15 | 16 | Whitespace tests 17 | - 4 {% include {{page.include1}} %} 18 | - 5 {% include {{ page.include1}} %} 19 | - 6 {% include {{ page.include3 | downcase | append: '.html'}} %} 20 | 21 | Parameters test 22 | - 7 {% include {{ page.include4 | append: '.html' }} var1='foo' var2='bar' %} 23 | 24 | Partial variable test 25 | - 8 {% include in{{ page.include5 }}.html %} 26 | -------------------------------------------------------------------------------- /test/source/_slides/example-slide-4.html: -------------------------------------------------------------------------------- 1 | --- 2 | slug: so-what-is-jekyll-exactly 3 | layout: slide 4 | --- 5 | 6 | Jekyll is a simple, blog-aware, static site generator. It takes a template 7 | directory containing raw text files in various formats, runs it through 8 | [Markdown](https://daringfireball.net/projects/markdown/) (or 9 | [Textile](https://www.promptworks.com/textile)) and 10 | [Liquid](https://help.shopify.com/themes/liquid/basics) 11 | converters, and spits out a complete, ready-to-publish static website suitable 12 | for serving with your favorite web server. Jekyll also happens to be the engine 13 | behind [GitHub Pages](https://pages.github.com/), which means you can use Jekyll 14 | to host your project’s page, blog, or website from GitHub’s servers **for 15 | free**. 16 | -------------------------------------------------------------------------------- /lib/jekyll/errors.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module Jekyll 4 | module Errors 5 | FatalException = Class.new(::RuntimeError) 6 | 7 | InvalidThemeName = Class.new(FatalException) 8 | 9 | DropMutationException = Class.new(FatalException) 10 | InvalidPermalinkError = Class.new(FatalException) 11 | InvalidYAMLFrontMatterError = Class.new(FatalException) 12 | MissingDependencyException = Class.new(FatalException) 13 | 14 | InvalidDateError = Class.new(FatalException) 15 | InvalidPostNameError = Class.new(FatalException) 16 | PostURLError = Class.new(FatalException) 17 | InvalidURLError = Class.new(FatalException) 18 | InvalidConfigurationError = Class.new(FatalException) 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /test/test_command.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require "helper" 4 | 5 | class TestCommand < JekyllUnitTest 6 | context "when calling .add_build_options" do 7 | should "add common options" do 8 | cmd = Object.new 9 | mocks_expect(cmd).to receive(:option).at_least(:once) 10 | Command.add_build_options(cmd) 11 | end 12 | end 13 | 14 | context "when calling .process_site" do 15 | context "when fatal error occurs" do 16 | should "exit with non-zero error code" do 17 | site = Object.new 18 | def site.process 19 | raise Jekyll::Errors::FatalException 20 | end 21 | error = assert_raises(SystemExit) { Command.process_site(site) } 22 | refute_equal 0, error.status 23 | end 24 | end 25 | end 26 | end 27 | -------------------------------------------------------------------------------- /script/proof: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # Usage: 4 | # script/proof 5 | 6 | set -e 7 | 8 | function msg { 9 | printf "\e[0;37m==> $1\e[0m\n" 10 | } 11 | 12 | IGNORE_HREFS=$(ruby -e 'puts %w{ 13 | Chrononaut 14 | twitter.com 15 | nearlyfreespeech.net 16 | eduardoboucas.com 17 | github.com\/matrix9180 18 | }.map{|h| "/#{h}/"}.join(",")') 19 | SOURCE="docs" 20 | DESTINATION="_site" 21 | 22 | export PROOF=true 23 | export NOKOGIRI_USE_SYSTEM_LIBRARIES=true 24 | 25 | # 1. 26 | msg "Installing..." 27 | bundle install -j8 > /dev/null || bundle install > /dev/null 28 | 29 | # 2. 30 | msg "Building..." 31 | bundle exec jekyll build -s $SOURCE -d $DESTINATION --trace 32 | 33 | # 3. 34 | msg "Proofing..." 35 | time bundle exec htmlproofer ./$DESTINATION --allow-hash-href --url-ignore $IGNORE_HREFS $@ 36 | -------------------------------------------------------------------------------- /docs/_docs/liquid.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Liquid 3 | permalink: /docs/liquid/ 4 | redirect_from: "/docs/templates/" 5 | --- 6 | 7 | Jekyll uses the [Liquid](https://shopify.github.io/liquid/) templating language 8 | to process templates. 9 | 10 | Generally in Liquid you output content using two curly braces e.g. 11 | {% raw %}`{{ variable }}`{% endraw %} and perform logic statements by 12 | surrounding them in a curly brace percentage sign e.g. 13 | {% raw %}`{% if statement %}`{% endraw %}. To learn more about Liquid, check 14 | out the [official Liquid Documentation](https://shopify.github.io/liquid/). 15 | 16 | Jekyll provides a number of useful Liquid additions to help you build your site: 17 | 18 | * [Filters]({{ '/docs/liquid/filters/' | relative_url }}) 19 | * [Tags]({{ '/docs/liquid/tags/' | relative_url }}) 20 | -------------------------------------------------------------------------------- /docs/_posts/2014-06-04-jekyll-stickers-1-dollar-stickermule.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Pick Up your $1 Jekyll Sticker' 3 | date: 2014-06-04 15:46:53 -0400 4 | author: parkr 5 | categories: [partners] 6 | --- 7 | 8 | ![Jekyll Sticker](/img/jekyll-sticker.png) 9 | 10 | You may have heard that [@cobyism](https://github.com/cobyism)'s excellent 11 | Jekyll logo has been made into a sticker. You may have sat idly by, wishing 12 | that you could have a sticker honoring your beloved Jekyll. 13 | 14 | The StickerMule team says, *"Pine no longer!"* StickerMule has **[discounted the 15 | price of Jekyll stickers down to $1 and are offering free (domestic) 16 | shipping](https://www.stickermule.com/marketplace/825-jekyll-stickers)!** 17 | Go grab one now on the StickerMule marketplace – they'll look 18 | swell on your favourite hardware. 19 | -------------------------------------------------------------------------------- /docs/readme.md: -------------------------------------------------------------------------------- 1 | # Jekyll docs site 2 | 3 | This directory contains the code for the Jekyll docs site, [jekyllrb.com](https://jekyllrb.com/). 4 | 5 | ## Contributing 6 | 7 | For information about contributing, see the [Contributing page](https://jekyllrb.com/docs/contributing/). 8 | 9 | ## Running locally 10 | 11 | You can preview your contributions before opening a pull request by running from within the directory: 12 | 13 | 1. `bundle install --without test test_legacy benchmark` 14 | 2. `bundle exec rake site:preview` 15 | 16 | It's just a jekyll site, afterall! :wink: 17 | 18 | ## Updating Font Awesome 19 | 20 | 1. Go to 21 | 2. Choose Import Icons and load `icomoon-selection.json` 22 | 3. Choose Generate Font → Download 23 | 4. Copy the font files and adapt the CSS to the paths we use in Jekyll 24 | -------------------------------------------------------------------------------- /docs/_posts/2014-03-27-jekyll-1-5-1-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 1.5.1 Released' 3 | date: 2014-03-27 22:43:48 -0400 4 | author: parkr 5 | version: 1.5.1 6 | category: release 7 | --- 8 | 9 | The hawk-eyed [@gregose](https://github.com/gregose) spotted a bug in our 10 | `Jekyll.sanitized_path` code: 11 | 12 | {% highlight ruby %} 13 | > sanitized_path("/tmp/foobar/jail", "..c:/..c:/..c:/etc/passwd") 14 | => "/tmp/foobar/jail/../../../etc/passwd" 15 | {% endhighlight %} 16 | 17 | Well, we can't have that! In 1.5.1, you'll instead see: 18 | 19 | {% highlight ruby %} 20 | > sanitized_path("/tmp/foobar/jail", "..c:/..c:/..c:/etc/passwd") 21 | => "/tmp/foobar/jail/..c:/..c:/..c:/etc/passwd" 22 | {% endhighlight %} 23 | 24 | Luckily not affecting 1.4.x, this fix will make 1.5.0 that much safer for 25 | the masses. Thanks, Greg! 26 | -------------------------------------------------------------------------------- /docs/pages/team.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: The Jekyll Team 4 | permalink: /team/ 5 | --- 6 | 7 | ## Core Team 8 | 9 | _The Jekyll Core Team's responsibility is to ensure the development and 10 | community around the Jekyll ecosystem thrive._ 11 | 12 | * Ashwin (@ashmaroli) 13 | * Matt (@mattr-) 14 | 15 | ## Security Team 16 | 17 | _The Jekyll Security Team's responsibility is to triage, validate, and 18 | patch security vulnerabilities reported to them._ 19 | 20 | * Parker (@parkr) 21 | * Ashwin (@ashmaroli) 22 | * Matt (@mattr-) 23 | 24 | ## Emeritus Core Team Members 25 | 26 | _Emeritus Core Team Members were once members of Jekyll's Core Team._ 27 | 28 | * Alfred (@alfredxing) 29 | * Ben (@benbalter) 30 | * Frank (@DirtyF) 31 | * Nick (@qrush) 32 | * Olivia 33 | * Parker (@parkr) 34 | * Pat (@pathawks) 35 | * Tom (@mojombo) 36 | -------------------------------------------------------------------------------- /docs/_posts/2022-10-26-jekyll-4-3-1-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 4.3.1 Released' 3 | date: 2022-10-26 19:09:42 +0530 4 | author: ashmaroli 5 | version: 4.3.1 6 | category: release 7 | --- 8 | 9 | Hello Jekyllers! 10 | 11 | We're shipping `v4.3.1` containing fixes for two issues with v4.3.0: 12 | - Jekyll now respects user-defined `name` attribute for collection documents when accessed in Liquid templates. 13 | - Revert the changes made to trigger incremental rebuilds when data files are changed. 14 | 15 | Thanks to the users who took the time to report the issues to us. 16 | Happy Jekyllin' 17 | 18 | P.S. Development towards v5 has taken a back seat as of now. I plan on releasing a v4.4.0 instead. 19 | That said, please feel free to comment on the [tentative roadmap to v5][roadmap]. 20 | 21 | [roadmap]: {{ site.repository }}/issues/9156 22 | -------------------------------------------------------------------------------- /lib/theme_template/example/_post.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | --- 4 | 5 | Eos eu docendi tractatos sapientem, brute option menandri in vix, quando vivendo accommodare te ius. Nec melius fastidii constituam id, viderer theophrastus ad sit, hinc semper periculis cum id. Noluisse postulant assentior est in, no choro sadipscing repudiandae vix. Vis in euismod delenit dignissim. Ex quod nostrum sit, suas decore animal id ius, nobis solet detracto quo te. 6 | 7 | {% comment %} 8 | Might you have an include in your theme? Why not try it here! 9 | {% include my-themes-great-include.html %} 10 | {% endcomment %} 11 | 12 | No laudem altera adolescens has, volumus lucilius eum no. Eam ei nulla audiam efficiantur. Suas affert per no, ei tale nibh sea. Sea ne magna harum, in denique scriptorem sea, cetero alienum tibique ei eos. Labores persequeris referrentur eos ei. 13 | -------------------------------------------------------------------------------- /lib/jekyll/inclusion.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module Jekyll 4 | class Inclusion 5 | attr_reader :site, :name, :path 6 | private :site 7 | 8 | def initialize(site, base, name) 9 | @site = site 10 | @name = name 11 | @path = PathManager.join(base, name) 12 | end 13 | 14 | def render(context) 15 | @template ||= site.liquid_renderer.file(path).parse(content) 16 | @template.render!(context) 17 | rescue Liquid::Error => e 18 | e.template_name = path 19 | e.markup_context = "included " if e.markup_context.nil? 20 | raise e 21 | end 22 | 23 | def content 24 | @content ||= File.read(path, **site.file_read_opts) 25 | end 26 | 27 | def inspect 28 | "#{self.class} #{path.inspect}" 29 | end 30 | alias_method :to_s, :inspect 31 | end 32 | end 33 | -------------------------------------------------------------------------------- /docs/_posts/2013-11-26-jekyll-1-3-1-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 1.3.1 Released' 3 | date: 2013-11-26 19:52:20 -0600 4 | author: mattr- 5 | version: 1.3.1 6 | category: release 7 | --- 8 | 9 | Just in time for the US holiday Thanksgiving, we're releasing version 10 | 1.3.1 of Jekyll to address some of the issues seen since the 11 | release of 1.3.0. 12 | 13 | In addition to a couple of other smaller bug fixes, the biggest thing 14 | we've fixed is an issue with the `--watch` option with Ruby 1.8.7. For a 15 | full run-down, visit our [change log](/docs/history/)! 16 | 17 | Thanks to all the people who have contributed to this release! They are 18 | (in alphabetical order): Abhi Yerra, Anatol Broder, Andreas Möller, Greg 19 | Karékinian, Sam Rayner, Santeri Paavolainen, Shigeya Suzuki, Yihang Ho, 20 | albertogg, andrewhavens, maul.esel, and thomasdao 21 | -------------------------------------------------------------------------------- /docs/_sass/_font-awesome.scss: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'FontAwesome'; 3 | font-weight: normal; 4 | font-style: normal; 5 | font-display: swap; 6 | src: url('../fonts/FontAwesome.eot?9h6hxj'); 7 | src: url('../fonts/FontAwesome.eot?9h6hxj#iefix') format('embedded-opentype'), 8 | url('../fonts/FontAwesome.woff?9h6hxj') format('woff'), 9 | url('../fonts/FontAwesome.ttf?9h6hxj') format('truetype'), 10 | url('../fonts/FontAwesome.svg?9h6hxj#FontAwesome') format('svg'); 11 | } 12 | 13 | .fa { 14 | display: inline-block; 15 | font: normal normal normal 14px/1 FontAwesome; 16 | font-size: inherit; 17 | text-rendering: auto; 18 | -webkit-font-smoothing: antialiased; 19 | -moz-osx-font-smoothing: grayscale; 20 | } 21 | 22 | .fa-link:before { 23 | content: "\f0c1"; 24 | } 25 | 26 | .fa-pencil:before { 27 | content: "\f040"; 28 | } 29 | -------------------------------------------------------------------------------- /script/default-site: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Runs the `jekyll new` command and builds the default site as a sanity check 3 | # Additional flags for `jekyll new` may be passed to this script. 4 | 5 | set -e 6 | 7 | TMP_SOURCE="tmp/default-site" 8 | 9 | echo "$0: setting up tmp directory" 10 | mkdir -p ./tmp 11 | rm -Rf "./$TMP_SOURCE" 12 | 13 | echo "$0: creating new default site" 14 | bundle exec jekyll new "$TMP_SOURCE" "$@" 15 | pushd "$TMP_SOURCE" 16 | 17 | echo "$0: respecifying the jekyll install location" 18 | ruby -e "contents = File.read('Gemfile'); File.write('Gemfile', contents.sub(/gem \"jekyll\".*\\n/, 'gem \"jekyll\", path: \"../../\"'))" 19 | echo "$0: installing default site dependencies" 20 | BUNDLE_GEMFILE=Gemfile bundle install 21 | echo "$0: building the default site" 22 | BUNDLE_GEMFILE=Gemfile bundle exec jekyll build --verbose --profile 23 | popd 24 | -------------------------------------------------------------------------------- /docs/_posts/2015-01-20-jekyll-meet-and-greet.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Jekyll Meet & Greet at GitHub HQ" 3 | date: "2015-01-20 19:23:12 -0800" 4 | author: parkr 5 | categories: [meetup] 6 | --- 7 | 8 | Hey! Our friends at GitHub have agreed to host a Jekyll meet & greet on 9 | **February 5, 2015 at 7pm**. The event will be hosted at 10 | [GitHub's Headquarters](https://goo.gl/maps/Bmy7i) 11 | here in San Francisco, CA. Pizza & beer will be available for those interested, 12 | and there will be much time to sit and chat about all things Jekyll. This would 13 | be an especially good time to get help with bugs you've encountered or to talk 14 | over a potential feature with the core team in attendance. 15 | 16 | A special thanks to [@gjtorikian](https://github.com/gjtorikian) for making this 17 | all possible! You rock. 18 | 19 | We look forward to meeting all you fine folks. Cheers! 20 | -------------------------------------------------------------------------------- /docs/_posts/2018-05-01-jekyll-3-8-1-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 3.8.1 Released' 3 | date: 2018-05-01 11:56:01 -0500 4 | author: pathawks 5 | version: 3.8.1 6 | category: release 7 | --- 8 | 9 | Happy May Day :tada: 10 | 11 | The Jekyll team is happy to announce the release of `v3.8.1`, which fixes 12 | a couple of bugs that were introduced two weeks ago in `v3.8.0`. If you have 13 | experienced trouble regarding post excerpts or non-published posts, this release 14 | should be the remedy. Thanks to @Chaosed0 and @domLocalHeroes for originally 15 | reporting these issues, and to @ashmaroli for fixing them so quickly. 16 | 17 | As a reminder, we have started work on Jekyll 4.0. If there are any 18 | features that you would love to see added to Jekyll, or any pain points you 19 | would like to see removed, please do add your ideas to the [Jekyll 4.0 idea 20 | list](https://github.com/jekyll/jekyll/issues/6948). 21 | -------------------------------------------------------------------------------- /lib/jekyll/drops/theme_drop.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module Jekyll 4 | module Drops 5 | class ThemeDrop < Drop 6 | delegate_method_as :runtime_dependencies, :dependencies 7 | 8 | def root 9 | @root ||= ENV["JEKYLL_ENV"] == "development" ? @obj.root : "" 10 | end 11 | 12 | def authors 13 | @authors ||= gemspec.authors.join(", ") 14 | end 15 | 16 | def version 17 | @version ||= gemspec.version.to_s 18 | end 19 | 20 | def description 21 | @description ||= gemspec.description || gemspec.summary 22 | end 23 | 24 | def metadata 25 | @metadata ||= gemspec.metadata 26 | end 27 | 28 | private 29 | 30 | def gemspec 31 | @gemspec ||= @obj.send(:gemspec) 32 | end 33 | 34 | def fallback_data 35 | @fallback_data ||= {} 36 | end 37 | end 38 | end 39 | end 40 | -------------------------------------------------------------------------------- /script/console: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require 'pry' 4 | $LOAD_PATH.unshift File.expand_path("../lib", __dir__) 5 | require 'jekyll' 6 | 7 | TEST_DIR = File.expand_path("../test", __dir__) 8 | 9 | def fixture_site(overrides = {}) 10 | Jekyll::Site.new(site_configuration(overrides)) 11 | end 12 | 13 | def build_configs(overrides, base_hash = Jekyll::Configuration::DEFAULTS) 14 | Jekyll::Utils.deep_merge_hashes(base_hash, overrides) 15 | end 16 | 17 | def site_configuration(overrides = {}) 18 | build_configs({ 19 | "source" => source_dir, 20 | "destination" => dest_dir 21 | }, build_configs(overrides)) 22 | end 23 | 24 | def dest_dir(*subdirs) 25 | test_dir('dest', *subdirs) 26 | end 27 | 28 | def source_dir(*subdirs) 29 | test_dir('source', *subdirs) 30 | end 31 | 32 | def test_dir(*subdirs) 33 | File.join(TEST_DIR, *subdirs) 34 | end 35 | 36 | module Jekyll 37 | binding.pry 38 | end 39 | -------------------------------------------------------------------------------- /test/source/_layouts/default.html: -------------------------------------------------------------------------------- 1 | --- 2 | front_matter_var: variable from layout 3 | --- 4 | 6 | 7 | 8 | 9 | 10 | {{ page.title }} 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 |
23 | Tom Preston-Werner 24 |
25 | 26 | {{ content }} 27 |
28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /docs/_includes/footer.html: -------------------------------------------------------------------------------- 1 | 20 | -------------------------------------------------------------------------------- /.rubocop_todo.yml: -------------------------------------------------------------------------------- 1 | # This configuration was generated by 2 | # `rubocop --auto-gen-config --auto-gen-only-exclude` 3 | # on 2022-04-06 10:48:47 UTC using RuboCop version 1.26.1. 4 | # The point is for the user to remove these configuration records 5 | # one by one as the offenses are removed from the code base. 6 | # Note that changes in the inspected code, or installation of new 7 | # versions of RuboCop, may require this file to be generated again. 8 | 9 | # Offense count: 1 10 | # This cop supports safe auto-correction (--auto-correct). 11 | Performance/BindCall: 12 | Exclude: 13 | - 'test/helper.rb' 14 | 15 | # Offense count: 1 16 | Style/CombinableLoops: 17 | Exclude: 18 | - 'lib/jekyll/tags/post_url.rb' 19 | 20 | # Offense count: 1 21 | # Configuration parameters: AllowedMethods. 22 | # AllowedMethods: respond_to_missing? 23 | Style/OptionalBooleanParameter: 24 | Exclude: 25 | - 'lib/jekyll/log_adapter.rb' 26 | -------------------------------------------------------------------------------- /docs/_posts/2013-06-07-jekyll-1-0-3-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Jekyll 1.0.3 Released" 3 | date: "2013-06-07 21:02:13 +0200" 4 | author: parkr 5 | version: 1.0.3 6 | category: release 7 | --- 8 | 9 | v1.0.3 contains some key enhancements and bug fixes: 10 | 11 | - Fail with non-zero exit code when MaRuKu errors ([#1190][]) or Liquid errors ([#1121][]) 12 | - Add support for private gists to `gist` tag ([#1189][]) 13 | - Add `--force` option to `jekyll new` ([#1115][]) 14 | - Fix compatibility with `exclude` and `include` with pre-1.0 Jekyll ([#1114][]) 15 | - Fix pagination issue regarding `File.basename` and `page:num` ([#1063][]) 16 | 17 | See the [History][] page for more information on this release. 18 | 19 | {% assign issue_numbers = "1190|1121|1189|1115|1114|1063" | split: "|" %} 20 | {% for issue in issue_numbers %} 21 | [#{{ issue }}]: {{ site.repository }}/issues/{{ issue }} 22 | {% endfor %} 23 | 24 | [History]: /docs/history/#v1-0-3 25 | -------------------------------------------------------------------------------- /docs/pages/404.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: error 3 | permalink: /404.html 4 | sitemap: false 5 | --- 6 | 7 |
8 |
9 |
10 |

Huh. It seems that page is
Hyde-ing...

11 |
12 |
13 |
14 | 15 |
16 |
17 |
18 |

The resource you requested was not found. Here are some links to help you find your way:

19 | 27 |
28 |
29 |
30 | -------------------------------------------------------------------------------- /test/source/_posts/2018-11-15-excerpt-liquid-block.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: liquid_block excerpt test with open tags in excerpt 3 | layout: post 4 | --- 5 | 6 | {% assign company = "Yoyodyne" %} 7 | {% do_nothing_other %} 8 | {% do_nothing %} 9 | {% unless false %} 10 | {% for i in (1..10) %} 11 | {% if true %} 12 | {% raw %} 13 | EVIL! PURE AND SIMPLE FROM THE EIGHTH DIMENSION! 14 | {% endraw %} 15 | {% elsif false %} 16 | No matter where you go, there you are. 17 | {% break %} 18 | {% else %} 19 | {% case company %} 20 | {% when "Yoyodyne" %} 21 | Buckaroo Banzai 22 | {% else %} 23 | {% continue %} 24 | 25 | {% endcase %} 26 | {% endif %} 27 | {% endfor %} 28 | {% endunless %} 29 | {% enddo_nothing %} 30 | -------------------------------------------------------------------------------- /docs/_docs/installation/ubuntu.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Jekyll on Ubuntu 3 | permalink: /docs/installation/ubuntu/ 4 | --- 5 | 6 | ## Install dependencies 7 | 8 | Install Ruby and other [prerequisites]({{ '/docs/installation/#requirements' | relative_url }}): 9 | 10 | ```sh 11 | sudo apt-get install ruby-full build-essential zlib1g-dev 12 | ``` 13 | 14 | Avoid installing RubyGems packages (called gems) as the root user. Instead, 15 | set up a gem installation directory for your user account. The following 16 | commands will add environment variables to your `~/.bashrc` file to configure 17 | the gem installation path: 18 | 19 | ```sh 20 | echo '# Install Ruby Gems to ~/gems' >> ~/.bashrc 21 | echo 'export GEM_HOME="$HOME/gems"' >> ~/.bashrc 22 | echo 'export PATH="$HOME/gems/bin:$PATH"' >> ~/.bashrc 23 | source ~/.bashrc 24 | ``` 25 | 26 | Finally, install Jekyll and Bundler: 27 | 28 | ```sh 29 | gem install jekyll bundler 30 | ``` 31 | 32 | That's it! You're ready to start using Jekyll. 33 | -------------------------------------------------------------------------------- /docs/_posts/2018-02-25-jekyll-3-7-3-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 3.7.3 Released' 3 | date: 2018-02-25 13:02:08 +0530 4 | author: ashmaroli 5 | version: 3.7.3 6 | category: release 7 | --- 8 | 9 | Hello Jekyllers!! :wave: 10 | 11 | We're pleased to announce the release of `v3.7.3` which fixes a bug one might encounter while using `Jekyll - 3.7.x` along with a 12 | Jekyll plugin that in turn uses the `I18n` library. 13 | 14 | When [v3.7.0]({% link _posts/2018-01-02-jekyll-3-7-0-released.md %}) enhanced our `slugify` filter with a `latin` option, we also 15 | hardcoded a default fallback locale for the `I18n` library to avoid an exception raised in the event the library fails to find 16 | any locale. This led to issues with third-party i18n plugins for Jekyll, especially since the default locale got assigned before 17 | the plugin was loaded, irrespective of whether the `slugify` filter was used. 18 | 19 | Jekyll will henceforth set the default locale if and only if necessary. 20 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release Gem 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | - "*-stable" 8 | paths: 9 | - "lib/**/version.rb" 10 | 11 | jobs: 12 | release: 13 | if: "github.repository_owner == 'jekyll'" 14 | name: "Release Gem (Ruby ${{ matrix.ruby_version }})" 15 | runs-on: "ubuntu-latest" 16 | strategy: 17 | fail-fast: true 18 | matrix: 19 | ruby_version: 20 | - 2.7 21 | steps: 22 | - name: Checkout Repository 23 | uses: actions/checkout@v4 24 | - name: "Set up Ruby ${{ matrix.ruby_version }}" 25 | uses: ruby/setup-ruby@v1 26 | with: 27 | ruby-version: ${{ matrix.ruby_version }} 28 | bundler-cache: true 29 | - name: Build and Publish Gem 30 | uses: ashmaroli/release-gem@dist 31 | with: 32 | gemspec_name: jekyll 33 | env: 34 | GEM_HOST_API_KEY: ${{ secrets.RUBYGEMS_GEM_PUSH_API_KEY }} 35 | -------------------------------------------------------------------------------- /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | // For format details, see https://aka.ms/vscode-remote/devcontainer.json or this file's README at: 2 | // https://github.com/microsoft/vscode-dev-containers/tree/v0.101.1/containers/ruby-2 3 | { 4 | "name": "Ruby 3", 5 | "dockerFile": "Dockerfile", 6 | 7 | // Set *default* container specific settings.json values on container create. 8 | "settings": { 9 | "terminal.integrated.shell.linux": "/bin/bash" 10 | }, 11 | 12 | // Add the IDs of extensions you want installed when the container is created. 13 | "extensions": [ 14 | "rebornix.Ruby" 15 | ], 16 | 17 | // Use 'forwardPorts' to make a list of ports inside the container available locally. 18 | // "forwardPorts": [], 19 | 20 | // Use 'postCreateCommand' to run commands after the container is created. 21 | "postCreateCommand": "bundle install" 22 | 23 | // Uncomment to connect as a non-root user. See https://aka.ms/vscode-remote/containers/non-root. 24 | // "remoteUser": "vscode" 25 | 26 | } 27 | -------------------------------------------------------------------------------- /docs/_includes/header.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

5 | 9 |

10 |
11 | 14 | 17 |
18 | 22 |
23 |
24 | 27 |
28 | -------------------------------------------------------------------------------- /docs/_posts/2016-08-02-jekyll-3-2-1-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 3.2.1 Released with Fix for Windows' 3 | date: 2016-08-02 13:20:11 -0700 4 | author: parkr 5 | version: 3.2.1 6 | category: release 7 | --- 8 | 9 | Well, 3.2.0 has been a success, but with one fatal flaw: it doesn't work on 10 | Windows! Sorry, Windows users. Hot on the trail of 3.2.0, this release 11 | should squash that :bug:. Sorry about that! 12 | 13 | This release also fixes an issue when using [gem-based themes](/docs/themes/) 14 | where the theme was rejected if it existed behind a symlink. This is a 15 | common setup for the various ruby version managers, and for Ruby installed 16 | via Homebrew. Props to @benbalter for fixing that up. 17 | 18 | Thanks to the contributors for this release: Adam Petrie, Ben Balter, 19 | Daniel Chapman, DirtyF, Gary Ewan Park, Jordon Bedwell, and Parker Moore. 20 | 21 | As always, you can see our full changelog on [the History page](/docs/history/). 22 | 23 | Happy Jekylling! 24 | -------------------------------------------------------------------------------- /benchmark/native-vs-pathutil-relative: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | # ------------------------------------------------------------------- 4 | # Benchmarking changes in https://github.com/jekyll/jekyll/pull/6767 5 | # ------------------------------------------------------------------- 6 | 7 | require 'benchmark/ips' 8 | require 'pathutil' 9 | 10 | DOC_PATH = File.join(File.expand_path(__dir__), "_puppies", "rover.md") 11 | COL_PATH = File.join(File.expand_path(__dir__), "_puppies") 12 | 13 | 14 | def pathutil_relative 15 | Pathutil.new(DOC_PATH).relative_path_from(COL_PATH).to_s 16 | end 17 | 18 | def native_relative 19 | DOC_PATH.sub("#{COL_PATH}/", "") 20 | end 21 | 22 | if pathutil_relative == native_relative 23 | Benchmark.ips do |x| 24 | x.report("pathutil") { pathutil_relative } 25 | x.report("native") { native_relative } 26 | x.compare! 27 | end 28 | else 29 | print "PATHUTIL: " 30 | puts pathutil_relative 31 | print "NATIVE: " 32 | puts native_relative 33 | end 34 | -------------------------------------------------------------------------------- /docs/_posts/2016-04-26-jekyll-3-0-5-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 3.0.5 Released' 3 | date: 2016-04-26 17:40:44 -0700 4 | author: parkr 5 | version: 3.0.5 6 | category: release 7 | --- 8 | 9 | This version fixes a bug affecting only v3.0.4 where autoregeneration was 10 | *always* disabled when running Jekyll locally. This feature is a huge 11 | reason why Jekyll (or any static site generator, for that matter) is a joy 12 | to use. Sorry for the regression! 13 | 14 | If you're using GitHub Pages, [you can follow the progress of the upgrade 15 | on the github/pages-gem repo](https://github.com/github/pages-gem/pull/285). 16 | 17 | As always, our [history doc](/docs/history/#v3-0-5) has links to the pull 18 | requests and issues associated with the release for your perusal. 19 | 20 | We're looking forward to the upcoming release of v3.2 which [has some 21 | excellent goodies](https://github.com/jekyll/jekyll/blob/master/History.markdown#head) 22 | we think you'll love. 23 | 24 | Happy Jekylling! 25 | -------------------------------------------------------------------------------- /docs/_includes/news_item.html: -------------------------------------------------------------------------------- 1 |
2 |

3 | 4 | {{- post.title -}} 5 | 6 |

7 | 12 | 22 |
23 | {{- post.content -}} 24 |
25 |
26 | -------------------------------------------------------------------------------- /docs/_posts/2013-07-25-jekyll-1-0-4-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Jekyll 1.0.4 Released" 3 | date: "2013-07-25 09:08:38 +0200" 4 | author: mattr- 5 | version: 1.0.4 6 | category: release 7 | --- 8 | 9 | Version 1.0.4 fixes a minor, but nonetheless important security vulnerability affecting several third-party Jekyll plugins. If your Jekyll site does not use plugins, you may, but are not required to upgrade at this time. 10 | 11 | Community and custom plugins extending the `Liquid::Drop` class may inadvertently disclose some system information such as directory structure or software configuration to users with access to the Liquid templating system. 12 | 13 | We recommend you upgrade to Jekyll v1.0.4 immediately if you use `Liquid::Drop` plugins on your Jekyll site. 14 | 15 | Many thanks for [Ben Balter](https://github.com/benbalter) for alerting us to the problem 16 | and [submitting a patch][1349] so quickly. 17 | 18 | [230]: https://github.com/Shopify/liquid/pull/230 19 | [1349]: {{ site.repository }}/issues/1349 20 | -------------------------------------------------------------------------------- /docs/_posts/2013-07-25-jekyll-1-1-2-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Jekyll 1.1.2 Released" 3 | date: "2013-07-25 09:08:38 +0200" 4 | author: parkr 5 | version: 1.1.2 6 | category: release 7 | --- 8 | 9 | Version 1.1.2 fixes a minor, but nonetheless important security vulnerability affecting several third-party Jekyll plugins. If your Jekyll site does not use plugins, you may, but are not required to upgrade at this time. 10 | 11 | Community and custom plugins extending the `Liquid::Drop` class may inadvertently disclose some system information such as directory structure or software configuration to users with access to the Liquid templating system. 12 | 13 | We recommend you upgrade to Jekyll v1.1.2 immediately if you use `Liquid::Drop` plugins on your Jekyll site. 14 | 15 | Many thanks for [Ben Balter](https://github.com/benbalter) for alerting us to the problem 16 | and [submitting a patch][1349] so quickly. 17 | 18 | [230]: https://github.com/Shopify/liquid/pull/230 19 | [1349]: {{ site.repository }}/issues/1349 20 | -------------------------------------------------------------------------------- /.github/workflows/benchmark.yml: -------------------------------------------------------------------------------- 1 | name: Micro Benchmark Runs 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | path: 7 | description: "Path to benchmark script relative to 'benchmark' directory." 8 | required: true 9 | default: "capture-assign.rb" 10 | ruby_version: 11 | description: "Ruby version to use (via `ruby/setup-ruby@v1`) action." 12 | required: false 13 | default: "2.7" 14 | 15 | jobs: 16 | benchmark: 17 | name: "Benchmark (${{ github.event.inputs.path }}) (Ruby ${{ github.event.inputs.ruby_version }})" 18 | runs-on: "ubuntu-latest" 19 | env: 20 | BENCHMARK: true 21 | steps: 22 | - name: Checkout Jekyll 23 | uses: actions/checkout@v4 24 | - name: Set up Ruby 25 | uses: ruby/setup-ruby@v1 26 | with: 27 | ruby-version: ${{ github.event.inputs.ruby_version }} 28 | bundler-cache: true 29 | - name: Run Benchmark 30 | run: "bundle exec ruby benchmark/${{ github.event.inputs.path }}" 31 | -------------------------------------------------------------------------------- /docs/_posts/2014-05-08-jekyll-2-0-3-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 2.0.3 Released' 3 | date: 2014-05-08 22:43:17 -0400 4 | author: parkr 5 | version: 2.0.3 6 | category: release 7 | --- 8 | 9 | Hey again! Just wanted to let you know we've released another version of Jekyll, jam-packed with bug fixes. 10 | 11 | A huge "thank you" is in order for all the folks who have submitted bug reports over the last 2 days — your input is what allows this project to continue. It's always a pain to deal with a MAJOR version bump release, but it's been pretty smooth so far and you have all been nice about the flaws you've found in the tool. Keep filing those reports so we can continue to make Jekyll even better! 12 | 13 | Thank you to the contributors that contributed code to 2.0.1, 2.0.2, and/or 2.0.3: 14 | 15 | Parker Moore, Yi Zeng, Gabe Ortiz, Aaron Broder, Alberto Grespan, gpxl, David Briggs, Kevin Ingersoll, and Troy Swanson. 16 | 17 | As always, check out the [changelog](/docs/history/) for more info. Happy Jekylling! 18 | -------------------------------------------------------------------------------- /docs/_posts/2014-07-01-jekyll-2-1-1-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 2.1.1 Released' 3 | date: 2014-07-01 20:16:43 -0400 4 | author: parkr 5 | version: 2.1.1 6 | category: release 7 | --- 8 | 9 | This is a minor release for Jekyll 2.1.0. It fixes a couple bugs and 10 | introduces fixes for a couple security-related issues. 11 | 12 | It covers two security vulnerabilities: 13 | 14 | 1. One in the reading of data 15 | 2. One in the `layouts` setting 16 | 17 | They were identified in Jekyll 1.5.1 and has been confirmed as patched 18 | in this version and the version used by GitHub Pages. If you are in the 19 | business of building Jekyll sites, please ensure you upgrade to 2.1.1 as 20 | soon as possible. 21 | 22 | For more, check out [`jekyll/jekyll#2563`](https://github.com/jekyll/jekyll/pull/2563). 23 | 24 | Additionally, the dependency on Maruku has been loosened and a bug was 25 | fixed with document URLs. 26 | 27 | As always, check out the [full changelog](/docs/history/) for more info! 28 | 29 | Happy Jekylling! 30 | -------------------------------------------------------------------------------- /docs/_posts/2016-04-19-jekyll-3-0-4-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 3.0.4 Released' 3 | date: 2016-04-19 10:26:12 -0700 4 | author: parkr 5 | version: 3.0.4 6 | category: release 7 | --- 8 | 9 | v3.0.4 is a patch release which fixes the follow two issues: 10 | 11 | - Front matter defaults may not have worked for collection documents and posts due to a problem where they were looked up by their URL rather than their path relative to the site source 12 | - Configuration for the posts permalink might be borked when a user specified a value for `collections.posts.permalink` directly. This forced the use of `permalink` at the top level, which also affected pages. To configure a permalink _just for posts_, you can do so with: 13 | 14 | {% highlight yaml %} 15 | collections: 16 | posts: 17 | output: true 18 | permalink: /blog/:year/:title/ 19 | {% endhighlight %} 20 | 21 | Both of these issues have been resolved. For more information, check out [the full history](/docs/history/#v3-0-4). 22 | 23 | Happy Jekylling! 24 | -------------------------------------------------------------------------------- /docs/_posts/2013-07-24-jekyll-1-1-1-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Jekyll 1.1.1 Released" 3 | date: "2013-07-24 22:24:14 +0200" 4 | author: parkr 5 | version: 1.1.1 6 | category: release 7 | --- 8 | 9 | Coming just 10 days after the release of v1.1.0, v1.1.1 is out with a patch for 10 | the nasty excerpt inception bug ([#1339]({{ site.repository }}/issues/1339)) and 11 | non-zero exit codes for invalid commands ([#1338]({{ site.repository 12 | }}/issues/1338)). 13 | 14 | To all those affected by the [strange excerpt bug in v1.1.0]({{ site.repository 15 | }}/issues/1321), I'm sorry. I think we have it all patched up and it should be 16 | deployed to [GitHub Pages](https://pages.github.com/) in the next couple weeks. 17 | Thank you for your patience! 18 | 19 | If you're checking out v1.1.x for the first time, definitely check out [what 20 | shipped with v1.1.0!]({{ site.repository }}/releases/tag/v1.1.0) 21 | 22 | See the [GitHub Release]({{ site.repository }}/releases/tag/v1.1.1) page for 23 | more a more detailed changelog for this release. 24 | -------------------------------------------------------------------------------- /test/test_liquid_extensions.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require "helper" 4 | 5 | class TestLiquidExtensions < JekyllUnitTest 6 | context "looking up a variable in a Liquid context" do 7 | class SayHi < Liquid::Tag 8 | include Jekyll::LiquidExtensions 9 | 10 | def initialize(_tag_name, markup, _tokens) 11 | @markup = markup.strip 12 | end 13 | 14 | def render(context) 15 | "hi #{lookup_variable(context, @markup)}" 16 | end 17 | end 18 | Liquid::Template.register_tag("say_hi", SayHi) 19 | setup do 20 | # Parses and compiles the template 21 | @template = Liquid::Template.parse("{% say_hi page.name %}") 22 | end 23 | 24 | should "extract the var properly" do 25 | assert_equal "hi tobi", @template.render("page" => { "name" => "tobi" }) 26 | end 27 | 28 | should "return the variable name if the value isn't there" do 29 | assert_equal "hi page.name", @template.render("page" => { "title" => "tobi" }) 30 | end 31 | end 32 | end 33 | -------------------------------------------------------------------------------- /.codeclimate.yml: -------------------------------------------------------------------------------- 1 | version: "2" 2 | checks: 3 | argument-count: 4 | enabled: true 5 | config: 6 | threshold: 5 7 | file-lines: 8 | enabled: true 9 | config: 10 | threshold: 300 11 | method-complexity: 12 | enabled: true 13 | config: 14 | threshold: 15 15 | method-count: 16 | enabled: true 17 | config: 18 | threshold: 50 19 | method-lines: 20 | enabled: true 21 | config: 22 | threshold: 30 23 | plugins: 24 | fixme: 25 | enabled: false 26 | rubocop: 27 | enabled: true 28 | channel: rubocop-0-60 29 | 30 | exclude_patterns: 31 | - "*.*" 32 | - ".*" 33 | 34 | - Gemfile 35 | - LICENSE 36 | - Rakefile 37 | 38 | - benchmark/ 39 | - docs/ 40 | - exe/ 41 | - features/ 42 | - rake/ 43 | - rubocop/ 44 | - script/ 45 | - spec/ 46 | - test/ 47 | - vendor/ 48 | 49 | - lib/blank_template/ 50 | - lib/site_template/ 51 | - lib/theme_template/ 52 | - lib/jekyll/mime.types 53 | - lib/jekyll/commands/serve/livereload_assets/livereload.js 54 | -------------------------------------------------------------------------------- /docs/_posts/2014-12-17-alfredxing-welcome-to-jekyll-core.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Alfred Xing has joined the Jekyll core team' 3 | date: 2014-12-17 11:16:21 -0800 4 | author: parkr 5 | version: alfredxing 6 | categories: [team] 7 | --- 8 | 9 | We're excited to announce that [@alfredxing][] has joined the @jekyll/core 10 | team! 11 | 12 | He hails from Vancouver, BC, Canada, where he is studying Economics and 13 | Computer Science at the [University of British Columbia][]. Alfred popped up in 14 | the issues a few months ago with terrific insights, focus, and humility. 15 | Performance buffs may be pleased to hear incremental regeneration will be 16 | released in a future version of Jekyll -- a significant piece of the 17 | feature written by Alfred. 18 | 19 | Please join me in welcoming Alfred to the Jekyll core team. We're excited 20 | he's agreed to lend his talents to this project. The future is an exciting 21 | place! 22 | 23 | Happy Jekylling! 24 | 25 | [@alfredxing]: https://github.com/alfredxing 26 | [University of British Columbia]: http://www.ubc.ca 27 | -------------------------------------------------------------------------------- /docs/_posts/2017-07-17-jekyll-3-5-1-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 3.5.1 Released' 3 | date: 2017-07-17 12:40:37 -0400 4 | author: parkr 5 | version: 3.5.1 6 | category: release 7 | --- 8 | 9 | We've released a few bugfixes in the form of v3.5.1 today: 10 | 11 | - Some plugins stopped functioning properly due to a NoMethodError for `registers` on NilClass. That's been fixed. 12 | - A bug in `relative_url` when `baseurl` is `nil` caused URL's to come out wrong. Squashed. 13 | - Static files' liquid representations should now have all the keys you were expecting when serialized into JSON. 14 | 15 | We apologize for the breakages! We're working diligently to improve how we test our plugins with Jekyll core to prevent breakages in the future. 16 | 17 | More details in [the history](/docs/history/#v3-5-1). Many thanks to all the contributors to Jekyll v3.5.1: Adam Voss, ashmaroli, Ben Balter, Coby Chapple, Doug Beney, Fadhil, Florian Thomas, Frank Taillandier, James, jaybe, Joshua Byrd, Kevin Plattret, & Robert Jäschke. 18 | 19 | Happy Jekylling! 20 | -------------------------------------------------------------------------------- /docs/_posts/2015-11-17-jekyll-3-0-1-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 3.0.1 Released' 3 | date: 2015-11-17 22:04:39 -0800 4 | author: parkr 5 | version: 3.0.1 6 | category: release 7 | --- 8 | 9 | Hey, folks! Bunch of bug fixes here. Notables: 10 | 11 | * Only superdirectories of `_posts` will be categories. 12 | * `:title` in permalink templates are now properly cased as before 13 | * `.jekyll-metadata` being erroneously written when not using incremental build. 14 | * Failure in liquid will now always fail the `jekyll` process. 15 | * All hooks should now be properly registered & documented 16 | 17 | And a bunch more changes which you can see over in the 18 | [changelog](/docs/history/). 19 | 20 | Thanks to the 17 developers who contributed code and documentation to this 21 | patch release: Alfred Xing, Christian Trosell, Jordan Thornquest, Jordon 22 | Bedwell, Larry Fox, Lawrence Murray, Lewis Cowles, Matt Rogers, Nicole 23 | White, Parker Moore, Paul Robert Lloyd, Sarah Kuehnle, Vincent Wochnik, 24 | Will Norris, XhmikosR, chrisfinazzo, and rebornix. 25 | -------------------------------------------------------------------------------- /docs/_posts/2020-05-08-jekyll-4-0-1-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 4.0.1 Released' 3 | date: 2020-05-08 18:00:00 +0100 4 | author: dirtyf 5 | version: 4.0.1 6 | category: release 7 | --- 8 | 9 | Jekyll 4.0.1 is out and fixes a few issues reported by the community since 4.0. 10 | 11 | - When using Ruby 2.7, you won't get any more warnings in your console when running Jekyll. (This fix is also backported in [Jekyll 3.8.7](https://github.com/jekyll/jekyll/releases/tag/v3.8.7)). 12 | - Liquid variables are now properly cached. 13 | - Jekyll build will no longer fail for collections with a custom permalink containing static files. 14 | - Jekyll filters now properly recognize integers. 15 | 16 | 👀 A [release changelog](https://github.com/jekyll/jekyll/releases/tag/v4.0.1) is available for your perusal. 17 | 18 | 🙏 Many thanks to our contributors without whom this release could not be 19 | possible: @ashmaroli and [Ivan Gromov](https://github.com/summerisgone) 20 | 21 | Expect more fixes and improvements on the next minor release! 22 | 23 | Happy Jekylling! 24 | -------------------------------------------------------------------------------- /docs/_posts/2013-05-06-jekyll-1-0-0-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Jekyll 1.0.0 Released" 3 | date: "2013-05-06 02:12:52 +0200" 4 | author: parkr 5 | version: 1.0.0 6 | category: release 7 | --- 8 | 9 | Hey! After many months of hard work by Jekyll's contributors, we're excited 10 | to announce the first major release of the project in a long while. v1.0.0 is 11 | finally here! While the list of improvements and bug fixes is [quite lengthy][history], 12 | here are the highlights (thanks to [@benbalter](https://twitter.com/BenBalter) for the 13 | examples and for compiling this list): 14 | 15 | - Support for the Gist tag for easily embedding Gists ([example](https://gist.github.com/benbalter/5555251)) 16 | - Automatically generated post excerpts ([example](https://gist.github.com/benbalter/5555369)) 17 | - Save and preview drafts before publishing ([example](https://gist.github.com/benbalter/5555992)) 18 | 19 | Take a look at the [Upgrading][] page in the docs for more detailed information. 20 | 21 | [history]: /docs/history/#v1-0-0 22 | [Upgrading]: /docs/upgrading/ 23 | -------------------------------------------------------------------------------- /docs/_includes/news_item_archive.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 8 |
9 |
10 | 25 |
26 |
27 | -------------------------------------------------------------------------------- /rake/release.rake: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | ############################################################################# 4 | # 5 | # Packaging tasks 6 | # 7 | ############################################################################# 8 | 9 | desc "Release #{name} v#{version}" 10 | task :release => :build do 11 | current_branch = `git branch`.to_s.strip.match(%r!^\* (.+)$!)[1] 12 | unless current_branch == "master" || current_branch.end_with?("-stable") 13 | puts "You must be on the master branch to release!" 14 | exit! 15 | end 16 | sh "git commit --allow-empty -m 'Release :gem: #{version}'" 17 | sh "git tag v#{version}" 18 | sh "git push origin #{current_branch}" 19 | sh "git push origin v#{version}" 20 | sh "gem push pkg/#{name}-#{version}.gem" 21 | puts "Do not forget to build and release the docs gem as well." 22 | puts "https://github.com/jekyll/jekyll-docs#releasing" 23 | end 24 | 25 | desc "Build #{name} v#{version} into pkg/" 26 | task :build do 27 | mkdir_p "pkg" 28 | sh "gem build #{gemspec_file}" 29 | sh "mv #{gem_file} pkg" 30 | end 31 | -------------------------------------------------------------------------------- /docs/_data/docs_nav.yml: -------------------------------------------------------------------------------- 1 | - title: Getting Started 2 | docs: 3 | - link: /docs/ 4 | - link: /docs/installation/ 5 | - link: /docs/ruby-101/ 6 | - link: /docs/community/ 7 | - link: /docs/step-by-step/01-setup/ 8 | - title: Build 9 | docs: 10 | - link: /docs/usage/ 11 | - link: /docs/configuration/ 12 | - link: /docs/rendering-process/ 13 | - title: Content 14 | docs: 15 | - link: /docs/pages/ 16 | - link: /docs/posts/ 17 | - link: /docs/front-matter/ 18 | - link: /docs/collections/ 19 | - link: /docs/datafiles/ 20 | - link: /docs/assets/ 21 | - link: /docs/static-files/ 22 | - title: Site Structure 23 | docs: 24 | - link: /docs/structure/ 25 | - link: /docs/liquid/ 26 | - link: /docs/variables/ 27 | - link: /docs/includes/ 28 | - link: /docs/layouts/ 29 | - link: /docs/permalinks/ 30 | - link: /docs/themes/ 31 | - link: /docs/pagination/ 32 | - title: Guides 33 | docs: 34 | - link: /docs/plugins/ 35 | - link: /docs/migrations/ 36 | - link: /docs/upgrading/ 37 | - link: /docs/deployment/ 38 | -------------------------------------------------------------------------------- /test/source/_posts/2014-09-02-relative-includes.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: Post 3 | layout: post 4 | include1: rel_include.html 5 | include2: include_relative/rel_include 6 | include3: rel_INCLUDE 7 | include4: params 8 | include5: clude 9 | --- 10 | 11 | Liquid tests 12 | - 1 {% include_relative include_relative/{{ page.include1 }} %} 13 | - 2 {% include_relative {{ page.include2 | append: '.html' }} %} 14 | - 3 {% include_relative include_relative/{{ page.include3 | downcase | append: '.html' }} %} 15 | 16 | Whitespace tests 17 | - 4 {% include_relative include_relative/{{page.include1}} %} 18 | - 5 {% include_relative include_relative/{{ page.include1}} %} 19 | - 6 {% include_relative include_relative/{{ page.include3 | downcase | append: '.html'}} %} 20 | 21 | Parameters test 22 | - 7 {% include_relative include_relative/{{ page.include4 | append: '.html' }} var1='foo' var2='bar' %} 23 | 24 | Partial variable test 25 | - 8 {% include_relative include_relative/rel_in{{ page.include5 }}.html %} 26 | 27 | Relative to self test: 28 | 29 | - 9 {% include_relative 2014-03-03-yaml-with-dots.md %} 30 | -------------------------------------------------------------------------------- /docs/_docs/configuration.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Configuration 3 | permalink: /docs/configuration/ 4 | --- 5 | 6 | Jekyll gives you a lot of flexibility to customize how it builds your site. These 7 | options can either be specified in a `_config.yml` or `_config.toml` file placed 8 | in your site’s root directory, or can be specified as flags for the `jekyll` 9 | executable in the terminal. 10 | 11 | * [Configuration Options]({{ '/docs/configuration/options/' | relative_url }}) 12 | * [Default Configuration]({{ '/docs/configuration/default/' | relative_url }}) 13 | * [Front Matter Defaults]({{ '/docs/configuration/front-matter-defaults/' | relative_url }}) 14 | * [Environments]({{ '/docs/configuration/environments/' | relative_url }}) 15 | * [Markdown Options]({{ '/docs/configuration/markdown/' | relative_url }}) 16 | * [Liquid Options]({{ '/docs/configuration/liquid/' | relative_url }}) 17 | * [Sass/SCSS Options]({{ '/docs/configuration/sass/' | relative_url }}) 18 | * [Webrick Options]({{ '/docs/configuration/webrick/' | relative_url }}) 19 | * [Incremental Regeneration]({{ '/docs/configuration/incremental-regeneration/' | relative_url }}) 20 | -------------------------------------------------------------------------------- /docs/_includes/top.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {% feed_meta %} 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | {% seo %} 15 | 19 | 20 | -------------------------------------------------------------------------------- /docs/_posts/2013-05-08-jekyll-1-0-1-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Jekyll 1.0.1 Released" 3 | date: "2013-05-08 23:46:11 +0200" 4 | author: parkr 5 | version: 1.0.1 6 | category: release 7 | --- 8 | 9 | Hot on the trails of v1.0, v1.0.1 is out! Here are the highlights: 10 | 11 | * Add newer `language-` class name prefix to code blocks ([#1037][]) 12 | * Commander error message now preferred over process abort with incorrect args ([#1040][]) 13 | * Do not force use of toc_token when using generate_toc in RDiscount ([#1048][]) 14 | * Make Redcarpet respect the pygments configuration option ([#1053][]) 15 | * Fix the index build with LSI ([#1045][]) 16 | * Don't print deprecation warning when no arguments are specified. ([#1041][]) 17 | * Add missing `` to site template used by `new` subcommand, fixed typos in code ([#1032][]) 18 | 19 | See the [History][] page for more information on this release. 20 | 21 | {% assign issue_numbers = "1037|1040|1048|1053|1045|1041|1032" | split: "|" %} 22 | {% for issue in issue_numbers %} 23 | [#{{ issue }}]: {{ site.repository }}/issues/{{ issue }} 24 | {% endfor %} 25 | 26 | [History]: /docs/history/#v1-0-1 27 | -------------------------------------------------------------------------------- /lib/jekyll/commands/help.rb: -------------------------------------------------------------------------------- 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 | Jekyll.logger.info prog.to_s 16 | elsif prog.has_command? cmd 17 | Jekyll.logger.info prog.commands[cmd].to_s 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 35 | -------------------------------------------------------------------------------- /test/test_win_tz.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require "helper" 4 | 5 | class TestWinTz < JekyllUnitTest 6 | [["America/New_York", "WTZ+05:00"], ["Europe/Paris", "WTZ-01:00"]].each do |tz, expected| 7 | should "use base offset in winter for #{tz}" do 8 | result = Jekyll::Utils::WinTZ.calculate(tz, Time.utc(2021, 1, 1)) 9 | assert_equal expected, result 10 | end 11 | end 12 | 13 | [["America/New_York", "WTZ+04:00"], ["Europe/Paris", "WTZ-02:00"]].each do |tz, expected| 14 | should "apply DST in summer for #{tz}" do 15 | result = Jekyll::Utils::WinTZ.calculate(tz, Time.utc(2021, 7, 1)) 16 | assert_equal expected, result 17 | end 18 | end 19 | 20 | [["Australia/Eucla", "WTZ-08:45"], ["Pacific/Marquesas", "WTZ+09:30"]].each do |tz, expected| 21 | should "handle non zero minutes for #{tz}" do 22 | result = Jekyll::Utils::WinTZ.calculate(tz, Time.utc(2021, 1, 1)) 23 | assert_equal expected, result 24 | end 25 | end 26 | 27 | should "return zero for UTC" do 28 | result = Jekyll::Utils::WinTZ.calculate("UTC") 29 | assert_equal "WTZ+00:00", result 30 | end 31 | end 32 | -------------------------------------------------------------------------------- /.github/SUPPORT.markdown: -------------------------------------------------------------------------------- 1 | # Jekyll Support 2 | 3 | ## Getting Help 4 | 5 | **Jekyll's issue tracker is not a support forum.** 6 | 7 | If you're looking for support for Jekyll, there are a lot of options: 8 | 9 | * Read [Jekyll Documentation](https://jekyllrb.com/docs/home/) 10 | * If you have a question about using Jekyll, start a discussion on [Jekyll Forum](https://talk.jekyllrb.com/) or [StackOverflow](https://stackoverflow.com/questions/tagged/jekyll) 11 | * Chat with Jekyllers — Join [our Gitter channel](https://gitter.im/jekyll/jekyll) or [our IRC channel on Freenode](irc:irc.freenode.net/jekyll) 12 | 13 | There are a bunch of helpful community members on these services that should be willing to point you in the right direction. 14 | 15 | ## Report a bug 16 | 17 | * If you think you've found a bug within a Jekyll plugin, open an issue in that plugin's repository — First [look for the plugin on rubygems](https://rubygems.org/) then click on the `Homepage` link to access the plugin repository. 18 | * If you think you've found a bug within Jekyll itself, [open an issue](https://github.com/jekyll/jekyll/issues/new). 19 | 20 | Happy Jekyllin'! 21 | -------------------------------------------------------------------------------- /docs/_posts/2013-07-14-jekyll-1-1-0-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Jekyll 1.1.0 Released" 3 | date: "2013-07-14 19:38:02 +0200" 4 | author: parkr 5 | version: 1.1.0 6 | category: release 7 | --- 8 | 9 | After a month of hard work, the Jekyll core team is excited to announce the release of 10 | Jekyll v1.1.0! This latest release of Jekyll brings some really exciting new additions: 11 | 12 | - Add `docs` subcommand to read Jekyll's docs when offline. ([#1046][]) 13 | - Support passing parameters to templates in `include` tag ([#1204][]) 14 | - Add support for Liquid tags to post excerpts ([#1302][]) 15 | - Fix pagination for subdirectories ([#1198][]) 16 | - Provide better error reporting when generating sites ([#1253][]) 17 | - Latest posts first in non-LSI `related_posts` ([#1271][]) 18 | 19 | See the [GitHub Release][] page for more a more detailed changelog for this release. 20 | 21 | {% assign issue_numbers = "1046|1204|1302|1198|1171|1118|1098|1215|1253|1271" | split: "|" %} 22 | {% for issue in issue_numbers %} 23 | [#{{ issue }}]: {{ site.repository }}/issues/{{ issue }} 24 | {% endfor %} 25 | 26 | [GitHub Release]: {{ site.repository }}/releases/tag/v1.1.0 27 | -------------------------------------------------------------------------------- /docs/_layouts/news_item.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: news 3 | --- 4 | 5 |
6 |

7 | {{ page.title }} 8 | 9 | Permalink 10 | 11 | 12 |

13 | 18 | 28 |
29 | {{ content }} 30 |
31 |
32 | -------------------------------------------------------------------------------- /docs/_docs/upgrading.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Upgrading 4 | permalink: /docs/upgrading/ 5 | --- 6 | 7 | Upgrading from an older version of Jekyll? Upgrading to a new major version of 8 | Jekyll (e.g. from v2.x to v3.x) may cause some headaches. Take the following 9 | guides to aid your upgrade: 10 | 11 | - [From 0.x to 1.x and 2.x](/docs/upgrading/0-to-2/) 12 | - [From 2.x to 3.x](/docs/upgrading/2-to-3/) 13 | - [From 3.x to 4.x](/docs/upgrading/3-to-4/) 14 | 15 | ## Minor updates 16 | 17 |
18 |
Stay Up to Date
19 |

We recommend you update Jekyll as often as possible to benefit from 20 | the latest bug fixes. 21 |

22 |
23 | 24 | If you followed our setup recommendations and installed [Bundler](http://bundler.io/), run `bundle update jekyll` or simply `bundle update` and all your gems will 25 | update to the latest versions. 26 | 27 | If you don't have Bundler installed, run `gem update jekyll`. 28 | 29 | The procedure is similar [if you use the `github-pages` 30 | gem](https://help.github.com/articles/setting-up-your-github-pages-site-locally-with-jekyll/#keeping-your-site-up-to-date-with-the-github-pages-gem). 31 | -------------------------------------------------------------------------------- /docs/_docs/configuration/sass.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Sass/SCSS Options 3 | permalink: "/docs/configuration/sass/" 4 | --- 5 | 6 | Jekyll comes bundled with [jekyll-sass-converter](https://github.com/jekyll/jekyll-sass-converter) plugin. By default, Jekyll will look for Sass partials in the `_sass` directory relative to your site's `source` directory. 7 | 8 | You can further configure the plugin by adding options to your Jekyll config under the `sass` attribute. See the [plugin's documentation](https://github.com/jekyll/jekyll-sass-converter#usage) for details and for its default values. 9 | 10 | {:.note .info} 11 | If you see a warning in VSCode regarding `@import "main";`, you may ignore it as the same does not affect the functionality of the SCSS code in Jekyll. However, Jekyll 4 does not allow importing a `main` sass partial (`_sass/main.scss`) from a sass page of a same name, viz. `css/main.scss`. 12 | 13 |
14 |

15 | Note that directory paths specified in the sass configuration 16 | are resolved relative to your site's source, not relative to the location of the _config.yml file. 17 |

18 |
19 | -------------------------------------------------------------------------------- /docs/_posts/2020-08-05-jekyll-3-9-0-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Jekyll 3.9.0 Released' 3 | author: parkr 4 | version: 3.9.0 5 | categories: [release] 6 | --- 7 | 8 | Jekyll 3.9.0 allows use of kramdown v2, the latest series of kramdown. 9 | 10 | If you choose to upgrade, please note that the GitHub-Flavored Markdown 11 | parser and other features of kramdown v1 are now distributed via 12 | separate gems. If you would like to continue using these features, you will 13 | need to add the gems to your `Gemfile`. They are as follows: 14 | 15 | - GFM parser – `kramdown-parser-gfm` 16 | - coderay syntax highlighter – `kramdown-syntax-coderay` 17 | - mathjaxnode math engine – `kramdown-math-mathjaxnode` 18 | - sskatex math engine – `kramdown-math-sskatex` 19 | - katex math engine – `kramdown-math-katex` 20 | - ritex math engine – `kramdown-math-ritex` 21 | - itex2mml math engine – `kramdown-math-itex2mml` 22 | 23 | Jekyll will require the given gem when the configuration requires it, and 24 | will show a helpful message when a dependency is missing. 25 | 26 | You can check out the patches and see all the details in [the release notes](/docs/history/#v3-9-0) 27 | 28 | Happy Jekylling! 29 | -------------------------------------------------------------------------------- /docs/_docs/installation.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Installation 3 | description: Official guide to install Jekyll on macOS, GNU/Linux or Windows. 4 | permalink: /docs/installation/ 5 | --- 6 | 7 | Jekyll is a [Ruby Gem]({{ '/docs/ruby-101/#gems' | relative_url }}) that can be installed on most systems. 8 | 9 | ## Requirements 10 | 11 | * [Ruby](https://www.ruby-lang.org/en/downloads/) version **{{ site.data.ruby.min_version }}** or higher, including all development headers (check your Ruby version using `ruby -v`) 12 | * [RubyGems](https://rubygems.org/pages/download) (check your Gems version using `gem -v`) 13 | * [GCC](https://gcc.gnu.org/install/) and [Make](https://www.gnu.org/software/make/) (check versions using `gcc -v`,`g++ -v`, and `make -v`) 14 | 15 | ## Guides 16 | 17 | For detailed install instructions, follow the guide for your operating system. 18 | 19 | * [macOS]({{ '/docs/installation/macos/' | relative_url }}) 20 | * [Ubuntu]({{ '/docs/installation/ubuntu/' | relative_url }}) 21 | * [FreeBSD]({{ '/docs/installation/freebsd/' | relative_url }}) 22 | * [Other Linux]({{ '/docs/installation/other-linux/' | relative_url }}) 23 | * [Windows]({{ '/docs/installation/windows/' | relative_url }}) -------------------------------------------------------------------------------- /docs/_docs/plugins/filters.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Filters 3 | permalink: /docs/plugins/filters/ 4 | --- 5 | 6 | Filters are modules that export their methods to liquid. 7 | All methods will have to take at least one parameter which represents the input 8 | of the filter. The return value will be the output of the filter. 9 | 10 | ```ruby 11 | module Jekyll 12 | module AssetFilter 13 | def asset_url(input) 14 | "http://www.example.com/#{input}?#{Time.now.to_i}" 15 | end 16 | end 17 | end 18 | 19 | Liquid::Template.register_filter(Jekyll::AssetFilter) 20 | ``` 21 | 22 | For more details on creating custom Liquid Filters, head to the [Liquid docs](https://github.com/Shopify/liquid/wiki/Liquid-for-Programmers#create-your-own-filters). 23 | 24 |
25 |
ProTip™: Access the site object using Liquid
26 |

27 | Jekyll lets you access the site object through the 28 | @context.registers feature of Liquid at @context.registers[:site]. For example, you can 29 | access the global configuration file _config.yml using 30 | @context.registers[:site].config. 31 |

32 |
33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2008-present Tom Preston-Werner and Jekyll contributors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /docs/_docs/installation/other-linux.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Jekyll on Linux 3 | permalink: /docs/installation/other-linux/ 4 | --- 5 | 6 | Installation on other Linux distributions works similarly to installing on [Ubuntu](../ubuntu/). 7 | 8 | ## Install prerequisites 9 | 10 | ### Fedora 11 | 12 | ```sh 13 | sudo dnf install ruby ruby-devel openssl-devel redhat-rpm-config gcc-c++ @development-tools 14 | ``` 15 | ### RHEL8/CentOS8 16 | 17 | ```sh 18 | sudo dnf install ruby ruby-devel 19 | sudo dnf group install "Development Tools" 20 | ``` 21 | 22 | ### Debian 23 | 24 | ```sh 25 | sudo apt-get install ruby-full build-essential 26 | ``` 27 | 28 | ### Gentoo 29 | 30 | ```sh 31 | sudo emerge -av jekyll 32 | ``` 33 | 34 | or 35 | 36 | ```sh 37 | sudo emerge --ask --verbose jekyll 38 | ``` 39 | 40 | ### ArchLinux 41 | 42 | ```sh 43 | sudo pacman -S ruby base-devel ruby-erb 44 | ``` 45 | 46 | ### OpenSUSE 47 | 48 | ```sh 49 | sudo zypper install -t pattern devel_ruby devel_C_C++ 50 | sudo zypper install ruby-devel 51 | ``` 52 | 53 | ### Clear Linux 54 | 55 | ```sh 56 | sudo swupd bundle-add ruby-basic 57 | ``` 58 | ## Install Jekyll 59 | 60 | Follow the instructions for [Ubuntu](../ubuntu/). 61 | -------------------------------------------------------------------------------- /docs/_posts/2013-09-06-jekyll-1-2-0-released.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Jekyll 1.2.0 Released" 3 | date: "2013-09-06 22:02:41 -0400" 4 | author: parkr 5 | version: 1.2.0 6 | category: release 7 | --- 8 | 9 | After nearly a month and a half of hard work, the Jekyll team is happy to 10 | announce the release of v1.2.0. It's chock full of bug fixes and some 11 | enhancements that we think you'll love. 12 | 13 | Here are a few things we think you'll want to know about this release: 14 | 15 | * Run `jekyll serve --detach` to boot up a WEBrick server in the background. **Note:** you'll need to run `kill [server_pid]` to shut the server down. 16 | * You can now **disable automatically-generated excerpts** if you set `excerpt_separator` to `""`. 17 | * If you're moving around pages and post, you can now check for **URL conflicts** by running `jekyll doctor`. 18 | * If you're a fan of the drafts feature, you'll be happy to know we've added `-D`, a shortened version of `--drafts`. 19 | * Permalinks with special characters should now generate without errors. 20 | * Expose the current Jekyll version as the `jekyll.version` Liquid variable. 21 | 22 | For a full run-down, visit our [change log](/docs/history/)! 23 | --------------------------------------------------------------------------------