diff --git a/.github/CONTRIBUTING.markdown b/.github/CONTRIBUTING.markdown
index fe53b2f3682..f1c19732b09 100644
--- a/.github/CONTRIBUTING.markdown
+++ b/.github/CONTRIBUTING.markdown
@@ -4,7 +4,7 @@ Hi there! Interested in contributing to Jekyll? We'd love your help. Jekyll is a
## Where to get help or report a problem
-See [the support guidelines](SUPPORT.md)
+See [the support guidelines](https://jekyllrb.com/docs/support/)
## Ways to contribute
@@ -111,25 +111,37 @@ If your contribution changes any Jekyll behavior, make sure to update the docume
* 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)
+
## 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:
-
$ script/bootstrap
+```sh
+script/bootstrap
+```
Before you make any changes, run the tests and make sure that they pass (to confirm your environment is configured properly):
-
$ script/cibuild
+```sh
+script/cibuild
+```
If you are only updating a file in `test/`, you can use the command:
-
$ script/test test/blah_test.rb
+```sh
+script/test test/blah_test.rb
+```
If you are only updating a `.feature` file, you can use the command:
-
$ script/cucumber features/blah.feature
+```sh
+script/cucumber features/blah.feature
+```
Both `script/test` and `script/cucumber` can be run without arguments to
run its entire respective suite.
diff --git a/.github/SUPPORT.md b/.github/SUPPORT.markdown
similarity index 100%
rename from .github/SUPPORT.md
rename to .github/SUPPORT.markdown
diff --git a/.github/first-timers-issue-template.md b/.github/first-timers-issue-template.md
new file mode 100644
index 00000000000..fccc77715de
--- /dev/null
+++ b/.github/first-timers-issue-template.md
@@ -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 recieve 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).
diff --git a/.github/first-timers.yml b/.github/first-timers.yml
new file mode 100644
index 00000000000..9f866d72324
--- /dev/null
+++ b/.github/first-timers.yml
@@ -0,0 +1,6 @@
+repository: jekyll
+labels:
+ - good first issue
+ - help-wanted
+ - first-time-only
+template: .github/first-timers-issue-template.md
diff --git a/.rubocop.yml b/.rubocop.yml
index ea3aa1062fc..969c065ff70 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -1,6 +1,6 @@
---
AllCops:
- TargetRubyVersion: 2.0
+ TargetRubyVersion: 2.1
Include:
- lib/**/*.rb
Exclude:
@@ -21,7 +21,7 @@ Layout/EmptyLinesAroundAccessModifier:
Layout/EmptyLinesAroundModuleBody:
Enabled: false
Layout/EndOfLine:
- EnforcedStyle: lf
+ EnforcedStyle: native
Layout/ExtraSpacing:
AllowForAlignment: true
Layout/FirstParameterIndentation:
@@ -38,8 +38,6 @@ Layout/MultilineMethodCallIndentation:
EnforcedStyle: indented
Layout/MultilineOperationIndentation:
EnforcedStyle: indented
-Layout/SpaceAroundOperators:
- Enabled: true
Layout/SpaceInsideBrackets:
Enabled: false
Lint/EndAlignment:
@@ -48,6 +46,8 @@ Lint/UnreachableCode:
Severity: error
Lint/UselessAccessModifier:
Enabled: false
+Lint/Void:
+ Enabled: false
Metrics/AbcSize:
Max: 21
Metrics/BlockLength:
@@ -82,6 +82,10 @@ Metrics/ParameterLists:
Max: 4
Metrics/PerceivedComplexity:
Max: 8
+Naming/FileName:
+ Enabled: false
+Naming/HeredocDelimiterNaming:
+ Enabled: false
Security/MarshalLoad:
Exclude:
- !ruby/regexp /test\/.*.rb$/
@@ -94,14 +98,11 @@ Style/Alias:
Enabled: false
Style/AndOr:
Severity: error
-Style/Attr:
- Enabled: false
Style/BracesAroundHashParameters:
Enabled: false
Style/ClassAndModuleChildren:
Enabled: false
Style/FrozenStringLiteralComment:
- Enabled: true
EnforcedStyle: always
Style/Documentation:
Enabled: false
@@ -109,8 +110,6 @@ Style/Documentation:
- !ruby/regexp /features\/.*.rb$/
Style/DoubleNegation:
Enabled: false
-Style/FileName:
- Enabled: false
Style/GuardClause:
Enabled: false
Style/HashSyntax:
@@ -153,5 +152,3 @@ Style/SymbolArray:
Enabled: false
Style/TrailingCommaInLiteral:
EnforcedStyleForMultiline: consistent_comma
-Style/UnneededCapitalW:
- Enabled: false
diff --git a/.travis.yml b/.travis.yml
index 00e21f93e19..2cfe51b7697 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,11 +5,11 @@ language: ruby
sudo: false
rvm:
- - &ruby1 2.4.1
- - &ruby2 2.3.4
- - &ruby3 2.2.7
+ - &ruby1 2.4.2
+ - &ruby2 2.3.5
+ - &ruby3 2.2.8
- &ruby4 2.1.10
- - &jruby jruby-9.1.7.0
+ - &jruby jruby-9.1.13.0
matrix:
include:
diff --git a/Gemfile b/Gemfile
index 216c2626f19..92f6f45e54e 100644
--- a/Gemfile
+++ b/Gemfile
@@ -23,14 +23,14 @@ end
group :test do
gem "codeclimate-test-reporter", "~> 1.0.5"
- gem "cucumber", "~> 2.1"
+ gem "cucumber", "~> 3.0"
gem "jekyll_test_plugin"
gem "jekyll_test_plugin_malicious"
# nokogiri v1.8 does not work with ruby 2.1 and below
gem "nokogiri", RUBY_VERSION >= "2.2" ? "~> 1.7" : "~> 1.7.0"
gem "rspec"
gem "rspec-mocks"
- gem "rubocop", "~> 0.49.1"
+ gem "rubocop", "~> 0.51.0"
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__)
diff --git a/History.markdown b/History.markdown
index 50ba202e33d..e74d59b3fc6 100644
--- a/History.markdown
+++ b/History.markdown
@@ -1,17 +1,103 @@
## HEAD
+### Documentation
+
+ * Docs: GitHub Pages instructions (#6384)
+ * Improve documentation for theme-gem installation (#6387)
+ * Fix diff syntax-highlighting (#6388)
+ * Fix code-block highlighting in docs (#6398)
+ * Docs: Filtering Posts with categories, tags, or other variables (#6399)
+ * Fixes formatting on pre-formatted text. (#6405)
+ * Docs: updates (#6407)
+ * Docs: Fix `collections_dir` example (#6408)
+ * Docs: Renaming duplicate of "Scenario 6" to "Scenario 7" (#6411)
+ * Docs: Mark `collection_dir` as unreleased (#6412)
+ * Docs: Fix link to SUPPORT (#6415)
+ * Docs: Added new tutorial to tutorials section on docs (#6406)
+ * Fix list appearance by adding missing `ol` tag (#6421)
+ * Explain how to override output collection index page (#6424)
+ * Added github-cards to the list of plugins (#6425)
+ * add post about diversity (#6447)
+ * Docs: Add a note about Liquid and syntax highlighting (#6466)
+ * Add a note on `:jekyll_plugins` group in the docs (#6488)
+ * Updated custom-404-page.md (#6489)
+ * Remove `sudo` from macOS troubleshooting instructions (#6486)
+ * add formester to the list of saas form backend (#6059)
+ * Fix a few minor issues in the docs (#6494)
+
### Development Fixes
- * Strip unnecessary leading whitespace in template (#6228)
- * Users should be installing patch versions. (#6198)
- * fix tests (#6240)
- * Define path with __dir__ (#6087)
- * exit site.process sooner (#6239)
- * make flakey test more robust (#6277)
- * Add a quick test for DataReader (#6284)
- * script/backport-pr: commit message no longer includes the `#` (#6289)
- * Add Add CODEOWNERS file to help automate reviews. (#6320)
- * Fix builds on codeclimate (#6333)
+ * Upgrade to Cucumber 3.0 (#6395)
+ * Provide a better default hash for tracking liquid stats (#6417)
+ * Docs: CoC violation correspondants (#6429)
+ * add failing test for non-utf8 encoding (#6339)
+ * Add configuration for first-timers bot (#6431)
+ * Update first-timers-issue-template.md (#6472)
+ * Site: Rename method (#6474)
+ * Do not linkify escaped characters as PRs in History (#6468)
+ * Rely on jekyll-mentions for linking usernames (#6469)
+ * Enable `Lint/RescueWithoutErrorClass` Cop (#6482)
+ * Added direct collection access to future collection item feature test (#6151)
+ * Clean up Rubocop config (#6495)
+ * Fix #6498: Use Gem to discover the location of bundler. (#6499)
+ * Remove unnecessary encoding comment (#6513)
+ * Suggest using Rubocop to automatically fix errors (#6514)
+ * Assert raising Psych::SyntaxError when `"strict_front_matter"=>true` (#6520)
+ * [RuboCop] Enable `Style/UnneededCapitalW` cop (#6526)
+ * Use Kernel#Array instead of explicit Array check (#6525)
+
+### Minor Enhancements
+
+ * Disable default layouts for Pages with a `layout: none` declaration (#6182)
+ * Upgrade to Rouge 3 (#6381)
+ * Allow the user to set collections_dir to put all collections under one subdirectory (#6331)
+ * Scope path glob (#6268)
+ * Allow plugins to modify the obsolete files. (#6502)
+ * .sass-cache doesn't *always* land in options['source'] (#6500)
+ * Add Utils::Internet.connected? to determine whether host machine has internet connection. (#5870)
+ * Add latin mode to slugify (#6509)
+ * filter relative_url should keep absolute urls with scheme/authority (#6490)
+
+### Site Enhancements
+
+ * Docs: Update instructions (#6396)
+ * Add special styling for code-blocks run in shell (#6389)
+ * Update list of files excluded from Docs site (#6457)
+ * Update site History (#6460)
+ * Site: Add default twitter card image (#6476)
+ * Update normalize.css to v7.0.0 (#6491)
+
+### Bug Fixes
+
+ * Raise when theme root directory is not available (#6455)
+
+## 3.6.2 / 2017-10-21
+
+### Development Fixes
+
+ * Update Rubocop to 0.51.0 (#6444)
+ * Add test for layout as string (#6445)
+
+### Bug Fixes
+
+ * Problematic UTF+bom files (#6322)
+ * Always treat `data.layout` as a string (#6442)
+
+## 3.6.1 / 2017-10-20
+
+### Documentation
+
+ * Doc y_day in docs/permalinks (#6244)
+ * Update frontmatter.md (#6371)
+ * Elaborate on excluding items from processing (#6136)
+ * Style lists in tables (#6379)
+ * Remove duplicate "available" (#6380)
+
+### Development Fixes
+
+ * Bump rubocop to use `v0.50.x` (#6368)
+
+## 3.6.0 / 2017-09-21
### Minor Enhancements
@@ -24,19 +110,24 @@
* Add support for Rouge 2, in addition to Rouge 1 (#5919)
* Allow `yield` to logger methods & bail early on no-op messages (#6315)
* Update mime-types. (#6336)
+ * Use a Schwartzian transform with custom sorting (#6342)
+ * Alias `Drop#invoke_drop` to `Drop#[]` (#6338)
### Bug Fixes
* `Deprecator`: fix typo for `--serve` command (#6229)
* `Reader#read_directories`: guard against an entry not being a directory (#6226)
* kramdown: symbolize keys in-place (#6247)
- * Call to_s on site.url before attempting to concatenate strings (#6253)
+ * Call `to_s` on site.url before attempting to concatenate strings (#6253)
* Enforce Style/FrozenStringLiteralComment (#6265)
* Update theme-template README to note 'assets' directory (#6257)
- * Memoize the return value of Document#url (#6266)
+ * Memoize the return value of `Document#url` (#6266)
* delegate `StaticFile#to_json` to `StaticFile#to_liquid` (#6273)
- * Fix Drop#key? so it can handle a nil argument (#6281)
+ * Fix `Drop#key?` so it can handle a nil argument (#6281)
* Guard against type error in absolute url (#6280)
+ * Mutable drops should fallback to their own methods when a mutation isn't present (#6350)
+ * Skip adding binary files as posts (#6344)
+ * Don't break if bundler is not installed (#6377)
### Documentation
@@ -56,6 +147,9 @@
* Docs: `site.url` behavior on development and production environments (#6270)
* Fix typo in site.url section of variables.md :-[ (#6337)
* Docs: updates (#6343)
+ * Fix precedence docs (#6346)
+ * add note to contributing docs about `script/console` (#6349)
+ * Docs: Fix permalink example (#6375)
### Site Enhancements
@@ -63,6 +157,20 @@
* Customizing url in collection elements clarified (#6264)
* Plugins is the new gems (#6326)
+### Development Fixes
+
+ * Strip unnecessary leading whitespace in template (#6228)
+ * Users should be installing patch versions. (#6198)
+ * Fix tests (#6240)
+ * Define path with `__dir__` (#6087)
+ * exit site.process sooner (#6239)
+ * make flakey test more robust (#6277)
+ * Add a quick test for DataReader (#6284)
+ * script/backport-pr: commit message no longer includes the `#` (#6289)
+ * Add Add CODEOWNERS file to help automate reviews. (#6320)
+ * Fix builds on codeclimate (#6333)
+ * Bump rubies on Travis (#6366)
+
## 3.5.2 / 2017-08-12
### Bug Fixes
@@ -1275,7 +1383,7 @@
### Site Enhancements
- * Add `@alfredxing` to the `@jekyll/core` team. :tada: (#3218)
+ * Add @alfredxing to the @jekyll/core team. :tada: (#3218)
* Document the `-q` option for the `build` and `serve` commands (#3149)
* Fix some minor typos/flow fixes in documentation website content (#3165)
* Add `keep_files` to configuration documentation (#3162)
diff --git a/README.markdown b/README.markdown
index 1350d019e0b..7dac7786cb9 100644
--- a/README.markdown
+++ b/README.markdown
@@ -45,7 +45,7 @@ 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 a [team captain](https://github.com/orgs/jekyll/teams/affinity-team-captains/members) know and we will address it as soon as possible.
+these terms, please let one of our core team members [Olivia](mailto:olivia@jekyllrb.com?subject=Jekyll%20CoC%20Violation), [Pat](mailto:pat@jekyllrb.com?subject=Jekyll%20CoC%20Violation), [Matt](mailto:matt@jekyllrb.com?subject=Jekyll%20CoC%20Violation) or [Parker](mailto:parker@jekyllrb.com?subject=Jekyll%20CoC%20Violation) know and we will address it as soon as possible.
## Diving In
diff --git a/Rakefile b/Rakefile
index a7d50088d93..786a2626dc4 100644
--- a/Rakefile
+++ b/Rakefile
@@ -46,19 +46,13 @@ def normalize_bullets(markdown)
end
def linkify_prs(markdown)
- markdown.gsub(%r!#(\d+)!) do |word|
+ markdown.gsub(%r!(?<\!&)#(\d+)!) do |word|
"[#{word}]({{ site.repository }}/issues/#{word.delete("#")})"
end
end
-def linkify_users(markdown)
- markdown.gsub(%r!(@\w+)!) do |username|
- "[#{username}](https://github.com/#{username.delete("@")})"
- end
-end
-
def linkify(markdown)
- linkify_users(linkify_prs(markdown))
+ linkify_prs(markdown)
end
def liquid_escape(markdown)
@@ -72,11 +66,11 @@ def custom_release_header_anchors(markdown)
_, 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{: ##{sluffigy(section)}-v#{major}-#{minor}-#{patch}}" }
+ .gsub(section_regexp) { |section| "#{section}\n{: ##{slugify(section)}-v#{major}-#{minor}-#{patch}}" }
end.join("\n## ")
end
-def sluffigy(header)
+def slugify(header)
header.delete("#").strip.downcase.gsub(%r!\s+!, "-")
end
@@ -101,7 +95,7 @@ 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
+ rescue NoMethodError
File.basename(file, ".*").downcase.capitalize
end
slug = File.basename(file, ".markdown").downcase
diff --git a/benchmark/schwartzian_transform.rb b/benchmark/schwartzian_transform.rb
new file mode 100644
index 00000000000..76c53e44e32
--- /dev/null
+++ b/benchmark/schwartzian_transform.rb
@@ -0,0 +1,115 @@
+#!/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!
+
+# First, test with a property only a handful of documents have.
+Benchmark.ips do |x|
+ x.config(time: 10, warmup: 5)
+ x.report('sort_by_property_directly with sparse property') do
+ sort_by_property_directly(site_docs, "redirect_from".freeze)
+ end
+ x.report('schwartzian_transform with sparse property') do
+ schwartzian_transform(site_docs, "redirect_from".freeze)
+ end
+ x.compare!
+end
+
+# Next, test with a property they all have.
+Benchmark.ips do |x|
+ x.config(time: 10, warmup: 5)
+ x.report('sort_by_property_directly with non-sparse property') do
+ sort_by_property_directly(site_docs, "title".freeze)
+ end
+ x.report('schwartzian_transform with non-sparse property') do
+ schwartzian_transform(site_docs, "title".freeze)
+ end
+ x.compare!
+end
diff --git a/docs/_config.yml b/docs/_config.yml
index 044cb386c95..d6e4443cf6f 100644
--- a/docs/_config.yml
+++ b/docs/_config.yml
@@ -8,7 +8,6 @@ google_analytics_id: UA-50755011-1
google_site_verification: onQcXpAvtHBrUI5LlroHNE_FP0b2qvFyPq7VZw36iEY
repository: https://github.com/jekyll/jekyll
-help_url: https://github.com/jekyll/jekyll-help
timezone: America/Los_Angeles
@@ -25,7 +24,7 @@ defaults:
type: "posts"
values:
layout: "news_item"
-
+ image: /img/twitter-card.png
collections:
docs:
@@ -57,4 +56,6 @@ plugins:
exclude:
- .gitignore
- - README.md
+ - CNAME
+ - icomoon-selection.json
+ - readme.md
diff --git a/docs/_data/tutorials.yml b/docs/_data/tutorials.yml
index a394345bbd4..3c2a9a66bda 100644
--- a/docs/_data/tutorials.yml
+++ b/docs/_data/tutorials.yml
@@ -1,6 +1,7 @@
- title: Tutorials
tutorials:
- home
+ - video-walkthroughs
- navigation
- orderofinterpretation
- custom-404-page
diff --git a/docs/_docs/code_of_conduct.md b/docs/_docs/code_of_conduct.md
new file mode 100644
index 00000000000..1cd0bdbc525
--- /dev/null
+++ b/docs/_docs/code_of_conduct.md
@@ -0,0 +1,55 @@
+---
+title: Code of Conduct
+permalink: "/docs/code_of_conduct/"
+note: This file is autogenerated. Edit /CODE_OF_CONDUCT.markdown instead.
+redirect_from: "/conduct/index.html"
+editable: false
+---
+
+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.
+
+We are committed to making participation in this project a harassment-free
+experience for everyone, regardless of level of experience, gender, gender
+identity and expression, sexual orientation, disability, personal appearance,
+body size, race, ethnicity, age, religion, or nationality.
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery
+* Personal attacks
+* Trolling or insulting/derogatory comments
+* Public or private harassment
+* Publishing other's private information, such as physical or electronic
+ addresses, without explicit permission
+* Other unethical or unprofessional conduct
+
+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.
+
+By adopting this Code of Conduct, project maintainers commit themselves to
+fairly and consistently applying these principles to every aspect of managing
+this project. Project maintainers who do not follow or enforce the Code of
+Conduct may be permanently removed from the project team.
+
+This Code of Conduct applies both within project spaces and in public spaces
+when an individual is representing the project or its community.
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported by opening an issue or contacting a project maintainer. All complaints
+will be reviewed and investigated and will result in a response that is deemed
+necessary and appropriate to the circumstances. Maintainers are obligated to
+maintain confidentiality with regard to the reporter of an incident.
+
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage],
+version 1.3.0, available at
+[http://contributor-covenant.org/version/1/3/0/][version]
+
+[homepage]: http://contributor-covenant.org
+[version]: http://contributor-covenant.org/version/1/3/0/
diff --git a/docs/_docs/collections.md b/docs/_docs/collections.md
index 39bd99eb0d7..0b59b7db6d1 100644
--- a/docs/_docs/collections.md
+++ b/docs/_docs/collections.md
@@ -46,6 +46,15 @@ defaults:
layout: page
```
+
+
Gather your collections
+
+
From v3.7.0 you can optionally specify a directory to store all your collections in the same place with collections_dir: my_collections
+
+
Then Jekyll will look in my_collections/_books for the books collection, and
+ in my_collections/_recipes for the recipes collection.
+
+
### Step 2: Add your content {#step2}
Create a corresponding folder (e.g. `