Compare commits

..

319 Commits

Author SHA1 Message Date
Parker Moore
35848b9c06 Handle Liquid v4 'empty' and 'blank' values explicitly
Prevents a lookup error since Liquid::Expression::MethodLiteral doesn't exist in v5
2022-04-11 13:22:14 -07:00
Parker Moore
e2850341d2 Include MethodLiteral for Liquid v4 support 2022-04-11 13:11:05 -07:00
Parker Moore
7a3dd9a0e3 Gemfile: filter empty LIQUID_VERSION vars 2022-04-11 12:26:06 -07:00
Parker Moore
6a32be65e9 compare_property_vs_target: match "" for empty & blank
The MethodLiteral was a leaky abstraction. We needed to match against the to_liquid value, which is "" in both cases.
2022-04-11 12:25:06 -07:00
Parker Moore
03ac1d727b Add Liquid v4 to CI 2022-04-11 12:23:23 -07:00
Parker Moore
f8540633c3 Upgrade from Liquid 4 to Liquid 5 2022-04-10 11:54:27 -07:00
jekyllbot
0d0fd3f41b Update history to reflect merge of #8986 [ci skip] 2022-04-07 03:53:40 -07:00
dependabot[bot]
23a2451459 Bump actions/checkout from 2 to 3 (#8986)
Merge pull request 8986
2022-04-07 03:53:38 -07:00
jekyllbot
d1ecbcbff4 Update history to reflect merge of #8955 [ci skip] 2022-04-07 01:56:44 -07:00
Ashwin Maroli
e052d2090c Stop testing with Rubies older than 2.7 on non-Windows (#8955)
Merge pull request 8955
2022-04-07 01:56:42 -07:00
jekyllbot
354110d393 Update history to reflect merge of #9015 [ci skip] 2022-04-03 09:58:58 -07:00
Ashwin Maroli
9c7972dc38 Check symlink outside site_source without Pathutil (#9015)
Merge pull request 9015
2022-04-03 09:58:57 -07:00
jekyllbot
19868d5602 Update history to reflect merge of #9017 [ci skip] 2022-04-02 08:25:56 -07:00
Daryl Hepting
1d5bae583b Update permalinks.md (#9017)
Merge pull request 9017
2022-04-02 08:25:55 -07:00
jekyllbot
e7cc390d2b Update history to reflect merge of #8853 [ci skip] 2022-04-02 08:25:17 -07:00
JT
6f31b362eb Improve document about Github Actions section (#8853)
Merge pull request 8853
2022-04-02 08:25:16 -07:00
jekyllbot
e7ce73d593 Update history to reflect merge of #8858 [ci skip] 2022-04-01 06:42:03 -07:00
MichaelCordingley
66e337984e Allow Configurable Converters on CSV (#8858)
Merge pull request 8858
2022-04-01 06:42:01 -07:00
jekyllbot
d4e10d5954 Update history to reflect merge of #8363 [ci skip] 2022-04-01 06:35:26 -07:00
lm
2a0272cc38 Only enable BOM encoding option on UTF encodings (#8363)
Merge pull request 8363
2022-04-01 06:35:24 -07:00
jekyllbot
3c46d844cf Update history to reflect merge of #8761 [ci skip] 2022-04-01 06:24:57 -07:00
JJ
776748e13f Expose basename from document.rb as name to Liquid templates (#8761)
Merge pull request 8761
2022-04-01 06:24:55 -07:00
jekyllbot
310459370a Update history to reflect merge of #8993 [ci skip] 2022-03-28 20:46:22 -07:00
Moncef Belyamani
65158c2368 Simplify macOS installation docs (#8993)
Merge pull request 8993
2022-03-28 20:46:20 -07:00
jekyllbot
e695c1e24b Update history to reflect merge of #9013 [ci skip] 2022-03-27 13:28:30 -07:00
Parker Moore
c4387f69fc Add Jekyll 3.9.2 release post to 'master' branch (#9013)
Merge pull request 9013
2022-03-27 13:28:29 -07:00
jekyllbot
75df28c27a Update history to reflect merge of #8961 [ci skip] 2022-03-24 09:06:00 -07:00
Ashwin Maroli
9d86974e1f Expose collection static files via site.static_files (#8961)
Merge pull request 8961
2022-03-24 09:05:58 -07:00
jekyllbot
79869e7225 Update history to reflect merge of #9007 [ci skip] 2022-03-24 09:03:55 -07:00
lucafrance
b98db02f36 Remove Aerobatic (#9007)
Merge pull request 9007
2022-03-24 09:03:54 -07:00
jekyllbot
4194f62dd7 Update history to reflect merge of #9005 [ci skip] 2022-03-23 06:39:49 -07:00
jaybe@jekyll
1096648473 Update README.markdown re IRC Pointer (#9005)
Merge pull request 9005
2022-03-23 06:39:47 -07:00
jekyllbot
dd0c5fc3bc Update history to reflect merge of #8337 [ci skip] 2022-03-21 08:00:43 -07:00
Ashwin Maroli
94dc98cb6b Trigger livereload in sites without pages (#8337)
Merge pull request 8337
2022-03-21 08:00:41 -07:00
jekyllbot
e6d3d90b52 Update history to reflect merge of #8996 [ci skip] 2022-03-17 12:25:32 -07:00
Emily Grace Seville
6984a64932 Add quiet/verbose options (#8996)
Merge pull request 8996
2022-03-17 12:25:31 -07:00
jekyllbot
62ef1580ec Update history to reflect merge of #8997 [ci skip] 2022-03-14 04:02:43 -07:00
Nicholas Paxford
88cbd7a783 Update manual.md (#8997)
Merge pull request 8997
2022-03-14 04:02:41 -07:00
jekyllbot
de7da5f6c3 Update history to reflect merge of #8992 [ci skip] 2022-03-11 02:00:28 -08:00
Emily Grace Seville
f48d500586 Enhace option's case for Jekyll configuration (#8992)
Merge pull request 8992
2022-03-11 02:00:27 -08:00
jekyllbot
62d9c8c30c Update history to reflect merge of #8991 [ci skip] 2022-03-09 09:06:00 -08:00
Gary
06abe7fd0c Update document by fix yaml syntax error (#8991)
Merge pull request 8991
2022-03-09 09:05:58 -08:00
Ashwin Maroli
380c3fe815 Bump RuboCop to v1.26.x 2022-03-09 22:33:28 +05:30
jekyllbot
b7056373af Update history to reflect merge of #8984 [ci skip] 2022-03-04 08:06:29 -08:00
Ashwin Maroli
36cbca0ece Document releasing off *-stable branches (#8984)
Merge pull request 8984
2022-03-04 08:06:27 -08:00
Ashwin Maroli
0faa2a4c12 Release 💎 v4.2.2 2022-03-03 16:31:14 +05:30
jekyllbot
3d5bed24e2 Update history to reflect merge of #8982 [ci skip] 2022-03-03 02:51:16 -08:00
Ashwin Maroli
493ed1571e Release post for v4.2.2 (#8982)
Merge pull request 8982
2022-03-03 02:51:14 -08:00
jekyllbot
e27088555d Update history to reflect merge of #8965 [ci skip] 2022-02-25 13:12:25 -08:00
Ashwin Maroli
034d3e9f4b Fix response header for content served via jekyll serve (#8965)
Merge pull request 8965
2022-02-25 13:12:23 -08:00
jekyllbot
86907653ca Update history to reflect merge of #8960 [ci skip] 2022-02-09 19:29:03 -08:00
Ashwin Maroli
88044a2ece Fix deprecation message for missing doc method (#8960)
Merge pull request 8960
2022-02-09 19:29:01 -08:00
jekyllbot
d46bef774a Update history to reflect merge of #8946 [ci skip] 2022-01-31 11:19:07 -05:00
Tyler887
c644d9a568 Hakiri sunsetting down (#8946)
Merge pull request 8946
2022-01-31 11:19:04 -05:00
jekyllbot
92c6dc6578 Update history to reflect merge of #8951 [ci skip] 2022-01-31 10:21:45 -05:00
Robert Martin
285f79306b Update bug_report.yml (#8951)
Merge pull request 8951
2022-01-31 10:21:44 -05:00
Ashwin Maroli
a3290166dc Improve note on use of actions/cache [skip ci] 2022-01-28 15:06:02 +05:30
jekyllbot
5dcfc22cba Update history to reflect merge of #8948 [ci skip] 2022-01-28 04:22:01 -05:00
Attaphong Rattanaveerachanon
e133183f6f Update document for github-actions workflow by adding cache step. (#8948)
Merge pull request 8948
2022-01-28 04:22:00 -05:00
jekyllbot
1306cd7be9 Update history to reflect merge of #8940 [ci skip] 2022-01-20 21:50:50 -05:00
Parker Moore
07cd645ce6 Run vendor-mimes to update mime.types (#8940)
Merge pull request 8940
2022-01-20 21:50:49 -05:00
Ashwin Maroli
4ec6902cdb Bump RuboCop to v1.25.x
Closes #8941
2022-01-19 15:39:09 +05:30
jekyllbot
9fac4c6ec7 Update history to reflect merge of #8934 [ci skip] 2022-01-14 10:30:06 -05:00
Korbs
8578d735bc Fix link for "CloudSh" (#8934)
Merge pull request 8934
2022-01-14 10:30:04 -05:00
jekyllbot
e3cbe584f2 Update history to reflect merge of #8928 [ci skip] 2022-01-08 10:42:33 -05:00
Ashwin Maroli
d4a4d951c5 Improve maintainers guide on releasing a new version (#8928)
Merge pull request 8928
2022-01-08 10:42:31 -05:00
Ashwin Maroli
7b7a286b4a Adjust line-length in doc on releasing versions [skip ci] 2022-01-07 11:26:29 +05:30
jekyllbot
ba07bb3648 Update history to reflect merge of #8921 [ci skip] 2022-01-06 10:16:02 -05:00
Ashwin Maroli
b0a68d56fc Rewrite documentation on installing plugins (#8921)
Merge pull request 8921
2022-01-06 10:16:00 -05:00
jekyllbot
1008f1b4e3 Update history to reflect merge of #8925 [ci skip] 2022-01-03 15:49:25 -05:00
Laurence Andrews
77282e45fd Update resources.md (#8925)
Merge pull request 8925
2022-01-03 15:49:23 -05:00
jekyllbot
df765950ba Update history to reflect merge of #8919 [ci skip] 2021-12-30 17:30:24 -05:00
Toshimaru
0107747606 Update REAMDE generated by jekyll new-theme (#8919)
Merge pull request 8919
2021-12-30 17:30:22 -05:00
jekyllbot
c34fa6181e Update history to reflect merge of #8918 [ci skip] 2021-12-30 11:02:00 -05:00
Ashwin Maroli
a7a7b7a815 Lock gem psych to v3.x (#8918)
Merge pull request 8918
2021-12-30 11:01:58 -05:00
Ashwin Maroli
d0eb07ba29 Add gem "matrix" to Gemfile
gem "matrix" is no longer a default gem from Ruby 3.1 onward.
Adding the gem to Gemfile is necessary until `classifier-reborn` adds it as a dependency.

Avoiding RUBY_VERSION constraints to ensure the gem is used on older Ruby versions in CI matrix
2021-12-29 19:02:06 +05:30
Ashwin Maroli
07e510f964 Add Ruby 3.1 to CI Matrix 2021-12-29 18:02:53 +05:30
jekyllbot
0967c71097 Update history to reflect merge of #8915 [ci skip] 2021-12-27 13:06:35 -05:00
Rishi Raj Jain
5b0ea4b220 docs: add Layer0 deployment guide (#8915)
Merge pull request 8915
2021-12-27 13:06:34 -05:00
Ashwin Maroli
66b399c6d3 Lock rdoc to v6.3.x to avoid psych-4.x
Psych 4.x appears to mess with our Cucumber-based tests with:

```
Tried to load unspecified class: Date (Psych::DisallowedClass)
```
2021-12-27 23:27:01 +05:30
Ashwin Maroli
659683dbb2 Bump RuboCop to v1.24.x 2021-12-23 17:27:06 +05:30
jekyllbot
1ac5386820 Update history to reflect merge of #8908 [ci skip] 2021-12-17 10:14:20 -05:00
Ashwin Maroli
e6928dab2e Manage repository meta documents consistently (#8908)
Merge pull request 8908
2021-12-17 10:14:19 -05:00
jekyllbot
30f795f5a7 Update history to reflect merge of #8823 [ci skip] 2021-12-16 09:17:38 -05:00
Parker Moore
5aeb2bfe4e Add Security Policy document (#8823)
Merge pull request 8823
2021-12-16 09:17:36 -05:00
jekyllbot
2abf1787ca Update history to reflect merge of #8907 [ci skip] 2021-12-16 08:54:56 -05:00
Maik Riechert
23af360ef0 Remove text on GITHUB_TOKEN which is now built-in (#8907)
Merge pull request 8907
2021-12-16 08:54:55 -05:00
Ashwin Maroli
23284eb6db Remove history entry for reverted unreleased change [skip ci] 2021-12-16 17:51:45 +05:30
jekyllbot
fafcc2ce4e Update history to reflect merge of #8880 [ci skip] 2021-12-08 06:35:44 -05:00
Phil Ross
9c9cf3e82b Support both tzinfo v1 and v2 alongwith non-half hour offsets. (#8880)
Merge pull request 8880
2021-12-08 06:35:42 -05:00
jekyllbot
956701f96c Update history to reflect merge of #8900 [ci skip] 2021-12-08 06:30:31 -05:00
Kantanat-Stamp
7fdae26c25 Linting README,markdown (#8900)
Merge pull request 8900
2021-12-08 06:30:29 -05:00
Ashwin Maroli
9fa340af65 Remove lock on Bundler version in CI
Bundler 2.2.33 has been released
2021-12-08 16:22:42 +05:30
Ashwin Maroli
1434644dcc Lock Bundler to v2.2.31 and bump JRuby version
- Bundler 2.2.32 causes our CI to fail prematurely, affecting checks of pull requests.
- JRuby 9.2.20.1 is a recommended security fix.
2021-12-02 16:36:28 +05:30
Ashwin Maroli
a4a7e70fa1 Allow creating issues from a blank slate [skip ci] 2021-11-22 22:45:09 +05:30
jekyllbot
b8947f95b3 Update history to reflect merge of #8815 [ci skip] 2021-11-22 08:01:35 -05:00
Michael Gerzabek
a8ccdd6d2f Propagate _data folder from theme (#8815)
Merge pull request 8815
2021-11-22 08:01:33 -05:00
Ashwin Maroli
9a3122020e Upgrade Bug-report template to beta form template 2021-11-22 15:22:27 +05:30
Ashwin Maroli
bb49d93713 Stop assigning Frank to docs-related issues 2021-11-22 10:52:17 +05:30
Ashwin Maroli
f51ccbfad3 Bump RuboCop to v1.23.x 2021-11-17 19:52:51 +05:30
jekyllbot
44926fd14d Update history to reflect merge of #8884 [ci skip] 2021-11-17 04:48:05 -05:00
Phil Ross
3a688fe55a Fix random test failures in TestExcerpt #to_liquid. (#8884)
Merge pull request 8884
2021-11-17 04:48:03 -05:00
jekyllbot
d81cc40c9f Update history to reflect merge of #8877 [ci skip] 2021-11-12 11:16:14 -05:00
Ashwin Maroli
369c345107 Improve readability of CI logs (#8877)
Merge pull request 8877
2021-11-12 11:16:13 -05:00
jekyllbot
c90d083ef5 Update history to reflect merge of #8830 [ci skip] 2021-11-05 06:29:08 -04:00
Ashwin Maroli
db3f034f9e Add a workflow to build gems consistently (#8830)
Merge pull request 8830
2021-11-05 06:29:07 -04:00
Ashwin Maroli
10a73596d9 Add lang identifiers to shell based codeblocks 2021-10-28 12:29:31 +05:30
jekyllbot
7c619a7e2f Update history to reflect merge of #8857 [ci skip] 2021-10-28 01:04:29 -04:00
Ashwin Maroli
47b0abe1f0 Slightly update lang sh code-block styling (#8857)
Merge pull request 8857
2021-10-28 01:04:27 -04:00
jekyllbot
75b27ec328 Update history to reflect merge of #8852 [ci skip] 2021-10-23 14:15:33 -04:00
Meet Gor
868d9af3cb Added docs for running locally (#8852)
Merge pull request 8852
2021-10-23 14:15:32 -04:00
Ashwin Maroli
26a949df85 Add manual workflow to run benchmarks [skip ci] 2021-10-17 16:58:00 +05:30
Ashwin Maroli
e1838db156 Update spell-check workflow configuration 2021-10-10 12:55:55 +05:30
Ashwin Maroli
8af22d0852 Regenerate RuboCop TODO file 2021-10-06 17:58:22 +05:30
jekyllbot
d8b38f78b6 Update history to reflect merge of #8835 [ci skip] 2021-10-01 15:08:22 -04:00
Meg Gutshall
45fdf35cc3 Fix typo (#8835)
Merge pull request 8835
2021-10-01 15:08:21 -04:00
jekyllbot
ec8212ad74 Update history to reflect merge of #8831 [ci skip] 2021-09-30 11:22:54 -04:00
Matt Rogers
cfcc0c524e Relax Rubocop Dependency (#8831)
Merge pull request 8831
2021-09-30 11:22:51 -04:00
jekyllbot
8d324d9241 Update history to reflect merge of #8829 [ci skip] 2021-09-30 10:37:14 -04:00
Ricardo N Feliciano
32e97a7881 Update CircleCI example (#8829)
Merge pull request 8829
2021-09-30 10:37:13 -04:00
Ashwin Maroli
5687bf97d8 Release 💎 4.2.1 2021-09-27 16:52:08 +05:30
jekyllbot
0db36cec4b Update history to reflect merge of #8818 [ci skip] 2021-09-27 07:06:32 -04:00
Ashwin Maroli
5cc308825e Release post for v4.2.1 (#8818)
Merge pull request 8818
2021-09-27 07:06:30 -04:00
jekyllbot
1968e998a5 Update history to reflect merge of #8821 [ci skip] 2021-09-23 14:39:15 -04:00
Matt Rogers
a05b0d94cd Remove the warning about auto-regeneration on Windows (#8821)
Merge pull request 8821
2021-09-23 14:39:12 -04:00
jekyllbot
86d6b04a97 Update history to reflect merge of #8813 [ci skip] 2021-09-16 12:51:50 -04:00
Matt Rogers
70a6702a6a Move Frank to Emeritus Core Team Members (#8813)
Merge pull request 8813
2021-09-16 12:51:48 -04:00
jekyllbot
925442d91f Update history to reflect merge of #8812 [ci skip] 2021-09-16 12:48:55 -04:00
Matt Rogers
b27fb044e7 Remove AWS Amplify from the showcase (#8812)
Merge pull request 8812
2021-09-16 12:48:53 -04:00
jekyllbot
0ada71db18 Update history to reflect merge of #8798 [ci skip] 2021-09-16 12:24:44 -04:00
Ashwin Maroli
891a78685a Always hide cache-dir contents from Git (#8798)
Merge pull request 8798
2021-09-16 12:24:42 -04:00
jekyllbot
f0314eec56 Update history to reflect merge of #8797 [ci skip] 2021-09-16 11:19:56 -04:00
SaintMalik
00289460df Update feature_request.md (#8797)
Merge pull request 8797
2021-09-16 11:19:55 -04:00
jekyllbot
91c0e46a7b Update history to reflect merge of #8811 [ci skip] 2021-09-16 11:19:20 -04:00
Matt Rogers
9b2126a365 Prefer Libera. Remove Freenode (#8811)
Merge pull request 8811
2021-09-16 11:19:18 -04:00
jekyllbot
7fbd29496e Update history to reflect merge of #8803 [ci skip] 2021-09-16 11:09:23 -04:00
Atlas Cove
fe563b15bd Update index.html (#8803)
Merge pull request 8803
2021-09-16 11:09:22 -04:00
jekyllbot
60cb817c16 Update history to reflect merge of #8620 [ci skip] 2021-09-15 09:53:42 -04:00
Ben Keith
faef38b5db Revert #7253: "Don't reset site.url to localhost:4000 by default" (#8620)
Merge pull request 8620
2021-09-15 09:53:40 -04:00
jekyllbot
c238346ca2 Update history to reflect merge of #8807 [ci skip] 2021-09-14 15:32:00 -04:00
Matt Rogers
f831286557 Goodbye Frank. We'll miss you. 💔 (#8807)
Merge pull request 8807
2021-09-14 15:31:58 -04:00
Ashwin Maroli
1aea1580c1 Utilize previously allocated local variable
Follow-up to aa9a416
2021-08-30 14:33:21 +05:30
jekyllbot
e482574b84 Update history to reflect merge of #8777 [ci skip] 2021-08-29 07:15:13 -04:00
Qasim Qureshi
84c8252f11 Update troubleshooting.md (#8777)
Merge pull request 8777
2021-08-29 07:15:12 -04:00
jekyllbot
0b12fd26ae Update history to reflect merge of #8786 [ci skip] 2021-08-29 03:22:43 -04:00
Ashwin Maroli
eca450454f Fix regression in Convertible module from v4.2.0 (#8786)
Merge pull request 8786
2021-08-29 03:22:42 -04:00
Nahin Khan
493b800edb Remove trailing whitespace in _config.yml template (#8774) 2021-08-20 11:18:32 +05:30
Ashwin Maroli
2568aea6ea Fix RuboCop offenses in tests 2021-08-18 15:21:08 +05:30
jekyllbot
dc5e39fad9 Update history to reflect merge of #8623 [ci skip] 2021-08-09 08:31:11 -04:00
Sampath Sukesh Ravolaparthi
ddbc8263de Tags:Highlight: Decomposed HTMLLegacy formatter (#8623)
Merge pull request 8623
2021-08-09 08:31:09 -04:00
jekyllbot
ca2f106c8f Update history to reflect merge of #8756 [ci skip] 2021-08-05 11:10:03 -04:00
Ashwin Maroli
aa9a4164d0 Respect collections_dir config within include tag (#8756)
Merge pull request 8756
2021-08-05 11:10:01 -04:00
jekyllbot
55b6972ea7 Update history to reflect merge of #8693 [ci skip] 2021-07-23 10:47:06 -04:00
Jeff Wilcox
9c7015138b Fixing URL in MacOS install for rbenv-doctor (#8693)
Merge pull request 8693
2021-07-23 10:47:05 -04:00
jekyllbot
9587a73c53 Update history to reflect merge of #8293 [ci skip] 2021-07-23 10:45:35 -04:00
Alex Malaszkiewicz
94fcfdd787 Enable Rubocop accessor grouping, fix existing offenses (#8293)
Merge pull request 8293
2021-07-23 10:45:34 -04:00
jekyllbot
fcd56a5680 Update history to reflect merge of #8718 [ci skip] 2021-07-23 10:42:17 -04:00
Aram Akhavan
9bb98edb29 use location.protocol to inject the livereload script instead of forcing http (#8718)
Merge pull request 8718
2021-07-23 10:42:15 -04:00
jekyllbot
0ce9a7c179 Update history to reflect merge of #8741 [ci skip] 2021-07-22 13:58:42 -04:00
Andrew Davis
3f46f02108 Update rubocop from 1.12 to 1.18 and min ruby from 2.4 to 2.5 (#8741)
Merge pull request 8741
2021-07-22 13:58:40 -04:00
jekyllbot
beca094841 Update history to reflect merge of #8684 [ci skip] 2021-07-22 13:57:52 -04:00
Mike Kasberg
0eb9239151 Improve GitHub Flavored Markdown Docs (#8684)
Merge pull request 8684
2021-07-22 13:57:51 -04:00
jekyllbot
5a441c24e2 Update history to reflect merge of #8740 [ci skip] 2021-07-22 13:53:16 -04:00
dependabot[bot]
b31f933cd1 Bump check-spelling/check-spelling from 0.0.18 to 0.0.19 (#8740)
Merge pull request 8740
2021-07-22 13:53:15 -04:00
jekyllbot
a0ed9550cd Update history to reflect merge of #8706 [ci skip] 2021-07-22 13:52:25 -04:00
jaybe@jekyll
37612632c5 IRC networks - Libera, Freenode (#8706)
Merge pull request 8706
2021-07-22 13:52:24 -04:00
jekyllbot
8926ae1aac Update history to reflect merge of #8701 [ci skip] 2021-07-22 13:49:56 -04:00
Parikshit87
8a6dd9e494 Update windows.md (#8701)
Merge pull request 8701
2021-07-22 13:49:55 -04:00
jekyllbot
915248ff18 Update history to reflect merge of #8727 [ci skip] 2021-07-22 13:46:13 -04:00
Miguel Brandão
bcaf878b65 Add 'webrick' warning note to "Quickstart" Docs (#8727)
Merge pull request 8727
2021-07-22 13:46:12 -04:00
jekyllbot
ea535a9ab7 Update history to reflect merge of #8425 [ci skip] 2021-07-22 13:43:49 -04:00
fauno
0dee66260f Optimize Jekyll::Utils.parse_date (#8425)
Merge pull request 8425
2021-07-22 13:43:47 -04:00
jekyllbot
76517175e7 Update history to reflect merge of #8681 [ci skip] 2021-05-18 03:34:15 -04:00
Mike Kasberg
b5e910acfb Improve the "Markdown Options" Docs (#8681)
Merge pull request 8681
2021-05-18 03:34:13 -04:00
jekyllbot
6ff7d680e0 Update history to reflect merge of #8680 [ci skip] 2021-05-18 02:31:36 -04:00
Frank Taillandier
42dacc1091 fix(security): CVE-2021-28834 (#8680)
Merge pull request 8680
2021-05-18 02:31:34 -04:00
Frank Taillandier
e5dd889750 Update expect.txt 2021-05-17 23:55:11 +02:00
Frank Taillandier
889fe4130b Update expect.txt 2021-05-16 22:13:21 +02:00
Frank Taillandier
7605b0a474 Update History.markdown 2021-05-16 22:12:49 +02:00
jekyllbot
e724b587e3 Update history to reflect merge of #8478 [ci skip] 2021-05-16 16:10:46 -04:00
Edson Jiménez
1ffda285d6 Add step to set SDKROOT (#8478)
Merge pull request 8478
2021-05-16 16:10:45 -04:00
jekyllbot
f267dafc0c Update history to reflect merge of #8471 [ci skip] 2021-05-16 16:09:24 -04:00
nusu
49a00ebbec Add formcarry to forms section (#8471)
Merge pull request 8471
2021-05-16 16:09:23 -04:00
jekyllbot
30b397c046 Update history to reflect merge of #8585 [ci skip] 2021-05-16 16:06:06 -04:00
Liam Bigelow
93ef9389ba Load Jekyll plugins from BUNDLE_GEMFILE location (#8585)
Merge pull request 8585
2021-05-16 16:06:05 -04:00
jekyllbot
6a6d735db2 Update history to reflect merge of #8676 [ci skip] 2021-05-16 16:00:55 -04:00
Kelvin M. Klann
7e350ac031 Revert "style: run rubocop -a" (#8676)
Merge pull request 8676
2021-05-16 16:00:53 -04:00
jekyllbot
0274943bcd Update history to reflect merge of #8677 [ci skip] 2021-05-16 15:58:45 -04:00
Josh Soref
92633c6996 Update expect to cover docs/_posts (#8677)
Merge pull request 8677
2021-05-16 15:58:44 -04:00
jekyllbot
02b12e5dfc Update history to reflect merge of #8675 [ci skip] 2021-05-16 08:14:48 -04:00
Josh Soref
bdad4f2b09 Spell check action for markdown documentation (#8675)
Merge pull request 8675
2021-05-16 08:14:47 -04:00
jekyllbot
f027b6e547 Update history to reflect merge of #7834 [ci skip] 2021-05-16 04:50:10 -04:00
Daniel Haim
e23b85f837 Improvements to CSS (#7834)
Merge pull request 7834
2021-05-16 04:50:09 -04:00
jekyllbot
8a0f7f2908 Update history to reflect merge of #8614 [ci skip] 2021-05-16 04:43:24 -04:00
Sesh Sadasivam
56ef270e27 Use official Ruby setup GH action (#8614)
Merge pull request 8614
2021-05-16 04:43:23 -04:00
Alaz Tetik
43d0ef3fa0 Correct a typo for word (#8674) 2021-05-16 10:41:41 +02:00
jekyllbot
fa0e0eba3e Update history to reflect merge of #8587 [ci skip] 2021-05-14 16:39:14 -04:00
Sesh Sadasivam
9ed85a028a Add documentation for Sass configuration options (#8587)
Merge pull request 8587
2021-05-14 16:39:12 -04:00
jekyllbot
2a4d9dfedf Update history to reflect merge of #8652 [ci skip] 2021-05-14 16:33:43 -04:00
alena-ko
3259064723 Update third-party.md (#8652)
Merge pull request 8652
2021-05-14 16:33:41 -04:00
jekyllbot
f32b8bedff Update history to reflect merge of #8624 [ci skip] 2021-05-14 16:31:08 -04:00
Ben Keith
579d0d9ffc Specify default port and host for serve commands (#8624)
Merge pull request 8624
2021-05-14 16:31:07 -04:00
jekyllbot
e91e9a3576 Update history to reflect merge of #8656 [ci skip] 2021-05-14 16:30:18 -04:00
Shyam Mohan K
d5a46fcd31 razorops cicd added (#8656)
Merge pull request 8656
2021-05-14 16:30:15 -04:00
jekyllbot
e2b1bc678e Update history to reflect merge of #8654 [ci skip] 2021-05-14 15:54:31 -04:00
Kelvin M. Klann
5d35cf217b style: run rubocop -a (#8654)
Merge pull request 8654
2021-05-14 15:54:30 -04:00
Frank Taillandier
827bfcff58 chore(styles): align hash 2021-05-14 21:52:16 +02:00
jekyllbot
b9b4d85fb1 Update history to reflect merge of #8646 [ci skip] 2021-05-14 15:37:45 -04:00
Kelvin M. Klann
d85c89e8b4 docs: clarify where .jekyll-metadata comes from (#8646)
Merge pull request 8646
2021-05-14 15:37:43 -04:00
Jonathan Darrer
813da60a53 Action configuration to use "main" as default repo (#8578)
Updates the action configuration to use "main" as default repository name

The default GitHub branch when creating a repository is now "main" and no longer "master", but included a comment for those with older repositories.

https://github.com/github/renaming
https://www.zdnet.com/article/github-to-replace-master-with-main-starting-next-month/

Co-authored-by: Frank Taillandier <frank.taillandier@gmail.com>
2021-05-14 21:27:47 +02:00
jekyllbot
f9e14a5704 Update history to reflect merge of #8648 [ci skip] 2021-05-14 15:24:57 -04:00
Kelvin M. Klann
2e65d6d3a9 docs: add overview of .jekyll-cache dir (#8648)
Merge pull request 8648
2021-05-14 15:24:55 -04:00
jekyllbot
60e01d3671 Update history to reflect merge of #8651 [ci skip] 2021-05-14 15:19:19 -04:00
Kelvin M. Klann
15ad8f4bdd fix: pin rubocop to 1.12 due to error with ruby 2.4 (#8651)
Merge pull request 8651
2021-05-14 15:19:17 -04:00
Josh Soref
4fbbefeb7e Spelling (#8661)
* spelling: always

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: apostrophe

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: articles

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: bajillion

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: bandwidth

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: compatibilize

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: congratulations

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: consistent

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: containing

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: correspondents

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: debuggability

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: definitions

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: engine

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: expectations

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: framework

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: gallery

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: github

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: gitlab

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: hesitant

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: hesitate

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: highlighter

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: installation

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: internal

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: kramdown

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: link

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: markdown

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: markdownify

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: metadata

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: multiple

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: object

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: overridden

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: paths

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: positions

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: powershell

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: proceeding

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: pygments settings

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: referencing

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: retrieve

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: separating

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: several

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: specific

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: suppress

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: upgrading

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: variable

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: variables

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: whitespace

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: with

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

Co-authored-by: Josh Soref <jsoref@users.noreply.github.com>
2021-05-14 21:18:13 +02:00
Vinhas Kevin
3fea30c862 Document JEKYLL_LOG_LEVEL and JEKYLL_NO_BUNDLER_REQUIRE (#8553)
While adding `JEKYLL_LOG_LEVEL`, I also found out that `JEKYLL_NO_BUNDLER_REQUIRE` wasn't mentioned in the docs.

I am not sure it belong to this exact place in the doc, so I followed the only env variables example I could find in the doc (`JEKYLL_ENV`)
This diff closes #8480
2021-05-14 21:16:57 +02:00
shorty
da68570406 Update filters.md (#8655)
Provide people an on-ramp to creating custom Liquid template filters in the docs.
2021-05-14 21:12:12 +02:00
Nick Coish
8940ad65b1 Fix typo in 02-liquid.md (#8637) 2021-05-14 21:11:29 +02:00
Chris Keefe
47a17e2cab ruby-devel required for OpenSuse (#8640)
Initially raised in https://github.com/jekyll/jekyll/issues/8118, this patches the installation requirements
2021-05-14 21:10:20 +02:00
Jesse van der Pluijm
c523f041fc Replace references to 'master' branch with 'main' (#8657)
As the default branch name on GitHub has been `main` for a while now: https://github.blog/changelog/2020-10-01-the-default-branch-for-newly-created-repositories-is-now-main/
2021-05-14 21:05:40 +02:00
Daniel Kehoe
62ba3c03b7 Update macos.md (#8663)
Explain the choice between installation with Homebrew and rbenv. Mention the other Ruby version managers (asdf, chruby, rvm). Provide a link to a guide that gives more detail and explains the benefits and drawbacks of installation with Homebrew and various version managers. (I'm proposing this addition because there have been frequent questions on Reddit /r/ruby and Stack Overflow by users who installed Ruby for Jekyll with Homebrew and later needed to switch Ruby versions).
2021-05-14 20:58:42 +02:00
Ikko Ashimine
e53fd19bc3 Fix typo in contributing.md (#8666)
specfic -> specific
2021-05-14 20:57:55 +02:00
jaybe@jekyll
af5bb813aa Update community.md and fix up IRC reference link (#8672) 2021-05-14 20:57:21 +02:00
dependabot[bot]
73637a41b1 Bump actions/cache from v2.1.3 to v2.1.5 (#8645)
Bumps [actions/cache](https://github.com/actions/cache) from v2.1.3 to v2.1.5.
- [Release notes](https://github.com/actions/cache/releases)
- [Commits](https://github.com/actions/cache/compare/v2.1.3...1a9e2138d905efd099035b49d8b7a3888c653ca8)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-14 20:53:30 +02:00
Parker Moore
6855200ebd Merge pull request #8635 from jekyll/add-3-9-1-stuff 2021-04-08 11:53:04 -04:00
Parker Moore
eb88a791e1 Add Jekyll 3.9.1 info to the docs website 2021-04-08 10:56:11 -04:00
jekyllbot
c7ccec20c4 Update history to reflect merge of #8560 [ci skip] 2021-03-29 08:56:08 -04:00
David Zhang
63ce7d66bf docs: troubleshoot macOS with ARM64 architecture (#8560)
Merge pull request 8560
2021-03-29 08:56:06 -04:00
jekyllbot
f5a137d3c6 Update history to reflect merge of #8579 [ci skip] 2021-03-27 12:27:00 -04:00
Jonathan Darrer
91c0f2a08d Use latest Jekyll-action configuration (#8579)
Merge pull request 8579
2021-03-27 12:26:59 -04:00
jekyllbot
dfc65090ea Update history to reflect merge of #8496 [ci skip] 2021-03-27 12:25:31 -04:00
Moncef Belyamani
b828ffd559 Fix for important missing step in macOS Installation Docs: Add the Homebrew gems directory to the PATH (#8496)
Merge pull request 8496
2021-03-27 12:25:29 -04:00
Eric Cousineau
2aa33c8043 liquid: Replace "mutually exclusive" with "orthogonal" (#8584)
Was a bit confused when I saw "mutually exclusive" regarding `error_mode` and (`strict_variables`, `strict_filters`), then to see both sets turned on.

Perhaps "orthogonal" (they don't affect each other) is slightly better wording than "mutually exclusive" (they can't "exist" at the same time)?
2021-03-27 17:08:47 +01:00
jekyllbot
fdbb03b258 Update history to reflect merge of #8618 [ci skip] 2021-03-27 11:36:13 -04:00
Parker Moore
5d01099e22 Update include tag to be more permissive (#8618)
Merge pull request 8618
2021-03-27 11:36:12 -04:00
Frank Taillandier
6c170f11af styles: Rubocop 1.12 2021-03-27 16:29:18 +01:00
Otto Urpelainen
734cf2324e Relax dependency version constraints (#8586)
During Fedora 34 development, Jekyll 4.2.0 has been tested against
dependency versions outside of current definitions. This commit
relaxes constraints to allow some versions that were found compatible:

* `mercenary` was 0.3.6 in Fedora, works correctly. Nothing in
  [changelist][1] indicates problems, either.
* `terminal-table` was 1.8.0 in Fedora, then updated directly to
  3.0.0. Both were tested and found to work well. The [changelist][2]
  also shows that breaking changes between terminal-table 1 and 3 are
  either deprecation of very old Ruby runtimes or tiny changes to
  terminal output.

[1]: https://github.com/jekyll/mercenary/blob/master/History.markdown
[2]: https://github.com/tj/terminal-table/blob/master/History.rdoc
2021-03-26 15:12:50 +01:00
Robert Martin
5e7172c9ab Update macOS install docs for Big Sur (#8595)
Co-authored-by: Frank Taillandier <frank.taillandier@gmail.com>
2021-03-26 15:11:17 +01:00
Robert Martin
d25db24065 Update current Ruby version to 3.0.0 (#8596) 2021-03-26 15:09:17 +01:00
David Bruant
17beafeca7 docs: Clarify relative_url and absolute_url filters (#8612)
Co-authored-by: Michael Currin <18750745+MichaelCurrin@users.noreply.github.com>
Co-authored-by: Frank Taillandier <frank.taillandier@gmail.com>
2021-03-26 15:07:15 +01:00
jekyllbot
69e9705512 Update history to reflect merge of #8610 [ci skip] 2021-03-25 20:47:15 -04:00
Adam Bell
df24131349 Cross Version Testing Locally and Faster CI (#8610)
Merge pull request 8610
2021-03-25 20:47:13 -04:00
Frank Taillandier
c9c9dc7dac chore(deps): rubocop 1.10
fix #8583
2021-02-19 09:26:10 +01:00
jekyllbot
a988f9da14 Update history to reflect merge of #8572 [ci skip] 2021-02-05 00:24:03 -05:00
SNVMK
32d9320d34 Update 3-to-4.md (#8572)
Merge pull request 8572
2021-02-05 00:24:01 -05:00
jekyllbot
f1bfbf7d19 Update history to reflect merge of #8567 [ci skip] 2021-02-01 05:54:53 -05:00
Frank Taillandier
fe64d9841b style: add rubocop 1.9 cops (#8567)
Merge pull request 8567
2021-02-01 05:54:51 -05:00
jekyllbot
5a64aefcea Update history to reflect merge of #8564 [ci skip] 2021-01-31 11:21:19 -05:00
Tejas Bubane
d460fae31a Pin rubocop version (#8564)
Merge pull request 8564
2021-01-31 11:21:17 -05:00
Frank Taillandier
e0e856f216 chore: check-html-links 2021-01-30 23:23:54 +01:00
jekyllbot
872132e725 Update history to reflect merge of #8399 [ci skip] 2021-01-19 03:56:12 -05:00
Shannon Kularathna
d46897fabf Step By Step Instructions Review (#8399)
Merge pull request 8399
2021-01-19 03:56:09 -05:00
jekyllbot
4f0dbdb9e8 Update history to reflect merge of #8543 [ci skip] 2021-01-13 02:31:34 -05:00
dependabot[bot]
6dcd470f3d Update actions/cache requirement to v2.1.3 (#8543)
Merge pull request 8543
2021-01-13 02:31:32 -05:00
jekyllbot
2313c4d748 Update history to reflect merge of #8542 [ci skip] 2021-01-13 02:30:51 -05:00
Alex Saveau
cbf656877e Regenerate supported mime types (#8542)
Merge pull request 8542
2021-01-13 02:30:49 -05:00
jekyllbot
50a47e34c2 Update history to reflect merge of #8540 [ci skip] 2021-01-12 18:50:22 -05:00
John Losito
c4055cd3d6 Allow dependabot to keep github actions up-to-date (#8540)
Merge pull request 8540
2021-01-12 18:50:20 -05:00
jekyllbot
a80b131819 Update history to reflect merge of #8533 [ci skip] 2021-01-12 18:44:30 -05:00
Ben Whetton
13152e1247 Remove GitHub Pages content which is in GitHub docs (#8533)
Merge pull request 8533
2021-01-12 18:44:28 -05:00
jekyllbot
e9d7934156 Update history to reflect merge of #8538 [ci skip] 2021-01-12 18:39:43 -05:00
Frank Taillandier
8c8326e9ab style: enable new cops (#8538)
Merge pull request 8538
2021-01-12 18:39:41 -05:00
jekyllbot
1e34cbaee6 Update history to reflect merge of #8524 [ci skip] 2021-01-10 16:25:31 -05:00
Clayton Smith
5c797ba136 Add webrick as a dependency (#8524)
Merge pull request 8524
2021-01-10 16:25:28 -05:00
Frank Taillandier
31e152b0d0 docs: update guide
- use latest versions
- link to https://github.com/limjh16/jekyll-action-ts
2021-01-07 16:17:23 +01:00
jekyllbot
03712b0188 Update history to reflect merge of #8529 [ci skip] 2021-01-03 04:53:02 -05:00
Phil Kirlin
d78fc653a6 Fix i.e. typos in collections.md (#8529)
Merge pull request 8529
2021-01-03 04:53:00 -05:00
jekyllbot
5e141b1e5e Update history to reflect merge of #8532 [ci skip] 2021-01-03 04:51:33 -05:00
Jeffrey Veen
e4031b21c9 Fixes typo in layouts_dir documentation (#8532)
Merge pull request 8532
2021-01-03 04:51:31 -05:00
jekyllbot
ed952e1ca0 Update history to reflect merge of #8527 [ci skip] 2021-01-01 11:29:28 -05:00
Ashwin Maroli
319cc95254 Improve documentation on developing generators (#8527)
Merge pull request 8527
2021-01-01 11:29:26 -05:00
jekyllbot
fc76919c69 Update history to reflect merge of #8525 [ci skip] 2021-01-01 11:19:10 -05:00
Ashwin Maroli
75a895c95d Add a disclaimer to tutorials involving Ruby code (#8525)
Merge pull request 8525
2021-01-01 11:19:08 -05:00
Ashwin Maroli
92e50227bd 2020/12/31 is no longer a future date 2020-12-31 23:40:23 +05:30
jekyllbot
17a9efa376 Update history to reflect merge of #8488 [ci skip] 2020-12-31 12:34:47 -05:00
Craig H Maynard
d1173c9d06 Document support for TSV files consistently (#8488)
Merge pull request 8488
2020-12-31 12:34:45 -05:00
jekyllbot
deb1a712b4 Update history to reflect merge of #8518 [ci skip] 2020-12-31 12:32:41 -05:00
Curious Cat
52fd9451b6 typo - do instead of don't (#8518)
Merge pull request 8518
2020-12-31 12:32:39 -05:00
Ashwin Maroli
ca03e7ab8f Jekyll 4 can be run on Ruby 2.4 2020-12-16 20:06:13 +05:30
Frank Taillandier
871a05a9a4 Release 💎 4.2.0 2020-12-14 13:31:52 +01:00
Frank Taillandier
98d06862ee Release: Jekyll 4.2.0 (#8466)
* chore(release): 4.2.0 💎

Co-authored-by: Ashwin Maroli <ashmaroli@gmail.com>
2020-12-14 13:30:45 +01:00
Ashwin Maroli
1e2d72a574 Remove redundant quotes around YAML value 2020-12-11 19:53:44 +05:30
Frank Taillandier
0d7665c517 docs: new homebrew script [skip ci] 2020-12-11 00:27:54 +01:00
Ashwin Maroli
3ca9d6e891 Format History entries for changes on HEAD 2020-12-10 20:25:16 +05:30
jekyllbot
c571b3bd5a Update history to reflect merge of #8497 [ci skip] 2020-12-10 09:00:26 -05:00
Ashwin Maroli
01825f51db Stash attribute hash for Liquid computed for pages (#8497)
Merge pull request 8497
2020-12-10 09:00:23 -05:00
Ashwin Maroli
c70437e2de Correct offenses reported by RuboCop 1.6.0 2020-12-09 23:07:40 +05:30
Ashwin Maroli
84deb286ed Improve maintainability of showcase data and page 2020-12-09 22:25:46 +05:30
jekyllbot
d268e356f8 Update history to reflect merge of #8504 [ci skip] 2020-12-06 17:55:14 -05:00
Frank Taillandier
46cb37f479 fix: showcase (#8504)
Merge pull request 8504
2020-12-06 17:55:12 -05:00
jekyllbot
716fc3627c Update history to reflect merge of #8492 [ci skip] 2020-12-04 13:38:48 -05:00
Ashwin Maroli
91aed9ff8b Migrate TravisCI jobs to GitHub Actions (#8492)
Merge pull request 8492
2020-12-04 13:38:46 -05:00
Toby Glei
c4d493072d docs: update deployment docs for 21yunbox (#8494)
* docs: new deployment docs for 21yunbox

Co-authored-by: Frank Taillandier <frank.taillandier@gmail.com>
2020-12-04 11:47:26 +01:00
Frank Taillandier
f4a7eee57a docs: shell-based instructions
Fix #8483
2020-12-04 11:17:01 +01:00
Frank Taillandier
2f1ba8e7be docs: Shell-based instructions
Fix #8483
2020-12-04 11:07:07 +01:00
jekyllbot
9a6d3ea51e Update history to reflect merge of #8489 [ci skip] 2020-12-02 12:27:35 -05:00
Ashwin Maroli
c80ccbebf7 Optimize Page#dir with a private method (#8489)
Merge pull request 8489
2020-12-02 12:27:33 -05:00
Jacobo Vidal
686165af12 Add Arengu to form services list documentation (#8414)
* Add Arengu to form services list
2020-12-02 14:12:52 +01:00
Ashwin Maroli
371298f69b Compute hash of Gemfile.lock in workflow 2020-12-02 12:10:27 +05:30
jekyllbot
df09c414d8 Update history to reflect merge of #8485 [ci skip] 2020-12-02 00:56:54 -05:00
Ashwin Maroli
573b431abb Reduce allocations from computing item property (#8485)
Merge pull request 8485
2020-12-02 00:56:51 -05:00
Dan Nemenyi
68497a4d4b Echo PATH to .zshenv for newer macOS's (#8483)
* Add PATH to Zsh for newer macOSs 

Apple switched the default shell to Zsh with Catalina, so updating the PATH in .bash_profile will not have effect for relevant users, and is increasingly now the legacy approach.

This commit adds instructions to echo the PATH to .zshenv, the Zsh equivalent of .bash_profile, as well as to check which version of macOS the user is using.

* Update PATH in local macOS documentation
2020-12-01 14:57:05 +01:00
Frank Taillandier
6132653d5a docs: Homebrew bash script
Fix ##8490
2020-12-01 14:55:11 +01:00
Ashwin Maroli
9084f9f752 Configure new cops 2020-11-30 22:30:48 +05:30
jekyllbot
1ebde7c4cb Update history to reflect merge of #8486 [ci skip] 2020-11-29 14:21:11 -05:00
Adam Alton
568f4c5b76 structure.md: add link to Assets page from _sass section (#8486)
Merge pull request 8486
2020-11-29 14:21:09 -05:00
Ashwin Maroli
97db005336 Remove version constraint on gem tomlrb
This gem is required by the test-suite
2020-11-27 14:13:02 +05:30
jekyllbot
74c3055952 Update history to reflect merge of #8481 [ci skip] 2020-11-26 13:21:52 -05:00
Ashwin Maroli
58368cdacc Debug reading data files in a site (#8481)
Merge pull request 8481
2020-11-26 13:21:50 -05:00
Frank Taillandier
d8d1feec71 style: auo-gen-exclude 2020-11-23 16:58:18 +01:00
Frank Taillandier
8559fbfbe8 style: append o option to regexp
Performance/ConstantRegexp: Extract this regexp into a constant or append an /o option to its options.
2020-11-23 16:53:10 +01:00
Frank Taillandier
d560d53266 style: fix rubocop 1.40 offense 2020-11-23 16:46:50 +01:00
jekyllbot
3e3d9bce64 Update history to reflect merge of #8473 [ci skip] 2020-11-18 05:43:41 -05:00
Ashwin Maroli
a7e1ec901b Add custom debug strings for Jekyll objects (#8473)
Merge pull request 8473
2020-11-18 05:43:38 -05:00
jekyllbot
8a01e6aed9 Update history to reflect merge of #8472 [ci skip] 2020-11-18 05:42:10 -05:00
Ashwin Maroli
37df92dd29 Explicitly return nil after site process phase (#8472)
Merge pull request 8472
2020-11-18 05:42:08 -05:00
Ashwin Maroli
430167b9b9 Do not exclude CNAME from site build 2020-11-12 12:32:11 +05:30
Ashwin Maroli
ed7a4857a5 chore: rake site:generate 2020-11-12 12:18:43 +05:30
Frank Taillandier
6f8ca8c764 chore: cleanup 4.1.1 changelog 2020-11-11 21:24:44 +01:00
1021 changed files with 63167 additions and 101582 deletions

53
.codeclimate.yml Normal file
View File

@@ -0,0 +1,53 @@
version: "2"
checks:
argument-count:
enabled: true
config:
threshold: 5
file-lines:
enabled: true
config:
threshold: 300
method-complexity:
enabled: true
config:
threshold: 15
method-count:
enabled: true
config:
threshold: 50
method-lines:
enabled: true
config:
threshold: 30
plugins:
fixme:
enabled: false
rubocop:
enabled: true
channel: rubocop-0-60
exclude_patterns:
- "*.*"
- ".*"
- Gemfile
- LICENSE
- Rakefile
- benchmark/
- docs/
- exe/
- features/
- rake/
- rubocop/
- script/
- spec/
- test/
- vendor/
- lib/blank_template/
- lib/site_template/
- lib/theme_template/
- lib/jekyll/mime.types
- lib/jekyll/commands/serve/livereload_assets/livereload.js

55
.devcontainer/Dockerfile Normal file
View File

@@ -0,0 +1,55 @@
#-------------------------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information.
#-------------------------------------------------------------------------------------------------------------
FROM ruby:2
# Avoid warnings by switching to noninteractive
ENV DEBIAN_FRONTEND=noninteractive
# This Dockerfile adds a non-root user with sudo access. Use the "remoteUser"
# property in devcontainer.json to use it. On Linux, the container user's GID/UIDs
# will be updated to match your local UID/GID (when using the dockerFile property).
# See https://aka.ms/vscode-remote/containers/non-root-user for details.
ARG USERNAME=vscode
ARG USER_UID=1000
ARG USER_GID=$USER_UID
# Configure apt and install packages
RUN apt-get update \
&& apt-get -y install --no-install-recommends apt-utils dialog locales 2>&1 \
# Verify git, process tools installed
&& apt-get -y install git openssh-client iproute2 procps lsb-release \
#
# Install ruby-debug-ide and debase
&& gem install ruby-debug-ide \
&& gem install debase \
#
# Install node.js
&& apt-get -y install curl software-properties-common \
&& curl -sL https://deb.nodesource.com/setup_13.x | bash - \
&& apt-get -y install nodejs \
#
# Create a non-root user to use if preferred - see https://aka.ms/vscode-remote/containers/non-root-user.
&& groupadd --gid $USER_GID $USERNAME \
&& useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME \
# [Optional] Add sudo support for the non-root user
&& apt-get install -y sudo \
&& echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME\
&& chmod 0440 /etc/sudoers.d/$USERNAME \
#
# Clean up
&& apt-get autoremove -y \
&& apt-get clean -y \
&& rm -rf /var/lib/apt/lists/*
# Set the locale
RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
dpkg-reconfigure --frontend=noninteractive locales && \
update-locale LANG=en_US.UTF-8
ENV LANG en_US.UTF-8
# Switch back to dialog for any ad-hoc use of apt-get
ENV DEBIAN_FRONTEND=dialog

View File

@@ -0,0 +1,26 @@
// For format details, see https://aka.ms/vscode-remote/devcontainer.json or this file's README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.101.1/containers/ruby-2
{
"name": "Ruby 2",
"dockerFile": "Dockerfile",
// Set *default* container specific settings.json values on container create.
"settings": {
"terminal.integrated.shell.linux": "/bin/bash"
},
// Add the IDs of extensions you want installed when the container is created.
"extensions": [
"rebornix.Ruby"
]
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "bundle install",
// Uncomment to connect as a non-root user. See https://aka.ms/vscode-remote/containers/non-root.
// "remoteUser": "vscode"
}

14
.editorconfig Normal file
View File

@@ -0,0 +1,14 @@
# editorconfig.org
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 2
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false

1
.gitattributes vendored Normal file
View File

@@ -0,0 +1 @@
* text=auto

86
.github/CODEOWNERS vendored Normal file
View File

@@ -0,0 +1,86 @@
# The Jekyll project has 6 affinity teams, shown here: https://teams.jekyllrb.com/
# They are as follows:
#
# 1. @jekyll/build
# 2. @jekyll/documentation
# 3. @jekyll/ecosystem
# 4. @jekyll/performance
# 5. @jekyll/stability
# 6. @jekyll/windows
#
# Each of these teams has a mission. Wherever possible, GitHub should
# automatically require review from these teams on the pieces of the
# repository they maintain.
# @jekyll/documentation
/docs/ @jekyll/documentation
# @jekyll/build
/exe/ @jekyll/build
/lib/jekyll.rb @jekyll/build
/lib/jekyll/cleaner.rb @jekyll/build
/lib/jekyll/collection.rb @jekyll/build
/lib/jekyll/command.rb @jekyll/build
/lib/jekyll/commands/ @jekyll/build
/lib/jekyll/converter.rb @jekyll/build
/lib/jekyll/converters/ @jekyll/build
/lib/jekyll/convertible.rb @jekyll/build
/lib/jekyll/document.rb @jekyll/build
/lib/jekyll/drops/ @jekyll/build
/lib/jekyll/entry_filter.rb @jekyll/build
/lib/jekyll/errors.rb @jekyll/build
/lib/jekyll/excerpt.rb @jekyll/build
/lib/jekyll/filters/ @jekyll/build
/lib/jekyll/filters.rb @jekyll/build
/lib/jekyll/layout.rb @jekyll/build
/lib/jekyll/liquid_extensions.rb @jekyll/build
/lib/jekyll/liquid_renderer/ @jekyll/build
/lib/jekyll/liquid_renderer.rb @jekyll/build
/lib/jekyll/log_adapter.rb @jekyll/build
/lib/jekyll/mime.types @jekyll/build
/lib/jekyll/page.rb @jekyll/build
/lib/jekyll/publisher.rb @jekyll/build
/lib/jekyll/reader.rb @jekyll/build
/lib/jekyll/readers/ @jekyll/build
/lib/jekyll/regenerator.rb @jekyll/build
/lib/jekyll/related_posts.rb @jekyll/build
/lib/jekyll/renderer.rb @jekyll/build
/lib/jekyll/site.rb @jekyll/build
/lib/jekyll/static_file.rb @jekyll/build
/lib/jekyll/stevenson.rb @jekyll/build
/lib/jekyll/tags/ @jekyll/build
/lib/jekyll/url.rb @jekyll/build
/lib/jekyll/utils/ @jekyll/build
/lib/jekyll/utils.rb @jekyll/build
# @jekyll/ecosystem
/lib/jekyll/external.rb @jekyll/ecosystem
/lib/jekyll/generator.rb @jekyll/ecosystem
/lib/jekyll/hooks.rb @jekyll/ecosystem
/lib/jekyll/plugin.rb @jekyll/ecosystem
/lib/jekyll/plugin_manager.rb @jekyll/ecosystem
/lib/jekyll/theme.rb @jekyll/ecosystem
/lib/jekyll/theme_builder.rb @jekyll/ecosystem
# @jekyll/stability
Gemfile @jekyll/stability
*.gemspec @jekyll/stability
.travis.yml @jekyll/stability
appveyor.yml @jekyll/stability
/lib/jekyll/configuration.rb @jekyll/stability
/lib/jekyll/deprecator.rb @jekyll/stability
/lib/jekyll/frontmatter_defaults.rb @jekyll/stability
/lib/site_template @jekyll/stability
/lib/theme_template @jekyll/stability
/features/ @jekyll/stability
/test/ @jekyll/stability
# Special cases
.github/ @jekyll/affinity-team-captains
CODE_OF_CONDUCT.markdown @jekyll/affinity-team-captains
History.markdown @jekyll/affinity-team-captains
LICENSE @jekyll/affinity-team-captains # This file should never change.
README.markdown @jekyll/affinity-team-captains
/lib/jekyll/version.rb @jekyll/affinity-team-captains
/rake/ @jekyll/affinity-team-captains
/script/ @jekyll/affinity-team-captains

76
.github/CODE_OF_CONDUCT.markdown vendored Normal file
View File

@@ -0,0 +1,76 @@
# Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at [olivia@jekyllrb.com](mailto:olivia@jekyllrb.com). All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at [https://www.contributor-covenant.org/version/1/4/code-of-conduct.html](https://www.contributor-covenant.org/version/1/4/code-of-conduct.html)
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
[https://www.contributor-covenant.org/faq](https://www.contributor-covenant.org/faq)

158
.github/CONTRIBUTING.markdown vendored Normal file
View File

@@ -0,0 +1,158 @@
# Contributing to Jekyll
Hi there! Interested in contributing to Jekyll? We'd love your help. Jekyll is an open source project, built one contribution at a time by users like you.
## Where to get help or report a problem
See the [support guidelines](https://jekyllrb.com/docs/support/)
## Ways to contribute
Whether you're a developer, a designer, or just a Jekyll devotee, there are lots of ways to contribute. Here's a few ideas:
- [Install Jekyll on your computer](https://jekyllrb.com/docs/installation/) and kick the tires. Does it work? Does it do what you'd expect? If not, [open an issue](https://github.com/jekyll/jekyll/issues/new) and let us know.
- Comment on some of the project's [open issues](https://github.com/jekyll/jekyll/issues). Have you experienced the same problem? Know a work around? Do you have a suggestion for how the feature could be better?
- Read through the [documentation](https://jekyllrb.com/docs/home/), and click the "improve this page" button, any time you see something confusing, or have a suggestion for something that could be improved.
- Browse through the [Jekyll discussion forum](https://talk.jekyllrb.com/), and lend a hand answering questions. There's a good chance you've already experienced what another user is experiencing.
- Find an [open issue](https://github.com/jekyll/jekyll/issues) (especially [those labeled `help-wanted`](https://github.com/jekyll/jekyll/issues?q=is%3Aopen+is%3Aissue+label%3Ahelp-wanted)), and submit a proposed fix. If it's your first pull request, we promise we won't bite, and are glad to answer any questions.
- Help evaluate [open pull requests](https://github.com/jekyll/jekyll/pulls), by testing the changes locally and reviewing what's proposed.
## Submitting a pull request
### Pull requests generally
- The smaller the proposed change, the better. If you'd like to propose two unrelated changes, submit two pull requests.
- The more information, the better. Make judicious use of the pull request body. Describe what changes were made, why you made them, and what impact they will have for users.
- If this is your first pull request, it may help to [understand GitHub Flow](https://guides.github.com/introduction/flow/).
- If you're submitting a code contribution, be sure to read the [code contributions](#code-contributions) section below.
### Submitting a pull request via github.com
Many small changes can be made entirely through the github.com web interface.
1. Navigate to the file within [`jekyll/jekyll`](https://github.com/jekyll/jekyll) that you'd like to edit.
2. Click the pencil icon in the top right corner to edit the file
3. Make your proposed changes
4. Click "Propose file change"
5. Click "Create pull request"
6. Add a descriptive title and detailed description for your proposed change. The more information the better.
7. Click "Create pull request"
That's it! You'll be automatically subscribed to receive updates as others review your proposed change and provide feedback.
### Submitting a pull request via Git command line
1. Fork the project by clicking "Fork" in the top right corner of [`jekyll/jekyll`](https://github.com/jekyll/jekyll).
2. Clone the repository locally `git clone https://github.com/<you-username>/jekyll`.
3. Create a new, descriptively named branch to contain your change ( `git checkout -b my-awesome-feature` ).
4. Hack away, add tests. Not necessarily in that order.
5. Make sure everything still passes by running `script/cibuild` (see the [tests section](#running-tests-locally) below)
6. Push the branch up ( `git push origin my-awesome-feature` ).
7. Create a pull request by visiting `https://github.com/<your-username>/jekyll` and following the instructions at the top of the screen.
## Proposing updates to the documentation
We want the Jekyll documentation to be the best it can be. We've open-sourced our docs and we welcome any pull requests if you find it lacking.
### How to submit changes
You can find the documentation for jekyllrb.com in the [docs](https://github.com/jekyll/jekyll/tree/master/docs) directory. See the section above, [submitting a pull request](#submitting-a-pull-request) for information on how to propose a change.
One gotcha, all pull requests should be directed at the `master` branch (the default branch).
### Updating FontAwesome iconset for jekyllrb.com
We use a custom version of FontAwesome which contains just the icons we use.
If you ever need to update our documentation with an icon that is not already available in our custom iconset, you'll have to regenerate the iconset using Icomoon's Generator:
1. Go to <https://icomoon.io/app/>.
2. Click `Import Icons` on the top-horizontal-bar and upload the existing `<jekyll>/docs/icomoon-selection.json`.
3. Click `Add Icons from Library..` further down on the page, and add 'Font Awesome'.
4. Select the required icon(s) from the Library (make sure its the 'FontAwesome' library instead of 'IcoMoon-Free' library).
5. Click `Generate Font` on the bottom-horizontal-bar.
6. Inspect the included icons and proceed by clicking `Download`.
7. Extract the font files and adapt the CSS to the paths we use in Jekyll:
- Copy the entire `fonts` directory over and overwrite existing ones at `<jekyll>/docs/`.
- Copy the contents of `selection.json` and overwrite existing content inside `<jekyll>/docs/icomoon-selection.json`.
- Copy the entire `@font-face {}` declaration and only the **new-icon(s)' css declarations** further below, to update the
`<jekyll>/docs/_sass/_font-awesome.scss` sass partial.
- Fix paths in the `@font-face {}` declaration by adding `../` before `fonts/FontAwesome.*` like so:
`('../fonts/Fontawesome.woff?9h6hxj')`.
### Adding plugins
If you want to add your plugin to the [list of plugins](https://jekyllrb.com/docs/plugins/#available-plugins), please submit a pull request modifying the [plugins page source file](https://github.com/jekyll/jekyll/blob/master/docs/_docs/plugins.md) by adding a link to your plugin under the proper subheading depending upon its type.
## Code Contributions
Interested in submitting a pull request? Awesome. Read on. There's a few common gotchas that we'd love to help you avoid.
### Tests and documentation
Any time you propose a code change, you should also include updates to the documentation and tests within the same pull request.
#### Documentation
If your contribution changes any Jekyll behavior, make sure to update the documentation. Documentation lives in the `docs/_docs` folder (spoiler alert: it's a Jekyll site!). If the docs are missing information, please feel free to add it in. Great docs make a great project. Include changes to the documentation within your pull request, and once merged, `jekyllrb.com` will be updated.
#### Tests
- If you're creating a small fix or patch to an existing feature, a simple test is more than enough. You can usually copy/paste from an existing example in the `tests` folder, but if you need you can find out about our tests suites [Shoulda](https://github.com/thoughtbot/shoulda/tree/master) and [RSpec-Mocks](https://github.com/rspec/rspec-mocks).
- If it's a brand new feature, create a new [Cucumber](https://github.com/cucumber/cucumber/) feature, reusing existing steps where appropriate.
### Code contributions generally
- Jekyll uses the [Rubocop](https://github.com/bbatsov/rubocop) static analyzer to ensure that contributions follow the [GitHub Ruby Styleguide](https://github.com/styleguide/ruby). Please check your code using `script/fmt` and resolve any errors before pushing your branch.
- Don't bump the Gem version in your pull request (if you don't know what that means, you probably didn't).
- You can use the command `script/console` to start a REPL to explore the result of
Jekyll's methods. It also provides you with helpful methods to quickly create a
site or configuration. [Feel free to check it out!](https://github.com/jekyll/jekyll/blob/master/script/console)
- Previously, we've used the WIP Probot app to help contributors determine whether their pull request is ready for review. Please use a [draft pull request](https://help.github.com/en/articles/about-pull-requests#draft-pull-requests) instead. When you're ready, [mark the pull request as ready for review](https://help.github.com/en/articles/changing-the-stage-of-a-pull-request)
## Running tests locally
### Test Dependencies
To run the test suite and build the gem you'll need to install Jekyll's dependencies by running the following command:
```sh
script/bootstrap
```
Before you make any changes, run the tests and make sure that they pass (to confirm your environment is configured properly):
```sh
script/cibuild
```
If you are only updating a file in `test/`, you can use the command:
```sh
script/test test/blah_test.rb
```
If you are only updating a `.feature` file, you can use the command:
```sh
script/cucumber features/blah.feature
```
Both `script/test` and `script/cucumber` can be run without arguments to
run its entire respective suite.
## Visual Studio Code Development Container
If you've got [Visual Studio Code](https://code.visualstudio.com/) with the [Remote Development Extension Pack](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack) installed then simply opening this repository in Visual Studio Code and following the prompts to "Re-open In A Development Container" will get you setup and ready to go with a fresh environment with all the requirements installed.
## A thank you
Thanks! Hacking on Jekyll should be fun. If you find any of this hard to figure out, let us know so we can improve our process or documentation!

5
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,5 @@
# These are supported funding model platforms
# github: jekyll
open_collective: jekyll
tidelift: rubygems/jekyll

104
.github/ISSUE_TEMPLATE/bug_report.yml vendored Normal file
View File

@@ -0,0 +1,104 @@
name: Bug Report
description: "Is something not working as expected?"
title: "[Bug]: "
body:
- type: markdown
attributes:
value: |
Hi! Thank you for taking the time to report a bug with Jekyll.
Please consider asking your question at https://talk.jekyllrb.com if one or more of the following is applicable to your situation:
- You are not sure if the issue is a bug in Jekyll.
- The issue is caused by a third-party plugin.
- This is just a generic usage question.
Additionally, please note that this platform is meant for bugs in Jekyll core only.
Issues regarding dependencies and plugins should be reported in their respective repositories.
- type: input
id: os
attributes:
label: Operating System
description: The operating system of your computer.
placeholder: "Ubuntu 21.10"
validations:
required: true
- type: input
id: ruby-version
attributes:
label: Ruby Version
description: |
The Ruby version you were using at the time.
Run `ruby -v` in your terminal and paste the output in the input field.
placeholder: "ruby 2.7.3p183 (2021-04-05 revision 6847ee089d) [x64-mingw32]"
validations:
required: true
- type: input
id: jekyll-version
attributes:
label: Jekyll Version
description: |
The version of Jekyll used in your project.
Run `bundle exec jekyll -v` and paste the output in the input field.
*If you are not using a Gemfile, run `jekyll -v` instead.*
placeholder: "jekyll 4.2.1"
validations:
required: true
- type: input
id: ghp-version
attributes:
label: GitHub Pages Version
description: |
Are you deploying your site using GitHub Pages?
If yes, then we need to know the `github-pages` version used by your project. Proceed ahead otherwise.
If you're using the `github-pages` gem in your Gemfile, paste the output from running the following:
```
bundle exec github-pages -v
```
Otherwise, enter `Latest` in the input field and proceed ahead.
- type: textarea
id: expected
attributes:
label: Expected Behavior
description: Briefly describe what you expected to see or get with a certain functionality.
placeholder: |
I expected my site to be built successfully when I run the following:
```
bundle exec jekyll build
```
validations:
required: true
- type: textarea
id: actual
attributes:
label: Current Behavior
description: >
Describe the details of the bug.
Be sure to include any steps you took for the problem to exist, such as the directories
you created and the full command you ran.
Include any plugins you have configured for use in the site.
validations:
required: true
- type: textarea
id: logs
attributes:
label: Relevant log output
description: |
Please copy and paste any relevant log output from your terminal.
*Note: This will be automatically formatted into code, so no need for backticks.*
render: shell
- type: textarea
id: sample
attributes:
label: Code Sample
description: >
The easiest way for someone to understand an issue is if they could reproduce your issue
in their environment. Therefore, please provide a link to your project repository alongwith
instructions to reproduce your issue. If your project is not publicly accessible, please
consider setting up a minimal test repository complete with necessary instructions.
placeholder: |
### Steps to reproduce issue
- Clone [my repo](https://github.com/owner/repo)
- Install site dependencies
- Run `bundle exec jekyll build -s src -d src/dist`

5
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@@ -0,0 +1,5 @@
blank_issues_enabled: true
contact_links:
- name: Jekyll Community Forum
url: https://talk.jekyllrb.com/
about: Please ask and answer questions here.

24
.github/ISSUE_TEMPLATE/documentation.md vendored Normal file
View File

@@ -0,0 +1,24 @@
---
name: Documentation
about: Found a typo or something that isn't crystal clear in our docs?
title: '[Docs]: '
labels: documentation
assignees: ''
---
<!-- Thanks for taking the time to open an issue and help us make Jekyll better! -->
## Motivation
<!-- Why should we update our docs? -->
## Suggestion
<!-- What should we do instead? -->
<!-- Thanks for taking the time to open an issue and help us make Jekyll better! -->

View File

@@ -0,0 +1,73 @@
---
name: Feature Request
about: Want us to add any features to Jekyll?
title: 'feat: '
labels: feature
assignees: ''
---
<!--
Hi! Thanks for considering to file a feature request with Jekyll. Please take the time to
answer the basic questions. Please try to be as detailed as possible.
Thanks!
-->
## Summary
<!--
A one-paragraph explanation of the feature.
-->
## Motivation
<!--
Why do you want to see this feature in Jekyll? What makes you sure that it should not be
implemented at the plugin level, but in Jekyll core? What use cases does it support?
NOTE: Please be mindful of the Jekyll philosophy (https://jekyllrb.com/philosophy/),
particularly Section 5. Think about if 90% of the users would benefit from your
feature request, and whether your feature would be better off in a plugin.
-->
## Guide-level explanation
<!--
Explain the proposal as if it was already included in the project and you
were teaching it to another programmer. That generally means:
- Introducing new named concepts.
- Explaining the feature largely in terms of examples.
- If applicable, provide sample error messages, deprecation warnings, or
migration guidance.
If this is a small feature, you may omit this section.
-->
## Reference-level explanation
<!--
This is the technical portion of the feature request. Explain the design in
sufficient detail that:
- Its interaction with other features is clear.
- It is reasonably clear how the feature would be implemented.
- Corner cases are dissected by example.
If you do not know how to answer this, you can omit it. No worries!
-->
## Drawbacks
<!--
Why should we *not* do this?
-->
## Unresolved Questions
<!--
What related issues do you consider out of scope for this feature that could be
addressed in the future independently of the solution that comes out of this
feature?
-->

46
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,46 @@
<!--
Thanks for creating a Pull Request! Before you submit, please make sure
you've done the following:
- I read the contributing document at https://jekyllrb.com/docs/contributing/
-->
<!--
Make our lives easier! Choose one of the following by uncommenting it:
-->
<!-- This is a 🐛 bug fix. -->
<!-- This is a 🙋 feature or enhancement. -->
<!-- This is a 🔦 documentation change. -->
<!-- This is a 🔨 code refactoring. -->
<!--
Before you submit this pull request, make sure to have a look at the following
checklist. If you don't know how to do some of these, that's fine! Submit
your pull request and we will help you out on the way.
- I've added tests (if it's a bug, feature or enhancement)
- I've adjusted the documentation (if it's a feature or enhancement)
- The test suite passes locally (run `script/cibuild` to verify this)
-->
## Summary
<!--
Provide a description of what your pull request changes.
-->
## Context
<!--
Is this related to any GitHub issue(s)?
You can use keywords to automatically close the related issue.
For example, (all of) the following will close issue #4567 when your PR is merged.
Closes #4567
Fixes #4567
Resolves #4567
Use any one of the above as applicable.
-->

32
.github/SECURITY.markdown vendored Normal file
View File

@@ -0,0 +1,32 @@
# Security Policy
## Supported Versions
Security updates are applied to the latest MINOR version of Jekyll, and the version used by GitHub Pages, v3.9.x.
| Version | Supported |
| ------- | ------------------ |
| 4.2.x | :white_check_mark: |
| 3.9.x | :white_check_mark: |
| < 3.9.x | :x: |
## Reporting a Vulnerability
Please report vulnerabilities by sending an email to security@jekyllrb.com with the following information:
1. A description of the vulnerability
2. Reproduction steps and/or a sample site (share a private repo to the [Jekyll Security Team](docs/pages/team.md))
3. Your contact information
The Jekyll security team will respond to your submission and notify you whether it has been confirmed by the team.
Your confidentiality is kindly requested as we work on a fix. We will provide our patch to you to test and verify that the vulnerability has
been closed.
If you have created a patch and would like to submit that to us as well, we will happily consider it though we cannot guarantee that we will
use it. If we use your patch, we will attribute authorship to you either as the commit author, or as a co-author.
Once a fix is verified, we will release PATCH versions of the supported MINOR versions and assign a CVE to the vulnerability. You will receive
credit in our release post.
Once the patched version has been released, we will no longer request you to maintain confidentiality and you may choose to share details on
how you found the vulnerability with the community.

20
.github/SUPPORT.markdown vendored Normal file
View File

@@ -0,0 +1,20 @@
# Jekyll Support
## Getting Help
**Jekyll's issue tracker is not a support forum.**
If you're looking for support for Jekyll, there are a lot of options:
* Read [Jekyll Documentation](https://jekyllrb.com/docs/home/)
* 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)
* Chat with Jekyllers &mdash; Join [our Gitter channel](https://gitter.im/jekyll/jekyll) or [our IRC channel on Freenode](irc:irc.freenode.net/jekyll)
There are a bunch of helpful community members on these services that should be willing to point you in the right direction.
## Report a bug
* If you think you've found a bug within a Jekyll plugin, open an issue in that plugin's repository &mdash; First [look for the plugin on rubygems](https://rubygems.org/) then click on the `Homepage` link to access the plugin repository.
* If you think you've found a bug within Jekyll itself, [open an issue](https://github.com/jekyll/jekyll/issues/new).
Happy Jekyllin'!

15
.github/actions/spelling/README.md vendored Normal file
View File

@@ -0,0 +1,15 @@
# check-spelling/check-spelling configuration
File | Purpose | Format | Info
-|-|-|-
[dictionary.txt](dictionary.txt) | Replacement dictionary (creating this file will override the default dictionary) | one word per line | [dictionary](https://github.com/check-spelling/check-spelling/wiki/Configuration#dictionary)
[allow.txt](allow.txt) | Add words to the dictionary | one word per line (only letters and `'`s allowed) | [allow](https://github.com/check-spelling/check-spelling/wiki/Configuration#allow)
[reject.txt](reject.txt) | Remove words from the dictionary (after allow) | grep pattern matching whole dictionary words | [reject](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-reject)
[excludes.txt](excludes.txt) | Files to ignore entirely | perl regular expression | [excludes](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-excludes)
[only.txt](only.txt) | Only check matching files (applied after excludes) | perl regular expression | [only](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-only)
[patterns.txt](patterns.txt) | Patterns to ignore from checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns)
[expect.txt](expect.txt) | Expected words that aren't in the dictionary | one word per line (sorted, alphabetically) | [expect](https://github.com/check-spelling/check-spelling/wiki/Configuration#expect)
[advice.txt](advice.txt) | Supplement for GitHub comment when unrecognized words are found | GitHub Markdown | [advice](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-advice)
Note: you can replace any of these files with a directory by the same name (minus the `.txt` extension) and
then include multiple files (with a `.txt` extension) inside that directory to merge multiple files together.

28
.github/actions/spelling/advice.md vendored Normal file
View File

@@ -0,0 +1,28 @@
<!-- See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-advice --> <!-- markdownlint-disable MD033 MD041 -->
<details><summary>If you see a bunch of garbage</summary>
If it relates to a ...
<details><summary>well-formed pattern</summary>
See if there's a [pattern](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns) that would match it.
If not, try writing one and adding it to the `patterns.txt` file.
Patterns are Perl 5 Regular Expressions - you can [test](
https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your lines.
Note that patterns can't match multiline strings.
</details>
<details><summary>binary-ish string</summary>
Please add a file path to the `excludes.txt` file instead of just accepting the garbage.
File paths are Perl 5 Regular Expressions - you can [test](
https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your files.
`^` refers to the file's path from the root of the repository, so `^README\.md$` would exclude [README.md](
../tree/HEAD/README.md) (on whichever branch you're using).
</details>
</details>

35
.github/actions/spelling/excludes.txt vendored Normal file
View File

@@ -0,0 +1,35 @@
# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-excludes
(?:^|/)(?i)COPYRIGHT
(?:^|/)(?i)LICEN[CS]E
(?:^|/)package(?:-lock|)\.json$
(?:^|/)vendor/
/fonts/
ignore$
\.avi$
\.eot$
\.ico$
\.jpe?g$
\.lock$
\.map$
\.min\.
\.mod$
\.mp[34]$
\.png$
\.svg$
\.ttf$
\.wav$
\.woff$
\.woff2$
^docs/pages/redirects/github\.html$
^lib/jekyll/mime\.types$
^lib/theme_template/example/index\.html$
^lib/theme_template/example/_post\.md$
^test/fixtures/empty_permalink\.erb$
^test/fixtures/webrick/bar/baz\.html$
^test/fixtures/webrick/bar/foo\.xhtml$
^test/source/_posts/2009-06-22-no-yaml\.markdown$
^\.github/

760
.github/actions/spelling/expect.txt vendored Normal file
View File

@@ -0,0 +1,760 @@
acl
activesupport
adaoraul
addons
aeiou
AFile
afterall
Alexey
alfredxing
algolia
allowfullscreen
Anatoliy
andreyvit
Ankit
Anning
apps
appveyor
arengu
args
ariejan
arounds
asciinema
asdf
ashmaroli
attr
Autobuild
autocompletion
autogenerated
Autolink
autoload
autoreconf
autosave
awood
aws
awscli
backend
backport
backtick
barcamp
baseurl
bashrc
baz
bbatsov
bdimcheff
bellvat
benbalter
Beney
binstubs
bip
bitbucket
blog
Blogger
blogging
bonafide
Bou
breadcrumbs
briandoll
bridgetown
bridgetownrb
brightbox
brighterplanet
buddyworks
Bugfix
Burela
byparker
cachegrind
calavera
callgraphs
cartera
cavalle
CDNs
cgi
changefreq
changelog
chango
charset
Chayoung
chcp
chdir
Cheatsheet
Checkoway
chmod
chown
Chrononaut
chruby
cibuild
cimg
circleci
CJK
classname
cloudcannon
Cloudinary
cloudsh
CLT
codebase
codeclimate
CODEOWNERS
coderay
codeslinger
coffeescript
colorator
commandline
commonmark
compat
compatibilize
concat
config
configyml
contentblocks
CORS
Cov
CRLFs
cron
crontab
cruft
css
csv
Currin
CVE
CWD
cygwin
daringfireball
Dassonville
datafiles
datetime
DCEU
Debian
debuggability
defunkt
delegators
deployer
deps
dest
Devkit
devops
digitalocean
dirs
disqus
ditaa
dnf
doclist
doctype
doeorg
dommmel
dotfile
Dousse
downcase
downcased
duckduckgo
duritong
Dusseau
dysinger
ecf
editorconfig
eduardoboucas
Elasticsearch
elsif
Emacs
emails
emoji
endcapture
endcomment
endfor
endhighlight
endif
endraw
endrender
endtablerow
Enumerables
EOL
erb
errordocument
Espinaco
eugenebolshakov
evaled
exe
execjs
extensionpack
extname
exts
favicon
Fengyun
ffi
figcaption
filesystem
Finazzo
firstimage
FIXME
flakey
flickr
fnmatch
fontello
forloop
formcake
formcarry
formester
formingo
formkeep
formspark
formspree
formx
Forwardable
frameborder
freenode
frontmatter
fsnotify
ftp
fullstory
Gaudino
gcc
gcnovus
gemfile
gemset
gemspec
getform
getset
getsimpleform
gettalong
gfm
ghp
ghpages
giraffeacademy
github
githubcom
githubusercontent
gitignore
gitlab
gjtorikian
globbed
globbing
google
gotcha
Goulven
gridism
GSo
gsub
gsubbing
Hakiri
hardcode
hashbang
hashmap
helaili
henrik
heredoc
heroku
highlighter
hilighting
Hoizey
homepage
hostman
hostname
href
htaccess
htm
html
htmlproofer
http
httpd
httpdocs
hyperlinks
Iaa
ial
ico
icomoon
iconset
ified
iframe
img
Impl
Inlining
invokables
irc
ivey
ize
jalali
jameshamann
jamstackthemes
jan
javascript
Jax
jayferd
jcon
jdoe
jeffreytse
jeffrydegrande
Jekpack
jekyllbot
jekyllconf
Jekyllers
Jekyllin
Jekylling
jekyllized
jekylllayoutconcept
jekyllrb
jekyllthemes
jemoji
jmcglone
jneen
johnreilly
jpg
jqr
jruby
json
jsonify
juretta
jwarby
Kacper
Kasberg
kbd
Kentico
Kewin
keycdn
kickster
Kinnula
kiwifruit
Kolesky
konklone
kontent
Kotvinsky
kramdown
Kulig
Kwokfu
Lamprecht
laquo
lastmod
launchctl
launchy
laurilehmijoki
ldquo
learnxinyminutes
lexer
LGTM
libcurl
libffi
lifecycle
lightgray
limjh
linenos
linkify
linux
liufengyun
livereload
localheinz
localhost
localtime
Locher
loglevel
Losslessly
lovin
lsi
lsquo
lstrip
lyche
macos
macromates
mademistakes
mailto
Manmeet
markdownify
Maroli
Marsceill
maruku
mathjax
mathml
mattr
Maximiliano
mchung
mdash
memberspace
Memoize
memoized
memoizing
mentoring
mergable
Mertcan
mertkahyaoglu
metadata
microdata
microsoft
mimetype
mingw
minibundle
minifier
minitest
Mittal
mixin
mkasberg
mkd
mkdir
mkdn
mkdown
mmistakes
modernizr
mojombo
moncefbelyamani
moz
mreid
msdn
mswin
MSYS
mtime
multiline
munging
Mvvm
myblog
mycontent
mydata
mydoc
myimage
mypage
myposts
myproject
myrepo
mysite
myvalue
myvar
myvariable
Nadjib
nakanishi
namespace
namespaced
navbar
nbsp
nearlyfreespeech
nethack
netlify
netlifycms
Neue
nginx
ngx
nielsenramon
nior
nodejs
noifniof
nokogiri
notextile
onclick
onebox
oneclick
onschedule
opensource
openssl
Optim
orderofinterpretation
orgs
OSVDB
osx
packagecontrol
pacman
paginator
pandoc
pantulis
params
parkr
parseable
paspagon
passthrough
pathawks
Pathutil
paywall
pdf
Pelykh
permalink
PHP
pinboard
Piwigo
pjhyett
pkill
pkpass
placeholders
planetjekyll
plantuml
plugin
png
podcasts
popen
Porcel
Posterous
postfiles
postlayout
postmodern
preinstalled
prepends
Prioritise
Probot
projectlist
pubstorm
pufuwozu
pwa
pwd
pygments
qrush
Quaid
quickstart
rackup
Rakefile
raquo
razorops
rbenv
rdiscount
rdoc
rdquo
readme
realz
rebund
redcarpet
redcloth
redgreen
redhat
refactor
refactoring
Refheap
regen
regex
regexp
remi
reqs
Responsify
revertable
rfc
rfelix
RHEL
ridk
roadmap
rowspan
rspec
rsquo
rss
rstrip
rsync
rtomayko
Rubo
rubocop
rubychan
rubygem
rubyinstaller
rubyprof
Ruparelia
Rusiczki
rvm
ryanflorence
saas
samplelist
samrayner
sandboxed
Sassc
sassify
schemastore
Schroers
Schwartzian
scp
screenshot
scrollbar
scroller
scss
scssify
sdk
SDKROOT
sectore
semver
seo
serverless
setenv
SFTP
shingo
shopify
shortlog
shoulda
sieversii
sigpipe
simplecov
Singhaniya
siteleaf
sitemap
SITENAME
Slicehost
slugified
slugify
smartforms
smartify
snipcart
socio
somedir
sonnym
Sonomy
sourced
sourcemaps
spam
spotify
src
ssg
ssh
SSL
stackoverflow
standalone
staticfiles
staticman
statictastic
STDERR
stdout
Stickyposts
strftime
stringified
Stringify
styleguide
stylesheet
subdir
subdomain
subfolder
subfolderitems
subnav
subpages
subpath
subpiece
subsubfolderitems
subthing
subvalues
subwidget
sudo
superdirectories
superdirs
SUSE
sverrirs
svg
svn
swfobject
swupd
symlink
symlinking
tablerow
tada
Taillandier
talkyard
tbody
technicalpickles
templating
templatize
Termux
textilize
textpattern
thead
therubyracer
Theunissen
Thornquest
thoughtbot
throughs
Tidelift
timeago
timezone
titleize
TLS
tmm
tmp
toc
tok
tomjoht
toml
tomo
toolset
toshimaru
triaged
triaging
truncatewords
tsv
ttf
Tudou
Tumblr
Tweetsert
txtpen
Tyborska
tzinfo
ubuntu
uby
ujh
ultron
undumpable
unencode
Unescape
unescaping
unicode
uniq
upcase
uppercasing
uri
url
urlset
username
usr
utf
utils
utime
utm
vanpelt
Vasovi
vendored
vercel
versioned
versioning
vertycal
Veyor
vilcans
Vishesh
visualstudio
vnd
vohedge
vps
vscode
vwochnik
Walkthroughs
wdm
We'd
webfont
webhook
webhosting
webmentions
webrick
website
weekdate
whitelist
whitelisting
wiki
wikipedia
wildcards
willcodeforfoo
woff
wordpress
Workaround
workflow
wsl
www
xcode
xcrun
xdg
Xhmikos
xhtml
Xiaoiver
XMinutes
xml
xmlns
xmlschema
yajl
yaml
Yarp
Yashu
Yastreb
yml
Youku
youtube
yunbox
zeropadding
Zlatan
zlib
zoneinfo
zpinter
Zsh
zshrc
zypper
zzot
frontend
prefetching

1
.github/actions/spelling/only.txt vendored Normal file
View File

@@ -0,0 +1 @@
^docs/.*\.md$

75
.github/actions/spelling/patterns.txt vendored Normal file
View File

@@ -0,0 +1,75 @@
# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns
# data urls
(['"])data:.*?\g{-1}
data:[-a-zA-Z=;:/0-9+]*,\S*
# YouTube
https?://(?:(?:www\.|)youtube\.com|youtu.be)/(?:channel/|embed/|playlist\?list=|watch\?v=|v/|)[-a-zA-Z0-9?&=_]*
<\s*youtube\s+id=['"][-a-zA-Z0-9?_]*['"]
\bimg\.youtube\.com/vi/[-a-zA-Z0-9?&=_]*
youtube_id:\s*[-a-zA-Z0-9?&=_]*
# Google Analytics
\bgoogle-analytics\.com/collect.[-0-9a-zA-Z?%=&_.~]*
# Google APIs
\bgoogleapis\.com/[a-z]+/v\d+/[a-z]+/[@./?=\w]+
\b[-a-zA-Z0-9.]*\bstorage\d*\.googleapis\.com(?:/\S*|)
# Google Calendar
\bcalendar\.google\.com/calendar(?:/u/\d+|)/embed\?src=[@./?=\w&%]+
\w+\@group\.calendar\.google\.com\b
# Google DataStudio
\bdatastudio\.google\.com/(?:(?:c/|)u/\d+/|)(?:embed/|)(?:open|reporting|datasources|s)/[-0-9a-zA-Z]+(?:/page/[-0-9a-zA-Z]+|)
# The leading `/` here is as opposed to the `\b` above
# ... a short way to match `https://` or `http://` since most urls have one of those prefixes
# Google Docs
/docs\.google\.com/[a-z]+/d/(?:e/|)[0-9a-zA-Z_-]+/?
# Google Groups
https://groups\.google\.com/d/topic/[^/]+/[a-zA-Z0-9]+/discussion
https://groups\.google\.com/d/msg/[^/]+/[a-zA-Z0-9]+/[a-zA-Z0-9]+
# Google themes
themes\.googleusercontent\.com/static/fonts/[^/]+/v\d+/[^.]+.
# Google CDN
\bclients2\.google(?:usercontent|)\.com[-0-9a-zA-Z/.]*
# Goo.gl
/goo\.gl/[a-zA-Z0-9]+
# Google Chrome Store
\bchrome\.google\.com/webstore/detail/\w*(?:/\w*|)
# google_site_verification:
google_site_verification: [-a-zA-Z=;:/0-9+]*
# Ruby-doc.org
https://ruby-doc\.org/.*
# Contributors
alphabetical order.*:.*
twitter_handle: .*
# apiKey
apiKey: '[a-f0-9]+'
# FontAwesome
/(?:(?i)FontAwesome\.\w+\?\w+)
# Lorem
(?:\w|\s|[,.])*\b(?i)(?:amet|consectetur|cursus|dolor|eros|ipsum|lacus|libero|ligula|lorem|magna|neque|nulla|suscipit|tempus|ultrices)\b(?:\w|\s|[,.])*
# URL escaped characters
\%[0-9A-F]{2}
# c99 hex digits (not the full format, just one I've seen)
# hex digits including css/html color classes:
(?:[\\0][xX]|\\u|[uU]\+|#x?|\%23)[0-9a-fA-FgGrR_]{2,}(?:[uU]?[lL]{0,2}|u\d+)\b
# ignore long runs of a single character:
\b([A-Za-z])\g{-1}{3,}\b

7
.github/actions/spelling/reject.txt vendored Normal file
View File

@@ -0,0 +1,7 @@
^attache$
benefitting
occurence
Sorce
^[Ss]pae
^untill
^wether

15
.github/config.yml vendored Normal file
View File

@@ -0,0 +1,15 @@
updateDocsComment: >
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.
updateDocsWhiteList:
- bug
- fix
- Backport
- dev
- Update
- WIP
- chore
updateDocsTargetFiles:
- README
- docs/

6
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,6 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"

44
.github/first-timers-issue-template.md vendored Normal file
View File

@@ -0,0 +1,44 @@
### 🆕🐥☝ First Timers Only.
This issue is reserved for people who never contributed to Open Source before. We know that the process of creating a pull request is the biggest barrier for new contributors. This issue is for you 💝
[About First Timers Only](http://www.firsttimersonly.com/).
### 🤔 What you will need to know.
Nothing. This issue is meant to welcome you to Open Source :) We are happy to walk you through the process.
### 📋 Step by Step
- [ ] 👌 **Join the team**: Add yourself to a Jekyll affinity team.
Go to [teams.jekyllrb.com](https://teams.jekyllrb.com/) and join a team that best fits your interests. Once you click the link to join a team, you will soon receive an email inviting you to join the Jekyll organization.
- [ ] 🙋 **Claim this issue**: Comment below.
Leave a comment that you have claimed this issue.
- [ ] 📝 **Update** the file [$FILENAME]($BRANCH_URL) in the `$REPO` repository (press the little pen Icon) and edit the line as shown below.
```diff
$DIFF
```
- [ ] 💾 **Commit** your changes
- [ ] 🔀 **Start a Pull Request**. There are two ways how you can start a pull request:
1. If you are familiar with the terminal or would like to learn it, [here is a great tutorial](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github) on how to send a pull request using the terminal.
2. You can [edit files directly in your browser](https://help.github.com/articles/editing-files-in-your-repository/)
- [ ] 🏁 **Done** Ask in comments for a review :)
### 🤔❓ Questions
Leave a comment below!
This issue was created by [First-Timers-Bot](https://github.com/hoodiehq/first-timers-bot).

6
.github/first-timers.yml vendored Normal file
View File

@@ -0,0 +1,6 @@
repository: jekyll
labels:
- good first issue
- help-wanted
- first-time-only
template: .github/first-timers-issue-template.md

14
.github/workflows/actions/memprof.rb vendored Normal file
View File

@@ -0,0 +1,14 @@
# frozen_string_literal: true
require 'jekyll'
require 'memory_profiler'
MemoryProfiler.report(allow_files: ['lib/jekyll/', 'lib/jekyll.rb']) do
Jekyll::PluginManager.require_from_bundler
Jekyll::Commands::Build.process({
"source" => File.expand_path(ARGV[0]),
"destination" => File.expand_path("#{ARGV[0]}/_site"),
"disable_disk_cache" => true,
})
puts ''
end.pretty_print(scale_bytes: true, normalize_paths: true)

30
.github/workflows/benchmark.yml vendored Normal file
View File

@@ -0,0 +1,30 @@
name: Micro Benchmark Runs
on:
workflow_dispatch:
inputs:
path:
description: "Path to benchmark script relative to 'benchmark' directory."
required: true
default: "capture-assign.rb"
ruby_version:
description: "Ruby version to use (via `ruby/setup-ruby@v1`) action."
required: false
default: "2.7"
jobs:
benchmark:
name: "Benchmark (${{ github.event.inputs.path }}) (Ruby ${{ github.event.inputs.ruby_version }})"
runs-on: "ubuntu-latest"
env:
BENCHMARK: true
steps:
- name: Checkout Jekyll
uses: actions/checkout@v3
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ github.event.inputs.ruby_version }}
bundler-cache: true
- name: Run Benchmark
run: "bundle exec ruby benchmark/${{ github.event.inputs.path }}"

73
.github/workflows/ci.yml vendored Normal file
View File

@@ -0,0 +1,73 @@
name: Continuous Integration
on:
push:
branches:
- master
- "*-stable"
pull_request:
branches:
- master
- "*-stable"
jobs:
ci:
name: "Run Tests (${{ matrix.label }})"
runs-on: "ubuntu-latest"
strategy:
fail-fast: false
matrix:
include:
- label: Ruby 2.7
ruby_version: "2.7"
- label: Ruby 3.0
ruby_version: "3.0"
- label: Ruby 3.1
ruby_version: "3.1"
- label: JRuby 9.3.4.0
ruby_version: "jruby-9.3.4.0"
- label: Liquid 4
ruby_version: 3.1
liquid_version: "~> 4.0"
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: "Set up ${{ matrix.label }}"
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby_version }}
bundler-cache: true
env:
LIQUID_VERSION: ${{ matrix.liquid_version }}
- name: Run Minitest based tests
run: bash script/test
- name: Run Cucumber based tests
run: bash script/cucumber
- name: Generate and Build a new site
run: bash script/default-site
xtras:
name: "${{ matrix.job_name }} (Ruby ${{ matrix.ruby_version }})"
runs-on: "ubuntu-latest"
strategy:
fail-fast: false
matrix:
include:
- job_name: "Profile Docs Site"
step_name: "Build and Profile docs site"
script_file: "profile-docs"
ruby_version: "2.7"
- job_name: "Style Check"
step_name: "Run RuboCop"
script_file: "fmt"
ruby_version: "2.7"
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: "Set up Ruby ${{ matrix.ruby_version }}"
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby_version }}
bundler-cache: true
- name: ${{ matrix.step_name }}
run: bash script/${{ matrix.script_file }}

52
.github/workflows/docs.yml vendored Normal file
View File

@@ -0,0 +1,52 @@
name: Build and deploy Jekyll documentation site
on:
push:
branches:
- master
env:
RUBY_VERSION: 2.7
jobs:
deploy_docs:
if: "!contains(github.event.commits[0].message, '[ci skip]')"
runs-on: 'ubuntu-latest'
env:
BUNDLE_PATH: "vendor/bundle"
BUNDLE_JOBS: 4
BUNDLE_RETRY: 3
steps:
- uses: actions/checkout@v3
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ env.RUBY_VERSION }}
bundler-cache: true
- name: Clone target branch
run: |
REMOTE_BRANCH="${REMOTE_BRANCH:-gh-pages}"
REMOTE_REPO="https://${GITHUB_ACTOR}:${{ secrets.GITHUB_TOKEN }}@github.com/${GITHUB_REPOSITORY}.git"
echo "Publishing to ${GITHUB_REPOSITORY} on branch ${REMOTE_BRANCH}"
rm -rf docs/_site/
git clone --depth=1 --branch="${REMOTE_BRANCH}" --single-branch --no-checkout \
"${REMOTE_REPO}" docs/_site/
- name: Build site
run: bundle exec jekyll build --source docs --destination docs/_site --verbose --trace
env:
# For jekyll-github-metadata
JEKYLL_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Deploy to GitHub Pages
run: |
SOURCE_COMMIT="$(git log -1 --pretty="%an: %B" "$GITHUB_SHA")"
pushd docs/_site &>/dev/null
: > .nojekyll
git add --all
git -c user.name="${GITHUB_ACTOR}" -c user.email="${GITHUB_ACTOR}@users.noreply.github.com" \
commit --quiet \
--message "Deploy docs from ${GITHUB_SHA}" \
--message "$SOURCE_COMMIT"
git push
popd &>/dev/null

34
.github/workflows/release.yml vendored Normal file
View File

@@ -0,0 +1,34 @@
name: Release Gem
on:
push:
branches:
- master
- "*-stable"
paths:
- "lib/**/version.rb"
jobs:
release:
if: "github.repository_owner == 'jekyll'"
name: "Release Gem (Ruby ${{ matrix.ruby_version }})"
runs-on: "ubuntu-latest"
strategy:
fail-fast: true
matrix:
ruby_version:
- 2.7
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: "Set up Ruby ${{ matrix.ruby_version }}"
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby_version }}
bundler-cache: true
- name: Build and Publish Gem
uses: ashmaroli/release-gem@dist
with:
gemspec_name: jekyll
env:
GEM_HOST_API_KEY: ${{ secrets.RUBYGEMS_GEM_PUSH_API_KEY }}

22
.github/workflows/spelling.yml vendored Normal file
View File

@@ -0,0 +1,22 @@
name: Spell Check
on:
push:
branches:
- master
- "*-stable"
# Switch from `pull_request_target` event to reduce distraction from comments
# regarding errors reported in unmodified files.
pull_request:
branches:
- master
- "*-stable"
jobs:
build:
name: Spell Check
runs-on: "ubuntu-latest"
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Check Spellings
uses: check-spelling/check-spelling@v0.0.19

41
.github/workflows/third-party.yml vendored Normal file
View File

@@ -0,0 +1,41 @@
name: Third-Party Repository Profiling
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
build_n_profile:
if: "!contains(github.event.commits[0].message, '[ci skip]')"
runs-on: 'ubuntu-latest'
env:
BUNDLE_GEMFILE: "sandbox/Gemfile"
BUNDLE_PATH: "vendor/bundle"
BUNDLE_JOBS: 4
BUNDLE_RETRY: 3
steps:
- name: Checkout Jekyll
uses: actions/checkout@v3
with:
fetch-depth: 5
path: jekyll
- name: Checkout Third-Party Repository
uses: actions/checkout@v3
with:
repository: ashmaroli/tomjoht.github.io
path: sandbox
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: 2.7
bundler-cache: true
- name: Run Jekyll Build 3 times
run: |
bundle exec jekyll build -s sandbox -d sandbox/_site --trace
bundle exec jekyll build -s sandbox -d sandbox/_site --trace
bundle exec jekyll build -s sandbox -d sandbox/_site --trace
- name: Memory Analysis of Jekyll Build
run: bundle exec ruby jekyll/.github/workflows/actions/memprof.rb sandbox

28
.gitignore vendored Normal file
View File

@@ -0,0 +1,28 @@
# Jekyll
_site/
*-cache/
.jekyll-metadata
# Ruby
.bundle/
.byebug_history
.ruby-gemset
.ruby-version
*.gem
Gemfile.lock
# Files
.analysis
.DS_Store
*.swp
*~
# Folders
/vendor
bbin/
bin/
coverage
gh-pages/
pkg/
test/dest
tmp/*

3
.jrubyrc Normal file
View File

@@ -0,0 +1,3 @@
backtrace.mask=true
backtrace.color=true
backtrace.style=mri

411
.rubocop.yml Normal file
View File

@@ -0,0 +1,411 @@
---
inherit_from: .rubocop_todo.yml
require:
- rubocop-minitest
- rubocop-performance
- rubocop-rake
- rubocop-rspec
- ./rubocop/jekyll
Jekyll/NoPutsAllowed:
Exclude:
- rake/*.rake
AllCops:
TargetRubyVersion: 2.7
Include:
- lib/**/*.rb
- test/**/*.rb
Exclude:
- bin/**/*
- exe/**/*
- benchmark/**/*
- script/**/*
- vendor/**/*
- tmp/**/*
Gemspec/DateAssignment:
Enabled: true
Layout/BeginEndAlignment:
Enabled: true
Layout/EmptyComment:
Enabled: false
Layout/EmptyLinesAroundAttributeAccessor:
Enabled: true
Layout/EndAlignment:
Severity: error
Layout/FirstArrayElementIndentation:
EnforcedStyle: consistent
Layout/FirstHashElementIndentation:
EnforcedStyle: consistent
Layout/HashAlignment:
EnforcedHashRocketStyle: table
Layout/IndentationWidth:
Severity: error
Layout/LineLength:
Exclude:
- !ruby/regexp /features\/.*.rb/
- Rakefile
- rake/*.rake
- Gemfile
Max: 100
Severity: warning
Layout/MultilineMethodCallIndentation:
EnforcedStyle: indented
Layout/MultilineOperationIndentation:
EnforcedStyle: indented
Layout/SpaceAroundMethodCallOperator:
Enabled: true
Layout/SpaceBeforeBrackets:
Enabled: true
Layout/SpaceInsideHashLiteralBraces:
Enabled: true
Exclude:
- test/**/*.rb
Lint/AmbiguousAssignment:
Enabled: true
Lint/BinaryOperatorWithIdenticalOperands:
Enabled: true
Lint/ConstantDefinitionInBlock:
Enabled: true
Exclude:
- test/**/*.rb
Lint/DeprecatedConstants:
Enabled: true
Lint/DeprecatedOpenSSLConstant:
Enabled: true
Lint/DuplicateBranch:
Enabled: true
Lint/DuplicateElsifCondition:
Enabled: true
Lint/DuplicateRegexpCharacterClassElement:
Enabled: true
Lint/DuplicateRequire:
Enabled: true
Lint/DuplicateRescueException:
Enabled: true
Lint/EmptyBlock:
Enabled: true
Lint/EmptyClass:
Enabled: true
Lint/EmptyConditionalBody:
Enabled: true
Lint/EmptyFile:
Enabled: true
Lint/FloatComparison:
Enabled: true
Lint/HashCompareByIdentity:
Enabled: true
Lint/IdentityComparison:
Enabled: true
Lint/LambdaWithoutLiteralBlock:
Enabled: true
Lint/MissingSuper:
Enabled: false
Lint/MixedRegexpCaptureTypes:
Enabled: false
Lint/NestedPercentLiteral:
Exclude:
- test/test_site.rb
Lint/NoReturnInBeginEndBlocks:
Enabled: true
Lint/NumberedParameterAssignment:
Enabled: true
Lint/OrAssignmentToConstant:
Enabled: true
Lint/OutOfRangeRegexpRef:
Enabled: true
Lint/RaiseException:
Enabled: true
Lint/RedundantDirGlobSort:
Enabled: true
Lint/RedundantSafeNavigation:
Enabled: true
Lint/SelfAssignment:
Enabled: true
Lint/StructNewOverride:
Enabled: true
Lint/SymbolConversion:
Enabled: true
Lint/ToEnumArguments:
Enabled: false
Lint/TopLevelReturnWithArgument:
Enabled: true
Lint/TrailingCommaInAttributeDeclaration:
Enabled: true
Lint/TripleQuotes:
Enabled: true
Lint/UnexpectedBlockArity:
Enabled: true
Lint/UnmodifiedReduceAccumulator:
Enabled: true
Lint/UnreachableCode:
Severity: error
Lint/UnreachableLoop:
Enabled: true
Lint/UselessMethodDefinition:
Enabled: true
Lint/UselessTimes:
Enabled: true
Lint/Void:
Exclude:
- lib/jekyll/site.rb
Metrics/AbcSize:
Max: 23
Metrics/BlockLength:
Exclude:
- test/**/*.rb
- lib/jekyll/configuration.rb
- rake/*.rake
Metrics/ClassLength:
Exclude:
- !ruby/regexp /features\/.*.rb$/
- !ruby/regexp /test\/.*.rb$/
- lib/jekyll/document.rb
- lib/jekyll/site.rb
- lib/jekyll/commands/serve.rb
- lib/jekyll/configuration.rb
Max: 240
Metrics/CyclomaticComplexity:
Exclude:
- lib/jekyll/utils.rb
- lib/jekyll/commands/serve.rb
Max: 11
Metrics/MethodLength:
CountComments: false
Max: 20
Severity: error
Metrics/ModuleLength:
Exclude:
- lib/jekyll/filters.rb
Max: 240
Metrics/ParameterLists:
Max: 4
Metrics/PerceivedComplexity:
Max: 13
Minitest/AssertInDelta:
Enabled: true
Minitest/AssertionInLifecycleHook:
Enabled: true
Minitest/AssertKindOf:
Enabled: true
Minitest/AssertOutput:
Enabled: true
Minitest/AssertPathExists:
Enabled: true
Minitest/AssertSilent:
Enabled: true
Minitest/LiteralAsActualArgument:
Enabled: true
Minitest/TestMethodName:
Enabled: false
Minitest/MultipleAssertions:
Enabled: true
Minitest/RefuteInDelta:
Enabled: true
Minitest/RefuteKindOf:
Enabled: true
Minitest/RefutePathExists:
Enabled: true
Minitest/UnspecifiedException:
Enabled: true
Minitest/AssertEmptyLiteral:
Enabled: false
Naming/FileName:
Enabled: false
Naming/HeredocDelimiterNaming:
Exclude:
- test/**/*.rb
Naming/MemoizedInstanceVariableName:
Exclude:
- lib/jekyll/convertible.rb
- lib/jekyll/drops/site_drop.rb
- lib/jekyll/drops/unified_payload_drop.rb
- lib/jekyll/page_without_a_file.rb
Performance/AncestorsInclude:
Enabled: false
Performance/ArraySemiInfiniteRangeSlice:
Enabled: true
Performance/BigDecimalWithNumericArgument:
Enabled: true
Performance/BlockGivenWithExplicitBlock:
Enabled: true
Performance/ChainArrayAllocation:
Enabled: true
Performance/CollectionLiteralInLoop:
Enabled: true
Performance/ConstantRegexp:
Enabled: true
Performance/MethodObjectAsBlock:
Enabled: true
Performance/RedundantSortBlock:
Enabled: true
Performance/RedundantStringChars:
Enabled: true
Performance/ReverseFirst:
Enabled: true
Performance/SortReverse:
Enabled: false
Performance/Squeeze:
Enabled: true
Performance/StringInclude:
Enabled: true
Exclude:
- lib/jekyll/utils/platforms.rb
Performance/Sum:
Enabled: true
Security/MarshalLoad:
Exclude:
- !ruby/regexp /test\/.*.rb$/
- lib/jekyll/regenerator.rb
Security/YAMLLoad:
Exclude:
- !ruby/regexp /features\/.*.rb/
- !ruby/regexp /test\/.*.rb$/
Style/AccessModifierDeclarations:
Enabled: false
Style/AccessorGrouping:
Enabled: true
Style/Alias:
EnforcedStyle: prefer_alias_method
Style/AndOr:
Severity: error
Style/ArgumentsForwarding:
Enabled: false
Style/ArrayCoercion:
Enabled: true
Style/BisectedAttrAccessor:
Enabled: true
Style/CaseLikeIf:
Enabled: true
Style/StringChars:
Enabled: true
Style/ClassAndModuleChildren:
Exclude:
- test/**/*.rb
Style/ClassEqualityComparison:
Enabled: true
Style/CollectionCompact:
Enabled: true
Style/CombinableLoops:
Enabled: true
Style/DocumentDynamicEvalDefinition:
Enabled: true
Style/Documentation:
Enabled: false
Style/DoubleNegation:
Enabled: false
Style/EndlessMethod:
Enabled: true
Style/ExplicitBlockArgument:
Enabled: false
Style/ExponentialNotation:
Enabled: true
Style/FormatStringToken:
Exclude:
- lib/jekyll/utils/ansi.rb
- lib/jekyll/liquid_renderer/table.rb
- lib/jekyll/profiler.rb
Style/FrozenStringLiteralComment:
EnforcedStyle: always
Style/GlobalStdStream:
Enabled: true
Style/GuardClause:
Enabled: false
Style/HashAsLastArrayItem:
Enabled: true
Style/HashConversion:
Enabled: true
Style/HashEachMethods:
Enabled: true
Style/HashExcept:
Enabled: true
Style/HashLikeCase:
Enabled: true
Style/HashSyntax:
EnforcedStyle: hash_rockets
Severity: error
Style/HashTransformKeys:
Enabled: false
Style/HashTransformValues:
Enabled: true
Style/IfWithBooleanLiteralBranches:
Enabled: true
Style/KeywordParametersOrder:
Enabled: true
Style/MixinUsage:
Exclude:
- test/helper.rb
Style/ModuleFunction:
Enabled: false
Style/MultilineTernaryOperator:
Severity: error
Style/NegatedIfElseCondition:
Enabled: true
Style/NilLambda:
Enabled: true
Style/OptionalBooleanParameter:
Enabled: true
Style/PercentLiteralDelimiters:
PreferredDelimiters:
"%Q": "{}"
"%W": ()
"%q": "{}"
"%r": "!!"
"%s": ()
"%w": ()
"%x": ()
Style/RedundantArgument:
Enabled: true
Style/RedundantAssignment:
Enabled: true
Style/RedundantFetchBlock:
Enabled: false
Style/RedundantFileExtensionInRequire:
Enabled: true
Style/RedundantRegexpCharacterClass:
Enabled: true
Style/RedundantRegexpEscape:
Enabled: true
Style/RedundantSelfAssignment:
Enabled: true
Style/RegexpLiteral:
EnforcedStyle: percent_r
Style/RescueModifier:
Enabled: false
Style/SafeNavigation:
Exclude:
- lib/jekyll/document.rb
Style/SignalException:
EnforcedStyle: only_raise
Style/SingleArgumentDig:
Enabled: true
Style/SlicingWithRange:
Enabled: false
Style/SoleNestedConditional:
Enabled: true
Style/StringConcatenation:
Enabled: true
Exclude:
- lib/jekyll/commands/*.rb
- test/**/*.rb
Style/StringLiterals:
EnforcedStyle: double_quotes
Style/StringLiteralsInInterpolation:
EnforcedStyle: double_quotes
Style/SwapValues:
Enabled: true
Style/SymbolArray:
EnforcedStyle: brackets
Style/TrailingCommaInArrayLiteral:
EnforcedStyleForMultiline: consistent_comma
Style/TrailingCommaInHashLiteral:
EnforcedStyleForMultiline: consistent_comma

25
.rubocop_todo.yml Normal file
View File

@@ -0,0 +1,25 @@
# This configuration was generated by
# `rubocop --auto-gen-config --auto-gen-only-exclude`
# on 2022-04-06 10:48:47 UTC using RuboCop version 1.26.1.
# The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base.
# Note that changes in the inspected code, or installation of new
# versions of RuboCop, may require this file to be generated again.
# Offense count: 1
# This cop supports safe auto-correction (--auto-correct).
Performance/BindCall:
Exclude:
- 'test/helper.rb'
# Offense count: 1
Style/CombinableLoops:
Exclude:
- 'lib/jekyll/tags/post_url.rb'
# Offense count: 1
# Configuration parameters: AllowedMethods.
# AllowedMethods: respond_to_missing?
Style/OptionalBooleanParameter:
Exclude:
- 'lib/jekyll/log_adapter.rb'

128
404.html
View File

@@ -1,128 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link type="application/atom+xml" rel="alternate" href="https://jekyllrb.com/feed.xml" title="Jekyll • Simple, blog-aware, static sites" />
<link type="application/atom+xml" rel="alternate" href="/feed/release.xml" title="Jekyll releases posts" />
<link rel="alternate" type="application/atom+xml" title="Recent commits to Jekylls master branch" href="https://github.com/jekyll/jekyll/commits/master.atom">
<link rel="preload" href="/fonts/lato-v14-latin-300.woff2" as="font" type="font/woff2" crossorigin />
<link rel="preload" href="/fonts/lato-v14-latin-700.woff2" as="font" type="font/woff2" crossorigin />
<link rel="preload" href="/css/screen.css" as="style">
<link rel="stylesheet" href="/css/screen.css">
<link rel="icon" type="image/x-icon" href="/favicon.ico">
<!-- Begin Jekyll SEO tag v2.8.0 -->
<title>Jekyll • Simple, blog-aware, static sites | Transform your plain text into static websites and blogs</title>
<meta name="generator" content="Jekyll v4.4.1" />
<meta property="og:title" content="Jekyll • Simple, blog-aware, static sites" />
<meta property="og:locale" content="en_US" />
<meta name="description" content="Transform your plain text into static websites and blogs" />
<meta property="og:description" content="Transform your plain text into static websites and blogs" />
<link rel="canonical" href="https://jekyllrb.com/404.html" />
<meta property="og:url" content="https://jekyllrb.com/404.html" />
<meta property="og:site_name" content="Jekyll • Simple, blog-aware, static sites" />
<meta property="og:image" content="https://jekyllrb.com/img/jekyll-og.png" />
<meta property="og:type" content="website" />
<meta name="twitter:card" content="summary_large_image" />
<meta property="twitter:image" content="https://jekyllrb.com/img/jekyll-og.png" />
<meta property="twitter:title" content="Jekyll • Simple, blog-aware, static sites" />
<meta name="twitter:site" content="@jekyllrb" />
<meta name="google-site-verification" content="onQcXpAvtHBrUI5LlroHNE_FP0b2qvFyPq7VZw36iEY" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"WebPage","description":"Transform your plain text into static websites and blogs","headline":"Jekyll • Simple, blog-aware, static sites","image":"https://jekyllrb.com/img/jekyll-og.png","publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://jekyllrb.com/img/logo-2x.png"}},"url":"https://jekyllrb.com/404.html"}</script>
<!-- End Jekyll SEO tag -->
<!--[if lt IE 9]>
<script src="/js/html5shiv.min.js"></script>
<script src="/js/respond.min.js"></script>
<![endif]-->
</head>
<body class="wrap">
<header>
<div class="grid">
<div class="unit whole align-center">
<h1>
<a href="/">
<span class="sr-only">Jekyll</span>
<img src="/img/logo-2x.png" width="249" height="115" alt="Jekyll Logo">
</a>
</h1>
</div>
</div>
</header>
<section class="intro">
<div class="grid">
<div class="unit whole align-center">
<p class="first">Huh. It seems that page is<br/>Hyde-ing...</p>
</div>
</div>
</section>
<section class="error">
<div class="grid">
<div class="unit whole align-center">
<p>The resource you requested was not found. Here are some links to help you find your way:</p>
<nav class="main-nav">
<ul>
<li><a href="/">Home</a></li>
<li><a href="/docs/home/">Documentation</a></li>
<li><a href="/news/">News</a></li>
<li><a href="/help/">Help</a></li>
</ul>
</nav>
</div>
</div>
</section>
<script>
/* Creates an anchor element with the given ID and link for the permalink*/
const anchorForId = (id) => {
const anchor = document.createElement("a");
anchor.className = "header-link";
anchor.href = `#${id}`;
anchor.innerHTML = `<span class="sr-only">Permalink</span><i class="fa fa-link" aria-hidden="true"></i>`;
anchor.title = "Permalink";
return anchor;
};
/* Finds all headers of the specified level within the given element, and adds a permalink to each header*/
const linkifyAnchors = (level, containingElement) => {
const headers = Array.from(containingElement.getElementsByTagName(`h${level}`));
headers.forEach((header) => {
if (header.id) {
header.appendChild(anchorForId(header.id));
}
});
};
/* Executes the function when the document is ready */
document.onreadystatechange = () => {
if (document.readyState === "complete") {
const contentBlock = document.getElementsByClassName("docs")[0]
?? document.getElementsByClassName("news")[0];
if (!contentBlock) { return; }
for (let level = 1; level <= 6; level++) {
linkifyAnchors(level, contentBlock);
}
}
};
</script>
<!-- Google Analytics (https://www.google.com/analytics) -->
<script>
!function(j,e,k,y,l,L){j.GoogleAnalyticsObject=y,j[y]||(j[y]=function(){
(j[y].q=j[y].q||[]).push(arguments)}),j[y].l=+new Date,l=e.createElement(k),
L=e.getElementsByTagName(k)[0],l.src='https://www.google-analytics.com/analytics.js',
L.parentNode.insertBefore(l,L)}(window,document,'script','ga');
ga('create', 'UA-50755011-1', 'jekyllrb.com');
ga('send', 'pageview');
</script>
</body>
</html>

49
Earthfile Normal file
View File

@@ -0,0 +1,49 @@
FROM alpine
# Run locally: `earthly +all` to run full CI process
all:
BUILD --build-arg RUBY=3.0 +test
BUILD --build-arg RUBY=2.7 +test
BUILD --build-arg RUBY=2.5 +test
BUILD --build-arg RUBY=jruby:9.2.14.0 +test
BUILD style-check
BUILD profile-docs
# Run locally: `earthly +test`
# Run with specific version: `earthly --build-arg RUBY=2.5 +test`
test:
FROM +deps
RUN script/test
RUN script/cucumber
RUN script/default-site
style-check:
FROM +deps
RUN script/fmt
profile-docs:
FROM +deps
RUN bundle install --jobs 4
RUN script/profile-docs
RUN script/memprof
# Install dependencies and copy in source
# used in above steps
deps:
ARG RUBY=3.0
IF case $RUBY in jruby*) ;; *) false; esac
FROM $RUBY
ENV JRUBY_OPTS="--dev -J-XX:+TieredCompilation -J-XX:TieredStopAtLevel=1 -J-XX:CompileThreshold=10 -J-XX:ReservedCodeCacheSize=128M"
ELSE
FROM ruby:$RUBY
END
WORKDIR /src
RUN apt-get update && apt-get install nodejs dnsutils git make coreutils g++ build-essential -y
RUN gem install bundler
RUN gem install sassc -v '2.4.0' --source 'https://rubygems.org/'
COPY Gemfile .
COPY jekyll.gemspec .
COPY lib/jekyll/version.rb lib/jekyll/version.rb
COPY test test
RUN bundle install --jobs 4
COPY . .

109
Gemfile Normal file
View File

@@ -0,0 +1,109 @@
# frozen_string_literal: true
source "https://rubygems.org"
gemspec :name => "jekyll"
gem "rake", "~> 13.0"
if ENV["LIQUID_VERSION"] && ENV["LIQUID_VERSION"] != ""
gem "liquid", ENV["LIQUID_VERSION"]
end
group :development do
gem "launchy", "~> 2.3"
gem "pry"
gem "pry-byebug" unless RUBY_ENGINE == "jruby"
end
#
group :test do
gem "cucumber", RUBY_VERSION >= "2.5" ? "~> 5.1.2" : "~> 4.1"
gem "httpclient"
gem "jekyll_test_plugin"
gem "jekyll_test_plugin_malicious"
gem "memory_profiler"
gem "nokogiri", "~> 1.7"
gem "rspec"
gem "rspec-mocks"
gem "rubocop", "~> 1.26.0"
gem "rubocop-minitest"
gem "rubocop-performance"
gem "rubocop-rake"
gem "rubocop-rspec"
gem "test-dependency-theme", :path => File.expand_path("test/fixtures/test-dependency-theme", __dir__)
gem "test-theme", :path => File.expand_path("test/fixtures/test-theme", __dir__)
gem "test-theme-skinny", :path => File.expand_path("test/fixtures/test-theme-skinny", __dir__)
gem "test-theme-symlink", :path => File.expand_path("test/fixtures/test-theme-symlink", __dir__)
gem "test-theme-w-empty-data", :path => File.expand_path("test/fixtures/test-theme-w-empty-data", __dir__)
if RUBY_ENGINE == "jruby"
gem "http_parser.rb", "~> 0.6.0"
gem "jruby-openssl"
end
end
#
group :test_legacy do
gem "test-unit" if RUBY_PLATFORM =~ %r!cygwin!
gem "minitest"
gem "minitest-profile"
gem "minitest-reporters"
gem "shoulda"
gem "simplecov"
end
#
group :benchmark do
if ENV["BENCHMARK"]
gem "benchmark-ips"
gem "rbtrace"
gem "ruby-prof"
gem "stackprof"
end
end
#
group :jekyll_optional_dependencies do
gem "jekyll-coffeescript"
gem "jekyll-docs", :path => "../docs" if Dir.exist?("../docs") && ENV["JEKYLL_VERSION"]
gem "jekyll-feed", "~> 0.9"
gem "jekyll-gist"
gem "jekyll-paginate"
gem "jekyll-redirect-from"
gem "kramdown-syntax-coderay"
gem "matrix"
gem "mime-types", "~> 3.0"
gem "rdoc", "~> 6.3.0"
gem "tomlrb"
platforms :ruby, :mswin, :mingw, :x64_mingw do
gem "classifier-reborn", "~> 2.2"
gem "liquid-c", "~> 4.0"
gem "yajl-ruby", "~> 1.4"
end
# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
# and associated library
platforms :jruby, :mswin, :mingw, :x64_mingw do
gem "tzinfo", ENV["TZINFO_VERSION"] if ENV["TZINFO_VERSION"]
gem "tzinfo-data"
end
end
#
group :site do
gem "html-proofer", "~> 3.4" if ENV["PROOF"]
gem "jekyll-avatar"
gem "jekyll-mentions"
gem "jekyll-seo-tag"
gem "jekyll-sitemap"
gem "jemoji"
end

3925
History.markdown Normal file

File diff suppressed because it is too large Load Diff

21
LICENSE Normal file
View File

@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2008-present Tom Preston-Werner and Jekyll contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

83
README.markdown Normal file
View File

@@ -0,0 +1,83 @@
# [Jekyll](https://jekyllrb.com/)
[![Gem Version](https://img.shields.io/gem/v/jekyll.svg)][ruby-gems]
[![Linux Build Status](https://github.com/jekyll/jekyll/workflows/Continuous%20Integration/badge.svg)][ci-workflow]
[![Windows Build status](https://img.shields.io/appveyor/ci/jekyll/jekyll/master.svg?label=Windows%20build)][appveyor]
[![Backers on Open Collective](https://opencollective.com/jekyll/backers/badge.svg)](#backers)
[![Sponsors on Open Collective](https://opencollective.com/jekyll/sponsors/badge.svg)](#sponsors)
[ruby-gems]: https://rubygems.org/gems/jekyll
[ci-workflow]: https://github.com/jekyll/jekyll/actions?query=workflow%3A%22Continuous+Integration%22+branch%3Amaster
[appveyor]: https://ci.appveyor.com/project/jekyll/jekyll/branch/master
Jekyll is a simple, blog-aware, static site generator perfect for personal, project, or organization sites. Think of it like a file-based CMS, without all the complexity. Jekyll takes your content, renders Markdown and Liquid templates, and spits out a complete, static website ready to be served by Apache, Nginx or another web server. Jekyll is the engine behind [GitHub Pages](https://pages.github.com), which you can use to host sites right from your GitHub repositories.
## Philosophy
Jekyll does what you tell it to do — no more, no less. It doesn't try to outsmart users by making bold assumptions, nor does it burden them with needless complexity and configuration. Put simply, Jekyll gets out of your way and allows you to concentrate on what truly matters: your content.
See: [https://jekyllrb.com/philosophy](https://jekyllrb.com/philosophy)
## Getting Started
* [Install](https://jekyllrb.com/docs/installation/) the gem
* Read up about its [Usage](https://jekyllrb.com/docs/usage/) and [Configuration](https://jekyllrb.com/docs/configuration/)
* Take a gander at some existing [Sites](https://github.com/jekyll/jekyll/wiki/sites)
* [Fork](https://github.com/jekyll/jekyll/fork) and [Contribute](https://jekyllrb.com/docs/contributing/) your own modifications
* Have questions? Check out our official forum community [Jekyll Talk](https://talk.jekyllrb.com/) and [`#jekyll` Channel on Libera IRC](https://libera.chat)
## Diving In
* [Migrate](http://import.jekyllrb.com/docs/home/) from your previous system
* Learn how [Front Matter](https://jekyllrb.com/docs/front-matter/) works
* Put information on your site with [Variables](https://jekyllrb.com/docs/variables/)
* Customize the [Permalinks](https://jekyllrb.com/docs/permalinks/) your posts are generated with
* Use the built-in [Liquid Extensions](https://jekyllrb.com/docs/templates/) to make your life easier
* Use custom [Plugins](https://jekyllrb.com/docs/plugins/) to generate content specific to your site
* Watch [video tutorials from Giraffe Academy](https://jekyllrb.com/tutorials/video-walkthroughs/)
## Need help?
If you don't find the answer to your problem in our [docs](https://jekyllrb.com/docs/), or in the [troubleshooting section](https://jekyllrb.com/docs/troubleshooting/), ask the [community](https://jekyllrb.com/docs/community/) for help.
## Code of Conduct
In order to have a more open and welcoming community, Jekyll adheres to a
[code of conduct](https://jekyllrb.com/docs/conduct/) adapted from the Ruby on Rails code of
conduct.
Please adhere to this code of conduct in any interactions you have in the
Jekyll community. It is strictly enforced on all official Jekyll
repositories, websites, and resources. If you encounter someone violating
these terms, please let one of our [core team members](https://jekyllrb.com/team/#core-team) know and we will address it as soon as possible.
## Credits
### Sponsors
Support this project by becoming a sponsor. Your logo will show up in this README with a link to your website. [Become a sponsor!](https://opencollective.com/jekyll#sponsor)
[![Jekyll Sponsor 0](https://opencollective.com/jekyll/sponsor/0/avatar.svg)](https://opencollective.com/jekyll/sponsor/0/website)
[![Jekyll Sponsor 1](https://opencollective.com/jekyll/sponsor/1/avatar.svg)](https://opencollective.com/jekyll/sponsor/1/website)
[![Jekyll Sponsor 2](https://opencollective.com/jekyll/sponsor/2/avatar.svg)](https://opencollective.com/jekyll/sponsor/2/website)
[![Jekyll Sponsor 3](https://opencollective.com/jekyll/sponsor/3/avatar.svg)](https://opencollective.com/jekyll/sponsor/3/website)
[![Jekyll Sponsor 4](https://opencollective.com/jekyll/sponsor/4/avatar.svg)](https://opencollective.com/jekyll/sponsor/4/website)
[![Jekyll Sponsor 5](https://opencollective.com/jekyll/sponsor/5/avatar.svg)](https://opencollective.com/jekyll/sponsor/5/website)
[![Jekyll Sponsor 6](https://opencollective.com/jekyll/sponsor/6/avatar.svg)](https://opencollective.com/jekyll/sponsor/6/website)
[![Jekyll Sponsor 7](https://opencollective.com/jekyll/sponsor/7/avatar.svg)](https://opencollective.com/jekyll/sponsor/7/website)
[![Jekyll Sponsor 8](https://opencollective.com/jekyll/sponsor/8/avatar.svg)](https://opencollective.com/jekyll/sponsor/8/website)
[![Jekyll Sponsor 9](https://opencollective.com/jekyll/sponsor/9/avatar.svg)](https://opencollective.com/jekyll/sponsor/9/website)
### Contributors
This project exists thanks to all the people who contribute.
[![Jekyll Contributors](https://opencollective.com/jekyll/contributors.svg?width=890&button=false)](../../graphs/contributors)
### Backers
Thank you to all our backers! 🙏 [Become a backer](https://opencollective.com/jekyll#backer)
[![Jekyll Backers](https://opencollective.com/jekyll/backers.svg?width=890)](https://opencollective.com/jekyll#backers)
## License
See the [LICENSE](https://github.com/jekyll/jekyll/blob/master/LICENSE) file.

163
Rakefile Normal file
View File

@@ -0,0 +1,163 @@
# frozen_string_literal: true
require "rubygems"
require "rake"
require "rdoc"
require "date"
require "yaml"
$LOAD_PATH.unshift File.expand_path("lib", __dir__)
require "jekyll/version"
Dir.glob("rake/**.rake").each { |f| import f }
#############################################################################
#
# Helper functions
#
#############################################################################
def name
"jekyll"
end
def version
Jekyll::VERSION
end
def docs_name
"#{name}-docs"
end
def docs_folder
"docs"
end
def gemspec_file
"#{name}.gemspec"
end
def gem_file
"#{name}-#{Gem::Version.new(version)}.gem"
end
def normalize_bullets(markdown)
markdown.gsub(%r!\n\s{2}\*{1}!, "\n-")
end
def linkify_prs(markdown)
markdown.gsub(%r!(?<\!&)#(\d+)!) do |word|
"[#{word}]({{ site.repository }}/issues/#{word.delete("#")})"
end
end
def linkify(markdown)
linkify_prs(markdown)
end
def liquid_escape(markdown)
markdown.gsub(%r!(`{[{%].+[}%]}`)!, "{% raw %}\\1{% endraw %}")
end
def custom_release_header_anchors(markdown)
header_regexp = %r!^(\d{1,2})\.(\d{1,2})\.(\d{1,2}) \/ \d{4}-\d{2}-\d{2}!
section_regexp = %r!^### \w+ \w+$!
markdown.split(%r!^##\s!).map do |release_notes|
_, major, minor, patch = *release_notes.match(header_regexp)
release_notes
.gsub(header_regexp, "\\0\n{: #v\\1-\\2-\\3}")
.gsub(section_regexp) { |section| "#{section}\n{: ##{slugify(section)}-v#{major}-#{minor}-#{patch}}" }
end.join("\n## ")
end
def slugify(header)
header.delete("#").strip.downcase.gsub(%r!\s+!, "-")
end
def remove_head_from_history(markdown)
index = markdown =~ %r!^##\s+\d+\.\d+\.\d+!
markdown[index..-1]
end
def converted_history(markdown)
remove_head_from_history(
custom_release_header_anchors(
liquid_escape(
linkify(
normalize_bullets(markdown)
)
)
)
)
end
def siteify_file(file, overrides_front_matter = {})
abort "You seem to have misplaced your #{file} file. I can haz?" unless File.exist?(file)
title = begin
File.read(file).match(%r!\A# (.*)$!)[1]
rescue NoMethodError
File.basename(file, ".*").downcase.capitalize
end
slug = File.basename(file, ".markdown").downcase
front_matter = {
"title" => title,
"permalink" => "/docs/#{slug}/",
"note" => "This file is autogenerated. Edit /#{file} instead.",
}.merge(overrides_front_matter)
contents = "#{front_matter.to_yaml}---\n\n#{content_for(file)}"
File.write("#{docs_folder}/_docs/#{slug}.md", contents)
end
def content_for(file)
contents = File.read(file)
case file
when "History.markdown"
converted_history(contents)
else
contents.gsub(%r!\A# .*\n\n?!, "")
end
end
#############################################################################
#
# Standard tasks
#
#############################################################################
multitask :default => [:test, :features]
task :spec => :test
require "rake/testtask"
Rake::TestTask.new(:test) do |test|
test.libs << "lib" << "test"
test.pattern = "test/**/test_*.rb"
test.verbose = true
end
require "rdoc/task"
Rake::RDocTask.new do |rdoc|
rdoc.rdoc_dir = "rdoc"
rdoc.title = "#{name} #{version}"
rdoc.rdoc_files.include("README*")
rdoc.rdoc_files.include("lib/**/*.rb")
end
begin
require "cucumber/rake/task"
Cucumber::Rake::Task.new(:features) do |t|
t.profile = "travis"
end
Cucumber::Rake::Task.new(:"features:html", "Run Cucumber features and produce HTML output") do |t|
t.profile = "html_report"
end
rescue LoadError
desc "Cucumber rake task not available"
task :features do
abort "Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin"
end
end
desc "Open an irb session preloaded with this library"
task :console do
sh "irb -r ./lib/#{name}.rb"
end

47
appveyor.yml Normal file
View File

@@ -0,0 +1,47 @@
version: "{build}"
clone_depth: 5
branches:
only:
- master
- themes
- /.*-stable/
build: off
environment:
BUNDLE_WITHOUT: "benchmark:development"
matrix:
- RUBY_FOLDER_VER: "26"
TZINFO_VERSION: "~> 1.2"
TEST_SUITE: "test"
- RUBY_FOLDER_VER: "26"
TZINFO_VERSION: "~> 2.0"
TEST_SUITE: "test"
- RUBY_FOLDER_VER: "26"
TEST_SUITE: "default-site"
- RUBY_FOLDER_VER: "26"
TEST_SUITE: "profile-docs"
- RUBY_FOLDER_VER: "26"
TEST_SUITE: "memprof"
- RUBY_FOLDER_VER: "26"
TZINFO_VERSION: "~> 1.2"
TEST_SUITE: "cucumber"
- RUBY_FOLDER_VER: "26"
TZINFO_VERSION: "~> 2.0"
TEST_SUITE: "cucumber"
install:
- SET PATH=C:\Ruby%RUBY_FOLDER_VER%-x64\bin;%PATH%
- bundle install --retry 5 --jobs=%NUMBER_OF_PROCESSORS% --clean --path vendor\bundle
test_script:
- ruby --version
- gem --version
- bundler --version
- bash ./script/cibuild
cache:
# If one of the files after the right arrow changes, cache will be invalidated
- 'vendor\bundle -> appveyor.yml,Gemfile,jekyll.gemspec'

21
benchmark/capture-assign.rb Executable file
View File

@@ -0,0 +1,21 @@
#!/usr/bin/env ruby
require "liquid"
require "benchmark/ips"
puts "Ruby #{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"
puts "Liquid #{Liquid::VERSION}"
template1 = '{% capture foobar %}foo{{ bar }}{% endcapture %}{{ foo }}{{ foobar }}'
template2 = '{% assign foobar = "foo" | append: bar %}{{ foobar }}'
def render(template)
Liquid::Template.parse(template).render("bar" => "42")
end
puts render(template1)
puts render(template2)
Benchmark.ips do |x|
x.report('capture') { render(template1) }
x.report('assign') { render(template2) }
end

101
benchmark/conditional_liquid.rb Executable file
View File

@@ -0,0 +1,101 @@
#!/usr/bin/env ruby
# frozen_string_literal: true
require "liquid"
require "benchmark/ips"
# Test if processing content string without any Liquid constructs, via Liquid,
# is slower than checking whether constructs exist ( using `String#include?` )
# and return-ing the "plaintext" content string as is..
#
# Ref: https://github.com/jekyll/jekyll/pull/6735
# Sample contents
WITHOUT_LIQUID = <<-TEXT.freeze
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce auctor libero at
pharetra tempus. Etiam bibendum magna et metus fermentum, eu cursus lorem
mattis. Curabitur vel dui et lacus rutrum suscipit et eget neque.
Nullam luctus fermentum est id blandit. Phasellus consectetur ullamcorper
ligula, at finibus eros laoreet id. Etiam sit amet est in libero efficitur
tristique. Ut nec magna augue. Quisque ut fringilla lacus, ac dictum enim.
Aliquam vel ornare mauris. Suspendisse ornare diam tempor nulla facilisis
aliquet. Sed ultrices placerat ultricies.
TEXT
WITH_LIQUID = <<-LIQUID.freeze
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce auctor libero at
pharetra tempus. {{ author }} et metus fermentum, eu cursus lorem
mattis. Curabitur vel dui et lacus rutrum suscipit et eget neque.
Nullam luctus fermentum est id blandit. Phasellus consectetur ullamcorper
ligula, {% if author == "Jane Doe" %} at finibus eros laoreet id. {% else %}
Etiam sit amet est in libero efficitur.{% endif %}
tristique. Ut nec magna augue. Quisque ut fringilla lacus, ac dictum enim.
Aliquam vel ornare mauris. Suspendisse ornare diam tempor nulla facilisis
aliquet. Sed ultrices placerat ultricies.
LIQUID
WITH_JUST_LIQUID_VAR = <<-LIQUID.freeze
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce auctor libero at
pharetra tempus. et metus fermentum, eu cursus lorem, ac dictum enim.
mattis. Curabitur vel dui et lacus rutrum suscipit et {{ title }} neque.
Nullam luctus fermentum est id blandit. Phasellus consectetur ullamcorper
ligula, at finibus eros laoreet id. Etiam sit amet est in libero efficitur.
tristique. Ut nec magna augue. {{ author }} Quisque ut fringilla lacus
Aliquam vel ornare mauris. Suspendisse ornare diam tempor nulla facilisis
aliquet. Sed ultrices placerat ultricies.
LIQUID
SUITE = {
:"plain text" => WITHOUT_LIQUID,
:"tags n vars" => WITH_LIQUID,
:"just vars" => WITH_JUST_LIQUID_VAR,
}.freeze
# Mimic how Jekyll's LiquidRenderer would process a non-static file, with
# some dummy payload
def always_liquid(content)
Liquid::Template.error_mode = :warn
Liquid::Template.parse(content, :line_numbers => true).render(
"author" => "John Doe",
"title" => "FooBar"
)
end
# Mimic how the proposed change would first execute a couple of checks and
# proceed to process with Liquid if necessary
def conditional_liquid(content)
return content if content.nil? || content.empty?
return content unless content.include?("{%") || content.include?("{{")
always_liquid(content)
end
# Test https://github.com/jekyll/jekyll/pull/6735#discussion_r165499868
# ------------------------------------------------------------------------
def check_with_regex(content)
!content.to_s.match?(%r!{[{%]!)
end
def check_with_builtin(content)
content.include?("{%") || content.include?("{{")
end
SUITE.each do |key, text|
Benchmark.ips do |x|
x.report("regex-check - #{key}") { check_with_regex(text) }
x.report("builtin-check - #{key}") { check_with_builtin(text) }
x.compare!
end
end
# ------------------------------------------------------------------------
# Let's roll!
SUITE.each do |key, text|
Benchmark.ips do |x|
x.report("always thru liquid - #{key}") { always_liquid(text) }
x.report("conditional liquid - #{key}") { conditional_liquid(text) }
x.compare!
end
end

16
benchmark/end-with-vs-regexp Executable file
View File

@@ -0,0 +1,16 @@
#!/usr/bin/env ruby
require 'benchmark/ips'
Benchmark.ips do |x|
path_without_ending_slash = '/some/very/very/long/path/to/a/file/i/like'
x.report('no slash regexp') { path_without_ending_slash =~ /\/$/ }
x.report('no slash end_with?') { path_without_ending_slash.end_with?("/") }
x.report('no slash [-1, 1]') { path_without_ending_slash[-1, 1] == "/" }
end
Benchmark.ips do |x|
path_with_ending_slash = '/some/very/very/long/path/to/a/file/i/like/'
x.report('slash regexp') { path_with_ending_slash =~ /\/$/ }
x.report('slash end_with?') { path_with_ending_slash.end_with?("/") }
x.report('slash [-1, 1]') { path_with_ending_slash[-1, 1] == "/" }
end

View File

@@ -0,0 +1,54 @@
#!/usr/bin/env ruby
require 'benchmark/ips'
# For this pull request, which changes Page#dir
# https://github.com/jekyll/jekyll/pull/4403
FORWARD_SLASH = '/'.freeze
def pre_pr(url)
url[-1, 1] == FORWARD_SLASH ? url : File.dirname(url)
end
def pr(url)
if url.end_with?(FORWARD_SLASH)
url
else
url_dir = File.dirname(url)
url_dir.end_with?(FORWARD_SLASH) ? url_dir : "#{url_dir}/"
end
end
def envygeeks(url)
return url if url.end_with?(FORWARD_SLASH) || url == FORWARD_SLASH
url = File.dirname(url)
url == FORWARD_SLASH ? url : "#{url}/"
end
# Just a slash
Benchmark.ips do |x|
path = '/'
x.report("pre_pr:#{path}") { pre_pr(path) }
x.report("pr:#{path}") { pr(path) }
x.report("envygeeks:#{path}") { pr(path) }
x.compare!
end
# No trailing slash
Benchmark.ips do |x|
path = '/some/very/very/long/path/to/a/file/i/like'
x.report("pre_pr:#{path}") { pre_pr(path) }
x.report("pr:#{path}") { pr(path) }
x.report("envygeeks:#{path}") { pr(path) }
x.compare!
end
# No trailing slash
Benchmark.ips do |x|
path = '/some/very/very/long/path/to/a/file/i/like/'
x.report("pre_pr:#{path}") { pre_pr(path) }
x.report("pr:#{path}") { pr(path) }
x.report("envygeeks:#{path}") { pr(path) }
x.compare!
end

View File

@@ -0,0 +1,49 @@
#!/usr/bin/env ruby
# frozen_string_literal: true
require 'benchmark/ips'
require_relative '../lib/jekyll'
puts ''
print 'Setting up... '
SITE = Jekyll::Site.new(
Jekyll.configuration({
"source" => File.expand_path("../docs", __dir__),
"destination" => File.expand_path("../docs/_site", __dir__),
"disable_disk_cache" => true,
"quiet" => true,
})
)
TEMPLATE_1 = Liquid::Template.parse(<<~HTML)
{%- assign doc = site.documents | where: 'url', '/docs/assets/' | first -%}
{{- doc.title -}}
HTML
TEMPLATE_2 = Liquid::Template.parse(<<~HTML)
{%- assign doc = site.documents | find: 'url', '/docs/assets/' -%}
{{- doc.title -}}
HTML
[:reset, :read, :generate].each { |phase| SITE.send(phase) }
puts 'done.'
puts 'Testing... '
puts " #{'where + first'.cyan} results in #{TEMPLATE_1.render(SITE.site_payload).inspect.green}"
puts " #{'find'.cyan} results in #{TEMPLATE_2.render(SITE.site_payload).inspect.green}"
if TEMPLATE_1.render(SITE.site_payload) == TEMPLATE_2.render(SITE.site_payload)
puts 'Success! Proceeding to run benchmarks.'.green
puts ''
else
puts 'Something went wrong. Aborting.'.magenta
puts ''
return
end
Benchmark.ips do |x|
x.report('where + first') { TEMPLATE_1.render(SITE.site_payload) }
x.report('find') { TEMPLATE_2.render(SITE.site_payload) }
x.compare!
end

17
benchmark/flat-map Executable file
View File

@@ -0,0 +1,17 @@
#!/usr/bin/env ruby
require 'benchmark/ips'
enum = (0..50).to_a
nested = enum.map { |i| [i] }
def do_thing(blah)
blah * 1
end
Benchmark.ips do |x|
x.report('.map.flatten with nested arrays') { nested.map { |i| do_thing(i) }.flatten(1) }
x.report('.flat_map with nested arrays') { nested.flat_map { |i| do_thing(i) } }
x.report('.map.flatten with no nested arrays') { enum.map { |i| do_thing(i) }.flatten(1) }
x.report('.flat_map with no nested arrays') { enum.flat_map { |i| do_thing(i) } }
end

10
benchmark/hash-fetch Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/env ruby
require 'benchmark/ips'
h = {:bar => 'uco'}
Benchmark.ips do |x|
x.report('fetch with no block') { h.fetch(:bar, (0..9).to_a) }
x.report('fetch with a block') { h.fetch(:bar) { (0..9).to_a } }
x.report('brackets with an ||') { h[:bar] || (0..9).to_a }
end

46
benchmark/jekyll-sanitize-path Executable file
View File

@@ -0,0 +1,46 @@
#!/usr/bin/env ruby
require_relative '../lib/jekyll'
require 'benchmark/ips'
base_directory = Dir.pwd
Benchmark.ips do |x|
#
# Does not include the base_directory
#
x.report('with no questionable path') do
Jekyll.sanitized_path(base_directory, '')
end
x.report('with a single-part questionable path') do
Jekyll.sanitized_path(base_directory, 'thingy')
end
x.report('with a multi-part questionable path') do
Jekyll.sanitized_path(base_directory, 'thingy/in/my/soup')
end
x.report('with a single-part traversal path') do
Jekyll.sanitized_path(base_directory, '../thingy')
end
x.report('with a multi-part traversal path') do
Jekyll.sanitized_path(base_directory, '../thingy/in/my/../../soup')
end
#
# Including the base_directory
#
x.report('with the exact same paths') do
Jekyll.sanitized_path(base_directory, base_directory)
end
x.report('with a single-part absolute path including the base_directory') do
Jekyll.sanitized_path(base_directory, File.join(base_directory, 'thingy'))
end
x.report('with a multi-part absolute path including the base_directory') do
Jekyll.sanitized_path(base_directory, File.join(base_directory, 'thingy/in/my/soup'))
end
x.report('with a single-part traversal path including the base_directory') do
Jekyll.sanitized_path(base_directory, File.join(base_directory, 'thingy/..'))
end
x.report('with a multi-part traversal path including the base_directory') do
Jekyll.sanitized_path(base_directory, File.join('thingy/in/my/../../soup'))
end
end

29
benchmark/local-require Executable file
View File

@@ -0,0 +1,29 @@
#!/usr/bin/env ruby
# frozen_string_literal: true
require 'benchmark/ips'
require 'jekyll'
require 'json'
DATA = {"foo"=>"bar", "alpha"=>{"beta"=>"gamma"}, "lipsum"=>["lorem", "ipsum", "dolor"]}
def local_require
require 'json'
JSON.pretty_generate(DATA)
end
def global_require
JSON.pretty_generate(DATA)
end
def graceful_require
Jekyll::External.require_with_graceful_fail("json")
JSON.pretty_generate(DATA)
end
Benchmark.ips do |x|
x.report("local-require") { local_require }
x.report("global-require") { global_require }
x.report("graceful-require") { graceful_require }
x.compare!
end

View File

@@ -0,0 +1,33 @@
#!/usr/bin/env ruby
# -------------------------------------------------------------------
# Benchmarking changes in https://github.com/jekyll/jekyll/pull/6767
# -------------------------------------------------------------------
require 'benchmark/ips'
require 'pathutil'
DOC_PATH = File.join(File.expand_path(__dir__), "_puppies", "rover.md")
COL_PATH = File.join(File.expand_path(__dir__), "_puppies")
def pathutil_relative
Pathutil.new(DOC_PATH).relative_path_from(COL_PATH).to_s
end
def native_relative
DOC_PATH.sub("#{COL_PATH}/", "")
end
if pathutil_relative == native_relative
Benchmark.ips do |x|
x.report("pathutil") { pathutil_relative }
x.report("native") { native_relative }
x.compare!
end
else
print "PATHUTIL: "
puts pathutil_relative
print "NATIVE: "
puts native_relative
end

25
benchmark/parse-date Executable file
View File

@@ -0,0 +1,25 @@
#!/usr/bin/env ruby
require_relative '../lib/jekyll'
require 'benchmark/ips'
date = "2014-08-02 14:43:06 PDT".freeze
time = Time.parse(date)
Benchmark.ips do |x|
x.report('Time.parse') do
Time.parse(date)
end
x.report('localtime') do
Time.parse(date).localtime
end
x.report('localtime parsed') do
time.localtime
end
x.report('Utils.parse_date') do
Jekyll::Utils.parse_date(date)
end
end

View File

@@ -0,0 +1,91 @@
#!/usr/bin/env ruby
# frozen_string_literal: true
# For pull request: https://github.com/jekyll/jekyll/pull/8192
require 'benchmark/ips'
require 'bundler/setup'
require 'memory_profiler'
require 'jekyll'
CONTEXT = {"bar"=>"The quick brown fox"}
MARKUP_1 = %Q(foo=bar lorem="ipsum \\"dolor\\"" alpha='beta \\'gamma\\'').freeze
MARKUP_2 = %Q(foo=bar lorem="ipsum 'dolor'" alpha='beta "gamma"').freeze
#
def old_parse_params(markup)
params = {}
while (match = Jekyll::Tags::IncludeTag::VALID_SYNTAX.match(markup))
markup = markup[match.end(0)..-1]
value = if match[2]
match[2].gsub('\\"', '"')
elsif match[3]
match[3].gsub("\\'", "'")
elsif match[4]
CONTEXT[match[4]]
end
params[match[1]] = value
end
params
end
def new_parse_params(markup)
params = {}
markup.scan(Jekyll::Tags::IncludeTag::VALID_SYNTAX) do |key, d_quoted, s_quoted, variable|
value = if d_quoted
d_quoted.include?('\\"') ? d_quoted.gsub('\\"', '"') : d_quoted
elsif s_quoted
s_quoted.include?("\\'") ? s_quoted.gsub("\\'", "'") : s_quoted
elsif variable
CONTEXT[variable]
end
params[key] = value
end
params
end
#
def report(label, markup, color)
prof_report = MemoryProfiler.report { yield }
allocated_memory = prof_report.scale_bytes(prof_report.total_allocated_memsize)
allocated_objects = prof_report.total_allocated
retained_memory = prof_report.scale_bytes(prof_report.total_retained_memsize)
retained_objects = prof_report.total_retained
puts <<~MSG.send(color)
#{(label + " ").ljust(49, "-")}
MARKUP: #{markup}
RESULT: #{yield}
Total allocated: #{allocated_memory} (#{allocated_objects} objects)
Total retained: #{retained_memory} (#{retained_objects} objects)
MSG
end
report('old w/ escaping', MARKUP_1, :magenta) { old_parse_params(MARKUP_1) }
report('new w/ escaping', MARKUP_1, :cyan) { new_parse_params(MARKUP_1) }
report('old no escaping', MARKUP_2, :green) { old_parse_params(MARKUP_2) }
report('new no escaping', MARKUP_2, :yellow) { new_parse_params(MARKUP_2) }
#
Benchmark.ips do |x|
x.report("old + esc".magenta) { old_parse_params(MARKUP_1) }
x.report("new + esc".cyan) { new_parse_params(MARKUP_1) }
x.compare!
end
Benchmark.ips do |x|
x.report("old - esc".green) { old_parse_params(MARKUP_2) }
x.report("new - esc".yellow) { new_parse_params(MARKUP_2) }
x.compare!
end

65
benchmark/path-manager.rb Normal file
View File

@@ -0,0 +1,65 @@
# frozen_string_literal: true
require 'benchmark/ips'
require 'jekyll'
class FooPage
def initialize(dir:, name:)
@dir = dir
@name = name
end
def slow_path
File.join(*[@dir, @name].map(&:to_s).reject(&:empty?)).sub(%r!\A/!, "")
end
def fast_path
Jekyll::PathManager.join(@dir, @name).sub(%r!\A/!, "")
end
end
nil_page = FooPage.new(:dir => nil, :name => nil)
empty_page = FooPage.new(:dir => "", :name => "")
root_page = FooPage.new(:dir => "", :name => "ipsum.md")
nested_page = FooPage.new(:dir => "lorem", :name => "ipsum.md")
slashed_page = FooPage.new(:dir => "/lorem/", :name => "/ipsum.md")
if nil_page.slow_path == nil_page.fast_path
Benchmark.ips do |x|
x.report('nil_page slow') { nil_page.slow_path }
x.report('nil_page fast') { nil_page.fast_path }
x.compare!
end
end
if empty_page.slow_path == empty_page.fast_path
Benchmark.ips do |x|
x.report('empty_page slow') { empty_page.slow_path }
x.report('empty_page fast') { empty_page.fast_path }
x.compare!
end
end
if root_page.slow_path == root_page.fast_path
Benchmark.ips do |x|
x.report('root_page slow') { root_page.slow_path }
x.report('root_page fast') { root_page.fast_path }
x.compare!
end
end
if nested_page.slow_path == nested_page.fast_path
Benchmark.ips do |x|
x.report('nested_page slow') { nested_page.slow_path }
x.report('nested_page fast') { nested_page.fast_path }
x.compare!
end
end
if slashed_page.slow_path == slashed_page.fast_path
Benchmark.ips do |x|
x.report('slashed_page slow') { slashed_page.slow_path }
x.report('slashed_page fast') { slashed_page.fast_path }
x.compare!
end
end

15
benchmark/proc-call-vs-yield Executable file
View File

@@ -0,0 +1,15 @@
#!/usr/bin/env ruby
require 'benchmark/ips'
def fast
yield
end
def slow(&block)
block.call
end
Benchmark.ips do |x|
x.report('yield') { fast { (0..9).to_a } }
x.report('block.call') { slow { (0..9).to_a } }
end

51
benchmark/regexp-vs-include.rb Executable file
View File

@@ -0,0 +1,51 @@
#!/usr/bin/env ruby
require 'benchmark/ips'
# For this pull request, which changes Page#dir
# https://github.com/jekyll/jekyll/pull/4403
CONTENT_CONTAINING = <<-HTML.freeze
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="UTF-8">
<title>Jemoji</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="stylesheet" href="/css/screen.css">
</head>
<body class="wrap">
<p><img class="emoji" title=":+1:" alt=":+1:" src="https://assets.github.com/images/icons/emoji/unicode/1f44d.png" height="20" width="20" align="absmiddle"></p>
</body>
</html>
HTML
CONTENT_NOT_CONTAINING = <<-HTML.freeze
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="UTF-8">
<title>Jemoji</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="stylesheet" href="/css/screen.css">
</head>
<body class="wrap">
<p><img class="emoji" title=":+1:" alt=":+1:" src="https://assets.github.com/images/icons/emoji/unicode/1f44d.png" height="20" width="20" align="absmiddle"></p>
</body>
</html>
HTML
Benchmark.ips do |x|
x.report("no body include?") { CONTENT_NOT_CONTAINING.include?('<body') }
x.report("no body regexp") { CONTENT_NOT_CONTAINING =~ /<\s*body/ }
x.compare!
end
# No trailing slash
Benchmark.ips do |x|
x.report("with body include?") { CONTENT_CONTAINING.include?('<body') }
x.report("with body regexp") { CONTENT_CONTAINING =~ /<\s*body/ }
x.compare!
end

26
benchmark/sanitize-url.rb Executable file
View File

@@ -0,0 +1,26 @@
#!/usr/bin/env ruby
require "benchmark/ips"
PATH = "/../../..../...//.....//lorem/ipsum//dolor///sit.xyz"
def sanitize_with_regex
"/" + PATH.gsub(%r!/{2,}!, "/").gsub(%r!\.+/|\A/+!, "")
end
def sanitize_with_builtin
"/#{PATH}".gsub("..", "/").gsub("./", "").squeeze("/")
end
if sanitize_with_regex == sanitize_with_builtin
Benchmark.ips do |x|
x.report("sanitize w/ regexes") { sanitize_with_regex }
x.report("sanitize w/ builtin") { sanitize_with_builtin }
x.compare!
end
else
puts "w/ regexes: #{sanitize_with_regex}"
puts "w/ builtin: #{sanitize_with_builtin}"
puts ""
puts "Thank you. Do try again :("
end

View File

@@ -0,0 +1,110 @@
#!/usr/bin/env ruby
# frozen_string_literal: true
#
# The Ruby documentation for #sort_by describes what's called a Schwartzian transform:
#
# > A more efficient technique is to cache the sort keys (modification times in this case)
# > before the sort. Perl users often call this approach a Schwartzian transform, after
# > Randal Schwartz. We construct a temporary array, where each element is an array
# > containing our sort key along with the filename. We sort this array, and then extract
# > the filename from the result.
# > This is exactly what sort_by does internally.
#
# The well-documented efficiency of sort_by is a good reason to use it. However, when a property
# does not exist on an item being sorted, it can cause issues (no nil's allowed!)
# In Jekyll::Filters#sort_input, we extract the property in each iteration of #sort,
# which is quite inefficient! How inefficient? This benchmark will tell you just how, and how much
# it can be improved by using the Schwartzian transform. Thanks, Randall!
require 'benchmark/ips'
require 'minitest'
require File.expand_path("../lib/jekyll", __dir__)
def site
@site ||= Jekyll::Site.new(
Jekyll.configuration("source" => File.expand_path("../docs", __dir__))
).tap(&:reset).tap(&:read)
end
def site_docs
site.collections["docs"].docs.dup
end
def sort_by_property_directly(docs, meta_key)
docs.sort! do |apple, orange|
apple_property = apple[meta_key]
orange_property = orange[meta_key]
if !apple_property.nil? && !orange_property.nil?
apple_property <=> orange_property
elsif !apple_property.nil? && orange_property.nil?
-1
elsif apple_property.nil? && !orange_property.nil?
1
else
apple <=> orange
end
end
end
def schwartzian_transform(docs, meta_key)
docs.collect! { |d|
[d[meta_key], d]
}.sort! { |apple, orange|
if !apple[0].nil? && !orange[0].nil?
apple.first <=> orange.first
elsif !apple[0].nil? && orange[0].nil?
-1
elsif apple[0].nil? && !orange[0].nil?
1
else
apple[-1] <=> orange[-1]
end
}.collect! { |d| d[-1] }
end
# Before we test efficiency, do they produce the same output?
class Correctness
include Minitest::Assertions
require "pp"
define_method :mu_pp, &:pretty_inspect
attr_accessor :assertions
def initialize(docs, property)
@assertions = 0
@docs = docs
@property = property
end
def assert!
assert sort_by_property_directly(@docs, @property).is_a?(Array), "sort_by_property_directly must return an array"
assert schwartzian_transform(@docs, @property).is_a?(Array), "schwartzian_transform must return an array"
assert_equal sort_by_property_directly(@docs, @property),
schwartzian_transform(@docs, @property)
puts "Yeah, ok, correctness all checks out for property #{@property.inspect}"
end
end
Correctness.new(site_docs, "redirect_from".freeze).assert!
Correctness.new(site_docs, "title".freeze).assert!
def property(property, meta_key)
Benchmark.ips do |x|
x.config(time: 10, warmup: 5)
x.report("sort_by_property_directly with #{property} property") do
sort_by_property_directly(site_docs, meta_key)
end
x.report("schwartzian_transform with #{property} property") do
schwartzian_transform(site_docs, meta_key)
end
x.compare!
end
end
# First, test with a property only a handful of documents have.
test_property('sparse', 'redirect_from')
# Next, test with a property they all have.
test_property('non-sparse', 'title')

12
benchmark/sequential-assignment Executable file
View File

@@ -0,0 +1,12 @@
#!/usr/bin/env ruby
require 'benchmark/ips'
Benchmark.ips do |x|
x.report('parallel assignment') do
a, b = 1, 2
end
x.report('multi-line assignment') do
a = 1
b = 2
end
end

View File

@@ -0,0 +1,83 @@
#!/usr/bin/env ruby
# frozen_string_literal: true
require "forwardable"
require "colorator"
require "liquid"
require "benchmark/ips"
require "memory_profiler"
# Set up (memory) profiler
class Profiler
def self.run
yield new(ARGV[0] || 10_000)
end
def initialize(count)
@count = count.to_i
end
def report(label, color, &block)
prof_report = MemoryProfiler.report { @count.to_i.times(&block) }
allocated_memory = prof_report.scale_bytes(prof_report.total_allocated_memsize)
allocated_objects = prof_report.total_allocated
retained_memory = prof_report.scale_bytes(prof_report.total_retained_memsize)
retained_objects = prof_report.total_retained
puts <<~MSG.send(color)
With #{label} calls
Total allocated: #{allocated_memory} (#{allocated_objects} objects)
Total retained: #{retained_memory} (#{retained_objects} objects)
MSG
end
end
# Set up stage
class Drop < Liquid::Drop
def initialize(obj)
@obj = obj
end
end
class ForwardDrop < Drop
extend Forwardable
def_delegators :@obj, :name
end
class StaticDrop < Drop
def name
@obj.name
end
end
class Document
def name
"lipsum"
end
end
# Set up actors
document = Document.new
alpha = ForwardDrop.new(document)
beta = StaticDrop.new(document)
count = ARGV[0] || 10_000
# Run profilers
puts "\nMemory profiles for #{count} calls to invoke drop key:"
Profiler.run do |x|
x.report("forwarded", :cyan) { alpha["name"] }
x.report("static", :green) { beta["name"] }
end
# Benchmark
puts "\nBenchmarking the two scenarios..."
Benchmark.ips do |x|
x.report("forwarded".cyan) { alpha["name"] }
x.report("static".green) { beta["name"] }
x.compare!
end

9
benchmark/string-concat Executable file
View File

@@ -0,0 +1,9 @@
#!/usr/bin/env ruby
require 'benchmark/ips'
url = "https://jekyllrb.com"
Benchmark.ips do |x|
x.report('+=') { url += '/' }
x.report('<<') { url << '/' }
end

14
benchmark/string-replacement Executable file
View File

@@ -0,0 +1,14 @@
#!/usr/bin/env ruby
require 'benchmark/ips'
def str
'http://baruco.org/2014/some-talk-with-some-amount-of-value'
end
Benchmark.ips do |x|
x.report('#tr') { str.tr('some', 'a') }
x.report('#gsub') { str.gsub('some', 'a') }
x.report('#gsub!') { str.gsub!('some', 'a') }
x.report('#sub') { str.sub('some', 'a') }
x.report('#sub!') { str.sub!('some', 'a') }
end

7
benchmark/symbol-to-proc Executable file
View File

@@ -0,0 +1,7 @@
#!/usr/bin/env ruby
require 'benchmark/ips'
Benchmark.ips do |x|
x.report('block') { (1..100).map { |i| i.to_s } }
x.report('&:to_s') { (1..100).map(&:to_s) }
end

View File

@@ -1,11 +0,0 @@
<!DOCTYPE html>
<html lang="en-US">
<meta charset="utf-8">
<title>Redirecting&hellip;</title>
<link rel="canonical" href="https://jekyllrb.com/docs/conduct/">
<script>location="https://jekyllrb.com/docs/conduct/"</script>
<meta http-equiv="refresh" content="0; url=https://jekyllrb.com/docs/conduct/">
<meta name="robots" content="noindex">
<h1>Redirecting&hellip;</h1>
<a href="https://jekyllrb.com/docs/conduct/">Click here if you are not redirected.</a>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

5
docs/.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
_site/
.idea/
*.swp
pkg/
test/

View File

64
docs/_config.yml Normal file
View File

@@ -0,0 +1,64 @@
---
version: 4.2.2
name: Jekyll • Simple, blog-aware, static sites
description: Transform your plain text into static websites and blogs
url: https://jekyllrb.com
repository: https://github.com/jekyll/jekyll
timezone: America/Los_Angeles
twitter:
username: jekyllrb
logo: "/img/logo-2x.png"
google_analytics_id: UA-50755011-1
google_site_verification: onQcXpAvtHBrUI5LlroHNE_FP0b2qvFyPq7VZw36iEY
cloudinary_url: https://res.cloudinary.com/jekyll/image/upload/f_auto,q_auto,w_404
collections:
docs:
permalink: "/:collection/:path/"
output: true
posts:
permalink: "/news/:year/:month/:day/:title/"
output: true
tutorials:
permalink: "/:collection/:path/"
output: true
defaults:
- scope:
path: _docs
type: docs
values:
layout: docs
- scope:
path: _posts
type: posts
values:
layout: news_item
- scope:
path: _tutorials
type: tutorials
values:
layout: tutorials
- scope:
path: ''
values:
image: "/img/jekyll-og.png"
future: true
plugins:
- jekyll-avatar
- jekyll-feed
- jekyll-mentions
- jekyll-redirect-from
- jekyll-seo-tag
- jekyll-sitemap
- jemoji
feed:
categories:
- release
kramdown:
syntax_highlighter_opts:
default_lang: plaintext
sass:
style: compressed
strict_front_matter: true
exclude:
- icomoon-selection.json
- readme.md

View File

@@ -0,0 +1,123 @@
- name: Regeneration
description: Enable auto-regeneration of the site when files are modified.
flag: "-w, --[no-]watch"
- name: Configuration
description: >-
Specify config files instead of using <code>_config.yml</code> automatically.
Settings in later files override settings in earlier files.
flag: "--config FILE1[,FILE2,...]"
- name: Plugins
description: >-
Specify plugin directories instead of using <code>_plugins/</code> automatically.
option: "plugins_dir: [ DIR1,... ]"
flag: "-p, --plugins DIR1[,DIR2,...]"
- name: Layouts
description: >-
Specify layout directory instead of using <code>_layouts/</code> automatically.
option: "layouts_dir: DIR"
flag: --layouts DIR
- name: Drafts
description: Process and render draft posts.
option: "show_drafts: BOOL"
flag: -D, --drafts
- name: Environment
description: Use a specific environment value in the build.
flag: JEKYLL_ENV=production
- name: Future
description: Publish posts or collection documents with a future date.
option: "future: BOOL"
flag: --future
- name: Unpublished
description: Render posts that were marked as unpublished.
option: "unpublished: BOOL"
flag: --unpublished
- name: LSI
description: >-
Produce an index for related posts. Requires the
<a href="https://jekyll.github.io/classifier-reborn/">classifier-reborn</a> plugin.
option: "lsi: BOOL"
flag: --lsi
- name: Limit posts
description: Limit the number of posts to parse and publish.
option: "limit_posts: NUM"
flag: --limit_posts NUM
- name: Force polling
description: Force watch to use polling.
option: "force_polling: BOOL"
flag: --force_polling
- name: Verbose output
description: Print verbose output.
option: "verbose: BOOL"
flag: -V, --verbose
- name: Silence output
description: Silence the normal output from Jekyll during a build.
option: "quiet: BOOL"
flag: -q, --quiet
- name: Log level
description: Specify a log level among debug, info, warn, or error.
flag: JEKYLL_LOG_LEVEL=info
- name: Incremental build
description: >-
Enable the experimental
<a href="/docs/configuration/incremental-regeneration/">incremental
build</a> feature. Incremental build only re-builds posts and pages that
have changed, resulting in significant performance improvements for large
sites, but may also break site generation in certain cases.
option: "incremental: BOOL"
flag: -I, --incremental
- name: Disable bundle require
description: Disables the need to require gems in `:jekyll_plugins` Gemfile
flag: JEKYLL_NO_BUNDLER_REQUIRE=true
- name: Liquid profiler
description: Generate a Liquid rendering profile to help you identify performance bottlenecks.
option: "profile: BOOL"
flag: --profile
- name: Strict front matter
description: Cause a build to fail if there is a YAML syntax error in a page's front matter.
option: "strict_front_matter: BOOL"
flag: --strict_front_matter
- name: Base URL
description: Serve the website from the given base URL.
option: "baseurl: URL"
flag: -b, --baseurl URL
- name: Trace
description: Show the full backtrace when an error occurs.
flag: -t, --trace

View File

@@ -0,0 +1,77 @@
- name: Site source
description: Change the directory where Jekyll will read files
option: "source: DIR"
flag: -s, --source DIR
- name: Site destination
description: Change the directory where Jekyll will write files
option: "destination: DIR"
flag: -d, --destination DIR
- name: Safe
description: >-
Disable <a href="/docs/plugins/">non-whitelisted plugins</a>, caching to disk, and ignore symbolic links.
option: "safe: BOOL"
flag: --safe
- name: Disable disk cache
version-badge: 4.1.0
description: >-
Disable caching of content to disk in order to skip creating a <code>.jekyll-cache</code> or similar directory at
the source to avoid interference with virtual environments and third-party directory watchers. Caching to disk is
always disabled in <code>safe</code> mode.
option: "disable_disk_cache: BOOL"
flag: --disable-disk-cache
- name: Ignore theme configuration
version-badge: 4.1.0
description: >-
Jekyll 4.0 started allowing themes to bundle a <code>_config.yml</code> to simplify theme-onboarding for new users.
In the unfortunate situation that importing a bundled theme configuration messes up the merged site-configuration,
the user can configure Jekyll to not import the theme-config entirely.
option: "ignore_theme_config: BOOL"
- name: Exclude
description: >-
Exclude directories and/or files from the conversion. These exclusions are relative to the site's source directory
and cannot be outside the source directory.
option: "exclude: [DIR, FILE, ...]"
- name: Include
description: >-
Force inclusion of directories and/or files in the conversion. <code>.htaccess</code> is a good example since
dotfiles are excluded by default.
option: "include: [DIR, FILE, ...]"
- name: Keep files
description: >-
When clobbering the site destination, keep the selected files. Useful for files that are not generated by jekyll;
e.g. files or assets that are generated by your build tool. The paths are relative to the <code>destination</code>.
option: "keep_files: [DIR, FILE, ...]"
- name: Time zone
description: >-
Set the time zone for site generation. This sets the <code>TZ</code> environment variable, which Ruby uses to handle
time and date creation and manipulation. Any entry from the
<a href="https://en.wikipedia.org/wiki/Tz_database">IANA Time Zone Database</a>
is valid, e.g. <code>America/New_York</code>. A list of all available values can be found
<a href="https://en.wikipedia.org/wiki/List_of_tz_database_time_zones"> here</a>.
When serving on a local machine, the default time zone is set by your operating system. But when served on a remote
host/server, the default time zone depends on the server's setting or location.
option: "timezone: TIMEZONE"
- name: Encoding
description: >-
Set the encoding of files by name (only available for Ruby 1.9 or later). The default value is <code>utf-8</code>
starting in 2.0.0, and <code>nil</code> before 2.0.0, which will yield the Ruby default of <code>ASCII-8BIT</code>.
Available encodings can be shown by the command <code>ruby -e 'puts Encoding::list.join("\n")'</code>.
option: "encoding: ENCODING"

View File

@@ -0,0 +1,71 @@
- name: Local server port
description: Listen on the given port. The default is `4000`.
option: "port: PORT"
flag: "-P, --port PORT"
- name: Local server hostname
description: Listen at the given hostname. The default is `localhost`.
option: "host: HOSTNAME"
flag: "-H, --host HOSTNAME"
- name: Live reload
description: Reload a page automatically on the browser when its content is edited.
option: "livereload: BOOL"
flag: "-l, --livereload"
- name: Live reload ignore
description: File glob patterns for LiveReload to ignore.
option: "livereload_ignore: [ GLOB1,... ]"
flag: "--livereload-ignore GLOB1[,GLOB2,...]"
- name: Live reload min/max delay
description: Minimum/Maximum delay before automatically reloading page.
options:
- "livereload_min_delay: SECONDS"
- "livereload_max_delay: SECONDS"
flags:
- "--livereload-min-delay SECONDS"
- "--livereload-max-delay SECONDS"
- name: Live reload port
description: Port for LiveReload to listen on.
flag: "--livereload-port PORT"
- name: Open URL
description: Open the site's URL in the browser.
option: "open_url: BOOL"
flag: "-o, --open-url"
- name: Detach
description: Detach the server from the terminal.
option: "detach: BOOL"
flag: "-B, --detach"
- name: Skips the initial site build
description: Skips the initial site build which occurs before the server is started.
option: "skip_initial_build: BOOL"
flag: "--skip-initial-build"
- name: Show directory listing
description: Show a directory listing instead of loading your index file.
option: "show_dir_listing: BOOL"
flag: "--show-dir-listing"
- name: X.509 (SSL) private key
description: "SSL Private Key, stored or symlinked in the site source."
flag: "--ssl-key"
- name: X.509 (SSL) certificate
description: "SSL Public certificate, stored or symlinked in the site source."
flag: "--ssl-cert"

37
docs/_data/docs_nav.yml Normal file
View File

@@ -0,0 +1,37 @@
- title: Getting Started
docs:
- link: /docs/
- link: /docs/installation/
- link: /docs/ruby-101/
- link: /docs/community/
- link: /docs/step-by-step/01-setup/
- title: Build
docs:
- link: /docs/usage/
- link: /docs/configuration/
- link: /docs/rendering-process/
- title: Content
docs:
- link: /docs/pages/
- link: /docs/posts/
- link: /docs/front-matter/
- link: /docs/collections/
- link: /docs/datafiles/
- link: /docs/assets/
- link: /docs/static-files/
- title: Site Structure
docs:
- link: /docs/structure/
- link: /docs/liquid/
- link: /docs/variables/
- link: /docs/includes/
- link: /docs/layouts/
- link: /docs/permalinks/
- link: /docs/themes/
- link: /docs/pagination/
- title: Guides
docs:
- link: /docs/plugins/
- link: /docs/migrations/
- link: /docs/upgrading/
- link: /docs/deployment/

View File

@@ -0,0 +1,348 @@
#
# ---------------------------------------------------------------------------------------
# List of Liquid Filters provided by Jekyll Core that will be utilized for their
# documentation.
#
# To document a new filter, create a new "list-item" below with the following keys:
# name: : [REQUIRED] A string label that identifies the filter
# description: : [REQUIRED] A short description of what to expect from the filter
# version_badge: : [OPTIONAL] Jekyll version that introduced the filter
# examples: : [REQUIRED] A 'nested list' comprised of inputs and outputs
# input: : [REQUIRED] The filter syntax and usage
# output: : [OPTIONAL] The output from the filter
#
# Tip: Use YAML Block notations to "fold" a long string, or to "break" a long string
# to the following line. Block notations can also be used to avoid having to use
# backslashes to escape quotes.
# ---------------------------------------------------------------------------------------
#
- name: Relative URL
description: >-
Prepend <code>baseurl</code> config value to the input to convert a URL path into a relative URL.
This is recommended for a site that is hosted on a subpath of a domain.
examples:
- input: '{{ "/assets/style.css" | relative_url }}'
output: '/my-baseurl/assets/style.css'
#
- name: Absolute URL
description: >-
Prepend <code>url</code> and <code>baseurl</code> values to the input to convert a URL path to an absolute URL.
examples:
- input: '{{ "/assets/style.css" | absolute_url }}'
output: 'http://example.com/my-baseurl/assets/style.css'
#
- name: Date to XML Schema
description: Convert a Date into XML Schema (ISO 8601) format.
examples:
- input: '{{ site.time | date_to_xmlschema }}'
output: '2008-11-07T13:07:54-08:00'
#
- name: Date to RFC-822 Format
description: Convert a Date into the RFC-822 format used for RSS feeds.
examples:
- input: '{{ site.time | date_to_rfc822 }}'
output: 'Mon, 07 Nov 2008 13:07:54 -0800'
#
- name: Date to String
description: Convert a date to short format.
examples:
- input: '{{ site.time | date_to_string }}'
output: '07 Nov 2008'
#
- name: Date to String in ordinal US style
description: 'Format a date to ordinal, US, short format.'
version_badge: 3.8.0
examples:
- input: '{{ site.time | date_to_string: "ordinal", "US" }}'
output: 'Nov 7th, 2008'
#
- name: Date to Long String
description: Format a date to long format.
examples:
- input: '{{ site.time | date_to_long_string }}'
output: '07 November 2008'
#
- name: Date to Long String in ordinal UK style
description: 'Format a date to ordinal, UK, long format.'
version_badge: 3.8.0
examples:
- input: '{{ site.time | date_to_long_string: "ordinal" }}'
output: '7th November 2008'
#
- name: Where
description: Select all the objects in an array where the key has the given value.
examples:
- input: '{{ site.members | where:"graduation_year","2014" }}'
output:
#
- name: Where Expression
description: Select all the objects in an array where the expression is true.
version_badge: 3.2.0
examples:
- input: |-
{{ site.members | where_exp:"item",
"item.graduation_year == 2014" }}
output:
- input: |-
{{ site.members | where_exp:"item",
"item.graduation_year < 2014" }}
output:
- input: |-
{{ site.members | where_exp:"item",
"item.projects contains 'foo'" }}
output:
#
- name: Find
description: >-
Return <strong>the first object</strong> in an array for which the queried
attribute has the given value or return <code>nil</code> if no item in
the array satisfies the given criteria.
version_badge: 4.1.0
examples:
- input: '{{ site.members | find: "graduation_year", "2014" }}'
output:
#
- name: Find Expression
description: >-
Return <strong>the first object</strong> in an array for which the given
expression evaluates to true or return <code>nil</code> if no item in
the array satisfies the evaluated expression.
version_badge: 4.1.0
examples:
- input: |-
{{ site.members | find_exp:"item",
"item.graduation_year == 2014" }}
output:
- input: |-
{{ site.members | find_exp:"item",
"item.graduation_year < 2014" }}
output:
- input: |-
{{ site.members | find_exp:"item",
"item.projects contains 'foo'" }}
output:
#
- name: Group By
description: Group an array's items by a given property.
examples:
- input: '{{ site.members | group_by:"graduation_year" }}'
output: |-
[{"name"=>"2013", "items"=>[...]},
{"name"=>"2014", "items"=>[...]}]
#
- name: Group By Expression
description: Group an array's items using a Liquid expression.
version_badge: 3.4.0
examples:
- input: |-
{{ site.members | group_by_exp: "item",
"item.graduation_year | truncate: 3, ''" }}
output: |-
[{"name"=>"201", "items"=>[...]},
{"name"=>"200", "items"=>[...]}]
#
- name: XML Escape
description: Escape some text for use in XML.
examples:
- input: '{{ page.content | xml_escape }}'
output:
#
- name: CGI Escape
description: >-
CGI escape a string for use in a URL. Replaces any special characters
with appropriate <code>%XX</code> replacements. CGI escape normally
replaces a space with a plus <code>+</code> sign.
examples:
- input: '{{ "foo, bar; baz?" | cgi_escape }}'
output: 'foo%2C+bar%3B+baz%3F'
#
- name: URI Escape
description: >-
Percent encodes any special characters in a URI.
URI escape normally replaces a space with <code>%20</code>.
<a href="https://en.wikipedia.org/wiki/Percent-encoding#Types_of_URI_characters">Reserved characters</a>
will not be escaped.
examples:
- input: '{{ "http://foo.com/?q=foo, \bar?" | uri_escape }}'
output: 'http://foo.com/?q=foo,%20%5Cbar?'
#
- name: Number of Words
description: >-
Count the number of words in some text.<br/>
From <span class="version-badge">v4.1.0</span>, this filter takes an optional
argument to control the handling of Chinese-Japanese-Korean (CJK) characters
in the <code>input</code> string.<br/>
Passing <code>'cjk'</code> as the argument will count every CJK character
detected as one word irrespective of being separated by whitespace.<br/>
Passing <code>'auto'</code> (auto-detect) works similar to <code>'cjk'</code>
but is more performant if the filter is used on a variable string that may
or may not contain CJK chars.
examples:
- input: '{{ "Hello world!" | number_of_words }}'
output: 2
- input: '{{ "你好hello世界world" | number_of_words }}'
output: 1
- input: '{{ "你好hello世界world" | number_of_words: "cjk" }}'
output: 6
- input: '{{ "你好hello世界world" | number_of_words: "auto" }}'
output: 6
#
- name: Array to Sentence
description: >-
Convert an array into a sentence. Useful for listing tags.
Optional argument for connector.
examples:
- input: '{{ page.tags | array_to_sentence_string }}'
output: 'foo, bar, and baz'
- input: '{{ page.tags | array_to_sentence_string: "or" }}'
output: 'foo, bar, or baz'
#
- name: Markdownify
description: Convert a Markdown-formatted string into HTML.
examples:
- input: '{{ page.excerpt | markdownify }}'
output:
#
- name: Smartify
description: 'Convert "quotes" into &ldquo;smart quotes.&rdquo;'
examples:
- input: '{{ page.title | smartify }}'
output:
#
- name: Converting Sass/SCSS
description: Convert a Sass- or SCSS-formatted string into CSS.
examples:
- input: '{{ some_sass | sassify }}'
output:
- input: '{{ some_scss | scssify }}'
output:
#
- name: Slugify
description: Convert a string into a lowercase URL "slug". See below for options.
examples:
- input: '{{ "The _config.yml file" | slugify }}'
output: 'the-config-yml-file'
- input: '{{ "The _config.yml file" | slugify: "pretty" }}'
output: 'the-_config.yml-file'
- input: '{{ "The _cönfig.yml file" | slugify: "ascii" }}'
output: 'the-c-nfig-yml-file'
- input: '{{ "The cönfig.yml file" | slugify: "latin" }}'
output: 'the-config-yml-file'
#
- name: Data To JSON
description: Convert Hash or Array to JSON.
examples:
- input: '{{ site.data.projects | jsonify }}'
output:
#
- name: Normalize Whitespace
description: Replace any occurrence of whitespace with a single space.
examples:
- input: '{{ "a \n b" | normalize_whitespace }}'
output:
#
- name: Sort
description: >-
Sort an array. Optional arguments for hashes
1.&nbsp;property name
2.&nbsp;nils order (<em>first</em> or <em>last</em>).
examples:
- input: '{{ page.tags | sort }}'
output:
- input: '{{ site.posts | sort: "author" }}'
output:
- input: '{{ site.pages | sort: "title", "last" }}'
output:
#
- name: Sample
description: 'Pick a random value from an array. Optionally, pick multiple values.'
examples:
- input: '{{ site.pages | sample }}'
output:
- input: '{{ site.pages | sample: 2 }}'
output:
#
- name: To Integer
description: Convert a string or boolean to integer.
examples:
- input: '{{ some_var | to_integer }}'
output:
#
- name: Array Filters
description: >-
Push, pop, shift, and unshift elements from an Array.
These are <strong>NON-DESTRUCTIVE</strong>, i.e. they do not mutate the array,
but rather make a copy and mutate that.
examples:
- input: '{{ page.tags | push: "Spokane" }}'
output: '["Seattle", "Tacoma", "Spokane"]'
- input: '{{ page.tags | pop }}'
output: '["Seattle"]'
- input: '{{ page.tags | shift }}'
output: '["Tacoma"]'
- input: '{{ page.tags | unshift: "Olympia" }}'
output: '["Olympia", "Seattle", "Tacoma"]'
#
- name: Inspect
description: Convert an object into its String representation for debugging.
examples:
- input: '{{ some_var | inspect }}'
output:

View File

@@ -0,0 +1,175 @@
# Variables provided by Jekyll core
#
# name: : name of the variable
# description: : content returned by the variable
global:
- name: site
description: >-
Site wide information + configuration settings from <code>_config.yml</code>.
See below for details.
- name: page
description: >-
Page specific information + the <a href="/docs/front-matter/">front matter</a>.
Custom variables set via the front matter will be available here. See below for details.
- name: layout
description: >-
Layout specific information + the <a href="/docs/front-matter/">front matter</a>.
Custom variables set via front matter in layouts will be available here.
- name: content
description: >-
In layout files, the rendered content of the Post or Page being wrapped.
Not defined in Post or Page files.
- name: paginator
description: >-
When the <code>paginate</code> configuration option is set, this variable becomes available
for use. See <a href="../pagination/">Pagination</a> for details.
site:
- name: site.time
description: >-
The current time (when you run the <code>jekyll</code> command).
- name: site.pages
description: >-
A list of all Pages.
- name: site.posts
description: >-
A reverse chronological list of all Posts.
- name: site.related_posts
description: >-
If the page being processed is a Post, this contains a list of up to ten related Posts.
By default, these are the ten most recent posts. For high quality but slow to compute
results, run the <code>jekyll</code> command with the <code>--lsi</code>
(<a href="https://en.wikipedia.org/wiki/Latent_semantic_analysis#Latent_semantic_indexing">latent semantic indexing</a>)
option. Also note GitHub Pages does not support the
<code>lsi</code> option when generating sites.
- name: site.static_files
description: >-
A list of all <a href="/docs/static-files/">static files</a> (i.e.
files not processed by Jekyll's converters or the Liquid renderer).
Each file has five properties: <code>path</code>, <code>modified_time</code>,
<code>name</code>, <code>basename</code> and <code>extname</code>.
- name: site.html_pages
description: >-
A subset of <code>site.pages</code> listing those which end in <code>.html</code>.
- name: site.html_files
description: >-
A subset of <code>site.static_files</code> listing those which end in <code>.html</code>.
- name: site.collections
description: >-
A list of all the collections (including posts).
- name: site.data
description: >-
A list containing the data loaded from the YAML files located in the <code>_data</code>
directory.
- name: site.documents
description: >-
A list of all the documents in every collection.
- name: site.categories.CATEGORY
description: >-
The list of all Posts in category <code>CATEGORY</code>.
- name: site.tags.TAG
description: >-
The list of all Posts with tag <code>TAG</code>.
- name: site.url
description: >-
Contains the url of your site as it is configured in the <code>_config.yml</code>.
For example, if you have <code>url: http://mysite.com</code> in your configuration file,
then it will be accessible in Liquid as <code>site.url</code>. For the development
environment there is <a href="/news/2016/10/06/jekyll-3-3-is-here/#3-siteurl-is-set-by-the-development-server">an
exception</a>, if you are running <code>jekyll serve</code> in a development environment
<code>site.url</code> will be set to the value of <code>host</code>, <code>port</code>,
and SSL-related options. This defaults to <code>url: http://localhost:4000</code>.
- name: "site.[CONFIGURATION_DATA]"
description: >-
All the variables set via the command line and your <code>_config.yml</code> are available
through the <code>site</code> variable. For example, if you have <code>foo: bar</code> in
your configuration file, then it will be accessible in Liquid as <code>site.foo</code>.
Jekyll does not parse changes to <code>_config.yml</code> in
<code>watch</code> mode, you must restart Jekyll to see changes to variables.
page:
- name: page.content
description: >-
The content of the Page, rendered or un-rendered depending upon
what Liquid is being processed and what <code>page</code> is.
- name: page.title
description: >-
The title of the Page.
- name: page.excerpt
description: >-
The un-rendered excerpt of a document.
- name: page.url
description: >-
The URL of the Post without the domain, but with a leading slash, e.g.
<code>/2008/12/14/my-post.html</code>
- name: page.date
description: >-
The Date assigned to the Post. This can be overridden in a Posts front matter by specifying
a new date/time in the format <code>YYYY-MM-DD HH:MM:SS</code> (assuming UTC), or
<code>YYYY-MM-DD HH:MM:SS +/-TTTT</code> (to specify a time zone using an offset from UTC.
e.g. <code>2008-12-14 10:30:00 +0900</code>).
- name: page.id
description: >-
An identifier unique to a document in a Collection or a Post (useful in RSS feeds). e.g.
<code>/2008/12/14/my-post</code><code>/my-collection/my-document</code>
- name: page.categories
description: >-
The list of categories to which this post belongs. Categories are derived from the directory
structure above the <code>_posts</code> directory. For example, a post at
<code>/work/code/_posts/2008-12-24-closures.md</code> would have this field set to
<code>['work', 'code']</code>. These can also be specified in the
<a href="/docs/front-matter/">front matter</a>.
- name: page.collection
description: >-
The label of the collection to which this document belongs. e.g. <code>posts</code> for a post, or
<code>puppies</code> for a document at path <code>_puppies/rover.md</code>. If not part of a
collection, an empty string is returned.
- name: page.tags
description: >-
The list of tags to which this post belongs. These can be specified in the
<a href="/docs/front-matter/">front matter</a>.
- name: page.dir
description: >-
The path between the source directory and the file of the post or page, e.g.
<code>/pages/</code>.
This can be overridden by <code>permalink</code> in the <a href="/docs/front-matter/">front matter</a>.
- name: page.name
description: >-
The filename of the post or page, e.g. <code>about.md</code>
- name: page.path
description: >-
The path to the raw post or page. Example usage: Linking back to the page or posts source
on GitHub. This can be overridden in the <a href="/docs/front-matter/">front matter</a>.
- name: page.next
description: >-
The next post relative to the position of the current post in <code>site.posts</code>.
Returns <code>nil</code> for the last entry.
- name: page.previous
description: >-
The previous post relative to the position of the current post in <code>site.posts</code>.
Returns <code>nil</code> for the first entry.
paginator:
- name: paginator.page
description: The number of the current page
- name: paginator.per_page
description: Number of posts per page
- name: paginator.posts
description: Posts available for the current page
- name: paginator.total_posts
description: Total number of posts
- name: paginator.total_pages
description: Total number of pages
- name: paginator.previous_page
description: >-
The number of the previous page, or <code>nil</code> if no previous page exists
- name: paginator.previous_page_path
description: >-
The path to the previous page, or <code>nil</code> if no previous page exists
- name: paginator.next_page
description: >-
The number of the next page, or <code>nil</code> if no subsequent page exists
- name: paginator.next_page_path
description: >-
The path to the next page, or <code>nil</code> if no subsequent page exists

View File

@@ -0,0 +1,209 @@
- speaker: Ben Balter
twitter_handle: BenBalter
youtube_id: Z-37y1qaoxc
topic: GitHub Pages behind the scenes
year: 2015
- speaker: Brandon Mathis
twitter_handle: imathis
youtube_id: KS6e4XxY2H4
topic: What the heck is Octopress and why should I care?
year: 2015
- speaker: Brian Rinaldi
twitter_handle: remotesynth
youtube_id: vT7DhK5zbv0
topic: Comparing Jekyll with the Competition
year: 2015
- speaker: Kyle Rush
twitter_handle: kylerush
youtube_id: ia8vsuiXiL0
topic: Meet the Obama Campaign's $250 Million Fundraising Platform
year: 2015
- speaker: Michael Jovel
twitter_handle: mjovel
youtube_id: 8zSHG6XU_xY
topic: Building Living Style Guides with Jekyll
year: 2015
- speaker: Mike Neumegen
twitter_handle: mikeneumegen
youtube_id: NuChR_YdjrI
topic: A CMS for Jekyll
year: 2015
- speaker: Parker Moore
twitter_handle: parkr
youtube_id: y2SbOIQ5nSA
topic: Jekyll 3 and Beyond
year: 2015
- speaker: Tom Preston-Werner
twitter_handle: mojombo
youtube_id: BMve1OCKj6M
topic: Some crazy ideas I have for the future of static sites
year: 2015
- speaker: Allison Zadrozny
twitter_handle: allizad
youtube_id: Rsc0Mmp1qc8
topic: Elasticsearch for Jekyll
year: 2016
- speaker: Amy Johnston
twitter_handle: AmyJohnstonXL
youtube_id: HR12JiUI2Zc
topic: Jekyll for Technical Documentation
year: 2016
- speaker: Bud Parr
twitter_handle: budparr
youtube_id: A1nTuNjoNbg
topic: Real World Content Strategy with Jekyll
year: 2016
- speaker: George Phillips
twitter_handle: gphillips_nz
youtube_id: skb_XWABEDc
topic: Building client-editable Jekyll sites
year: 2016
- speaker: Ire Aderinokun
twitter_handle: ireaderinokun
youtube_id: PRKV5IGKF2c
topic: Using Jekyll for Rapid CSS Testing
year: 2016
- speaker: Jon Chan
twitter_handle: JonHMChan
youtube_id: vDeKPs6xpOM
topic: Stack Overflow on Jekyll
year: 2016
- speaker: Julio Faerman
twitter_handle: juliodevrel
youtube_id: SOMonG8Iqak
topic: Jekyll on AWS
year: 2016
- speaker: Katy DeCorah
twitter_handle: katydecorah
youtube_id: s84wFRD8vfE
topic: Unconventional use cases for Jekyll
year: 2016
- speaker: David Darnes
twitter_handle: DavidDarnes
youtube_id: Y4qwpN40Dvg
topic: Doing a lot with a little
year: 2016
- speaker: Ronan Berder
twitter_handle: hunvreus
youtube_id: TteAQq25_Ns
topic: Designing fast websites with Jekyll
year: 2016
- speaker: David Von Lehman
twitter_handle: davidvlsea
youtube_id: wMlPlKCZfEk
topic: Continuous deployment of Jekyll sites powered by Docker
year: 2016
- speaker: David Jones
twitter_handle: d_jones
youtube_id: 4XxYQ7efk0E
topic: Building our agency site with Jekyll
year: 2016
- speaker: Scott Hewitt
twitter_handle: scotthewitt
youtube_id: qSd3pXQaPsE
topic: Jekyll For Every Case
year: 2016
- speaker: Tim Carry
twitter_handle: pixelastic
youtube_id: ivMML1J4ABY
topic: Algolia search on Jekyll sites
year: 2016
- speaker: Nils Borchers
twitter_handle: nilsbo
youtube_id: DtNMjuv6Rbo
topic: Building a living brand guide with Jekyll and Hologram
year: 2016
- speaker: Mike Neumegen
twitter_handle: mikeneumegen
youtube_id: rJ5EhVmTR7I
topic: Learning resources for the Jekyll community
year: 2016
- speaker: Oliver Pattison
twitter_handle: olivermakes
youtube_id: BIf6oNpGl74
topic: Responsive srcset images with imgix
year: 2016
- speaker: Michael Lee
twitter_handle: michaelsoolee
youtube_id: F4bJRLEvXIc
topic: Jekyll, Your Website's Baseplate
year: 2016
- speaker: Paul Webb
twitter_handle: NetOpWibby
youtube_id: BRB5DgAE5nM
topic: Deploy Jekyll Like A Boss
year: 2016
- speaker: Tom Johnson
twitter_handle: tomjohnson
youtube_id: nq1AUB72GCQ
topic: Overcoming challenges in using Jekyll for documentation projects
year: 2016
- speaker: Pieter Roozen
twitter_handle: Pieter_Roozen
youtube_id: moQP0SqEPsw
topic: Jekyll As An API Endpoint
year: 2019
- speaker: Chen Hui Jing
twitter_handle: hj_chen
youtube_id: CERXESTZ5w4
topic: Why I love Jekyll Data Files
year: 2019
- speaker: Chris Ferdinandi
twitter_handle: ChrisFerdinandi
youtube_id: vR1aI_kQ4-A
topic: The Lean Web
year: 2019
- speaker: Catherine Roebuck
twitter_handle:
youtube_id: zTAP1m1BaDM
topic: Jekyll For City Government
year: 2019
- speaker: Joost van der Schee
twitter_handle: jhvanderschee
youtube_id: ztJJ1GSlYgI
topic: "Jekyll Codex - Jekyll for front-end developers"
year: 2019
- speaker: Matthew Loberg
twitter_handle: mloberg
youtube_id: 6eiAjAtSGqw
topic: Leverage AWS S3 And CloudFront To Deploy Blazing Fast Jekyll Sites
year: 2019
- speaker: George Phillips
twitter_handle: gphillips_nz
youtube_id: nEvdOwFJBVc
topic: Structuring Jekyll Sites For Enterprise Design Systems
year: 2019

View File

@@ -0,0 +1,15 @@
- title: Home
link: /
show_on_mobile: true
- title: Docs
link: /docs/
show_on_mobile: true
- title: Resources
link: /resources/
show_on_mobile: true
- title: Showcase
link: /showcase/
show_on_mobile: false
- title: News
link: /news/
show_on_mobile: true

3
docs/_data/ruby.yml Normal file
View File

@@ -0,0 +1,3 @@
min_version: 2.5.0
current_version: 3.1.1
current_version_output: ruby 3.1.1p18 (2022-02-18 revision 53f5fc4236)

322
docs/_data/showcase.yml Normal file
View File

@@ -0,0 +1,322 @@
- name: Tom Preston Werner Blog
url: http://tom.preston-werner.com/
image: tom-preston-werner.png
categories:
- personal
- blog
# - name: White House Social and Behavioral Sciences Team
# url: https://sbst.gov/
# image: sbst.png
# categories:
# - government
- name: SiteLeaf
url: https://siteleaf.com
image: siteleaf.png
categories:
- software
- marketing-site
- name: CloudCannon
url: https://cloudcannon.com/
image: cloudcannon.png
categories:
- software
- marketing-site
- name: Vesterheim Norwegian-American Museum
url: http://vesterheim.org/
image: vesterheim.png
categories:
- marketing-site
- name: KOTN
url: https://kotn.com/
image: kotn.png
categories:
- marketing-site
- name: MvvmCross
url: https://www.mvvmcross.com/
image: mvvm.png
categories:
- software
- marketing-site
- name: Vidgrid
url: https://www.vidgrid.com/
image: vidgrid.png
categories:
- software
- marketing-site
- name: Bitcoin
url: https://bitcoin.org/en/
image: bitcoin.png
categories:
- software
- marketing-site
- name: Mapwize
url: https://www.mapwize.io/
image: mapwize.png
categories:
- software
- marketing-site
- name: Auth0 Blog
url: https://auth0.com/blog/
image: auth0-blog.png
categories:
- software
- blog
- name: Freedom of Information Act
url: https://www.foia.gov/
image: foia-gov.png
categories:
- government
- name: "Art & About Sydney"
url: https://www.artandabout.com.au/
image: art-sydney.png
categories:
- government
- name: Passbolt Help
url: https://help.passbolt.com/
image: passbolt-help.png
categories:
- knowledgebase
- name: We are COLLINS
url: https://www.wearecollins.com/
image: collins.png
categories:
- agency
- name: Lightburn
url: https://lightburn.co/
image: lightburn.png
categories:
- agency
- name: italia.it
url: https://developers.italia.it/
image: italia-it.png
categories:
- community
- name: Sydney New Years Eve
url: https://www.sydneynewyearseve.com/
image: nsw.png
categories:
- government
- name: Login.gov
url: https://login.gov/
image: login-gov.png
categories:
- government
- name: plainlanguage.gov
url: https://plainlanguage.gov/
image: plainlanguage-gov.png
categories:
- government
- name: U.S. Web Design Standards
url: https://standards.usa.gov/
image: uswds.png
categories:
- government
- name: Grantmaker Search
url: https://www.grantmakers.io/
image: grantmakers.png
categories:
- marketing-site
- name: Rehan Butt
url: http://rehanbutt.com/
image: rehn.png
categories:
- personal
- portfolio
- name: The Markdown Guide
url: https://www.markdownguide.org/
image: markdown-guide.png
categories:
- knowledgebase
- name: Probot
url: https://probot.github.io/
image: probot.png
categories:
- documentation
- name: Matt Grey
url: https://himatt.com/
image: matt-grey.png
categories:
- personal
- portfolio
- name: Lattice
url: https://latticehq.com/
image: lattice.png
categories:
- software
- marketing-site
- name: MailTape
url: https://www.mailta.pe/
image: mailtape.png
categories:
- other
- name: Digital Democracy
url: http://www.digital-democracy.org/
image: digital-democracy.png
categories:
- other
- name: HTML Reference
url: http://htmlreference.io/
image: htmlreference.png
categories:
- documentation
- name: CSS Reference
url: http://cssreference.io/
image: cssreference.png
categories:
- documentation
- name: Chain
url: https://chain.com/
image: chain.png
categories:
- marketing-site
- name: IBM MobileFirst Foundation
url: https://mobilefirstplatform.ibmcloud.com/
image: ibm-mobile-foundation.png
categories:
- documentation
- name: "18F"
url: https://18f.gsa.gov/
image: 18f.png
categories:
- agency
- government
- name: Development Seed
url: https://developmentseed.org/
image: development-seed.png
categories:
- agency
- name: Isomer - Singapore Government Static Websites
url: https://isomer.gov.sg/
image: isomer.png
categories:
- government
- name: French Government Digital Services
url: https://beta.gouv.fr/
image: beta-gouv-fr.png
categories:
- government
- name: Paris Call for Trust and Security in Cyberspace
url: https://pariscall.international/
image: appel-de-paris.png
categories:
- government
- name: GitHub On Demand Training
url: https://services.github.com/on-demand/
image: github-learning-lab.png
categories:
- software
- knowledgebase
- name: TwitchCon
url: https://www.twitchcon.com/
image: twitchcon.png
categories:
- marketing-site
- conference
- name: UN World Statistics
url: https://worldstatisticsday.org
image: world-statistics-day.png
categories:
- government
- name: Netflix Devices
url: https://devices.netflix.com/en/
image: netflix.png
categories:
- marketing-site
- name: Twitch Developer Documentation
url: https://dev.twitch.tv/
image: twitch-developers.png
categories:
- marketing-site
- documentation
- name: Yeoman
url: http://yeoman.io/
image: yeoman.png
categories:
- open-source
- marketing-site
- name: Release Management Blog
url: https://release.mozilla.org/
image: mozilla-release-blog.png
categories:
- software
- blog
- name: frame.ai
url: https://frame.ai/
image: frame-ai.png
categories:
- software
- marketing-site
- name: Ionic Framework
url: https://ionicframework.com/
image: ionic-framework.png
categories:
- software
- marketing-site
- name: Spotify for Developers
url: https://developer.spotify.com
image: spotify-developers.png
categories:
- marketing-site
- documentation
- software
- name: Sketch
url: https://sketch.com/
image: sketch.png
categories:
- software
- marketing-site
- name: Ruby on Rails
url: http://rubyonrails.org/
image: ruby-on-rails.png
categories:
- marketing-site
- documentation

14
docs/_data/tutorials.yml Normal file
View File

@@ -0,0 +1,14 @@
- title: Tutorials
tutorials:
- home
- video-walkthroughs
- navigation
- orderofinterpretation
- custom-404-page
- convert-site-to-jekyll
- using-jekyll-with-bundler
- csv-to-table
#- title: Another section
# tutorials:
# - sample

94
docs/_docs/assets.md Normal file
View File

@@ -0,0 +1,94 @@
---
title: Assets
permalink: /docs/assets/
---
Jekyll provides built-in support for [Sass](https://sass-lang.com/)
and can work with [CoffeeScript](https://coffeescript.org/) via a Ruby gem.
In order to use them, you must first create a file with the proper extension
name (one of `.sass`, `.scss`, or `.coffee`) and
***start the file with two lines of triple dashes***, like this:
```sass
---
---
// start content
.my-definition
font-size: 1.2em
```
Jekyll treats these files the same as a regular page, in that the output file
will be placed in the same directory that it came from. For instance, if you
have a file named `css/styles.scss` in your site's source folder, Jekyll
will process it and put it in your site's destination folder under
`css/styles.css`.
<div class="note info">
<h5>Jekyll processes all Liquid filters and tags in asset files</h5>
<p>If you are using <a href="https://mustache.github.io">Mustache</a>
or another JavaScript templating language that conflicts with
the <a href="{{ '/docs/templates/' | relative_url }}">Liquid template syntax</a>, you
will need to place <code>{&#37; raw &#37;}</code> and
<code>{&#37; endraw &#37;}</code> tags around your code.</p>
</div>
## Sass/SCSS
Jekyll allows you to customize your Sass conversion in certain ways.
Place all your partials in your `sass_dir`, which defaults to
`<source>/_sass`. Place your main SCSS or Sass files in the place you want
them to be in the output file, such as `<source>/css`. For an example, take
a look at [this example site using Sass support in Jekyll][example-sass].
If you are using Sass `@import` statements, you'll need to ensure that your
`sass_dir` is set to the base directory that contains your Sass files:
```yaml
sass:
sass_dir: _sass
```
The Sass converter will default the `sass_dir` configuration option to
`_sass`.
[example-sass]: https://github.com/jekyll/jekyll-sass-converter/tree/master/docs
<div class="note info">
<h5>The <code>sass_dir</code> is only used by Sass</h5>
<p>
Note that the <code>sass_dir</code> becomes the load path for Sass imports,
nothing more. This means that Jekyll does not know about these files
directly. Any files here should not contain the empty front matter as
described above. If they do, they'll not be transformed as described above. This
folder should only contain imports.
</p>
</div>
You may also specify the output style with the `style` option in your
`_config.yml` file:
```yaml
sass:
style: compressed
```
These are passed to Sass, so any output style options Sass supports are valid
here, too.
For more information on Sass configuration options, see the [Sass configuration]({{ '/docs/configuration/sass/' | relative_url }}) docs.
## Coffeescript
To enable Coffeescript in Jekyll 3.0 and up you must
* Install the `jekyll-coffeescript` gem
* Ensure that your `_config.yml` is up-to-date and includes the following:
```yaml
plugins:
- jekyll-coffeescript
```

View File

@@ -0,0 +1,82 @@
---
title: Code of Conduct
permalink: "/docs/code_of_conduct/"
note: This file is autogenerated. Edit /.github/CODE_OF_CONDUCT.markdown instead.
redirect_from: "/conduct/index.html"
editable: false
---
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at [olivia@jekyllrb.com](mailto:olivia@jekyllrb.com). All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at [https://www.contributor-covenant.org/version/1/4/code-of-conduct.html](https://www.contributor-covenant.org/version/1/4/code-of-conduct.html)
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
[https://www.contributor-covenant.org/faq](https://www.contributor-covenant.org/faq)

382
docs/_docs/collections.md Normal file
View File

@@ -0,0 +1,382 @@
---
title: Collections
permalink: /docs/collections/
---
Collections are a great way to group related content like members of a team or
talks at a conference.
## Setup
To use a Collection you first need to define it in your `_config.yml`. For
example here's a collection of staff members:
```yaml
collections:
- staff_members
```
In this case `collections` is defined as a sequence (i.e., array) with no additional metadata defined for each collection.
You can optionally specify metadata for your collection by defining `collections` as a mapping (i.e., hashmap) instead of sequence, and then defining additional fields in it:
```yaml
collections:
staff_members:
people: true
```
{: .note .info}
When defining a collection as a sequence, its pages will not be rendered by
default. To enable this, <code>output: true</code> must be specified on the
collection, which requires defining the collection as a mapping. For more
information, see the section <a href="#output">Output</a>.
<div class="note">
<h5>Gather your collections {%- include docs_version_badge.html version="3.7.0" -%}</h5>
<p>You can optionally specify a directory to store all your collections in the same place with <code>collections_dir: my_collections</code>.</p>
<p>Then Jekyll will look in <code>my_collections/_books</code> for the <code>books</code> collection, and
in <code>my_collections/_recipes</code> for the <code>recipes</code> collection.</p>
</div>
<div class="note warning">
<h5>Be sure to move drafts and posts into custom collections directory</h5>
<p>If you specify a directory to store all your collections in the same place with <code>collections_dir: my_collections</code>, then you will need to move your <code>_drafts</code> and <code>_posts</code> directory to <code>my_collections/_drafts</code> and <code>my_collections/_posts</code>. Note that, the name of your collections directory cannot start with an underscore (`_`).</p>
</div>
## Add content
Create a corresponding folder (e.g. `<source>/_staff_members`) and add
documents. Front matter is processed if the front matter exists, and everything
after the front matter is pushed into the document's `content` attribute. If no front
matter is provided, Jekyll will consider it to be a [static file]({{ '/docs/static-files/' | relative_url }})
and the contents will not undergo further processing. If front matter is provided,
Jekyll will process the file contents into the expected output.
Regardless of whether front matter exists or not, Jekyll will write to the destination
directory (e.g. `_site`) only if `output: true` has been set in the collection's
metadata.
For example here's how you would add a staff member to the collection set above.
The filename is `./_staff_members/jane.md` with the following content:
```markdown
---
name: Jane Doe
position: Developer
---
Jane has worked on Jekyll for the past *five years*.
```
<em>
Do note that in spite of being considered as a collection internally, the above
doesn't apply to [posts](/docs/posts/). Posts with a valid filename format will be
marked for processing even if they do not contain front matter.
</em>
<div class="note info">
<h5>Be sure to name your directories correctly</h5>
<p>
The folder must be named identically to the collection you defined in
your <code>_config.yml</code> file, with the addition of the preceding <code>_</code> character.
</p>
</div>
## Output
Now you can iterate over `site.staff_members` on a page and output the content
for each staff member. Similar to posts, the body of the document is accessed
using the `content` variable:
{% raw %}
```liquid
{% for staff_member in site.staff_members %}
<h2>{{ staff_member.name }} - {{ staff_member.position }}</h2>
<p>{{ staff_member.content | markdownify }}</p>
{% endfor %}
```
{% endraw %}
If you'd like Jekyll to create a rendered page for each document in your
collection, you can set the `output` key to `true` in your collection
metadata in `_config.yml`:
```yaml
collections:
staff_members:
output: true
```
You can link to the generated page using the `url` attribute:
{% raw %}
```liquid
{% for staff_member in site.staff_members %}
<h2>
<a href="{{ staff_member.url }}">
{{ staff_member.name }} - {{ staff_member.position }}
</a>
</h2>
<p>{{ staff_member.content | markdownify }}</p>
{% endfor %}
```
{% endraw %}
## Permalinks
There are special [permalink variables for collections]({{ '/docs/permalinks/#collections' | relative_url }}) to
help you control the output url for the entire collection.
## Custom Sorting of Documents {%- include docs_version_badge.html version="4.0" -%}
{: #custom-sorting-of-documents}
By default, two documents in a collection are sorted by their `date` attribute when both of them have the `date` key in their front matter. However, if either or both documents do not have the `date` key in their front matter, they are sorted by their respective paths.
You can control this sorting via the collection's metadata.
### Sort By Front Matter Key
Documents can be sorted based on a front matter key by setting a `sort_by` metadata to the front matter key string. For example,
to sort a collection of tutorials based on key `lesson`, the configuration would be:
```yaml
collections:
tutorials:
sort_by: lesson
```
The documents are arranged in the increasing order of the key's value. If a document does not have the front matter key defined
then that document is placed immediately after sorted documents. When multiple documents do not have the front matter key defined,
those documents are sorted by their dates or paths and then placed immediately after the sorted documents.
### Manually Ordering Documents
You can also manually order the documents by setting an `order` metadata with **the filenames listed** in the desired order.
For example, a collection of tutorials would be configured as:
```yaml
collections:
tutorials:
order:
- hello-world.md
- introduction.md
- basic-concepts.md
- advanced-concepts.md
```
Any documents with filenames that do not match the list entry simply gets placed after the rearranged documents. If a document is
nested under subdirectories, include them in entries as well:
```yaml
collections:
tutorials:
order:
- hello-world.md
- introduction.md
- concepts/basics.md
- concepts/advanced.md
```
If both metadata keys have been defined properly, `order` list takes precedence.
## Liquid Attributes
### Collections
Collections are also available under `site.collections`, with the metadata
you specified in your `_config.yml` (if present) and the following information:
<div class="mobile-side-scroller">
<table>
<thead>
<tr>
<th>Variable</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p><code>label</code></p>
</td>
<td>
<p>
The name of your collection, e.g. <code>my_collection</code>.
</p>
</td>
</tr>
<tr>
<td>
<p><code>docs</code></p>
</td>
<td>
<p>
An array of <a href="#documents">documents</a>.
</p>
</td>
</tr>
<tr>
<td>
<p><code>files</code></p>
</td>
<td>
<p>
An array of static files in the collection.
</p>
</td>
</tr>
<tr>
<td>
<p><code>relative_directory</code></p>
</td>
<td>
<p>
The path to the collection's source directory, relative to the site
source.
</p>
</td>
</tr>
<tr>
<td>
<p><code>directory</code></p>
</td>
<td>
<p>
The full path to the collections's source directory.
</p>
</td>
</tr>
<tr>
<td>
<p><code>output</code></p>
</td>
<td>
<p>
Whether the collection's documents will be output as individual
files.
</p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="note info">
<h5>A Hard-Coded Collection</h5>
<p>In addition to any collections you create yourself, the
<code>posts</code> collection is hard-coded into Jekyll. It exists whether
you have a <code>_posts</code> directory or not. This is something to note
when iterating through <code>site.collections</code> as you may need to
filter it out.</p>
<p>You may wish to use filters to find your collection:
<code>{% raw %}{{ site.collections | where: "label", "myCollection" | first }}{% endraw %}</code></p>
</div>
<div class="note info">
<h5>Collections and Time</h5>
<p>Except for documents in hard-coded default collection <code>posts</code>, all documents in collections
you create, are accessible via Liquid irrespective of their assigned date, if any, and therefore renderable.
</p>
<p>Documents are attempted to be written to disk only if the concerned collection
metadata has <code>output: true</code>. Additionally, future-dated documents are only written if
<code>site.future</code> <em>is also true</em>.
</p>
<p>More fine-grained control over documents being written to disk can be exercised by setting
<code>published: false</code> (<em><code>true</code> by default</em>) in the document's front matter.
</p>
</div>
### Documents
In addition to any front matter provided in the document's corresponding
file, each document has the following attributes:
<div class="mobile-side-scroller">
<table>
<thead>
<tr>
<th>Variable</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p><code>content</code></p>
</td>
<td>
<p>
The (unrendered) content of the document. If no front matter is
provided, Jekyll will not generate the file in your collection. If
front matter is used, then this is all the contents of the file
after the terminating
`---` of the front matter.
</p>
</td>
</tr>
<tr>
<td>
<p><code>output</code></p>
</td>
<td>
<p>
The rendered output of the document, based on the
<code>content</code>.
</p>
</td>
</tr>
<tr>
<td>
<p><code>path</code></p>
</td>
<td>
<p>
The full path to the document's source file.
</p>
</td>
</tr>
<tr>
<td>
<p><code>relative_path</code></p>
</td>
<td>
<p>
The path to the document's source file relative to the site source.
</p>
</td>
</tr>
<tr>
<td>
<p><code>url</code></p>
</td>
<td>
<p>
The URL of the rendered collection. The file is only written to the destination when the collection to which it belongs has <code>output: true</code> in the site's configuration.
</p>
</td>
</tr>
<tr>
<td>
<p><code>collection</code></p>
</td>
<td>
<p>
The name of the document's collection.
</p>
</td>
</tr>
<tr>
<td>
<p><code>date</code></p>
</td>
<td>
<p>
The date of the document's collection.
</p>
</td>
</tr>
</tbody>
</table>
</div>

View File

@@ -0,0 +1,8 @@
---
title: Report a bug
permalink: "/docs/community/bug/"
---
If you think you've found a bug within a Jekyll plugin, open an issue in that plugin's repository &mdash; First [look for the plugin on rubygems](https://rubygems.org/) then click on the `Homepage` link to access the plugin repository.
If you think you've found a bug within Jekyll itself, [open an issue](https://github.com/jekyll/jekyll/issues/new).

View File

@@ -0,0 +1,44 @@
---
title: Community
permalink: /docs/community/
redirect_from: "/help/index.html"
---
## Jekyll Contributor Code of Conduct
As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
Read the full [code of conduct]({{ '/docs/conduct/' | relative_url }})
## Reporting Security Vulnerabilities
Find something in our codebase that could be exploited by malicious elements?
Consult our [Security Policy]({{ '/docs/security/' | relative_url }}) to see if a product version is considered *outdated* and how to report
the situation responsibly.
## Where to get support
If you're looking for support for Jekyll, there are a lot of options:
* Read the [Jekyll Documentation]({{ '/docs/' | relative_url }})
* If you have a question about using Jekyll, start a discussion on the [Jekyll Forum](https://talk.jekyllrb.com/) or [StackOverflow](https://stackoverflow.com/questions/tagged/jekyll)
* Chat with Jekyllers &mdash; Join our [Gitter channel](https://gitter.im/jekyll/jekyll) or our IRC channel #jekyll on [Libera](irc://irc.libera.chat/#jekyll).
There are a bunch of helpful community members on these services who are willing to point you in the right direction.
**Reminder: Jekyll's issue tracker is not a support forum.**
## Ways to contribute
* [How to Contribute]({{ '/docs/contributing/' | relative_url }})
* [How to file a bug]({{ '/docs/community/bug/' | relative_url }})
* [Guide for maintaining Jekyll]({{ '/docs/maintaining/' | relative_url }})
## Jekyllconf
[Watch videos]({{ '/jekyllconf/' | relative_url }}) from members of the Jekyll community speak about interesting use cases, tricks theyve learned or meta Jekyll topics.
## Jekyll on Twitter
The [official Jekyll Twitter account](https://twitter.com/jekyllrb).

82
docs/_docs/conduct.md Normal file
View File

@@ -0,0 +1,82 @@
---
title: Code of Conduct
permalink: "/docs/conduct/"
note: This file is autogenerated. Edit /CONDUCT.markdown instead.
redirect_from: "/conduct/index.html"
editable: false
---
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at [olivia@jekyllrb.com](mailto:olivia@jekyllrb.com). All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at [https://www.contributor-covenant.org/version/1/4/code-of-conduct.html](https://www.contributor-covenant.org/version/1/4/code-of-conduct.html)
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
[https://www.contributor-covenant.org/faq](https://www.contributor-covenant.org/faq)

View File

@@ -0,0 +1,19 @@
---
title: Configuration
permalink: /docs/configuration/
---
Jekyll gives you a lot of flexibility to customize how it builds your site. These
options can either be specified in a `_config.yml` or `_config.toml` file placed
in your sites root directory, or can be specified as flags for the `jekyll`
executable in the terminal.
* [Configuration Options]({{ '/docs/configuration/options/' | relative_url }})
* [Default Configuration]({{ '/docs/configuration/default/' | relative_url }})
* [Front Matter Defaults]({{ '/docs/configuration/front-matter-defaults/' | relative_url }})
* [Environments]({{ '/docs/configuration/environments/' | relative_url }})
* [Markdown Options]({{ '/docs/configuration/markdown/' | relative_url }})
* [Liquid Options]({{ '/docs/configuration/liquid/' | relative_url }})
* [Sass/SCSS Options]({{ '/docs/configuration/sass/' | relative_url }})
* [Webrick Options]({{ '/docs/configuration/webrick/' | relative_url }})
* [Incremental Regeneration]({{ '/docs/configuration/incremental-regeneration/' | relative_url }})

View File

@@ -0,0 +1,89 @@
---
title: Default Configuration
permalink: "/docs/configuration/default/"
---
Jekyll runs with the following configuration options by default. Alternative
settings for these options can be explicitly specified in the configuration
file or on the command-line.
<div class="note info">
<h5>Be aware of directory paths</h5>
<p>
In general, make directory path values in configuration keys like <code>plugins_dir</code> relative to the current working directory, not the site source. The <code>sass</code> configuration key is an exception, where values must be relative to the site source.
</p>
</div>
```yaml
# Where things are
source : .
destination : ./_site
collections_dir : .
plugins_dir : _plugins # takes an array of strings and loads plugins in that order
layouts_dir : _layouts
data_dir : _data
includes_dir : _includes
sass:
sass_dir: _sass
collections:
posts:
output : true
# Handling Reading
safe : false
include : [".htaccess"]
exclude : ["Gemfile", "Gemfile.lock", "node_modules", "vendor/bundle/", "vendor/cache/", "vendor/gems/", "vendor/ruby/"]
keep_files : [".git", ".svn"]
encoding : "utf-8"
markdown_ext : "markdown,mkdown,mkdn,mkd,md"
strict_front_matter : false
# Filtering Content
show_drafts : null
limit_posts : 0
future : false
unpublished : false
# Plugins
whitelist : []
plugins : []
# Conversion
markdown : kramdown
highlighter : rouge
lsi : false
excerpt_separator : "\n\n"
incremental : false
# Serving
detach : false
port : 4000
host : 127.0.0.1
baseurl : "" # does not include hostname
show_dir_listing : false
# Outputting
permalink : date
paginate_path : /page:num
timezone : null
quiet : false
verbose : false
defaults : []
liquid:
error_mode : warn
strict_filters : false
strict_variables : false
# Markdown Processors
kramdown:
auto_ids : true
entity_output : as_char
toc_levels : [1, 2, 3, 4, 5, 6]
smart_quotes : lsquo,rsquo,ldquo,rdquo
input : GFM
hard_wrap : false
footnote_nr : 1
show_warnings : false
```

View File

@@ -0,0 +1,49 @@
---
title: Environments
permalink: "/docs/configuration/environments/"
---
In the `build` (or `serve`) arguments, you can specify a Jekyll environment
and value. The build will then apply this value in any conditional statements
in your content.
For example, suppose you set this conditional statement in your code:
{% raw %}
```liquid
{% if jekyll.environment == "production" %}
{% include disqus.html %}
{% endif %}
```
{% endraw %}
When you build your Jekyll site, the content inside the `if` statement won't be
run unless you also specify a `production` environment in the build command,
like this:
```sh
JEKYLL_ENV=production jekyll build
```
Specifying an environment value allows you to make certain content available
only within specific environments.
The default value for `JEKYLL_ENV` is `development`. Therefore if you omit
`JEKYLL_ENV` from the build arguments, the default value will be
`JEKYLL_ENV=development`. Any content inside
{% raw %}`{% if jekyll.environment == "development" %}`{% endraw %} tags will
automatically appear in the build.
Your environment values can be anything you want (not just `development` or
`production`). Some elements you might want to hide in development
environments include Disqus comment forms or Google Analytics. Conversely,
you might want to expose an "Edit me in GitHub" button in a development
environment but not include it in production environments.
By specifying the option in the build command, you avoid having to change
values in your configuration files when moving from one environment to another.
{: .note}
To switch part of your config settings depending on the environment, use the
<a href="{{ '/docs/configuration/options/#build-command-options' | relative_url }}">build command option</a>,
for example <code>--config _config.yml,_config_development.yml</code>. Settings
in later files override settings in earlier files.

View File

@@ -0,0 +1,153 @@
---
title: Front Matter Defaults
permalink: "/docs/configuration/front-matter-defaults/"
---
Using [front matter](/docs/front-matter/) is one way that you can specify configuration in the pages and posts for your site. Setting things like a default layout, or customizing the title, or specifying a more precise date/time for the post can all be added to your page or post front matter.
Often times, you will find that you are repeating a lot of configuration options. Setting the same layout in each file, adding the same category - or categories - to a post, etc. You can even add custom variables like author names, which might be the same for the majority of posts on your blog.
Instead of repeating this configuration each time you create a new post or page, Jekyll provides a way to set these defaults in the site configuration. To do this, you can specify site-wide defaults using the `defaults` key in the `_config.yml` file in your project's root directory.
The `defaults` key holds an array of scope/values pairs that define what defaults should be set for a particular file path, and optionally, a file type in that path.
Let's say that you want to add a default layout to all pages and posts in your site. You would add this to your `_config.yml` file:
```yaml
defaults:
-
scope:
path: "" # an empty string here means all files in the project
values:
layout: "default"
```
<div class="note info">
<h5>Stop and rerun `jekyll serve` command.</h5>
<p>
The <code>_config.yml</code> master configuration file contains global configurations
and variable definitions that are read once at execution time. Changes made to <code>_config.yml</code>
during automatic regeneration are not loaded until the next execution.
</p>
<p>
Note <a href="{{ '/docs/datafiles/' | relative_url }}">Data Files</a> are included and reloaded during automatic regeneration.
</p>
</div>
Here, we are scoping the `values` to any file that exists in the path `scope`. Since the path is set as an empty string, it will apply to **all files** in your project. You probably don't want to set a layout on every file in your project - like css files, for example - so you can also specify a `type` value under the `scope` key.
```yaml
defaults:
-
scope:
path: "" # an empty string here means all files in the project
type: "posts" # previously `post` in Jekyll 2.2.
values:
layout: "default"
```
Now, this will only set the layout for files where the type is `posts`.
The different types that are available to you are `pages`, `posts`, `drafts` or any collection in your site. While `type` is optional, you must specify a value for `path` when creating a `scope/values` pair.
As mentioned earlier, you can set multiple scope/values pairs for `defaults`.
```yaml
defaults:
-
scope:
path: ""
type: "pages"
values:
layout: "my-site"
-
scope:
path: "projects"
type: "pages" # previously `page` in Jekyll 2.2.
values:
layout: "project" # overrides previous default layout
author: "Mr. Hyde"
```
With these defaults, all pages would use the `my-site` layout. Any html files that exist in the `projects/`
folder will use the `project` layout, if it exists. Those files will also have the `page.author`
[liquid variable]({{ '/docs/variables/' | relative_url }}) set to `Mr. Hyde`.
```yaml
collections:
my_collection:
output: true
defaults:
-
scope:
path: ""
type: "my_collection" # a collection in your site, in plural form
values:
layout: "default"
```
In this example, the `layout` is set to `default` inside the
[collection]({{ '/docs/collections/' | relative_url }}) with the name `my_collection`.
### Glob patterns in Front Matter defaults
It is also possible to use glob patterns (currently limited to patterns that contain `*`) when matching defaults. For example, it is possible to set specific layout for each `special-page.html` in any subfolder of `section` folder. {%- include docs_version_badge.html version="3.7.0" -%}
```yaml
collections:
my_collection:
output: true
defaults:
-
scope:
path: "section/*/special-page.html"
values:
layout: "specific-layout"
```
<div class="note warning">
<h5>Globbing and Performance</h5>
<p>
Please note that globbing a path is known to have a negative effect on
performance and is currently not optimized, especially on Windows.
Globbing a path will increase your build times in proportion to the size
of the associated collection directory.
</p>
</div>
### Precedence
Jekyll will apply all of the configuration settings you specify in the `defaults` section of your `_config.yml` file. You can choose to override settings from other scope/values pair by specifying a more specific path for the scope.
You can see that in the second to last example above. First, we set the default page layout to `my-site`. Then, using a more specific path, we set the default layout for pages in the `projects/` path to `project`. This can be done with any value that you would set in the page or post front matter.
Finally, if you set defaults in the site configuration by adding a `defaults` section to your `_config.yml` file, you can override those settings in a post or page file. All you need to do is specify the settings in the post or page front matter. For example:
```yaml
# In _config.yml
...
defaults:
-
scope:
path: "projects"
type: "pages"
values:
layout: "project"
author: "Mr. Hyde"
category: "project"
...
```
```yaml
# In projects/foo_project.md
---
author: "John Smith"
layout: "foobar"
---
The post text goes here...
```
The `projects/foo_project.md` would have the `layout` set to `foobar` instead
of `project` and the `author` set to `John Smith` instead of `Mr. Hyde` when
the site is built.

View File

@@ -0,0 +1,36 @@
---
title: Default Configuration
permalink: "/docs/configuration/incremental-regeneration/"
---
## Incremental Regeneration
<div class="note warning">
<h5>Incremental regeneration is still an experimental feature</h5>
<p>
While incremental regeneration will work for the most common cases, it will
not work correctly in every scenario. Please be extremely cautious when
using the feature, and report any problems not listed below by
<a href="https://github.com/jekyll/jekyll/issues/new">opening an issue on GitHub</a>.
</p>
</div>
Incremental regeneration helps shorten build times by only generating documents
and pages that were updated since the previous build. It does this by keeping
track of both file modification times and inter-document dependencies in the
`.jekyll-metadata` file.
Under the current implementation, incremental regeneration will only generate a
document or page if either it, or one of its dependencies, is modified. Currently,
the only types of dependencies tracked are includes (using the
{% raw %}`{% include %}`{% endraw %} tag) and layouts. This means that plain
references to other documents (for example, the common case of iterating over
`site.posts` in a post listings page) will not be detected as a dependency.
To remedy some of these shortfalls, putting `regenerate: true` in the front-matter
of a document will force Jekyll to regenerate it regardless of whether it has been
modified. Note that this will generate the specified document only; references
to other documents' contents will not work since they won't be re-rendered.
Incremental regeneration can be enabled via the `--incremental` flag (`-I` for
short) from the command-line or by setting `incremental: true` in your
configuration file.

View File

@@ -0,0 +1,38 @@
---
title: Liquid Options
permalink: "/docs/configuration/liquid/"
---
Liquid's response to errors can be configured by setting `error_mode`. The
options are
- `lax` --- Ignore all errors.
- `warn` --- Output a warning on the console for each error. (default)
- `strict` --- Output an error message and stop the build.
Within _config.yml, the default configuration is as follows:
```yaml
liquid:
error_mode: warn
```
The above example depicts the "warn" value, which is already set by default- `error_mode: warn`. This results in any issues being called out during the build process however will continue to build if possible.
You can also configure Liquid's renderer to catch non-assigned variables and
non-existing filters by setting `strict_variables` and / or `strict_filters`
to `true` respectively. {% include docs_version_badge.html version="3.8.0" %}
Do note that while `error_mode` configures Liquid's parser, the `strict_variables`
and `strict_filters` options configure Liquid's renderer and are consequently
orthogonal.
An example of setting these variables within _config.yml is as follows:
```yaml
liquid:
error_mode: strict
strict_variables: true
strict_filters: true
```
Configuring as described above will stop your build/serve from happening and call out the offending error and halt. This is helpful when desiring to catch liquid-related issues by stopping the build or serve process and allowing you to deal with any issues.

View File

@@ -0,0 +1,97 @@
---
title: Markdown Options
permalink: "/docs/configuration/markdown/"
---
The various Markdown renderers supported by Jekyll sometimes have extra options
available.
## Kramdown
Kramdown is the default Markdown renderer for Jekyll, and often works well with no additional configuration. However, it does support many configuration options.
### Kramdown Processor
By default, Jekyll uses the [GitHub Flavored Markdown (GFM) processor](https://github.com/kramdown/parser-gfm) for Kramdown. (Specifying `input: GFM` is fine, but redundant.) GFM supports a couple additional Kramdown options, documented by [kramdown-parser-gfm](https://github.com/kramdown/parser-gfm). These options can be used directly in your Kramdown Jekyll config, like this:
```yaml
kramdown:
gfm_quirks: [paragraph_end]
```
You can also change the processor used by Kramdown (as specified for the `input` key in the [Kramdown RDoc](https://kramdown.gettalong.org/rdoc/Kramdown/Document.html#method-c-new)). For example, to use the non-GFM Kramdown processor in Jekyll, add the following to your configuration.
```yaml
kramdown:
input: Kramdown
```
Documentation for Kramdown parsers is available in the [Kramdown docs](https://kramdown.gettalong.org/parser/kramdown.html). If you use a Kramdown parser other than Kramdown or GFM, you'll need to add the gem for it.
### Syntax Highlighting (CodeRay)
To use the [CodeRay](http://coderay.rubychan.de/) syntax highlighter with Kramdown, you need to add a dependency on the `kramdown-syntax-coderay` gem. For example, `bundle add kramdown-syntax-coderay`. Then, you'll be able to specify CodeRay in your `syntax_highlighter` config:
```yaml
kramdown:
syntax_highlighter: coderay
```
CodeRay supports several of its own configuration options, documented in the [kramdown-syntax-coderay docs](https://github.com/kramdown/syntax-coderay) which can be passed as `syntax_highlighter_opts` like this:
```yaml
kramdown:
syntax_highlighter: coderay
syntax_highlighter_opts:
line_numbers: table
bold_every: 5
```
### Advanced Kramdown Options
Kramdown supports a variety of other relatively advanced options such as `header_offset` and `smart_quotes`. These are documented in the [Kramdown configuration documentation](https://kramdown.gettalong.org/options.html) and can be added to your Kramdown config like this:
```yaml
kramdown:
header_offset: 2
```
<div class="note warning">
<h5>There are several unsupported kramdown options</h5>
<p>
Please note that Jekyll uses Kramdown's HTML converter. Kramdown options used only by other converters, such as <code>remove_block_html_tags</code> (used by the RemoveHtmlTags converter), will not work.
</p>
</div>
## CommonMark
[CommonMark](https://commonmark.org/) is a rationalized version of Markdown syntax, implemented in C and thus faster than default Kramdown implemented in Ruby. It [slightly differs](https://github.com/commonmark/CommonMark#differences-from-original-markdown) from original Markdown and does not support all the syntax elements implemented in Kramdown, like [Block Inline Attribute Lists](https://kramdown.gettalong.org/syntax.html#block-ials).
It comes in two flavors: basic CommonMark with [jekyll-commonmark](https://github.com/jekyll/jekyll-commonmark) plugin and [GitHub Flavored Markdown supported by GitHub Pages](https://github.com/github/jekyll-commonmark-ghpages).
### Custom Markdown Processors
If you're interested in creating a custom markdown processor, you're in luck! Create a new class in the `Jekyll::Converters::Markdown` namespace:
```ruby
class Jekyll::Converters::Markdown::MyCustomProcessor
def initialize(config)
require 'funky_markdown'
@config = config
rescue LoadError
STDERR.puts 'You are missing a library required for Markdown. Please run:'
STDERR.puts ' $ [sudo] gem install funky_markdown'
raise FatalException.new("Missing dependency: funky_markdown")
end
def convert(content)
::FunkyMarkdown.new(content).convert
end
end
```
Once you've created your class and have it properly set up either as a plugin
in the `_plugins` folder or as a gem, specify it in your `_config.yml`:
```yaml
markdown: MyCustomProcessor
```

View File

@@ -0,0 +1,162 @@
---
title: Configuration Options
permalink: "/docs/configuration/options/"
---
The tables below list the available settings for Jekyll, and the various <code
class="option">options</code> (specified in the configuration file) and <code
class="flag">flags</code> (specified on the command-line) that control them.
### Global Configuration
<div class="mobile-side-scroller">
<table>
<thead>
<tr>
<th>Setting</th>
<th>
<span class="option">Options</span> and <span class="flag">Flags</span>
</th>
</tr>
</thead>
<tbody>
{% for setting in site.data.config_options.global %}
<tr class="setting">
<td>
<p class="name">
<strong>{{ setting.name }}</strong>
{% if setting.version-badge %}
<span class="version-badge" title="Introduced in v{{ setting.version-badge }}">{{ setting.version-badge }}</span>
{% endif %}
</p>
<p class="description">{{ setting.description }}</p>
</td>
<td class="align-center">
<p><code class="option">{{ setting.option }}</code></p>
{% if setting.flag %}
<p><code class="flag">{{ setting.flag }}</code></p>
{% endif %}
</td>
</tr>
{% endfor %}
<tr>
<td>
<p class='name'><strong>Defaults</strong></p>
<p class='description'>
Set defaults for <a href="{{ '/docs/front-matter/' | relative_url }}" title="front matter">front matter</a>
variables.
</p>
</td>
<td class='align-center'>
<p>see <a href="{{ '/docs/configuration/front-matter-defaults/' | relative_url }}" title="details">below</a></p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="note warning">
<h5>Destination folders are cleaned on site builds</h5>
<p>
The contents of <code>&lt;destination&gt;</code> are automatically
cleaned, by default, when the site is built. Files or folders that are not
created by your site will be removed. Some files could be retained
by specifying them within the <code>&lt;keep_files&gt;</code> configuration directive.
</p>
<p>
Do not use an important location for <code>&lt;destination&gt;</code>; instead, use it as
a staging area and copy files from there to your web server.
</p>
</div>
### Build Command Options
<div class="mobile-side-scroller">
<table>
<thead>
<tr>
<th>Setting</th>
<th><span class="option">Options</span> and <span class="flag">Flags</span></th>
</tr>
</thead>
<tbody>
{% for setting in site.data.config_options.build %}
<tr class="setting">
<td>
<p class="name">
<strong>{{ setting.name }}</strong>
{% if setting.version-badge %}
<span class="version-badge" title="Introduced in v{{ setting.version-badge }}">{{ setting.version-badge }}</span>
{% endif %}
</p>
<p class="description">{{ setting.description }}</p>
</td>
<td class="align-center">
{% if setting.option %}<p><code class="option">{{ setting.option }}</code></p>{% endif %}
{% if setting.flag %}<p><code class="flag">{{ setting.flag }}</code></p>{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
### Serve Command Options
In addition to the options below, the `serve` sub-command can accept any of the options
for the `build` sub-command, which are then applied to the site build which occurs right
before your site is served.
<div class="mobile-side-scroller">
<table>
<thead>
<tr>
<th>Setting</th>
<th><span class="option">Options</span> and <span class="flag">Flags</span></th>
</tr>
</thead>
<tbody>
{% for setting in site.data.config_options.serve %}
<tr class="setting">
<td>
<p class="name">
<strong>{{ setting.name }}</strong>
{% if setting.version-badge %}
<span class="version-badge" title="Introduced in v{{ setting.version-badge }}">{{ setting.version-badge }}</span>
{% endif %}
</p>
<p class="description">{{ setting.description }}</p>
</td>
<td class="align-center">
{% if setting.option %}
<p><code class="option">{{ setting.option }}</code></p>
{% elsif setting.options %}
<p>
{% for option in setting.options %}
<code class="option">{{ option }}</code><br>
{% endfor %}
</p>
{% endif %}
{% if setting.flag %}
<p><code class="flag">{{ setting.flag }}</code></p>
{% elsif setting.flags %}
<p>
{% for flag in setting.flags %}
<code class="flag">{{ flag }}</code><br>
{% endfor %}
</p>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="note warning">
<h5>Do not use tabs in configuration files</h5>
<p>
This will either lead to parsing errors, or Jekyll will revert to the
default settings. Use spaces instead.
</p>
</div>

Some files were not shown because too many files have changed in this diff Show More