From c955cf2f5052ea823554f014c398fe597ad5460b Mon Sep 17 00:00:00 2001 From: SetoAira Date: Fri, 28 Jun 2019 23:16:23 +0900 Subject: [PATCH 01/13] =?UTF-8?q?=E5=A4=A7=E9=9B=91=E6=8A=8A=E3=81=AB?= =?UTF-8?q?=E3=82=AC=E3=83=AF=E3=82=92=E6=9C=80=E6=96=B0=E7=89=88=E3=81=AB?= =?UTF-8?q?(20190628)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _data/docs_nav.yml | 36 + _data/jekyll_filters.yml | 298 ++++++ _data/jekyll_variables.yml | 175 ++++ _data/jekyllconf-talks.yml | 167 +++ _data/primary_nav.yml | 15 + _data/showcase.yml | 241 +++++ _data/tutorials.yml | 13 + _includes/analytics.html | 21 +- _includes/css/gridism.css | 110 -- _includes/css/normalize.css | 1 - _includes/css/pygments.css | 72 -- _includes/css/style.css | 984 ------------------ _includes/docs_contents.html | 15 +- _includes/docs_contents_mobile.html | 9 +- _includes/docs_option.html | 11 - _includes/docs_ul.html | 21 - _includes/docs_variables_table.html | 18 + _includes/docs_version_badge.html | 1 + _includes/footer.html | 13 +- _includes/header.html | 31 +- _includes/mobile-nav-items.html | 18 + _includes/news_contents.html | 12 +- _includes/news_item.html | 7 +- _includes/primary-nav-items.html | 26 +- _includes/search/input.html | 1 + _includes/search/script.html | 9 + ...on_nav.html => section_nav_tutorials.html} | 14 +- _includes/step-index.html | 65 ++ _includes/togglate_js.html | 11 - _includes/top.html | 7 +- _includes/tutorials_contents.html | 10 + _includes/tutorials_contents_mobile.html | 10 + _includes/tutorials_option.html | 5 + _includes/tutorials_ul.html | 7 + _layouts/default.html | 2 +- _layouts/docs.html | 7 +- _layouts/error.html | 23 + _layouts/news_item.html | 12 +- _layouts/step.html | 26 + _layouts/tutorials.html | 27 + .../2014-07-29-jekyll-2-2-0-released.markdown | 18 + .../2014-08-10-jekyll-2-3-0-released.markdown | 40 + .../2014-09-09-jekyll-2-4-0-released.markdown | 24 + ...midlife-crisis-jekyll-turns-2-5-0.markdown | 46 + .../2014-11-08-jekyll-2-5-1-released.markdown | 28 + .../2014-11-12-jekyll-2-5-2-released.markdown | 17 + ...12-17-alfredxing-welcome-to-jekyll-core.md | 26 + .../2014-12-22-jekyll-2-5-3-released.markdown | 19 + .../2015-01-20-jekyll-meet-and-greet.markdown | 19 + ...01-24-jekyll-3-0-0-beta1-released.markdown | 39 + ...015-02-26-introducing-jekyll-talk.markdown | 14 + .../2015-10-26-jekyll-3-0-released.markdown | 34 + .../2015-11-17-jekyll-3-0-1-released.markdown | 24 + .../2016-01-20-jekyll-3-0-2-released.markdown | 18 + .../2016-01-24-jekyll-3-1-0-released.markdown | 49 + .../2016-01-28-jekyll-3-1-1-released.markdown | 32 + .../2016-02-08-jekyll-3-0-3-released.markdown | 31 + .../2016-02-19-jekyll-3-1-2-released.markdown | 19 + ...aking-it-easier-to-contribute-to-jekyll.md | 16 + .../2016-04-19-jekyll-3-0-4-released.markdown | 23 + .../2016-04-19-jekyll-3-1-3-released.markdown | 16 + .../2016-04-26-jekyll-3-0-5-released.markdown | 24 + .../2016-05-18-jekyll-3-1-4-released.markdown | 25 + .../2016-05-18-jekyll-3-1-5-released.markdown | 16 + .../2016-05-19-jekyll-3-1-6-released.markdown | 18 + ...-s-google-summer-of-code-projects.markdown | 18 + .../2016-07-26-jekyll-3-2-0-released.markdown | 124 +++ .../2016-08-02-jekyll-3-2-1-released.markdown | 23 + ...8-24-jekyll-admin-initial-release.markdown | 17 + _posts/2016-10-06-jekyll-3-3-is-here.md | 109 ++ .../2016-11-14-jekyll-3-3-1-released.markdown | 18 + .../2017-01-18-jekyll-3-4-0-released.markdown | 42 + .../2017-03-02-jekyll-3-4-1-released.markdown | 106 ++ .../2017-03-09-jekyll-3-4-2-released.markdown | 51 + .../2017-03-21-jekyll-3-4-3-released.markdown | 49 + .../2017-06-14-jekyll-3-5-0-released.markdown | 38 + .../2017-07-17-jekyll-3-5-1-released.markdown | 19 + .../2017-08-12-jekyll-3-5-2-released.markdown | 23 + .../2017-09-21-jekyll-3-6-0-released.markdown | 17 + .../2017-10-19-diversity-open-source.markdown | 44 + .../2017-10-21-jekyll-3-6-2-released.markdown | 42 + _posts/2018-01-02-jekyll-3-7-0-released.md | 37 + _posts/2018-01-25-jekyll-3-7-2-released.md | 67 ++ ...-meet-jekyll-s-new-lead-developer.markdown | 43 + .../2018-02-25-jekyll-3-7-3-released.markdown | 19 + _posts/2018-03-14-development-update.md | 28 + .../2018-03-15-jekyll-3-8-0-released.markdown | 43 + .../2018-05-01-jekyll-3-8-1-released.markdown | 20 + .../2018-05-18-jekyll-3-8-2-released.markdown | 19 + .../2018-06-04-jekyll-3-8-3-released.markdown | 13 + _posts/2018-08-01-jekyll-sponsoring.markdown | 78 ++ ...19-security-fixes-for-3-6-3-7-3-8.markdown | 26 + .../2018-11-04-jekyll-3-8-5-released.markdown | 16 + ...-jekyll-4-0-0-pre-alpha1-released.markdown | 42 + _sass/_docsearch.scss | 579 +++++++++++ _sass/_font-awesome.scss | 11 +- _sass/_fonts.scss | 87 ++ _sass/_gridism.scss | 5 +- _sass/_normalize.scss | 448 +++++++- _sass/_pygments.scss | 18 +- _sass/_style.scss | 277 ++++- css/screen.css | 27 - css/screen.scss | 2 + fonts/FontAwesome.eot | Bin 0 -> 1804 bytes fonts/FontAwesome.svg | 12 + fonts/FontAwesome.ttf | Bin 0 -> 1624 bytes fonts/FontAwesome.woff | Bin 0 -> 1700 bytes fonts/lato-v14-latin-300.woff | Bin 0 -> 29852 bytes fonts/lato-v14-latin-300.woff2 | Bin 0 -> 23208 bytes fonts/lato-v14-latin-300italic.woff | Bin 0 -> 22312 bytes fonts/lato-v14-latin-300italic.woff2 | Bin 0 -> 17528 bytes fonts/lato-v14-latin-700.woff | Bin 0 -> 27848 bytes fonts/lato-v14-latin-700.woff2 | Bin 0 -> 22820 bytes fonts/lato-v14-latin-700italic.woff | Bin 0 -> 29692 bytes fonts/lato-v14-latin-700italic.woff2 | Bin 0 -> 24240 bytes fonts/lato-v14-latin-900.woff | Bin 0 -> 27260 bytes fonts/lato-v14-latin-900.woff2 | Bin 0 -> 22352 bytes fonts/lato-v14-latin-900italic.woff | Bin 0 -> 28688 bytes fonts/lato-v14-latin-900italic.woff2 | Bin 0 -> 23524 bytes fonts/lato-v14-latin-italic.woff | Bin 0 -> 29600 bytes fonts/lato-v14-latin-italic.woff2 | Bin 0 -> 24192 bytes fonts/lato-v14-latin-regular.woff | Bin 0 -> 28412 bytes fonts/lato-v14-latin-regular.woff2 | Bin 0 -> 23316 bytes icomoon-selection.json | 96 ++ img/article-footer.png | Bin 1863 -> 1581 bytes img/footer-logo.png | Bin 3783 -> 3688 bytes img/forestry-logo.svg | 19 + img/jekyll-og.png | Bin 0 -> 68048 bytes img/jekyll-sticker.jpg | Bin 116915 -> 113785 bytes img/jekyll-sticker.png | Bin 0 -> 15126 bytes img/jekylllayoutconcept.png | Bin 0 -> 17121 bytes img/logo-2x.png | Bin 46514 -> 45966 bytes img/spacer.gif | Bin 0 -> 42 bytes img/twitter-card.png | Bin 0 -> 72287 bytes js/modernizr-2.5.3.min.js | 4 - latest_version.txt | 2 +- 136 files changed, 4601 insertions(+), 1363 deletions(-) create mode 100644 _data/docs_nav.yml create mode 100644 _data/jekyll_filters.yml create mode 100644 _data/jekyll_variables.yml create mode 100644 _data/jekyllconf-talks.yml create mode 100644 _data/primary_nav.yml create mode 100644 _data/showcase.yml create mode 100644 _data/tutorials.yml delete mode 100644 _includes/css/gridism.css delete mode 100644 _includes/css/normalize.css delete mode 100644 _includes/css/pygments.css delete mode 100644 _includes/css/style.css delete mode 100644 _includes/docs_option.html delete mode 100644 _includes/docs_ul.html create mode 100644 _includes/docs_variables_table.html create mode 100644 _includes/docs_version_badge.html create mode 100644 _includes/mobile-nav-items.html create mode 100644 _includes/search/input.html create mode 100644 _includes/search/script.html rename _includes/{section_nav.html => section_nav_tutorials.html} (67%) create mode 100644 _includes/step-index.html delete mode 100644 _includes/togglate_js.html create mode 100644 _includes/tutorials_contents.html create mode 100644 _includes/tutorials_contents_mobile.html create mode 100644 _includes/tutorials_option.html create mode 100644 _includes/tutorials_ul.html create mode 100644 _layouts/error.html create mode 100644 _layouts/step.html create mode 100644 _layouts/tutorials.html create mode 100644 _posts/2014-07-29-jekyll-2-2-0-released.markdown create mode 100644 _posts/2014-08-10-jekyll-2-3-0-released.markdown create mode 100644 _posts/2014-09-09-jekyll-2-4-0-released.markdown create mode 100644 _posts/2014-11-06-jekylls-midlife-crisis-jekyll-turns-2-5-0.markdown create mode 100644 _posts/2014-11-08-jekyll-2-5-1-released.markdown create mode 100644 _posts/2014-11-12-jekyll-2-5-2-released.markdown create mode 100644 _posts/2014-12-17-alfredxing-welcome-to-jekyll-core.md create mode 100644 _posts/2014-12-22-jekyll-2-5-3-released.markdown create mode 100644 _posts/2015-01-20-jekyll-meet-and-greet.markdown create mode 100644 _posts/2015-01-24-jekyll-3-0-0-beta1-released.markdown create mode 100644 _posts/2015-02-26-introducing-jekyll-talk.markdown create mode 100644 _posts/2015-10-26-jekyll-3-0-released.markdown create mode 100644 _posts/2015-11-17-jekyll-3-0-1-released.markdown create mode 100644 _posts/2016-01-20-jekyll-3-0-2-released.markdown create mode 100644 _posts/2016-01-24-jekyll-3-1-0-released.markdown create mode 100644 _posts/2016-01-28-jekyll-3-1-1-released.markdown create mode 100644 _posts/2016-02-08-jekyll-3-0-3-released.markdown create mode 100644 _posts/2016-02-19-jekyll-3-1-2-released.markdown create mode 100644 _posts/2016-03-10-making-it-easier-to-contribute-to-jekyll.md create mode 100644 _posts/2016-04-19-jekyll-3-0-4-released.markdown create mode 100644 _posts/2016-04-19-jekyll-3-1-3-released.markdown create mode 100644 _posts/2016-04-26-jekyll-3-0-5-released.markdown create mode 100644 _posts/2016-05-18-jekyll-3-1-4-released.markdown create mode 100644 _posts/2016-05-18-jekyll-3-1-5-released.markdown create mode 100644 _posts/2016-05-19-jekyll-3-1-6-released.markdown create mode 100644 _posts/2016-06-03-update-on-jekyll-s-google-summer-of-code-projects.markdown create mode 100644 _posts/2016-07-26-jekyll-3-2-0-released.markdown create mode 100644 _posts/2016-08-02-jekyll-3-2-1-released.markdown create mode 100644 _posts/2016-08-24-jekyll-admin-initial-release.markdown create mode 100644 _posts/2016-10-06-jekyll-3-3-is-here.md create mode 100644 _posts/2016-11-14-jekyll-3-3-1-released.markdown create mode 100644 _posts/2017-01-18-jekyll-3-4-0-released.markdown create mode 100644 _posts/2017-03-02-jekyll-3-4-1-released.markdown create mode 100644 _posts/2017-03-09-jekyll-3-4-2-released.markdown create mode 100644 _posts/2017-03-21-jekyll-3-4-3-released.markdown create mode 100644 _posts/2017-06-14-jekyll-3-5-0-released.markdown create mode 100644 _posts/2017-07-17-jekyll-3-5-1-released.markdown create mode 100644 _posts/2017-08-12-jekyll-3-5-2-released.markdown create mode 100644 _posts/2017-09-21-jekyll-3-6-0-released.markdown create mode 100644 _posts/2017-10-19-diversity-open-source.markdown create mode 100644 _posts/2017-10-21-jekyll-3-6-2-released.markdown create mode 100644 _posts/2018-01-02-jekyll-3-7-0-released.md create mode 100644 _posts/2018-01-25-jekyll-3-7-2-released.md create mode 100644 _posts/2018-02-19-meet-jekyll-s-new-lead-developer.markdown create mode 100644 _posts/2018-02-25-jekyll-3-7-3-released.markdown create mode 100644 _posts/2018-03-14-development-update.md create mode 100644 _posts/2018-03-15-jekyll-3-8-0-released.markdown create mode 100644 _posts/2018-05-01-jekyll-3-8-1-released.markdown create mode 100644 _posts/2018-05-18-jekyll-3-8-2-released.markdown create mode 100644 _posts/2018-06-04-jekyll-3-8-3-released.markdown create mode 100644 _posts/2018-08-01-jekyll-sponsoring.markdown create mode 100644 _posts/2018-09-19-security-fixes-for-3-6-3-7-3-8.markdown create mode 100644 _posts/2018-11-04-jekyll-3-8-5-released.markdown create mode 100644 _posts/2019-03-18-jekyll-4-0-0-pre-alpha1-released.markdown create mode 100644 _sass/_docsearch.scss create mode 100644 _sass/_fonts.scss delete mode 100644 css/screen.css create mode 100644 fonts/FontAwesome.eot create mode 100644 fonts/FontAwesome.svg create mode 100644 fonts/FontAwesome.ttf create mode 100644 fonts/FontAwesome.woff create mode 100644 fonts/lato-v14-latin-300.woff create mode 100644 fonts/lato-v14-latin-300.woff2 create mode 100644 fonts/lato-v14-latin-300italic.woff create mode 100644 fonts/lato-v14-latin-300italic.woff2 create mode 100644 fonts/lato-v14-latin-700.woff create mode 100644 fonts/lato-v14-latin-700.woff2 create mode 100644 fonts/lato-v14-latin-700italic.woff create mode 100644 fonts/lato-v14-latin-700italic.woff2 create mode 100644 fonts/lato-v14-latin-900.woff create mode 100644 fonts/lato-v14-latin-900.woff2 create mode 100644 fonts/lato-v14-latin-900italic.woff create mode 100644 fonts/lato-v14-latin-900italic.woff2 create mode 100644 fonts/lato-v14-latin-italic.woff create mode 100644 fonts/lato-v14-latin-italic.woff2 create mode 100644 fonts/lato-v14-latin-regular.woff create mode 100644 fonts/lato-v14-latin-regular.woff2 create mode 100644 icomoon-selection.json create mode 100644 img/forestry-logo.svg create mode 100644 img/jekyll-og.png create mode 100644 img/jekyll-sticker.png create mode 100644 img/jekylllayoutconcept.png create mode 100644 img/spacer.gif create mode 100644 img/twitter-card.png delete mode 100644 js/modernizr-2.5.3.min.js diff --git a/_data/docs_nav.yml b/_data/docs_nav.yml new file mode 100644 index 0000000..8aac2be --- /dev/null +++ b/_data/docs_nav.yml @@ -0,0 +1,36 @@ +- title: Getting Started + docs: + - link: /docs/ + - link: /docs/ruby-101/ + - link: /docs/installation/ + - link: /docs/community/ + - link: /docs/step-by-step/01-setup/ +- title: Build + docs: + - link: /docs/usage/ + - link: /docs/configuration/ +- 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/ diff --git a/_data/jekyll_filters.yml b/_data/jekyll_filters.yml new file mode 100644 index 0000000..27089e7 --- /dev/null +++ b/_data/jekyll_filters.yml @@ -0,0 +1,298 @@ +# +# --------------------------------------------------------------------------------------- +# 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 the baseurl value to the input. Useful if + your site is hosted at a subpath rather than the root of the domain. + examples: + - input: '{{ "/assets/style.css" | relative_url }}' + output: '/my-baseurl/assets/style.css' + +# + +- name: Absolute URL + description: Prepend the url and baseurl value to the input. + 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: 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 %XX replacements. CGI escape normally + replaces a space with a plus + 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 %20. + Reserved characters + 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. + examples: + - input: '{{ page.content | number_of_words }}' + output: 1337 + +# + +- 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 “smart quotes.”' + 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. property name + 2. nils order (first or last). + 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 NON-DESTRUCTIVE, 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: diff --git a/_data/jekyll_variables.yml b/_data/jekyll_variables.yml new file mode 100644 index 0000000..4ee9bcf --- /dev/null +++ b/_data/jekyll_variables.yml @@ -0,0 +1,175 @@ +# Variables provided by Jekyll core +# +# name: : name of the variable +# description: : content returned by the varialble + +global: + - name: site + description: >- + Site wide information + configuration settings from _config.yml. + See below for details. + - name: page + description: >- + Page specific information + the front matter. + Custom variables set via the front matter will be available here. See below for details. + - name: layout + description: >- + Layout specific information + the front matter. + 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 paginate configuration option is set, this variable becomes available + for use. See Pagination for details. + +site: + - name: site.time + description: >- + The current time (when you run the jekyll 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 jekyll command with the --lsi + (latent semantic indexing) + option. Also note GitHub Pages does not support the + lsi option when generating sites. + - name: site.static_files + description: >- + A list of all static files (i.e. + files not processed by Jekyll's converters or the Liquid renderer). + Each file has five properties: path, modified_time, + name, basename and extname. + - name: site.html_pages + description: >- + A subset of `site.pages` listing those which end in `.html`. + - name: site.html_files + description: >- + A subset of `site.static_files` listing those which end in `.html`. + - 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 _data + 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 CATEGORY. + - name: site.tags.TAG + description: >- + The list of all Posts with tag TAG. + - name: site.url + description: >- + Contains the url of your site as it is configured in the _config.yml. + For example, if you have url: http://mysite.com in your configuration file, + then it will be accessible in Liquid as site.url. For the development + environment there is an + exception, if you are running jekyll serve in a development environment + site.url will be set to the value of host, port, + and SSL-related options. This defaults to url: http://localhost:4000. + - name: "site.[CONFIGURATION_DATA]" + description: >- + All the variables set via the command line and your _config.yml are available + through the site variable. For example, if you have foo: bar in + your configuration file, then it will be accessible in Liquid as site.foo. + Jekyll does not parse changes to _config.yml in + watch 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 page 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. + /2008/12/14/my-post.html + - name: page.date + description: >- + The Date assigned to the Post. This can be overridden in a Post’s front matter by specifying + a new date/time in the format YYYY-MM-DD HH:MM:SS (assuming UTC), or + YYYY-MM-DD HH:MM:SS +/-TTTT (to specify a time zone using an offset from UTC. + e.g. 2008-12-14 10:30:00 +0900). + - name: page.id + description: >- + An identifier unique to a document in a Collection or a Post (useful in RSS feeds). e.g. + /2008/12/14/my-post/my-collection/my-document + - name: page.categories + description: >- + The list of categories to which this post belongs. Categories are derived from the directory + structure above the _posts directory. For example, a post at + /work/code/_posts/2008-12-24-closures.md would have this field set to + ['work', 'code']. These can also be specified in the + front matter. + - name: page.collection + description: >- + The label of the collection to which this document belongs. e.g. posts for a post, or + puppies for a document at path _puppies/rover.md. 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 + front matter. + - name: page.dir + description: >- + The path between the source directory and the file of the post or page, e.g. + /pages/. + This can be overridden by permalink in the front matter. + - name: page.name + description: >- + The filename of the post or page, e.g. about.md + - name: page.path + description: >- + The path to the raw post or page. Example usage: Linking back to the page or post’s source + on GitHub. This can be overridden in the front matter. + - name: page.next + description: >- + The next post relative to the position of the current post in site.posts. + Returns nil for the last entry. + - name: page.previous + description: >- + The previous post relative to the position of the current post in site.posts. + Returns nil 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 nil if no previous page exists + - name: paginator.previous_page_path + description: >- + The path to the previous page, or nil if no previous page exists + - name: paginator.next_page + description: >- + The number of the next page, or nil if no subsequent page exists + - name: paginator.next_page_path + description: >- + The path to the next page, or nil if no subsequent page exists diff --git a/_data/jekyllconf-talks.yml b/_data/jekyllconf-talks.yml new file mode 100644 index 0000000..6ef34e4 --- /dev/null +++ b/_data/jekyllconf-talks.yml @@ -0,0 +1,167 @@ +- 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 diff --git a/_data/primary_nav.yml b/_data/primary_nav.yml new file mode 100644 index 0000000..02ff6e9 --- /dev/null +++ b/_data/primary_nav.yml @@ -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 diff --git a/_data/showcase.yml b/_data/showcase.yml new file mode 100644 index 0000000..ffd6646 --- /dev/null +++ b/_data/showcase.yml @@ -0,0 +1,241 @@ +- name: Tom Preston Werner Blog + url: http://tom.preston-werner.com/ + categories: + - personal + - blog +- name: GitHub On Demand Training + url: https://services.github.com/on-demand/ + categories: + - software + - knowledgebase +- name: Vesterheim Norwegian-American Museum + url: http://vesterheim.org/ + categories: + - marketing-site +- name: KOTN + url: https://kotn.com/ + categories: + - marketing-site +- name: MvvmCross + url: https://www.mvvmcross.com/ + categories: + - software + - marketing-site +- name: Vidgrid + url: https://www.vidgrid.com/ + categories: + - software + - marketing-site +- name: Bitcoin + url: https://bitcoin.org/en/ + categories: + - software + - marketing-site +- name: Mapwize + url: https://www.mapwize.io/ + categories: + - software + - marketing-site +- name: Auth0 Blog + url: https://auth0.com/blog/ + categories: + - software + - blog +- name: AWS Amplify + url: https://aws-amplify.github.io/ + categories: + - open-source + - marketing-site +- name: Yeoman + url: http://yeoman.io/ + categories: + - open-source + - marketing-site +- name: Ionic Framwork + url: https://ionicframework.com/ + categories: + - software + - marketing-site +- name: Release Management Blog + url: https://release.mozilla.org/ + categories: + - software + - blog +- name: Freedom of Information Act + url: https://www.foia.gov/ + categories: + - government +- name: Art & About Sydney + url: https://www.artandabout.com.au/ + categories: + - government +- name: Passbolt Help + url: https://help.passbolt.com/ + categories: + - knowledgebase +- name: We are COLLINS + url: https://www.wearecollins.com/ + categories: + - agency +- name: Light Burn + url: https://lightburn.co/ + categories: + - agency +- name: italia.it + url: https://developers.italia.it/ + categories: + - community +- name: Sydney New Years Eve + url: https://www.sydneynewyearseve.com/ + categories: + - government +- name: Login.gov + url: https://login.gov/ + categories: + - government +- name: plainlanguage.gov + url: https://plainlanguage.gov/ + categories: + - government +- name: U.S. Web Design Standards + url: https://standards.usa.gov/ + categories: + - government +- name: Grantmaker Search + url: https://www.grantmakers.io/ + categories: + - marketing-site +- name: Rehan Butt + url: http://rehanbutt.com/ + categories: + - personal + - portfolio +- name: The Markdown Guide + url: https://www.markdownguide.org/ + categories: + - knowledgebase +- name: PROBOT + url: https://probot.github.io/ + categories: + - documentation +- name: Matt Grey + url: https://himatt.com/ + categories: + - personal + - portfolio +- name: frame.ai + url: https://frame.ai/ + categories: + - software + - marketing-site +- name: AdHawk + url: https://www.tryadhawk.com/ + categories: + - agency +- name: City of Boston Budget + url: https://budget.boston.gov/ + categories: + - government +- name: Lattice + url: https://latticehq.com/ + categories: + - software + - marketing-site +- name: MailTape + url: https://www.mailta.pe/ + categories: + - other +- name: Digital Democracy + url: http://www.digital-democracy.org/ + categories: + - other +- name: HTML Reference + url: http://htmlreference.io/ + categories: + - documentation +- name: CSS Reference + url: http://cssreference.io/ + categories: + - documentation +- name: Chain + url: https://chain.com/ + categories: + - marketing-site +- name: Boxy Suite + url: https://www.boxysuite.com/ + categories: + - marketing-site + - software +- name: Pattern Lab + url: http://patternlab.io/ + categories: + - documentation +- name: IBM MobileFirst Foundation + url: https://mobilefirstplatform.ibmcloud.com/ + categories: + - documentation +- name: 18F + url: https://18f.gsa.gov/ + categories: + - agency + - government +- name: Mapbox + url: https://mapbox.com/ + categories: + - marketing-site +- name: Development Seed + url: https://developmentseed.org/ + categories: + - agency +- name: Isomer - Singapore Government Static Websites + url: https://isomer.gov.sg/ + categories: + - government +- name: SiteLeaf + url: https://siteleaf.com + categories: + - software + - marketing-site +- name: CloudCannon + url: https://cloudcannon.com/ + categories: + - software + - marketing-site +- name: Ruby on Rails + url: http://rubyonrails.org/ + categories: + - marketing-site + - documentation +- name: White House Social and Behavioral Sciences Team + url: https://sbst.gov/ + categories: + - government +- name: UN World Statistics + url: https://worldstatisticsday.org + categories: + - government +- name: Sketch App + url: https://sketchapp.com/ + categories: + - software + - marketing-site +- name: Netflix Devices + url: https://devices.netflix.com/en/ + categories: + - marketing-site +- name: TwitchCon + url: https://www.twitchcon.com/ + categories: + - marketing-site + - conference +- name: Twitch Developer Documentation + url: https://dev.twitch.tv/ + categories: + - marketing-site + - documentation +- name: Spotify for Developers + url: https://developer.spotify.com + categories: + - marketing-site + - documentation + - software diff --git a/_data/tutorials.yml b/_data/tutorials.yml new file mode 100644 index 0000000..de06fcb --- /dev/null +++ b/_data/tutorials.yml @@ -0,0 +1,13 @@ +- title: Tutorials + tutorials: + - home + - video-walkthroughs + - navigation + - orderofinterpretation + - custom-404-page + - convert-site-to-jekyll + - using-jekyll-with-bundler + +#- title: Another section +# tutorials: +# - sample diff --git a/_includes/analytics.html b/_includes/analytics.html index 5bbfc88..81c8286 100644 --- a/_includes/analytics.html +++ b/_includes/analytics.html @@ -1,26 +1,9 @@ -{% if site.gauges_id %} - - -{% endif %} - {% if site.google_analytics_id %} - + + diff --git a/_includes/section_nav.html b/_includes/section_nav_tutorials.html similarity index 67% rename from _includes/section_nav.html rename to _includes/section_nav_tutorials.html index 2016997..30812bb 100644 --- a/_includes/section_nav.html +++ b/_includes/section_nav_tutorials.html @@ -1,8 +1,8 @@ {% comment %} -Map grabs the doc sections, giving us an array of arrays. Join, flattens all +Map grabs the tutorials sections, giving us an array of arrays. Join, flattens all the items to a comma delimited string. Split turns it into an array again. {% endcomment %} -{% assign docs = site.data.docs | map: 'docs' | join: ',' | split: ',' %} +{% assign tutorials = site.data.tutorials | map: 'tutorials' | join: ',' | split: ',' %} {% comment %} Because this is built for every page, lets find where we are in the ordered @@ -10,16 +10,16 @@ next, lets build a link to it. {% endcomment %} -{% for document in docs %} - {% assign document_url = document | prepend:"/docs/" | append:"/" %} - {% if document_url == page.url %} +{% for tutorial in tutorials %} + {% assign tutorial_url = tutorial | prepend:"/tutorials/" | append:"/" %} + {% if tutorial_url == page.url %}
{% if forloop.first %} Back {% else %} {% assign previous = forloop.index0 | minus: 1 %} - {% assign previous_page = docs[previous] | prepend:"/docs/" | append:"/" %} + {% assign previous_page = tutorials[previous] | prepend:"/tutorials/" | append:"/" %} {% endif %}
@@ -28,7 +28,7 @@ Next {% else %} {% assign next = forloop.index0 | plus: 1 %} - {% assign next_page = docs[next] | prepend:"/docs/" | append:"/" %} + {% assign next_page = tutorials[next] | prepend:"/tutorials/" | append:"/" %} {% endif %}
diff --git a/_includes/step-index.html b/_includes/step-index.html new file mode 100644 index 0000000..eb03b55 --- /dev/null +++ b/_includes/step-index.html @@ -0,0 +1,65 @@ +{% assign docs = site.docs | where_exp: "doc", "doc.url contains '/step-by-step/'" %} + +{% for tutorial in tutorials %} + {% assign tutorial_url = tutorial | prepend:"/tutorials/" | append:"/" %} + {% if tutorial_url == page.url %} +
+
+ {% if forloop.first %} + Back + {% else %} + {% assign previous = forloop.index0 | minus: 1 %} + {% assign previous_page = tutorials[previous] | prepend:"/tutorials/" | append:"/" %} + + {% endif %} +
+
+ {% if forloop.last %} + Next + {% else %} + {% assign next = forloop.index0 | plus: 1 %} + {% assign next_page = tutorials[next] | prepend:"/tutorials/" | append:"/" %} + + {% endif %} +
+
+
+ {% break %} + {% endif %} +{% endfor %} + + +{% for doc in docs %} + {% if doc.url == page.url %} +
+
+ {% if forloop.first %} + Back + {% else %} + {% assign previous = forloop.index0 | minus: 1 %} + + {% endif %} +
+
+ {% if forloop.last %} + Next + {% else %} + {% assign next = forloop.index0 | plus: 1 %} + + {% endif %} +
+
+
+ {% break %} + {% endif %} +{% endfor %} + +
    + {% for step in docs %} +
  1. + + {{ step.title }} + +
  2. + {% endfor %} +
diff --git a/_includes/togglate_js.html b/_includes/togglate_js.html deleted file mode 100644 index 198c9ca..0000000 --- a/_includes/togglate_js.html +++ /dev/null @@ -1,11 +0,0 @@ - - diff --git a/_includes/top.html b/_includes/top.html index 2d12d1b..a76e22a 100644 --- a/_includes/top.html +++ b/_includes/top.html @@ -2,14 +2,17 @@ - {{ page.title }} {% feed_meta %} + - + + + + {% seo %} FGDRAeqh0MR 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 QU{)XsvZ^xGQYHca2Zo}%W&i*H literal 0 HcmV?d00001 diff --git a/img/jekyll-sticker.jpg b/img/jekyll-sticker.jpg index de3eb1b1c7667c61e57c132845292f5fb47b44eb..b51680cdedbc9b0eb66da4192d25ee42c6c7a38f 100644 GIT binary patch delta 9678 zcmX9?Wmr{R)82;^6jV|`5Trr6ySuwXy1Q%BNK4nDnZD{4ZwX$EH7@Ip3U#l9HFDHK!&rCd}hlW zj2JW)x~`(zC*lR6;s2g57pYJABb7}$FC$F!w5lZDq`qHJMT)xVoSmbB=Gc4Ex!1g81+0zfBQdqY z6u~jen3>rvdbAx~uX?Th+E-lBpayV!j*PAh2`R7Q7F~48L|QK{S-vzn@_G=Dim!A> zvtwT(5cB&6L!NWc%ivrNoBlPu{<(!ZljS7IVQW;yX|{B}PgjdK$I$lo-yP746H&dU z=W;UGaEM3x-)*V)uPaqn#3Y~=vRERMvHmHAzrn)%WIQ)YSe{A7XzYpQt~gvi89Y|V z?X|bJOl;$dl`<^97Q(jGNe~C_t;?$lI$h1w+8}Yi$J#~kpyAZBl$Hx6gIIi&OZX&C zxsnF&p;jvo?O7U+FL9)nRGW234w1(z6dv%Y=JhDZz9>%kz1+s%uiIJ{zus!&@pRFI zKr@9FqLNaiE2;i9zuluSb>>{wsva%F0G`I?&F;8(5; z&nBjs@oMO(e}zhueK#Scl~aW;mo4=alGUnNd`H z1>lt0EUo)v#TDV#2Z_zC`=O{6L9fFf^!1;PU*nHE@Z8U$@JTQd(KauLnUj}EFHE6At%?MWDv(G zXNIhawqO40>zUkP1P9MX(oorU)8X=eBc0U_qnWmRM1E!sWM;Vf4mokh9 z`@k!rYKce`eikUs(%&H2FBl)%@+oa z`IiWUJ#~RWDJD^g8|Z#(C&b+J7u;@p=egYE!Q6gjW3Ez`3e2`DnsmN?Obo7>^AOie z+g#B`ih&hBP#p&o8cZMRk6hIAUJs){IRWVn=@La$wd2cnG09Fc_||5R1Lhih1*hM` zt)neVqx&}o+1yJ3omIXwkQJ4TO0!!(^K+T(Uf;(getDB(iQYah3}p+=%CPNIhcepQ zY_pk3m)6rw!l&uvnxAgxraP2;x5X07ugVpdrdm}RK_OGTuVE%kTNm9KhzVLzNwaZ$ zHc^#sVr`DtBor4ZB7Oc_kxqyzA_#WuNI}l}_C{u7{*a#3E)LA8;}JHw^3G#8e_8dm z=B(}v$(;p?oPOD$J4V>dQJknz);}QNJlsBNgP^z8|qi+0QxR+Wm_sH@(oD)ut7S6f#k*=V# z4bQ7Lok2YTR+nj3yp6ve9P3joL{|A@2AASWIPA@H)3h29e`8Y0=6?3PYKEu-K43aT8U8q({Vy_il} zdHb+?Lf3w^n9AnNu&i;_?02|$;~CF%4E|af-TI6=QZZ|{x`&-$lXPz0kLjbxwf)G-U;)HZ>2E8ov^oNZvgV3m`MXw2iNWX+0(Z>?Tq?6;lY zc_d^vS`gaCSh7HkCB$o*WhP#W=R53U`_EevDdM!YAMjN#UTDhY@+6rYEym?_SvT|T zQ3gxR#d!)TlujuuEFw*NfYDzBcPbS1yh`@STkrZ!2gb7SK0J~%H4>}3+(yjZXlpJO z?RC@a9VzReqWh^B{}N4Tl96;IjY--eVCv>=%AOI#Jl?)u9uAJP70gv;JrKC~JN^%_ zn{gG>PBM5Tt*Q{C+A6aM6jsEE(jY&1?Cz0~Xf98%i#@*!dqf zvXzq6Zw&QB+vnCRP>RXZBzn+eMIj%TZPf|#rN{1$~MD|^g?ED{g=_zS2 z{SCMJj4N(&6t?T#r<___;pv?08IUDKV?;o&*l>+eZd;@c(6^k$ue)E~<1iG!-VarnQM(ZDa*8@~NS#)m?#9D<)7 zRvGXorBs$^7FSx^n$lb%ayzm1Om~8s!8}T>(zwsfl$}RvC)M#Q(sY;)9*d*1>;~$G z)G_k>cNRM$9^p;sQ52g^Z*6vrwNYQ+G$EJ5zT zOXuTyQ@2v0C9riT*9A&z+wCMUXL23w8XfR%=tp>VJ$W^{D_PUM=N9G9vDC-z-H`@E z|Juon?vnnMTNwx2T^@n{V@+PjHVAbr({!z!aAaz9<)?rh80@<-q^SzX&O3?B%j|Ib zvYbl1Arr(ez;+b+?9rTd%zP&~l4HZ-*iI)!;~`*%+isdSgI_zMR+i$0_^p;f}rx`8cwEyjf z4cpZ^txH@}C}dQsUhhV9P{duh@pv&v!T$kjM#7Z@Rx=m=1XVp|cU)->^gAEsHR;a| z%$v%`K?^Ynt{n;#qaI~ zP%)#g($K^gse?D?owg^N2ZZCot&$|ZS+3?*h*Mwg@Sq!RdK;Mih|kJr#7ne7HDmUH z<#pkV^8As==ik>F%{~b@4;H#8Ydih|o0?9_U^1`CiXqR48;|)I$f^Bhf8XF3>am!B z2P!vE=n0Yyntxu}a(0-mGhTjc=yBZZ8}Whbo5LNN{rP|kb-7+=Zacv))k#}(H}~s& zMyb)?qPU~#oOchmqlRE1ipGMx>mcuv_D&^?DWmno7k2drr1i0@n~wF*^0(XZJJI(7 z38y5|?~wSNvHV@?a!g}qsH79}2*kR46GR>!+4CnNtlh0Ce>;y^AeENJHejSKYV%C~ z$*@A9_d8*++@)=Xc^5Ad=`ZQVP0atS=Xn~t_WPp_%`wJlYpmw|uu7t-SIN3i*iJXH zV|Y!iZ}4N2zJ&1mY&+6DEtkE2`3gS|DE@0TuS9WV7eOE+Dxn`LJ11!%x5;f)NzReO6Tu!VKP$#~5!0sC zdNEh8b?qLZ5krg#u4&T3x;m`~roe5a5Nl-Nc1#>6BmS1g&>)8w(om*RKczOl++jPM zp90H@$+so^XW4L%*>=UzJ3gZYc%ly^6#q@}vBS|_$-tu!XR@gS;kL(#Yj{cN)#|rs zFY>SbE^6<0z(k_t&M&DWRQ0?@M%oxsUU6Ud7~h=s_bntbaxrKfa1nEY{t0-i5`N{) zd({PWZF9B}hOFZ}Z?SiSP;d@7ukAhFb6BF)_scl98+s*3lrfoN;T&VG4V2aC3As=e zo62Y(ejLd7WPrfzBTBoN+S18dRv%&8SV>z6<*3yN`0j!0iWsNc(AU_Di1tx)jZ8VM z*_OSIbxXb4jI*xCFKbNsH-1~~v+P!(1?nql6YO5kKW`;<3{xC2@r%zp zOa#_=8*pm*OJ98vMGCl-o;RjI1z$9O!b^;_jr>^F zDlc7-qV!^$mPg;acSAMbR;5>}iurLb;*EeSt6oBXJ+&NmADUIn$9M_*A(T_?HGD*E z==WZ`wJ5#R11HhEs#l(*PA1>W*uH%FBb0)e`+8@P&8u?A_=r9d4Y^sZ2E&Ptlr4VH z5xJKvYCOH?dtxF%z!`{MUn#>fxE8MR1u>J7a6`g-WK=!6JhZ49K0iUa#wOCs+8l>I zo+Gb668e|cPRV;v+4yaJo)3m$Or#e@hrYpAv&a?R^M1CpmJBX&4Yss5egFD^_YeR9 z5%Mhm@hbl>5ClXdWE9jF|Hro=ym?lx4~xlTfnURe^7G!2wHvrvIcy^~)gq@-|}qM!sq>SlnYbyHRO=fiSiGJ!n+@b)VL1ZG>?$c)`&3~X;B zW+Eum000&~q{hZ6Sr-6Mf=Y_$DVPyF0wFx5qzEczOJOv%!4kG1w!$pz0D>_)*gID~ zsFDug4N1$RwblTdF9?&wVNRGFMc8V|pF-bFP||!HKr5h|`Tpj&hc1G#jG`(zDav?X zu(Po9Vx*Y`O@RWpv_qX4)o;xjK$wHlEYl7}hYFx#A4e2+UP?BIQ;v;-q3R#B<;$`r zp!E&`Xs;k)b)h{WP(A0Eah@0uK#XH{P$Pe7N`ziCk2j%TG>0G$NgzTv3k0V6&{dLZ zndPfm001!MDX6zWt z7lR1OwX&-2x^v9Wx>TgFUo|0i&uN3OuTue}B|{(IQf$(eV8w=j;&b5u)evW4+fPi?-loR;{(K8kUk?Vicv7f}nS~bT zH|)1$?T~7r;qfKcgWaob0xGKX@nIS`8+-;R!=2+1tklq$TKTP7YKI%&41q2cBe zke^OyTog$827JcEK_K!`tqM{6w*p^2Cjw#ex*($f*TrBG?a)3i&v%!Y0z6R_X8@pW z}tvKcFcWWT;?_z2*AYZC4LkeL=V#YBkSU_UoOd<{( zz-9k_aifGs(wSAb$@@Cv@Dfk^YZ6X{$umH5N>yhN4U@*?-3~5opIS^h@_USF*BB?8 z6}W>`{jA%54Pl78#Jn;yfQ+}V8X{h>=K-%t){YKk;Q?G+7ZqQzj-Jey#N=#vd=!;c zsU%I52OyH}^ke|puQB@++m&(FPaZweiFOg$i?7^FX`6g!K(*qfS9En0b-4o1RQXs7Bo$|YX`WB5_vDchmV?pn9GxKy8ev}r&Js3fAB<9r9uH;U0vv6fXP zD_Dm_ea-cfy;a6PHP}Z>SN(~XzwIYh39}Qwev~#!BJf-pF?RVy z<>dICRhN`)*wlIO-s{{J<0^sqpdj?YZ|Q_+gXR%=e%l9gx4`YWHr~FI8Xex7t2od@ zLVa1NWaCxWUbFmeQSz9#UB3cWE$Cq>maCK z!v5=;3Y#3mmmgdOG3tjaX-g%D_tszxXUU)KY=d?83niES{;m>;=6}c*!ddt9T5`CV zW8Cp)bcrb>iGF@pLpGke!hPPpJ%>O^Q)Xwin+d;=M}^RH)sS1uj*PL&kLM7^WeK9P z$Ds~%Qj-r%UV*k?u2QFmDylF5AggPTxGMUqwOvmA@z*)H#C25}XH`>-Yw+GSjQg~l zetyyGedT%Tv|V`Y=)*_c#lh2 z^>QWy8d+C=23|J1QcrE0$8zkSOneU}8@c5S@Fbe^{gnp#V~JWBV5tCrIuwo>HZwa` z3Mde+emeLNcL`g|3lih zjnlhT#V+uJipNao`joQ?px72C#Xq+1a>|+}yBD0wO|H22Ts zKH+S;a@gW6UJI~4@Xm2fx%>ynNtIr?d?p;cw$uiYom4K^!aCuGf>lq_GuB-tG}o3{ zcoIBE189fyeff%Q#dKQ%7BNQL+iu+YM1uKqJK!Uq=vN8yGDR9d6c+NU&0yEr+2al> zQ`=%&(P(~FRk3cP>0Y}|rW?c7?ijkn4N_h5@b6^bJS{v$)ImSFAl+d(A@vq;^Eb7( z-9H?8Ybnfex47L-wcAEPsdS`VnP_17i5PCjJ)=Y8PN#x$V#A5db9sP-5?AWq&t zdiZ(`v$?~E&wWtWPmQ{NAK=hjWY#Y)Rgb|i-AeJhVeyI8ZDo>w;mqyrg%R;gN-o#{ z^LfKXfY@%0_mk9=KW;#C5l}Q?rsa920FGDkmr_FgB;a*OK>#oc0#qH~~g%g@t z8mfqGhH}Re&TNuY5{mLYHyleeJoQSIEsLR_zoH!-aD8>K+<(pzNcuMpZOyj1fz!TY z^&nr07FYGIO%^Tsj#}X_14C=2N(`L>vD%766-fV3tCO=uc8Z45w|U+OqL*dw+k-FM zh&U(ZZ!CXEDr(tw(rrsN;;oZ&WsSIcG#u<-nG}8`qv*k6KI3UQ-1C7cXM6k{p~%-N zB*!EXZS$DdkVI_nD58K>4!8bv1|!Jv-g~%R8U3!yXelpiU>#nkZAEXf+L2}*JRM5oTcc8?oMZ!3BKovP2 zH#?4g-#U@4{WLcW=MPbN)t*GTBq0q<^>V*chkn3r!kzz!;G|?aM`QV&c^e+CR#R5t zo8Zh8P6pg!%G8C*VOd_Yx1$U7(;ktcl>|&pZ&aUGN8%(J3=;4K1o6%DG(5@>29PQG z)KasD3i1FGD{*xV4g?o6eBgx|D*#zdMEQyqqtGtuTB1>;jlsF~ zSQztRJwFeZszQODmqER@p$BEZ-X)R{l82VC2|!qB0N%|vlfo=X+OM$Uaq-oc_EUS$Q%R3IpyMvMYg?RLV5U zLxho(dBYlV(!(AjP6&DcfDoKvj99R2Z7Lc2yT4V90$n$}$eSYx3#aJ6eGkC+WmQd| zhd$9hktsKYKmd&tFR+mxw{)cZh&8Ggs6h4XG90UCOsIXL%(#n<;9M?35d2XUM13Pn z8f{D#_-vo9D^y0z$mE(10o?DIuhNI^k{iqbKG*CRm+s7Nt9O4~hor)QMJ70en(ABa&77`Lt&}BiT9at33 zTiygrPlwsz7gkk$+gl&W%TW!4Mo}UuRYw$Gp*p-b)IB@fKV{j08HS#aU;rhsRZEi!v7&@f@3qS2 zfdWsOWhRek+)7!BkCYH7$TOxjeJ~lpl`*z`e(krwvj70-i4CSe!Ct)XYu%dJ+?@JD zpRspHcN)oiyRM&;R5a4+F9lwvCA}s}ZRHQ#0RRvnhUEc1bOnb2RSBipW4mr!;VFKk z!~*Z!J-z2SQzs)QE(PoPpD+V3N&W%peaymC?7-eM04c7aS6mfCjK}PXX*2fw3RzaE z&hGbriWx^KV1r-+mpe$`?(jeBaaOrWR@>ojIi_0(k2k4;!YqAs(1c(cib|6mC)}W zU=-l%>b}L*qj9*EH5x#C?{uBxNHhr^AK%4wcRa;C9bEkbdd5-%jJ`sKOjOj%AQhle ziT94yMjN7%CuS~c*381`!7#Dq*zN(hrta-hSGTye*Wa$C)$V)LE6d~VZ%>U+R$%th z%Plj+I4HHV9l*Z0SMS%TbGB~t0p^%Cc5r;M1KnPqc4UgKv+cd&RngjTzX3n*2CP5c zkK73zkJ%IsA!GQCyMbxGpc^`5}^D6RCk9;6Io}ZhUm|&IX16uf~Z<}|kKhN!nM~=U? zm&VDC<-}9*%Q7jpkN z{-Dsw-=X*qkOxInE*=GMlrSwy0;otzVaw}`zxWN~6=$`mUuPXD%oaX{2P}@=#qY27 z{{yxM;*DOIEpd1Apl3~kD)IpZfoK)X=x2Nfm}l|aw_o@1kok%OZ9maB8$ zw6ruw%i`uN9($EvJN`KPmXpyAEPLMsst=V`cdnS`y3zjulpVwYOq8EuN#0}OMAyb# zJ=)cu-3jQOIp2^w#JE&p?s{96idxfGlec%)=()l9Ya(vI-4p!jr}lf)Til1v2&Pf7 z6!frd5K+X3nNKj-_53y<+;zmOUZ=97ThZB}SYNH0d~*3@$G$-eRmd`+<81bk<KS(3LvEGVsb1AeSyl=Yga5QZlrYcp494Y;D>0HEqG7wOe-G$Su z`&LRzQ%LOb=qgv@E_Yw3$EcUY0%ZKkLHdvh-We%Hr}af)_`83*H3*oN6#Tm4N8)K& zOlK*}qHwfvexEYG;}ZD7*6{GD{SoEpzI#@%^g-)k&+GlyJfwj?dsjTJ>9-QryDvee z>Uq8{PxM7GPU5bl)$pT_b*H7voy-?jD1j*_XTJY{NuepD{HKT~fAGWE=e5uoCsO`q za9=)UL_l}*AgOu$VDG}Owo@DNj=yO#lR^CNGRf#C?r+&t=0(KW#D>i)k2l*NP)Dla z7Jv+GHR<6#94#ltV}t~Lc}KkR%tx@V=L+_ zfY{@{w`s&NBYV%wdD+qtZu?n1HfeSloaBX`XI1lM*>+@aCy8)CFK@0dg@nE*^A}kG zr_-wn>Tc_NHttv6+SY1?9OlS+{>z=Z10>uogh4LY929&yUEaHMxlBv+6=^Y63wFOe%cOJVV4!pBZKKsD=$5qGB4VPVOk#wp#LrfMUQ{t zDBkXVFJ{Nll##XB>Koi9kYy{S;{X|1M~bc(_7pE2DpsO?y(}wbpD$9gdPjiNLK3>U zeZe{*mmyoy@b^&;)lp`;O_434hilS+?_!JB)A245+o!L+$BID1a}DT?tTMg$$NX= zd;9HvyW4-v`E_;G?V75Z>7IM~?iR5&2`TXzxQ_lxQCiwmLrYywQAHMjKmY(;LB-zL z1&R#-PR^e0TJlmEWuXEvExKHAPuzDvu|nzx?lZJp(-b z5&%rHDritq{agND3H+~ufAn!IUEMta0HX2KN)uzcb-PweR9>H1fG`o#Da4u2U6 z|CimLJbYrJzij(YX8DKCKUv~0TRAyfJ?Z>)+SSU*>M!>KPxHU^_OgEJz^Ob9M0(p> z`#kZ~6Vo_)IoUt)?O$UjYjY0(fJgr;_q4XOdt#0!Mt9fIl73g@4BXZ+`!&a-sQ;yg>+t{w@2r@xNs* zMF1dh^%R}Nf6FW~0iZDg0EmA5TSij=09bDTpkeesZiwJ-&DeQ*x(cy_>^?p|Z1&cc zY=2|=ul64r|7V4NY5w={9}}|uo$z1Lqmr?6{>X-&oY zUrYJFxBPz?{)b=x;RuVCwT-pAwe!}{$3ilw!5s4TtQz5nvllkxY00H6X`06strPyjCg27ndd0{8)8 zKmw2j0VO~k&;j%T6TlL%1DpVNzy}BfLV-vi21o?n16e>m@Bt_XDuEiH5oiOx0e!$A zFa}Hm3&1L{1snjUz%}q20)ZewFd%pkVhAOK7QzhSf(SswAhHk@h!#X2Vg|8=I77T3 zfsk-W3?vzn1u2A-L#iQQGvpg&05T4lhpa*NAm7eXT0jMNY8L9&{ zhT1~ip#IP|(0FJDvcD>wiS4UPcrIUFmT0Gu?OI-CKV4V*h% zFkCcT8e9=vC0q+!KinkTD%>I59XujD9y}F1E4(ng0=zB=Zwc=P9}FK0p9NnA-vHkW zKMB7Ee+vJIfPp}Uz>FY-pos7a!4|;>Arc`Cp#-5G;XA@K!WP0cA|fIIB0VBMq5`5m z;%meJ#8|{!#45xt#Bsz8#498uBw{3HBvB-FBy%KBq)4Ppq|Zp5NE1j~NVmvn$dt%j z$a2UA$j-=M7;+l&C*%&~3FIB*-zeB9v?xL->L^wyekchjA5dCQMp3pY%|;l$#6!WqEX#YMuU!ax(7FhsUG1(B=6*&dD zJh>}*CV3C}Aq4@21jTELREiFYJxV-EF-m*NRFJZha-ZrMl_ZrTRR&cr)#-Dx=L*lg zo)_TwffqI}QeSkxIHjSaQKbo_si65qi$W_vYe$<-+fRE# zM^E>XE{d*^ZkL{jUXk9PzJh*{0fRxD!HuDaVTuuvQGn5bF_&?S3ChIFWXF`vG|CKR z=3@r!nRA)PSrAwRS)5slSY}z#StVJ$Su0rA*a+BE*uvNv*^b$1*bUf|*!$TZIe0l7 zIX-YKaN=?*afWfWaGrB9aanR@b4_t$aLaLn+)dnPJj^`SJb65Gym-8-yivT}ybpZ* zeC~Xee0%&f{AT<){Idf10vZCb0zU*11f@VhP_Rw#PKZy)Q>aGhM3`0BLHLvKt_Zz| zwa5pN4N+=QbJ0T4RWT|tGqD1(Rq^NI=Hf-->k=;{tRzY#b|e`kUrTJ!iIy3W#g)~S&5~V~qn5LktB^aD=amnT?@~ZeP*zA%m{lZKv{VGk z6;GA;m4cLdmC=>8m9v!BRhU%VRa#V`s!FOUs*7s0YR+nn>VUeUdW!mz2EB%xMyn>G zriNy==C&56R-jhDHlDVr_9yLY9VwjzodsP6T`%2kJuE#Vy>h*qmohJtU#`Ale--p< zP@hEKUcboz$w1Gb#Nf(M*6_XImJulpYLOmFOKJYYg%;%L%tie+kUT5E=2_R{Q= z*}b{Cd6D^*g`!1{#i^yVWxC~om4sEQ)tb)j(abs2YMc8zphbrW&}-@Bc< zE4!C?Ks<~+nmqBJ_E$q*3|g@0@RcH|v5_%8F^W3*ND&lrxFw3z!?%h;cBoN*a(f8uT8M-uoF z@)8jfofBu0#FNUBagzO$H&Rqn8d9lJqf;;6o4y}N<4Ma;M@{!iU(Ha-Xv(C?Ow7E` zvdfyzmddWmA8=&1t*oQ1%c;k!k8Xf8_%)n1+BL2=={JoxD>Zkw2)ER?vbC1BJ#Wiy zf7YJRf!gt=<4>o5=T(<$*CF`L_S;6cY4<|UtDdP|&EApk%HMzV$@TU0OZIpE5dG0M zAT-eYQ{ZRgAm3oa5bsd^Fz;~v2;WG2EJiP3FQqM$Ef=jYu2ik^t+ua$GHXNY+UpA& zmKz6~9-H@DZ?-YE({?C#%6GYT+xF!4#`X>Ow+>tneji32;T+{0GaT2QNSq9vzB=7H zb3glY9(zH2QF_U9*?pyPwS4V#{re{RmiV^pPT;N|_7b-9+vgtXKI4J$q2*Eeaq*AS zpFe*VfHzN{8UM2-F`*@KAS7`GLxhs5$x|4}C_r>L2mr-~!+zR0EK)`-h?R>fyy0WS zoa;h`$YAe>hu5q066BU}yiNVVBrqo^6^t7>)QG8pF$|=*M-F&AFN;*XfLOIRGB700 z{{pLd?N5cD&#RGP8H5)%;4nml!OvN_hX5g%ye0(*Ez}lJIQSuWdWrMN%=hKKir>sM zKvz785E)#ej~AjB!|sO4=84ZE3TV6`n9{?@&Je}#F^ZOWRw}Z$62RMHh!~HVl~!1t zs&pLN%OphQ3{kS`5=({NMHGc?h{h#-h=wO)fhaZG)Hu?ST&(AF6sWVN0bYb5iw!yB z1!D5vGt5`3*jS-mBF~$)sTmQG;9HRZP$OC-R`l)|mR1`cfnkBn*w7sal>sdLwcTWF z@o;l+Lqv94J`l%#47Zp_Qc6p%{uY}eS1DM|7wbq$M0)^W3@^Uj&uQC+)hxE*NVzI^ zd2*w&TqRmK^(sK3GK57weq(}*)lDL@c@}{jKIV!D;BnFv9I7J=2+Lq=7;t2RT?b`G z%@!dRb_2=ozm+3NG?Esu!_Y(K91xQ6bRj4TizuxhK6IhKA|d(6C6}PFO3OeIQs#)} z)U3h7uw5XL^~w+yp!Pu~DO4V@E0Gx$BAuo@rY-d@laVyEAQ}Jc_4ln+ zS3`{$)v0<@; zud9e?eub|{1etrQqVWe%Af}P(wxF;W+YaL>bGO+Jw`C_b@N-oYc z!f{BJdR)@@{L-v)v5vfO(smeQ!U)thP8^K$2wtMnE$MsW<3fdlrLPgU&Ax?)Ffjh? zRV8EQZuZ5HoI|DvO=I-pGqjw9vQki;WXejssgdoJ%gkQ8=U}R#qWrSf zDaaLe)sz>*mlv@7CPccVdBCqJ-eJrlhj{e^Vm#EOZs>Rw`>O@h-{ z9!G&0VKHxFkQ$#V$#d zjN(8@F5p;wAt03Az>rV3tM*NS)ygk@Dp$xPS!Ri+S{O7fl%W@eOT=m`xuNKJXTeE9T1dyHEOl9}osAMbCyKt% zVQ#wbgDJ26Wu6nJDP(OM{S7acSL8fsSXii|X_tWP<) zz-~;Xr0?9qAeRsEZ8$AtJu}OXo3GEAyZE>Bs>q%|d1mZ(CDa0|ELW0y0yVSDLqF}q zA)DfLdCyxxPukGMjAC33NKTg;l`DrClk7dpNj|E4Qo51p0**1#l#6h3x(z%yr`14g;U6LQLb#A!BP(f^3PqQOhL}iHRulbuzShN0AcK zd|8a}zRuFK>XfOqG&G&XX)$h39g^r^d+2Fzt>|knO*p6|HK^M54g!RCJ^fXN2+vrS zYL`5Lp+Sd$lC5i(QAUO4@rHr6X2*F$9ey|-hXYAZOgdFqlGHaPoy~ioSN|A9-#T4K z#7TCyvdO1YQfzWVQ1_@|C+uXuy?KAxm*{hKRyum=LOht2(vwb4yWd8MO0*!R7OMeE zz{3!wP*uEm|2(^>O@?^CP|dA$Pc1SuT`t3>!i{Q9kPOcCtppSb3F)T$QeC#+7s;Y5 zf`diCa%pU2t7+5QTf-ylc_9iWzssfw`_?5O(@XjFvwwJ<(vMj-9FD>+Uv#Ww-%|q$ z4zu+hhNfumgbklfOap}$HMQH|Ry8Do@b;?2AB+L^=MQ4VB9C!DW@&#d5N&v-o>Yuh z-hC0EF19RYXnuj2>RIxI5dXL?B77v2!~MPVM`g-4&p*JUC}G4RVzU6epgjXRAVC_c zHJE#TKv+6eg)E~K>xDgL*M{r3#G%Ock>ruEBr!H; z+%duOBRE~br^C88G)g$To`4lpcy(|5a_{05+|rie04SZG2*cQhk?Bs3Xm9%*EF3=i zNG*}ou7V{lp76;Nni`6ry=*kYfy@|7jqfpSIg}=XN`wOf`AYRM7QTQa9Zqh7Ddah^ zBd@H*_8TW`T@)mYZZ9pD$h9b>x1N|p8o}dLNVrSSr|D;y z3>OQ!k5g|-U-Jh5J&vfR_pm5Szmk!A2SioYmURR!@~`cH{Hs4GM$q5vt!A2!JKQlF z<-1)7nKzYrCYO8i<4b5tX;_JTQYqUmil8fayQs^mk(#@R$e|%Y94a@Z8iQM<+E_!3 zG0m)62rY2bk0ZyTD{9EzzOwca*FN%~cuzHO@Vg2_-{*V~q==M!v+F{kjT^)`h>B$S zU}I0LqmZEsPpiwMxIk9(@dXpLcj-k(XRB);!)0AW{}r^Wnk=aCwEJ%3JIH%}jyNOh zb9?j7Qt{%-p?^OR-FvTJM?LS$oF_b7!>($#AmVtQjzr=E<4BxFA!`q{X`D!*^Bdkb zh!9=~Cb452NTcbL!9&f9p-+XpNcs}`s}oCYpgF+g%H6+&@I~BnIL291oRY!^XSz=# zm=nx&Hj3q*18syY^a8gnHO1LQojpa?m3p&|S6}w;yeaKEGTXXV_XeDuE8b_vHz^oS z@l#H$`4E;nUk@j+Wuip#@8l14Uh$udZTzHI;d1)^3becw^G1Q?z+t>}cr$_bn~qNy z_@P7|7AYx%kl2KJcx=f;Tc{mn19@Bg7Qn`kN04G{{ZJAssX<%tKCY9x8Dq`Qq{L={ z;7-weHSc}#>_?QeTr~UP+&HZ^<1C^pkwsVY1=npe>ca2LA2uAsY@MB5uL$jA2i?$^ zDGU_qqCqs1fZ?9yKR|IVVM4<&FJFq-7bLeJLop1uo#K)+zd6%m6UWfa3og>e{O6*h ze6YPimAi+mvfp5KBYqJ{^+H}@$*!6tm8&}i0yVB+VYdhlL(^!P$P_`86IJysE)+Q= z8k?83!Hf8{M0rh|rp_Gm=~Di?1DldM%+D-s2VkGAx;R&^(fMBSOn~6#A= zdFG`HWtm%so^a8o%8Ad<%c`kKwb%?im$a;ntxLivzA0hXJT+w}6o@Q=9{Y|yf5WT5 z0HMsY$H?sdqL})i`(wjfcPj!SE8Fr7tCPY(t+N>>uXBg|{rd!neg$juel!&l7JL^n z90(sC;`;W7KLPS^+R=}9@4snNYWSFb;L77d6={-a zI5J;!MR{Z@FXu*HT)M~+=1<+H5zS=6wU8Eixx9Jxe|m3L+wLKMIx z_XmsBvhPIH2#Bjx5)u#+_@;($h)K9`24xt0rCZmBgE3?3&IEAUJNc9SWyd*OE?`1c zGwJSfCGqQ@LY_V2Hl_1V zzQh83$;i1MxVr;|>bOhQahLmlV(R(bS2ZqF=FYVbUvW)*UO#Fl%e2CzaF%qvnFvRtESylZu1h$M#k-0 zsm1ME$0LhfbIM3~Dh%MBGzHTMV5 zYh=I4?C$pjtg!d~h4l*L&idoAY^7GgWhl?NXosRq-^FgAUSD3*^BEEkB zO-I3&!}Q#nw9*Z*_^Zphc+0UjMW^K-V9a!N+vc}8%O7CK7bLx;FhTg;A=$Mn5+81y z7ey;!)JuZa?JOUyD2J=$O@Rf$F04=8XR1o?7|nzQzWqWYY)jp?-D3NS$?5$*_sp5s zPDN=^SOlELfTh|S5q58icp}{d^E6MbsdwvwkAZsbyxEAU)|T=MZzAv3OY;+#d8mi{{Y!VHfsWQ z11qev3Ai2kF-_va3ot}C)wPK$`h?CerqK`KawddVHcYpaEi)Zh2fQm$uvuC0LNJRQ z8eH}0W2JYG&z@C}2E+QfFkuvG=Rv*MMJXNct@EuR8U$$2zZWDBB(-8eLt8LWei+&3 z%saI_%?Y#f-1+o6P~__T#C+C7aJoPC5DBCZ5FsU$Ht0Qwfv~$jnpWfsEq$d#X%}f5 zfSCl(T^yW54INJ$i{52+imh>F&5fA5^V*hOs}WCd7xx`{$T&bwh^fb()sMs4?PlK+8-cz zt#iVCI+%a=Y9}1Fb$RyKSeLK_cI6zw#7FmkwDH^o=DIy#g$ZExP<5>l;q1Ci$$XY1 zbyY0v4O>+Yd%@6+aZaueuX+|xbN&#!v3dy_*o!c7XLow^9|-49AKZjhjk?h4yRmJJ zpF4YHa=vPfZuPzHFXBar2%HQ$q1Z8iDY^zU(WdopeR+El>7&NJSE5@QcZK)axO~Nt z_+r?c)!r_xP4a4Q@!F`Kj&RULYCXI0``(NE@nbNdrCO{0#qh@F$%VzWh@<#q%I+0- z@pwG*X?;g08!4O$BxOb9;Gqu}4?ZH$9e?unjk=4Jl@%>DrMH3=@%c^9o$ zk}%UAeY71nRjqsteFQpmn8bDElvKC?4BVn{M>f|Woq?dfbVNPp$!qKAK! z)j#spM{#N7E0QJ-@b zl#Agn7EH5(;bWYyz(Oyy%{!l<&h~I&<8#hqntNl|zcMbP&2sSWi{7_lwe+?9$ovuI z>ARu+odcM*D@-40v^e*L4N?Thi1&1=8a-?{c4o~nBqeK}*dlwU!Qo7)?h zax|!TUN4>mQ_~Ct_v^03KY4AzI&YKe*y|sCTNe+=gnW4=Z#wCwi+1sFeh5J$k^RYd zi5QXqM9JQg)tVVvOgNi2R!lN4L^<}CqDF%7`%63Os*032Q?O^D3dv{Ow&#kizKNy&E~)?g|f`Zr2gY{0%r$Lw%MuTxa{nZ!JK-y?Ic6dUH=DwXti3*7sC z|Df-6W|Kf!e%ZCLUo$@0gSj~2d~9+bII13Qm@Dp|FFKK*d3+-~s7qGAkt>@2lC%Al z>%+;dZo{+7{8Q0~+&GLlq^87~2w$;;hi!Gj8ShD#o>N3?N zuVU_2{U61a!29LS0-CF7KfOHqiVSBCrl0-*5%Z(Rf!4x8dn6qq#TN{0Ux+ zoP9UkTcZboDi?9BsZSr}_-O_wH-V~MTPsUZ@AuZPOJbaC@kvj^iJ!TyEs=O%c7R-5 zdj~yW&rSJ{y&ujUYsNi?oFp0OtG$<_Wf7D?+<9fxsQ(4Gmj$i%vzmg_q6F|yg!K> z?Nh_(cQ7qZZ>BCvSp6mHsEaZXLuo`_)A%I~N70y{i2u0eBiw=M)dhBXj1qy`tCw+u z2iBvZlf&}mo9iphgG=cVm!9$S)|mc>Fk%Ko?&bYi+v`t+uKyMPZf9dLdmw)g`~-e$GII#II=zQ~Zly;B-u z@VCVk&F6En&$H+&NPpL?K!&v5#%V(bDY{V0#S9$n^komw#M%L?2uj*VunJzLAKMMa zUpnmHrDu1h?+$OmZp>s~tL4SrwSJuKZz`=C5uZ8_U|K)^?q}rxTg*7Et)UzoUKq0_ zv@vw|S0h+x?&LSQ5rKMddH7!MjW8D)#^VYL)=|#y1U)ZOhCVAS&H_VDhrDfi89uU%F9wcwAYx8l`K;_BTk zo)6OZX(Q~G-(KcdR*9?KwyE!e17V8gzT9CY6s+hOu^cB;tC`8iT?(|Sva8Mp%CDY_ z!)ss5?FCYrnm@XHpdWj^~ znADLcc6=@naKPD3QVSoUMCPR8akP)YB5%{#VEF3H|t+|WFUFTS^XV0RQ?3Id*;Ef87 z$`mYgjOAN@jggq{%HzxfTFDU7d7pYa_iS~91+}Y%V z`P2@qO0a;X9pc{~53Phy{Fm<1)xI1$U4&fTcNVhe?rjEhbNiO+sm#+we;h9R{%O^k zfBfJA^=>F2Pj+YP@-db|?@muxG3|C|*KZzapx%WPrBCqF%xvj5(E563Xc=?p=0fc541;o=tK`62qrNtr;EuOT*nbCJ*nASUy3{{Qf0l2uL(v2_f zS6bcKc7;K4wGPmUAwY~@j>4z0F2S4@mj z@q4?OG>_-ycwD8hZ1FQ#L(sRWjbd^ww;(L~rxhr`j1c^ImArMSTNMS%^;-=te%kv? z{s9nN5>EaAZ@6l!h8hiQOH3Q@0(2QJbAK2T%zKzLdlepzx{Ij6u;|uX7R7rW*rZPV zog3H9R|Y?0eLUkmnMFrc5=GQ9uRQATnC)0n%H5ewz$i^s_xL%y2zw067eBJvFAq+V zAW9jz%mc@{8yG!fMhOCLIhm&~8gTmO(@oSrvTHwIGLN79n)7kU?w8#{d?}HEOvCA! zxKk6-O`s9_?$$AB&y5h_M!7n>O~He>u&ME4fn=E7yKEAmcN3K#I;W2Lv%qA=?=OxbO-e8<)DfNQ(Tlv}>**nmNn`Rk`#-?=h4mH$ zGsBO3QX?m9>@0$w=DADNRuHVBHpb+h;%QO-13Y`+E=u5sz1zu$k2*S)W1 zC`tN+xBA%12Xp*uN%Qsl<#g}@Yp2~dcF(O!^A{FJlXe}Ct|s$L)tZB<_)Sc1(y1h9 z8;3vD$8r|LzK${vTv)0a3L;;bW#Jxl;$;;gKG|-X`&QEPsR7n=af6Uyyw{pVeP+xX7T_{{it7Fy}_0@k;s1&AvyXe`EnRZW`k| zg9C>@UDzuSxJQY87yIa`Rlm1pZv=Pk&ieC$nnn%>bB^!5+jqRZbGLkKf(^!(T|QQw zn8xU@NN)^q1-FJ5yhm4n_LCj*GY-D|VslJ#^n1H~KijeT4|3?JtoKLs;1{v zKX*&BPr%Scq*6w7FyAa#y>sxQ+;GTF!rv;@j6o2`kSEG~U+paTgoc^*r!OcLak#!O z&&k@7X8(DXA#+pf_Mocj^XVyRZCZTO(=j7sPF$fe1%Wv^xGruqIlA9@7z!dyy3H=x zm;3izGj^7x)`!0vv#B{-UE=I2&$rZ@`FA?9ZUcm?2+sKC`17|T{zUbWZyXVv&HibSClxLS9;i{d}s2Z9jR`ezNp{X zzp#)wlC990bD%GdT~zr&Jt5>wA|L?AD5(3)Ho14_1WQfkHus7>`&WNLQS$iQiSlSS z`=?XR9sT5w*q#{_nj_|A*ZMp%W4f4Q+lb9X?U%u1KXmbzUB4gs^z3~B{g_gj4F&s1 zHYP1vT`MkgL$(^aYi70qU!k)f`_rYZTNb9lXgra;P&qpiD;bZe=7vKAO>Q&`x)kqg z<6lu(Ci32LZr+QP6ra))Ube_YO>WfZzM5k_{eGgH+`X$sbU^zx_A>ri+Rl&5JokF` zpW69waa7HXoX+;DE<)|);E~EEe6#~UL*#<&-bXdrPdeMLpSzYR6SMP9M1B~>NXo&C zHGrw3oF_fgO<>>-cy&z_W3eBZBt)|yS-a!1%ir;!QT-TGOswxd)t?u8VV1VG5B3|OWOK^!(6XCY zWcu)Kl5{g_#72}es=v~DskoXz_1dJH!9PNA9fKvz|45aeiy=Of=cCFqUTI#n7Z2>C z;&5|}&Q=u{?4K6s{rFnNf+t%^ZOYj)>V(=HmYv|ISy_@A6H6B5Vn5K1bB#rZZ91rP z&l~9`8JZb$*x%D)v^AHPebbsW{NZ(IbDOvbcR-!-8OT4g`B?S-sya3@mJlH>|S zVxF_v_nGt3(-f?mRvKBOIa3)u9ZO*_$^86LStxPhMN~;8moIol$#yMmNMU6hCjV)1 zN1GM*!r4-DTh`FLCYM~u#8H3Ydl4zF10#;+OEkAZ8Ldkrje4-y^|>o!Gqz4$KR1G8 z!&>z=TOD2$rv`BfuIgvE=d@)6m>SFH24o!ZN?A;(QP{%$B_$@!wx=i$>%OaZfaat04L&a*DVK_Tc#AFsG>CZ2DiBQIwy4zDc zrbG36=*H4vk94*b6U-3htIbJhe!%pu%=}lJ^HG-<<__ z>nl{|`GRw`N#xUvjy|+t*Qv*azo!>;S{PCB7p>k?vy})#=6Q`^Rb4}_XV!b2j!mk)^T}moWO8$JdwYBD?(ROTy1Kdw z2nhImYHx3^s;cVK@6plGr)gn+zNe?VrMbDOp`oLreW1U8YGPt@bMxx*^0OtMnAFsi z#KeTm%*>pe>`%W11qH>$#bsrsU7ejLCnulYKYjK0_EuI@R99Ek)zplQ{@vf({|w~d z;9zKQaBgPC*Vji@Rz_G@2n3SW)z$g_-Q_c)j<&Y$uFjq9?Wd=w&+wI$6gfFLczJoW zwY35R0|o~MK7-oZ-R0uq)YsP=85$ZN8=Ib*`t&6!2@DMlJv=;|ot^!30R~4dFD?E1 z_wVNB=F|Eak-WUz>gwvo+Im}StDT+gr|jY3E-o&1e0+RfV(9l3bL%pl3 ztFNyQ1_tJ{4Ps(qs;Vk~|Nh-*e1s@b_ph{*ot z<#%Xm|4mKnG&XHDHf@rX>uGN3wzggP9h0r2^UKJ%13*{)^XGDAw!XeTY(*!^XV<*C zsw%2MKte&oz{0^JAbvqcMaRU#!N4cP1w}V)Ts(g~OqLsQkP*`z1&WZ9`rjN>=+aPe zQ;=#nZLf3!=@Ol2ay}>f|3(b|qip)$jQ^u!{>&Z!TV@;h@2u=Ue2(LjaepShkBFVR$A^6Df6)ISx6jo5AL0K@@;K+lm=F-$^D;m& zbq~nTnUjXahW=|Sq^TuJX<^+S?%=&TvJA%E8nUS?|9t1+iGdL7F8cw&`!)Brn@w4L zkT&AlS5hVCODXbT0D*?Vq5^7H8Ir-XR_+uuFGP^@gd}Pg9yG2pK2(Sx{VuvHeIaKN z8C@?`IhJHLEezC)6>qY?3HS$}ZPe9sB~so$RWCMjbUaXhk3^6Zf=R*`^p+f1sotCU zXvBayg=;*eqWULO{GELtTkp2|_U3LhW;089aTAoBTbB+57_Sn%#?8u>=jxXRd%Y)bnqG?B#fG1F1u@bUd?#IK^WGEk~rt`Ygke48Oq<7kS)5wB~q0m(ifn z;qpzo5U&AmydpC$G1IrIZI(vQ+ig_KK){bx0AR-H+vGM&Q=*0Gl}n?%I0bh6N+-B` zWqaN>CH&4&22}7TG*jl|m+yBc$AZYd$9fGx4w>SNMtjOAn|3k#)%%tA*KEIowbs-% zy=orM>nfdBmyP~dQd;t54kE?m)%euJ%zDar^KE@i4vO$_iYGr{&ONpra_m~i>uX0~ zU|-&L+)N$#I^rxgqq@U&h1w)xU`W#U#5)||7E7fHD;fwav+ZEc7O5eQTOq?V@R@7w zN}e0Y8b&Xr1R`-!Fk9;QdQRM{h|jz{$Wu+Lj#|ZHrjBLh{sKvusi}RJv(<~LUtd?* zJ2_p!90~s`Cv6|N999aD-4#gEm5#?&SoZ_~y}UH;?$A7lHG+P0Rpc^-sq43Yr&7Tg zgEJ_A9TA?I6af?zCXtbT+Xwec0wR&Yw{TqSX&3l6QA&2$G(6N7*>y5FYCu@TzJH2{ zM}G(oEfaNdQ}=SarN&QCd^^b%6woXb=Pbw6?GE(t0524$ap;PO5~0ELiKG+eq)d$# zi81>bur`K{w&&mGIJ0%KYin8>=s-!m&8#4b{IxvZ?GY++A*un=JCPmU2$@p`Sy1ML zjqY<&(|xVHrY+9Gg1{)xLf;}a8%Q3mp)!o`6o$YRXUI{6}_F5Ds?H5@o$QoL-64Wp8veEa*7=CtnU-{PP`<6wq^ zql$A4eyQJeg2^?lt;hND_x8TyKcjzh?9U=$Na#_;V#Je!J*0=%w#ed0t#vJ~XuWS( zVcw*5N|AOGzxYjOeeh$^KE1D9A2{*?tQ~us%o{45r~^egNi@acs!3!OTT`2iWR%)d z<1&KF?NZmaUVEa@p~#D1WuqpH>6wl;+P97ufFi zE|Dc*w)-R%$}6Cs@03JgWH%ct6n~x{pgEoz7-VBBSR!Jufy1XD#7Hz%vN~JWo#zn! zWFF>~Ft0nQ9d$iID89e+I~T7S>^rG@8p0}!LIVdmP6CFXDR%E3&?y2Q_QuG8+Fx@; zL2zt3Fh@|6L0V_Nbr|f^QBzt%GQ)}xO*)4wOS7##{hg#E`InLShwyNM%yC8m4n{Fz-bup<~0 z8pKxlM{(@L@mE%@XoARQ+?Ye(7)h1r97OEosg|1x(gZkXZqv6;Ha}Rz_%&jg zVxU#iwlmJeMt7G26|M<8uakqD#Yz6G%01iPce& zv{te{XSbF6*_y59O=2h8mWr>p{`kV8E`E$zB1)wy#|Ja2rO%=tu+>Si#eJbdl^dsb z@x%Qsdt=$sg8fB)BF2g8sqSZ%BT~h(_gUvXe=#nF!&FuLVx?h9fQ&H3Q@cN<~f zZljnjY+HLAx7)@lqr6eN^YfiiBIspI<9e%v5&iWhr)nJNt*>Yv?3uZ9w}WBW{8Wjp znL++_$MHU)R4`dp@(XmGz6VK@pVrjg7cYs8oJr@TO%eGBZ+uSscW7Rdr-b#}l@q;x zPFQSpNb{2%jY0=na}d^jo)GWma-4+R`f-5=Aq4y0L) z#hta*E_SX&C>cZ+TyK2TmIo6hB^g%0qz#fDodY0qK_5J-3!zpE$V#(Jnm-WMUwyKC z-?mtLx4ei&xPsnSV6_YXZT$6W?&I}pZuUz1t0_cNmC`Y+-M$VoC#n)141M{!sM=&9 z*2n`>aBioOa!6s`tF$(gAo!|h+o`9gKfC`n0zX)XLc^ZLfr(#v=2l>-AUYmsfW5G; zYRSq8wHvW0owwskoVB_oH&+2$V!Y%)JPc^rRSgdSl|Plh#d$d)5F=yJdGqnl5!j5@iLdMX zF5oqsqITRZB6tf@m{G~Dfg=33c<{qs4I`}|I_3Gpk3$)AX<(!^!WHT? z#c^dpk-=pPYS2J3No4KL6RT0>mZ#;_cBm@~7cm}i25uO5>HHFPjAFzkIU)mQmH>E& zz++h|gDc&M0wZ~M?$rZribh`j)JjEs8HS2cqpPBeiwIH7FaA4cRYQS5zgO8eBP=5$ zYxwazSTK^c^Xx&UJ>hZE>4C|ma)>9ar|5i-7S^dd{of@?@+-+VW{*tH@9}s{OV<~u zq?GRI;r~qiYkfCrCQJEN^iHXFSkv<*rR4M}c6MwzB`*^alm*opdN;8cdb7>i7gW+= zAFg*Lxq#lDqPoY0=c-(uX(Ku#UmLmq+=OlYfxy+(7t6|!sx)O?iC$>Q9A`f8e$g?- z`64+eCq=Qt|L+HA4OlHX)r5uf1^x7TbxF(1RCDsTaCi5joH8#910ocgATR^>tz}%D zR{f12H|%dm6)9?Al3^DX)Pf(z`03R>Tqk2ZT;N;Aut(UHmwYV7l~*4`?`muJsAk~l zsofH5%{P6^hq%BBprxOG)xL-X=3T~UAwkz5m#G4S*y%hOvT7;OM# zaixbT2tB-Kvr@U6y<_a#u=RPEyk!h$f*i@3MOn9CiUOAi4)3K4 z&iD|qrrEzsr@fcpNZ+_nwXbMh7vAEo(>h1tOzgj%DJZcjfj9iz2VHCT9sCN6sf|9d zK5;!u6ys>~o?h$Lgz%tHCjb4a{tK?DwD~AW*M&LJKSes>uiF3gXleVpLR7n#9c&If zh4k4h#8po3S`|-z1m>vo8N_0E82lKAqzH$BNkU71+;X56km+e(K#>6m$Zet;Y|Ac? zj6_4Qb)Nz9xqs3rVn|kig1lF!Ju51RkcN}$8mWcv(TV08^&^N-o=`PGRKd}2s@6}p zz`#CYCr=9nXkr8>UnHdQ5$XJOx^i3e5-NjiZF z3Jy5`ly)v+Z?s!sztfQk#kUa;t-=g3m!|Jj>vo&p5mD;jYHFKBfCFkFXxM*8=U7mh z_z$m-Wu%%?23!eAy`tnk3+NS+(eI$Z7qG#A_EPDuE8<_u7U|-6uw)1-w6UA)4Z0oH z8S3{Pt&Z_qzipe6YBfwO!Fjf}R;A~y=kEL%nH|3IvWvy=D;da2`3+&ZOXz7Lu{%R# zB@@Du6AzL~a#*(^ArSQ^>NTh?tr7w17Z>oKN_Ywi_Z>q^24|K33VA-&lI7~4c3j`P z@{68@WHyda?H?18c&1{&!Dks_VW%F}j*y+$q$86-OjBYQtK^-sXi#W;|In**@QaY@Hk<`9dx^a~PHu+h}dm zeCfRQM`-!CVNuABFtsmkAQH3KT5VePcb;4d%A~6q40wbKHhTJDwdVKjw8G^2iFUq) zKmM*yM7w9q;mw)d{bMAsQ$T-(X4YTOC8)Dr{oe+TX>~Im$s^5wOPk-)sF?$e9_N~6 zm|K}2L|-REY?BOymXG?shjE5MwC)mHDdp<;kb#$sDH4ntqu?;*SgQ<)u~5-QuHI{F*K#Iw=&R}rp+Jr9ej!iG z2<2zMUo;3+z%mTYT;`OR4+twdp{WEWvR$iCk3NZRTE3AjFzgT=F& z%dr@rnXZDi-mNS_DHAxOt~yg5aQd~@3e6}^$P|H~F|Q1ZCB1i|o!0B0zqA=yJ!cgX zs#}bXFCg+777h+52nT!M2QPl#Zkcb0tz`!3*Kn#hKjrJ!yRH^s0^7xWpp_QA$*Q=-9I5HFVD+0Ut&QTq^8JnC9NjSXEo=4I}6><*IJ9n;-uG4znHF{ z__0|*@cw?cd6lTy#{)_QeMKr3e%)2mF$a>4TDtQ20|#M>Kv};RqhSp;9yU>(ihj`E zM7rGMV5=tS)R@7XAx<~h;RqVD{_5{Il&t)w1HO%a19Ia8tYoN>QDexXuawcd zVnF`x$CR3lV2>n-1ZV%e+M~(tXPpra>q;1i0P{+^v}k^R1QQbA58(?)1#8Z+-)AG6 zPs>&_*Ozd9sc)QUsxOy~|9CG%K@#X7SDh_%aCKhlekQG4!n)3rgoTY&SaW7mvk&czWJp5qT0PkrEui!v9%aG@M68Wcw>oz1u&X=`n1y35&@z+d0dH zF-eMhol3}Y$(1Cg0^_UO@KGHIGJ2XXV|6i|+acEyxrs5Vd(y^X4&or+NN)C6;%@^x zEhav>WY^Pu`=W2L)oI{108<2Kq*%yGblClUO`2%XwcU)lGg{_2-(?=g9At7WhmLFzQ)(n zBCamSW(MEVMruyw9|%-oybBx0N39cR+^ZjxYd?B8C+w}Gp6?AeH%IR`Y{iv8hhhoj zc>wAcOw6%h577Xg04o!*@K|a)(VEVI)w=mK(AM3?$A@t5HJK6Z z7f_@7K1jqMp(6c*HXR$tWneGLzTvsJ?!Ni1@OxN`GtT)yT}DbdHoekq6>zX3{!aM| z&Tso6Rh#GTUy-%i#7T@HI@OOA2FKPNIX{OtGfmij6a7G%CrlHTb!v4m?SMmInkg0K z^PRv&>&eE;dG|}eYWLG!_0M|_XI?=;p*ReUfh2n~qWWO!UW4}pVt@|irZC4uTLu18 zBvq|;8`*`oup2TRp|=71?GMyRebbt!Om@eWion##1GF1Qt}c`^%we!=mGaWL?H2I1sMnSgyWef)cH51}?c$?rBdDBZ?UE#(dUqgZ#{P{b zn6(z3Yw%TwV9>d5CsmE{-+0Qhql(<_sws)woaRpo`E9-_3FZ)1I%Y%0T@hJMt4Jz$ ztTd?yjjqA_Sfxt5w-0na=fzbzx?Urk@WvT?cdjspy7}q}8%Pd1JuD91uM4jv+NDgQ zL5wW9P2R9{^kA6K=ixJ<4i_t?n+J1yc97QwO<&^#>rOFT5W&YtuJtWrcj0A438l_! z_?~*qq$?QcBnuT$A?9P3yR|srv6NXSV)7>URChnlj8-4|3qIhfVO*XNjL>E~P*L9A zzt+O(eUG%4YeF4DFEHn*jFI!!HkfCl(wF@EWbW_;rOL zhhohtzz9Ar_OXp68*XIym0!q;Vq0XNz)&%b?Vu@ZGYY;q1iBE%_T$osaAGAd5^?Qq zyl!aT!6M2vq97W?-t|7%ufz__@{{7x{kMoevgG*;pybdM6mX^Kif$|wv+?@2_SalJ z29<*DhpepP1?PaDpQ#VUX`WMu!^Y;}oX-ds#?unq$~Z;@bqx5S<7u#eQY|0WFEbw8 zCD&do$1d)u6am6Zd|h%QJ^jPqeC?gC5rP${?t{v^LY*%oR$@V;MM#BhTS^r<-dA)U zXp09zl?=qcNsjy(;r|uoJTSM(l5Te|F zt_X-J(3PFG^m{vV$D?rT_LBk)elMZuwk`}>a$9#=_WiOBo10=FM`9kCxaN_+O=~tX z@I<`HS^bE80L2zxq992d(ysSaZ8}y_XW?s#JfB^?zs5e|@W8Mj`(IdhnmU?kewOtZ_m$fswUeMA$RUkFP;5JFw&*sLFTYK?e^f zVGz@q7pIzx^R4N|M}hjteS>rEX6AGFr0zq8{^gHgGZ^WZAWXav@Wxuf7yUX1J1P#& z7{r_VgcDXSZgh^`o;Uz@lrqUi5d1|$57X_qNZGnLiGP1s{S&P*dWxj)Z)z4Fd_PTs zPp~Vip}06K1&PERP)GBS<5;%uzH!nek|-)C4{+s)y8I?-2xxgB-ew`xD`IalL;1(T z+Wk%e9gJU@oDG%#!wn?Wfqn-qVrr)R%2jzgX(QrOYb9A&7=V$5C@aw)FlVWr9=QLAn8)Nz>n_Lx!ZM9G4Absv^GjxYO7vZe$*D~h4) zaGpN+9_H26HcMN{B#Ds8rw(i=gzt{xGf8RFIdDfg@r&B|E0U%=`krE4fY* zL2-%I?T$IBtxF(0w4a3|gY7(a&raztJ0fY4yTjzteeX-qp-*$Kbm3I5ZE+wy78;CN zkg#g_4Zv4wLqWpo7x+78VXPwEJRYcQT9c=6tr(bX!TpGIq6qYN;l&4^ViFEQ}ceeg|?iZRM7XoAZJkcIa2|P{GHmZI2FI= z)CR0#zg!Vkaoge@Rj@n11)KY1LW;`_dUsz*YQsRz3Yf+lf z^Seo!nYy0AOrp$4Jqc!`bWa*&`WLA}~izC6390lciw zK-DBVV(F6JOwBIciZX-Me%J9vf|LNtOBy#EKN-4XVf{1t6M6}q(!OiIJ{;)V*tZo% z(VLCN$R^2~#E8K}l5RLq0sis!DvZ~g^*XCG1GZRsOuE6H$y#LOSrXwy3d~6xhZZ9fUp|M4~RU7n%$+7z* zY;p;TV`cq1H(LmlwNhLy7mRw&(#(Mk$mTUxb**tTh`QCS_$KpR9VYyzK^l>V#(Ht~ zV{p=Z)BsH5k6DE9*H=jUB<1=Ico5crdMeTPQ2Kg*(D&go@^P;U9O9WfQ&I3aWK1|_ zXN)HM0$Zn!-Sn5PXK}wM5=|ZhUH+8qa@=X+>9v?Ruwz>+_@~O33|8ZS+p`+V4yh zdtNP@T8Ep#;gO>wk&JV7|dCK=-D%r2`o;#G-p= z&O#x*$clV zSHWR~kIFP>B7P+#xu=RD=j*chjv0NmHX}SmNr7;&!VWz<9oDAz371w}ZG0S<=6JEU z_B)TuSD`Y3HHCj$QlV&(wdBn6iwx@|<@DmN*3-J#cwZ?b;;ALGH4>~eD}ZYF&JM0p zNxs$%6netQIiXg^eBKz`ZtYk)F+yBZ>TZl{n8`O{5|Y$pLbZSWOOl3ULrbS&Bno;U zJr5EOvVBfsIi%R*5XX4lop&OAVVkhp7d9ZWBAM1(RW%a^3Ud|Trl6^4fDhYwt!?X+ z0s72KzMd@1_0Po(-vTg$8q8q}2{Yc>3b;p}VhbGnJPP(EX@oWT)g{}4$8NR1-^RGV zLKBXELy2k5@_ATy@Ag`S4~+-^^z8#ssvB|Se``n5Wo^hywEyFmIMr#UHySd2)MsAd zX^_->jU#YIhwwLIO-Vk6bNA}W&9|!qesPoTu%a~~cTY)Lk~q;)#uY(3CqYgjhgkEx%_-m=k zWxlNDWrpR}Ez)T6kvVqUcfbv6UGS%wf8H30@7TW|ViuC}(isy0#Yz15p*8Cp2%C#u z{1<#C%RqoND21K&+YW?si!78+T+S-$_Ldnl+1?$gS9cD_tLCiKX=tHY%i<;JN85|)f+F5 z+fx_(=CsV9v;(Eo7a1wb>OCWoQo~W@ zf{-Wv2-1raT&?DoL3E%+h9~=69Iefl&G~=W9ql*NiM<`8CSkzRWZ4sPI~I8J8aM)z z>sNa8*o7#J^KU+>?77ZKE^Lx_5wac3MFsDp)FY3>l%!MUK*u18_(X`ftKe7u1`Kx` zBQzQ&`s-RM7l*^XCO3vZK{x#2?W4FYeT;)`h%!wpCnVM(>Ku#V9FegI5yvG>t1tiX zV$@#(Av=xPbWfV1lgSYBaMV9(mlnoB{}n^_Kim!m5$QxB;Xe%rc~@dlrzs zWMzhHH{j%_sIC@InVfF8=l{Cdej$7Tz$b=YuSzo)l-?D93U>FGq=7OuTnXYRVeX3? zMZw&Aw_*PZEd^t@meoX*OHf&pPFVkZ;|9SahOV=jt{GwM=Yi%qyeQ@|#A| zA`d4<=L9ln)%xy4A|ge#T`CP;*OO{TfN{brcum=f9RK5L2|$?x`E_gDL2Glw2|Z^^ z<+;r2o#n}C(JUbBJCVIYS`=!^JT+_`(UwD^)8j}hDklA+(`%@ypPwwK2+5f^fE$Riw!)=yS$hMJXK%{`@{S%%&dP3u%AO z6=0zi7JiZ-zCsnY!szv0BX3G>{=K$`&67$ai`?=EdnKZ$TUcRIqpUDiacQ}4keLzx z)Fx&dA%(Q#SUI10C0~GsjyJyBm7Esf`OUyO0Ot>~*s;zUdO{ zheyQMYLn|8Jv?19#HDU4RT2J)Zlx7`X`#Zmo81x3CFrD(5v;(}+ePoB7yRvVV9dz{duGkW7Cgp=0LHNFtJ1(T?u$2M1G`)_F zq7Y|D!|p9~#CfrZXp}K?6O_SXZ2%!A!@Z?}GEbuFPtLF!s0uyH zrI?nkZN*g;J$4m%`WL;5Tw92Vu$I}hZxM$P8zWBE4zh`>?t?+7wN+a#w8K$QF~{)t z>Juhk351v$k_VywABR9WhJdEdQ9hHX$!1=>J!#$>?UBb0Ju0(mZ_Z%^dXOvG>f;{E(b^F|MRb59I<@Bm_1{kM~hWn62q zCiQeijCxAVLVL}?JgSk#anL6?6kGZwVSgaqb#gd`~KazCjW`s zDNlYEHPVjQwVo1TOtqu-`($QCv{_DT-4_1_X=C8|fUUOW{+ZD8>(s?gr;)QdS68&Z z@!E+UFG0<;>-){HFy!b2lhj5ki`OFsMA}f2kC23ojBrN<+#S;U@aInbmyNUP$YX>_ z0}&wqqD)4L{rCHj-^@yXsG0b$;Hes1h$n*w@t)_p{19i;LR)^m(cTu-zfo16FD!=^ zNsTeeXqF|cf5v_X+Sy2sM%P&)-OQupHMXo%2I^Y-$|KUu908XGICfid{{iqN z254Vb*<_?zNbY>`{^Y&hI@U_%iwqy2T#=K{9iWSrVC9ukR#U$8hXW}DJqD~poqmK> z$WGKHmnXw6$_`fZP~d;`i?jRjVsFLU{@h7|^QHND^WoW!l*3yO&_8f*l@;^H9ww+i zMXgP9!d;U8X0wwuKUOh-(1w{Bo~N=fEo+S9Zb`-pBlN9a)8*Vx>oYa4tY2jB3q6L8 ziHIaJN6pM{o>Xt1bpOF&xo<*8`sn-J{dmsGdT$}~XlTlJWkO|UG1dQgs~8&Q>87K?ADsi_Gk^h< z4}OOiblp0P0ho$`sN&=>sx%K9{G-Jj^AxIP+lMg4u$(Tn13|jy+m~f zf3VVJ+c-Mfh~m#kgBkEGMWnheLz?g6!3r*M)2St6unLIoDEhN}c-WY#Bd(F8SL{WVmTmkLfT8of$tCb)CDUVm7Y}AHs8%l{2W6 zz4iX$GD4kUe(SUi0PK|S$AeWbq-zY&%P+$vI$)QLbs>>fbMlhLOrJVuik9v6%pGnX z8g3`7`&!y?1UvWG0p~P*u)8qLp#|j}V{P6&Xl1?E^YdE8ZHBGvQv$5QONZUER_a*T zd$~PM|MtZ4R-5@6uDJ8WK)`2+C~qHk9#vDr+p2p}Z6+bcEz_SXi2(82+^k_qpq-e0rlmReeq2lxY+Js9=$g!sx9a2+L5c??As$IDS z15Y&q&X#NW$Ar8dK{aBJ>%;4kcGrTUA&4ES=)9Hr5UYUYQ_l-pmX8py4u!v2RjTPye3 z-MBh}SWsZ2jb5@@($0k-2IW}q4Fzfdmb)2B4X{iEBS$jLbH&p~j%v+GJZ{0)eo?w& zgO1+yP&BQHyR6ZOB8y?=9TO5cMNTorad<*hxn9Up(m*4K@mrc|JxD@^-A_ei#A**< z#w$z_I~{Nd;Rhf6c_YmNW!~nV6BhkRyBIvZO+h%#$reK91W&dl`i=vmC?`#^ zWi<#5n3?w2z075W97$;%*U)>xktlx_!-)}zu`;T$4#zQ~fyC5`-KE6+5eMEx%QAQU zC1RV3p+ljve_27l8l138R^8Ef4nD%WZa@OrMK;MGSrbH&NYs!8QTpm36!(~Bg*Zh@ zfEGYX5AkT{9GDV#F$Zdvj^9Ig<(fSjga}Ap#lDtZ_pA`2S8(N25R1E{tKWD?#DRTY z{>E~ke?uMt9e4x-ja47p~DT{eU%TiV0Ih)a3`ix{9s~-OjxoEmk*6o0gHw~#v5Uj_Efg{-k*PDX9Eta39^>y!p$aTMl)a*St>~JS$2v(I0*e?xph9;{)r0fIql6Ub^B00hCaEc+ zGb|x1e|=|m!IE~ajceK~1K@eWZ@+MDBw>}z-8zMGqdONJo55+ccNRP~uP4`oE3oU#^J0(7=+Z z--XDNv+-)y*;q{l%xlK!*o{)r;Absiic|lzJa8g2yPN?h5;)(%Ah29Yii#Jaj8GJt zg!W~l$D+r9ZS>LLG1&Z!j-*7~uIEBpEB^@%f5$HYKW%gSic%n=mw^+$bgHCq7W4*s zaAG+Ucey@!`4goXUw61>vEU*j7}YmWEs_`Y&s(3Qn_P`vyd$CAe^yJq&7X~sR|((~ zabbR&3+H3_QV{Tb4y}sMp@!3STd36cnrfJ+W0Z^=K%r{q{<}zHoLDvk?V9mv%V4!| z8Uq>OI}NrIo(D!n93BB~_v;Off7k{d7S~A2n7qEU$%;NPO|{nOqz}0V(YVV^A&>9k zaw=+Fr3y4mU@2`nf((mbnm9%{MDsIhx8UNa&;iy@RD6YyKK({TV{S51wo3}_R(t** zp{r%@*YVk}LcsvDjmV~5Q{3TQ}C(a5qXqqQ)vZ|j(zfWZ2oJ*g= zp-7)n+_;J9WHk2}*@l*fwMezx~5s_MGdgz?L) z#q#>aF)KwX|HFoxH)j24=jtV1z>xM%*2762USKzt7%wIoPixnLin-8`;2d;Q5nseB zoRK(*ulPVoqb>*<98$(;9}o0*V&&lVwrm~9N{5J@{di7{Gk?8KpA^;KY-_fA*AK=< zujUvUKNhkWZ3Q==8p-UB{`r%iN##)GF#I6cW>9UzVov_CC2?DULA&`JMAqh|wi>=&gpR_gPesif19oFQ zGP+r~J`Ra|kpHDHgfj45Ind>`FG%A^nubFu)8)Ghhp($8%4DD_0AHlcHiD58s6zyb zY09gZA?{E0ZnIFD*x!8H?beOETKOi8=eX)rKnZj`lVEaPI3>bcqd^MnJQ zWcg^MjG&VK{?voL7`@&2_ITAabl`#RnYCexm8>ERW;98F$xco-PX z%2e9T_|x{I)5mumkHHiV-A%L2z7m{>1(F1ESHBDyb-kZC{(P(CSXM+1uL;ChZr4wC&D<9NB>nF z1j@*f);T*@jalEQOb)WDlUFW|#5NHHv&hKl7P>C%*-ea(FT0-JW@W6+H6BcMhcWm0 z=R7tNdY90nUNGtz?$Xvg!!yIeYU0wgLdv>>QHpgD?9Q@T56fW8i(dI zcZ>}$EdSk17YWUo z)39Tz(b1O0c#A@1av)hC-N*IfiRg_KFi5mV5@<^}Dn>)RhI*P~p~(@&;8s)X4_h4w zFwV0A32|}mI=@q$d+{?8KgfB+;HS_klh(&fEtgm!L&gX9;)IbxMSHlRb0vj%57qE% zhPu#iK!`RFSf9(JlY%bK5sPP0?}pb$zV}`YPHBJDfxH5N7skl4<>F&v+D$Re=iXQM z!Dc&oNr{&=x_PEGN9mT7DUlWGQCn7BES#c;S%rS(oM?!R%GO1+Wp*bl?#FIG6h#ao zb+NK7^3*NLn;+b!4SiN6+Y1*B;S3iK&Gpn!Xj^0!N^qNO=y4t1RT6k_y&_SmjWAqi z5Z`0zY7}wXjE=qHp<~~hb~oCXKk&3v;;|9XZY-t<#W7^wBSQ0^Gr5AG_iAUg8RI$W z#HA&>BE$uE<4vAp;iieJeeL(Yd(xfO$8-;*zypsoEY$$iu}mdTg}J#$#{w7n_IVDS zN8EUfx6!JXDI)Ik1Z_P=JNBr!bb&%>z84M8Zp&AW)vmh1j;Z^Dg?~7 zdu-TlGvr&Yu;AubZ0`*+F{WXxuy9xc{nNQuRmc`A)c|8M9daUb*uJ3Xz1J+1Q}Vq2 zfC%N$ppvS^X+Yd-|LutK<~WRuIcJiE7V^=vOl$V}TJP77{YLa6GI@vu56)lfu%YT< zatzkelsVo#Z?b)6?~`z*m~^)_eA;L_Uu`K!kY@%2N$4Fh0AF}(G#gMRoD!D!2ZG{Z zvJ*wpChF;6s4-w7LUd6$dmYg1f-s_RzbqqxhkUY8(%2+5){=m^p+Ujwjb`@H53Su#t&m++o zp73dhUUeW3Dz^JpsX`HMRs?Eh=3AuOjVLu>mNp@PKQE41EBx8+&d~SHP$SpnSu3#f-U0MJ?? z>e`9|0s`FJ0&MI8APxb30W~8NA8%hcE4x}_W6#CK#qRE|f`Y>M_&5XtNli_Sii+y( z?X|J7$;-=IT3TvuZZ0n`H#Rm72ncX>b(N5i2n!3Vudnau=qN2MRZ>#2x3|y8$k5c( zw6L%+P!sg`_s`GIpH3HZb8{>37C9~w*Vos-s}%RQ5ULCkkr98@79qNxD+YrKUKOfd z<%nN)eY#4bzc|{y9LaVu6jGOebvapfmBDqn(0Z{m8y_E^>LPsE>~>jeeOac5Oc1^7 zOStTbxL8F-*$H2E2K~+!(@=O73==X^7wnA_ZTu|aVIpL!EjW=X8t*8apZGQU+7WVJof4#v^Y0E7U* z3&39nA&kk-=oM%vRsX%hcO^u9W1tHkysxQYL+dIa1Y8Bg3U%QJB|yOi3SdwIF$nR0 zhXOe9|Im>?m+20sV>z@a>3LIvx*=&-0plgyAxXwA1+^~TEm-@h>*{>@nvomu_rK8+ zU!wI}VVZ?X+;H&coU&L3C$Iph0h58^`HW5}ANQB?HQ`q#yceSR|R#3vXqMLdKDN@AIC- zq;Z`9O~#MnZA*fj_Q*U(qx!G1=#W20kpKiS1|r zbdeQW9J%TzPx#n6JRWa&Zg7w{HAevoUcKk`a4=A-Vn>8vbj+e#$BvsSCKmEY1&-7E zd5jWy5^F9YTb<2N5z?AOm4n7N!qBNwjsA)u z5yaqiDYFwGYChuFxn=+dV^EEBdl2XwTe)_7``{wRWj;@gcoOJaZ5;JvR(fLoBb@Db z;C&qd)k_3H-@RD>1^ktkC0q0={)8JTYJP$XMg-xm&!FMt6S;QF{WI6W%L6s9228?1%NwI^DbEdBU-0 zB$#%VP*Tfh_BqP(%z;XlonlNo!~chJMmEw<0Jl+hRw@cP&3cRRuqi-WIzp&voQdIZ zjH0;=R|I*G@|#x@l8bH;$;uU-pBn$?%>SDPZ%dSirvO6*Jiay8^a^_+ic-7TEHi(T z5@sj+kkf5!1kp1*H<1(3&ohEwaCFZPBRXg5knfC`;nM0rBjH4+gN^rj9`j!Cz}y<-i{IaGZ~J0xr-!7KYu(1_QvR%pYGT57QG&3JZbVyfQNk&oXz>_ z7{B2~9bkth@am@S3jwF+&|IC=C>9{P9a7FHeEYX&r^4Pzbl$M$kORKL4qv#RUvrHw z7@n&GYop7kRE<1k5!E`<6ioVBiA%skvn>XF&j<0|EDgL|FqlqJt_a!59JT{J%*AE(O8ug=`GI@ zx5I<3pJy(9pc7s5c1Y;SrC&GuQ<9{GKzCQ7{})H7(xOs*9RA8-EabE*gr8lken+l| zUd$aYJUMi1YrtM3>w9RZQyVtIdu>v%7R|aKmebN$m*xj$*RJb`I&f-1)8vPK&8oyG z6M&jVCfn6ou4vhR&yZCLFSW{j+!E(;g zyGBVYjaftZQ6!#z%aJn4Q0Q)OZj8gehBW1EhLH~dF}^b&ODric)Kq8lPv1GNr7>dK zWjH~Q1^<6(wUv{6{hUJyg0$y{zO~9)C}$oSe5~s(*a#I@UB%s<%|CZplE||uK@S?P z0`ll>Lp*-&b^Gqj*}wJ2@jHY2GJwIa3x|IH8BUvoK(jucmL;Cvjp7b&UFt#Cd>H{F zwD{be4^E)Beicbz@Gog%{xc{5KUjD4!&JxdO6=GYQnjcYZ31-osVfa_(T3a^lODF@ zmn6_jYm3&_UQ%$sgz`#3nl3w)Sf_;b z3oOF8FJZ_=fn19}4$&i_*3E0pT{Rh0Qd2+Acp z(m}I?Z!l4^Y^oV^4h3&0(o0V0LICEX4mKD|YiKxbN<3wHF5IZe4tqPPKFI$%Ox8eL zv|U-Ay=!yfV{F55*xuz=M^>)UHm3B7=@_bnk9+B-T+cryT-HQ!ly55)@5+9q1srr$glerWLKhcKNdR6$9aDU(n@#>(b zQJGbi?A2w*k2>@*tRiEG1~%-U#>D~avnkfNQ7cs(KG&Q>?E$$j-W|on_7e9J-OFUwGzaOXYCDon#~)>bfGF2#`VV#uFg&W+5qT$kVDGU#5c>IA_1FXjNp83&@2?4O3Mk$Bo8QC;AnMg zIhz*^d|d>XWfO}4xRen`s(<1sXwz1*!-L@$$(58rjj&)HPfcEinc4t7a#|0=7rt>O z-<2gswfOX{?=*o#%BtMBWzwymviZWzQ*yzTW^f0LE&EWf`XIS)1uR=$K28x1+1 z18>SB{>IhSpBb#Qo3la3qN4Z&E*moM1nOH*NsKS}6dT3R|3<1R2 zfLxx`l_P%egG|fUF{?$V`aZgAD){SbZo~3&+W3lAGayYBT_J$gJb_;nWP$5(z2yH;e5`b$ANijG_ihVds3;$-SyhdbL2-&8s3=Ll$b%ur`*Yik*-%9ihxiJL9hmd zrXR#aqA3&>H;n0I^NP?lEeZ|y=ZGuvgHdfpx%LsOyQ@cxNE=Pt?Wf%PhfT|MqhJ#b zP3h`0!@yJEX4;Pqj>JdbW)g(gCs3^JQ>eE535qmV`6`#{vo|VZ&)&M_oc#WCT zZwARJh_*r+KvOHR^Rvb58@Pg~qr-=VWfjwfjze!XNEUsyi)x^Y5TJ0mb3g5lRnq?; zXFtp(urPC4=26Th(&FYUg?o#i(P*(=IB`Z|$=?X#e=9B_5g>X4mo(QnzaJ@tZ~%~5 zI-u=3Lg~P;wz@QGmLHLp$BGuVU#G6aAKu)(-dT?H(0umNez{)!bGw)Fd1%yy;~X0X z-xBRS3HKP)AN%x?$`B~V4y}HA9_d<$HZBossIFF|N)@-qnW2M;kJ8a2#?e*rbmAjW zoGbXspT&E`V3>BPK4W-6%FU@|=}6t}O9MA$nu(8teoa*t_d=sRk`oXp?_)82sM*OU zL16+&Css&H_RK@BI-c+m74}#XWU$ip<4xU+A>vGkzJL5{;Wzo9`Mznv1!+x8zW@;Dn<_q@aKg zzN_J=ZS1{+>GPd0$<5Kv2c4lI!(2V3;IAt=!o!XWA&H!{DP~bi9!4UD7zNZ>1gtIh zi<3KEM|x#`l3u&rb%4!Afn$8kVIhJQiTCwv!AG}7EKjToJuAg;mK!msqN=VZn#{^APzY~Ew>|#3JetXZY?)KSZCiugb z!9GlqF?zYT=Na6Lw-RIT8bTPvNl5U&xCNnr>0wvzv|{B6Ib|dx z8kI1@4flO{RpXzV-1d4J1M#-*vg~B{M}yLO*v-s!l%|GP)hJ-|#IrrKUMz_AD!{Yc z3;oHjq}HBYV!Pn+3d6hej$Xa?H>Y>UpAGhQ_usA0Ce{I9u3Q;^J|!lUwJ&Pg4@CS* z%3OoB?eARc*vByh=g*y7ePBfa*}w+>5fn3Wg1#4uQsje<;5NX4`~_LC{i1+y!u_Y_ zf92Hv8*|l4DKS^V2f|!aAOL( zbKp=;!L}vg7%Gn)O_n~!hhPSm&=x^dtg|hj!&WT!oa931rdADC(?8PZ;9}}6vJc|B zl*{o<3BN1iYY{VMZpG3>Lz=xu3|p@bRyRtx6lL}t3gvdA%)kDXiUxj*@=EzDRMfZd zXYbm(HzeZvNowCwg4!P&(ck_PeA@Iani;1|sJ^G~TX{0iP^^QTwz-FU&c==8_49wu zWVlB}0bqQM-fs-o9_N|}7JEMcqt_SP=a)aSN=`K@6qHysf20|~u3veimj}xl$7g}G z?;nE3R5DX#@49%~h69N^ej~q=ub~5nnt( z4-YtS8?AAxhO3{cy%%$-GG6%Z$BWBv^?NUF40053#?VoMB_3gD{{##1;4<&@EznSR zU5dQ_29q&KUbqZ4TqYur7#KthB!Zx`qJB_P3f#V@iz4uT5!9L;%?}jOj{S4)6L2kI zeqYZ0>df1Kht1pDsOG-__%YWc*$)(P-G1sq=j~qr@*@Rt>gO`&9EC5j<|wTu5eWvU zA*Lt!-)zcmQ}$+s;<)T_E)4hXF7Fjk+ImO*@`@EgO>W0thNWda-dytccS@B3N8hw8 ze~qg}Lsas3S5vMEzu#{Yn->64hA7+8rsL= zlDa&bv)}H)vZFGs-k{=eW~3&_qt&dglWRgwS~}-Rk5cWBxbxt^TePJwXP}ptXEo~O z6SRo>o9jSgcd@cQzf*}MjD5c+@b8S|aq>-cMluo0nqRE6t9b>8Z5k++7901vBgk}s z68`(Pj~&-SEfFO0)^3bKFnOvYhI>_nVm=T35=|P1e8iaZRL79RFlhL+u zG7*TDD89|0`oQ#jZ=)D{W}C;W=ODhgUTXU6C*cG^29wUfCcRew)K?PdQy^aPl&T@C z{J=w+Lm@H~GJ*Re@cf;B40ErAyRo^eg=<)-t9#}z3i+Rzk+ixe=dv;{3!k$ypu{-m zH;q<$n5)|YlZGwk^Ksi$Of39L=|L7%K92F(d6TqJ`+sTEn>&Z^nvUPVs|tlHx8waH z$IBbrHA`iv5;W+x&twehpGxuHZntY{L4Uu2_-Y?cAHF{#*(SA(SY$K(kajpdm+2tb zb3Q+^9mSaPOOY&xYexC^Rsi_B9Q_CKcdm}=w|X+~R}B2io#REhd-Aw|S3h~=E1F_zV{NnbJ25e~H9kKu;&0R^V@t3cq=cQJ%4UxD4t;Bq29JAvF? zpKCln)uF-(((>+Z#K3ZpbD+Gc)%}8?Mr2UKq|HcT@n@gUcLj1UYpe~@ZK=yTWs^Da zq9LYRHAXel@EMx-Cnf$f zc95x?=%v&fSgD%$yS~p<4ZPF!-_}|kVyLEO8jfSKp1G0D(OLT+Bx#t9~el()5xAL8GN;%eg|GF{2nvXYua0FN{>lrcrY1# zw)uME%6d3>Bm;|%o%JUkfmDqNFHE^1yPbE8;-`XQ!gGK;oh1t&Ne<>l-e3F|^4wP6 z>Lx_SB1qw#@-?N0gZ+GmJv?^T1Iv?UeG*%Xw^^tBdL4!5$xwVxH*>|CZ=7;$M;J~k z*&HP0&NzgWuBYE8Vaxs$eZFt?-Xq;WwHb1H4J+aR{ee~UlCsY?_fjVz^a22r< z#OL+Y6nU2`%~~w?1j+`WY!Uwf$D+d}KnoF3*`*}ZiY)T4-1RZg_*O1;6s9-3FGYL` z_4YUEpXT9cjC|-1*tm=GB){p$Hh6>`YZE5&k56jq3!cneV1Z(F(`U|93k}PK^ zS&N??PZXp=y8DEMNbj>sgth|q22jRI=_QO+3mXu@hFA2h$5A_8LzWS$(abM4BX$Mp zC8_u9oO(}Nmt)*Bme)6(zxuQNZQ{r9nmc^-^5w_Fjg1p{Z_UJ&6zW&VQ(&r2P^8UM z@~2Q$eLi(})^MHjDy|gByFgqrd4m&(Y>+ltPL+OhOs&!<^eXj3TCd%lR%$uv3>gW^ z+T447>Yq5_eWMKB^clatd0xE`!*2BMJ8Tw3oJ{O0Q-JF_(Bb^dQEze~^MZ+CHsNo8!QRO6^a9%*gJ~+DCxKjVWK?1%Ek&PwLlPU!#2dnTXiq=8&pd&4Q3q;c7F8SoyP8dMlM=CI!GO~h_Yh|# zlfH*!_@HLa;B*T_oIML#08xbVNDNJm?>a|y2X0b;`pI4EzURAb0 zCKw%_)F|nrJLWk-w-4fhf{er?;k9*&S8rO;cF2*vD0LAFS2(vQzI;^y8i!|1k(k46 z`$2jQ`{wej2;+sa_omDHDVFc-Yv|v56PU=)T?f;`D-H;rA1+v4A0S`OnwH8JHPsue zP7gb3PuGRSWUST&mghR$%leWZN>d^!&aj>W`w|GM*3yOJUytN7h8bVnUKC*Eix?_k zd^{F0RXFL#G`&&hs*IAItXK(KUX!T5PU)RO&SSD_p(Sd=YHM{xfc@I&DycCu!?Njw z4vCGuR5Di(p}#q|vfBseKmKz*xWCZwWQeN2d~E@T#-(oO$~%ft*+M<93z;t7r0-i5 zq$fp!bMR?}!9PfmK`GOhmB0Gw?^4I3uv0lEyBMV5DwqqWG%%jJf<`_)!YY5&(?8}> z?33jmba+YY3+ET&+1H=x3_f@gO33YovH6G3ylx@@u%x{gEHljU+7nB3C(5nDWN~(~ zOil}A^VCg!V||*IgA2I?&^q!!ZHJQRayB$YbT%S$)g|GM0pGrt03!=ch1)C8&4pfy zwuM-J;+NUQv+{FVp>=`XUGF^3H_$aM-Jz0#^XT6Z`=-rZbEUk~U?Jo3^@}#Lav2j{ zHCvx0KnQ3b*<#HvGxrcYLfMF!ARK>kHr)N$*yQWktx)Xk$?WnVFHgPV?f>Yh_*JCu z2>e=C<~7P_)FdR@QIR@&*^CwlYRdBK-Hjgrz_8YI?_H2F)phy(8}#_h^*ZIyFnqU86gglIOvkyN3(fP3GpcW@ri$jxMKB1&i$`|mWd96XUG@+ z{pla^H@iSGb4Bf|3;+~dYs$-%3mo-|%uE&qTSimaMiAgWM3N zhyG%vMgjPWxbrd^l7}_H|FpWt_f9vf`yr?GW1j~mFm9-Mnr(o!GAIvb(xgfEJ{Nt& zYD;dK82vI2gjU3aWC{1q#m?j$cGM{^wM&GLd+G2#K7p?kGRX{x3GExwfKxkD%-BYs zrT$uTAX)w=s=WoBCM__~nhI`9>TDSY%ldBeBIR@7lrL)z=Y+JjV9Gxh76+kdi+%($X`J81zT=3qoQf@6z z@dAiG58h3DXEG;uf@6tcl6##v+_g2xGK^oQ32dg8@OW`()Kn>G&tJo6pN#&ZJq67? znK8)aaG`0OxS(FgkpSrYo<7G7<^Mc5(KfjglNv|=X9;3{wz7^@%T9j!yBScx|J%TT zRium+JQr;noTOb}W+xRmOi&qhRBn#i*nO<3N)C<9mor~qagwF*K9*czxS`GzS++_< z_<#o1pN)*~o}q6kw;wIHrP`B(n?+(*u3qbSYlf6RUmAk2Vm>Q>Mpsx?t+7&g#U9}I z3OB9=uRMBf<%%{Aq}TFmY&3}21_@jGCC!YJA^Z#&G+w@uVuI>);8`v3pt>hgi8?t? zz%BEsROC@SVmRS`=ILtt4t;F!AnR0|pz8lKj_$LA7euP`#5yGtaN5kJ5k7 z%^vOtGtf4fm2X-tO=NCXDkf0f8Ln|G{y-O!+z47!OK4t4ryeJS7kp|GDsbqvxLs%`SudsA2124Q0@GfE+l6*?fBi3LsD0NEER3f{0wy8itv=26+ zzTfs5g%StBX_=;^m}yzBwC{)M81M!Hn#L(-0d!WO_jg*=IZ>PpCVzIShq{8)l(E@x zeqb&ilRt;4P_NkWFqFMx0-ooY}sl;I4PBP~AwemoX?1JI(LT zAr*X>3`Ke~P|z#$BsY$HI+c!V8|CE9{xxdB^WC*4&)BA1P!ieqWcy6;Y$N=YP4%nE z_@qy5o~9=|dwTxrvNB{I*kqMX9XfS%h>8-rbleIVQ0yW9-6x27_5tax`W!B{0pHr4TMKda!yL_Cg$EFnB_5Erso_=?DveXJaX zK8{CpaEshhN476E+#~d_*XdGfgWL^oi$~78LA=lpnR&kZU#xW5YS{MaZovp{zo^Sq z&ZM@QEBd~+i71@uw;=~>tZ-k|73SucEK>Sj(tpY-cP{-HB6=AmTz~go|`7Ie7-Lwmy16f?W@?U^dOn z>c^bZ>k<1C|ABUfg8Y}<75V#^l9w`6OA4ae_;5qxRURdQ?wR({$Y;@f1~`qpIk^@d zrow$Gou7RJKi_*vyy2w==KBC!kkT6PO{*VtB3g#TJnOj3fnWbv1{HFR(2rL1v1wCB z=P*)*3`$6iL(ySwI554Ng$_EH#)3H5TAZTgMY+>?Dgz*I17&V7o+7jLa-z{;q(BVRl`li} z?|KU6;3+%Ur_t%kx-HLqGu>{jmWPRC;DJyB-Z_T@{rs4zt&UrW;zIm}r`5$jkYger zb#fL7o)TE^D19OD_2h}3k=DOs8wutZVd|7^u0B?ZUg=eKWrIrgbyJURVX>Ac zKOm{ScL;0@x%|h$gFMmQp+g{ar5}B_U(w^mV0D>fa^27&Mgi#zG3j0pGNN0{|8ijV z;pwlZd%nK~w8+^)YY5jB$DsYKtffQ9zH+SeZDmVq!#}hoJ!w7!sKj-|j#J3|s4=X1 z>_dHHPN-PkoYuz2$!UQ{EPswUHwU9v1|Q(Gfth#u*ZGwUO%pRw;y^e@)G<3}am(MR zKx|L*^nPw^^AlQY;6;U&lvD3XU-j*v_1T%%%ZFp`{0mCI z{_XFL%TzHO0HuC_qzGckJ4wxMt~Wlo1;`o%gTNiBidagC`3&956 zHoUU5+##=!mc-~L%Tkms>7cyrmdB8a*RAJ3irFDr{qbI`Z%UZ!P4ZX#xMo*TF|qJh zAB#SoiEZMRzUfBq$c~K@t11%vc>KjZbRqhWBy{1W>+BqudkJP$BB6l2LRJv#vtp!O z)2lgS=I0I%v5eO`G_g8ieyeZNJT+uqO+`c$uyL+2->tJ#ANJ?-72xiu$B5=R@( zceYE|BnQ`wbNWX})p_Yksb?3e?6742UBhTq@;+yKcpTp&ocLbEDz+p!>&~MhSIjZ= z>OAW62PZ6X1?=LPA=Lt1AF3c9ys39HRolY>1iT${;@O*%37pXZ$=a{kk_+s}1(J#E z9t4f?XpMx#eK2r%jky_v;%l=M6S4X+SiCMq-PYeZ%rPIeT^C25aW*_%!qV-?Q)_(q zDl9fz1s}TqymPd>nu$#nM#)h^w!ET!FQbelo|33qaUAZnWfS9AW%*s5Q-Tcl{3;gT zgNya7GIOtHZ9929GS}NF^h%H9J?saRpFmh4?rM?F0#cc1w_*(nd%}4GsD!5iI0v9v z_(?p4hN>xvRL}O_Qj`NyPSMjt<)Yv7x3gP|FzdzLzNL`TKn6VA9$sUqy(5Y0xmr)n zTf1T-;YITg0<4(iSh zR}Gmpdd8c9%}8vs5jk4L#z#y~YB@tEnoGDUD$RBr6qoEmSqZd8;1( zY{ej&)`rNCM1V-qhrJDWsx+culo?i{>GtIlqV-x6>G|=4LMiDIo;#6GDfSB96|@2+xVkUj0-@Pv| z{N$o3V_dKk%Ku~4znEsJ57J5u_u`ouC#+6N-J#ecX^Vx1~}K|Z=#nD#J~K{mrIr_2v2MRAl0ZO1HJ&g{Ld}A0!}zu z$ZJv&OxLFbV3fiGqnVRp8Cu>;-v#^TK6`y|ipy$5C`JI29D@v(Ix^XNBdj|rsD~_< zJ;Ww5GxV9F+0-6@i_Z6{OmcC9JIM~5tMzB0xLYU6mn7gR`5%jDxrg*Z`Lao7-cI%F zyHZ>-TUewLi8Nu5P6pdsE3C^Ls~3b-#_mNu+F+n!O;?B-{&Kkc31Ko;= zvf4qre>pWkOs?vBv6j$!q)hF*l~{r-T{U7*CF>ymQZMuRrikNB8^goD?fSQXDjreT zp@R1>PkjIIih|7$Re`zz3U+|=I{{|3fz0WzRXpmn7N`l6szT2Xd z>c_{OKbOO{po!*0mWlc$i0e+IO@a0x@cTggIQ2J_QOyDZ3Nn^2L+AF|Q{GiN#|asQ zyiMtUV^Kk>89>^ct{(o_TB^h7Q^_1adj*JK&!d@+>6mt~r*$?ozx8sk#Grx{_tjzjdpe7EWu4uf*& zWR4$fry7grzrm@dq2a-hVEErIaYXdwjOvYaJr1Gr0|oeoTYHt2z_MNY$Ak(uCeW@xBN>{+ z*TXFkt%YQ1h@K=K2@hjo4e}jg81MvcZu)*7>FOU~GA*9SHDrN)@=EFgBSWcsBiWmB zGcGt>f<5WE$s>P=BoG_P@xOM#c`7ub;|AWm!y{Ze8Z4mY zvUu9f%_Qh$h`f%4Zv$E1e%`~=O@#MwQFf?+fxSB`>5+-VlH2Cd7q`ZEqAAXlzh4b- z=lW)Iv+HlH08~|ZL(5HBHd$gv^q@SV(lICI){TbgJsb(A{5`v3!f{hB<=QG&aOWVA zqxQAU8--9`@p!m)hp>uQJ#9REAtjgbIW|m?=Q_o_?5>W&#NYi#+T7 zrE0+E`7&mV^q$=OblB`R331N4AhX{5QJ9Y1FFNbtx81x<1&7TqRSHT4(M= zKcAVER#=fveEg#1eIx;MA?|G)}xTezA+N}ov?llzG?lOHh)9k zp8J;AP;f{XRIJnlR`TOZyTjc$Gw5RN`kD;-={-}jY8m3mx+f8Nl!RmViv$8ACPsw` z6{Frd_`aH-)lG{38@c$`y&0!U;Ds__{k8~~Zc3Abl z`W)B1v*|9q#L$}GnplRMzVXJGSdP`VP}pz(G-QMheeY}~Z$vHMNr*(|7m_V8 z`$z&G*2xr|-F3G9gJ$@f77&bXV^4*_+6jZe<-^nb;XebIu{#&WDH24Y)p$f~qwjNG z*6QTJ8Dvy_hX>D0lMey4I{xACtwL1;#d%@aqK!DfF?nUerq?6s-_m%4GhI$uwHnk8 z%Q5+m1z}Ct*Z1#!*QH()U?2x2rg)HV`wPQXRn2^YrQQAyn;I(Mwimq*JgP-hJzS0d z@VawJpbB2fvH8mU56W%-3uP%55Oy2oQ=gBB`}OU^GYr+HecGq&9}Dh9XQiYQ;m^qa z7=a$|y$0`5X7YdUl*6UZxX+kXBSuL?R8@C=u6_tmhZ1{_J?BvY%L!O_9lX69d7N;UZ?N6;w9dY8TIn;xOfHA4n?g>WVN5UJYx|*XG=}>H;yF}zBQu)1?a|J zFr;iowmlw7Dh%nugZ2uDt`d)x+%RtXeR>SIy+goXEp~>}z}*;ayI5<#oXH~>dOqd` z__ifhtGh#o4GQO9m~8P3BN9z%3=cUVK^tPHVtJnoFsF&ak4Utq=Y~j>Fx@P^X->Es ze$9n$N1Pq3Gs50qNDH(ZtIlC53GclkCyxy+i%=Ud=ThhME z0ohIda>O}Ge`Ct&{@Z}N&3I^kagw^?Q?U=9fC@SQGQOD*9sz5Qx#orh#55)Y(Gq)_ zG*>Y#z^ypxy4ErF`{RFsakKj09L`kmY|`0!3iPfwFM2s)gMytAJ#VwxTNS}ttyIZ} zP@BaKZ;1lj5$IZ6;fe_|tfsc%pQ8x)^~0_+kpO148nU88s*MSjbfXJRJ1q-8As&n8 zzpjCx#8?iVU@%mu<-?KalrGYe#0 zb!Av>Oq`#N@3+QAmVX>ItwGPXHW8n1R#2g8H3E;m_{Ih8O9_rjC(R&8?~AnH#!#Z0 zt5JB*Wo(;sW5QsMVQ6T=KFRcrA%XuHD2C;t=O;p9yxZ?tue)&|MLMIco^+t~spqr* zmZN}X2M_n(dJu3ae9F|Z4o=w8GCYyE0Xte4_J;_Bl?oTV(CWcVJ#+?#-;RJYY6S%jMwkj!2wYZ$3i|(l zO9=h^j~W7JMCrq1-1Hf-*7jNm&O44rC27S~DE|bHfQPE~>L1Io$d@q@RT>>?YpUf^ zy#4!XZio#a*(#N4nF6}ZTyVcL7rn0-RbAEjrI%^?^bCDa%5RPW4|Gfn^}lvd%C{c3 zj@|atRTbrZpLOJiIw|CkaaqH*aBW+aW$h%UNXH;fP#bT7FEiuj-7o79WIT_dJ;tkw zI0V;vDHfriE^ApEIaN+0j?Y})ATh?Ds}_mLp>uk)ITkr zKl!*IRPC<@d-EFcy!#K{hFxzj2Iw+VfkeIR*R&#Zts(xAg`DEr`JlQp1@BtVWg+*; z((i8;ep#GH0Tr&kpFU$d>wM+hC$m-B_cESw6Hg9lNi#`;c{Ta1brv%jyK^2pgM8Cv zSx85%C4Xf9&Kl!>x z!nYNb2(H2s%NMAFGz6aKL#fZ+WvrNLxZp*j?TLJLOiMe?+whuh>PO!?mr}>8fj(xG z_R(0&7ckmBna^Q3 zm=jT5h$0#MeJS?Unq(4g^%WB!%I&V2Y$6fuTke#(hx_(bL94t9X!^82lKV9%v64E#3zka-ZNU6 z-#;a7gpAk7xn6qme+8%u+~R6dzmd`t)^I1FlSeYB`W8xjT@&AAXD%2bhhiq|+^c;0 zw`UYTWM?ju@kXNH8ITd5`1!8DB_!6SdD$dX2?w;Iq5>+eW(}&9auhW~iXOgOokmM8 z@_q)|`=xs-nj(?l_;q!{m&`1&SSDR$N(<2hx0eysq!cY^Ri50TTvdJH`guE0amY#& zr_FMOLQpGiO_@2%Qgzg~_p+uOol+^39lpr%B1R}C)F;$R#Va-5<<}Fek=3;2NIXd3^v&PAHPs)O+q3s$fpfWlr{yY&+#=*PQ8n|5|4?@CXphTEe z#1@jGkb{qVL>7N{R8*rK0|p&c>=As^3h#ZBy~jPkiQvMKrx>yB z*@FTg0pq{D%;u_c)AS6)>J>r<#mp|CWhzwi4&la_;Cl1*e&bjC={D-%3#voQxruF| zrCh>!Cy&gQQ@P2ssYnf#ukZ9$M9r03K~-uITNqXb}=vl1bz)+eAWTmc(J`}^1XS36w>$SR9cmKGqK6Osj z-nDmixV)?wJPbAr004lO5EoVi06=bm?+?F00$=HVL!AHs4Js1Cg34|n=QDM{?*O2+ zx2c!#zkaI!`|$sN?8rj^qPiLYF(eX8*V~J{1z7Qd=mo2wo|DZn(~T3u6Ns_tFE%%6 z=~yYFXLo$e4ZRZyG>7pln>zG5HTgokjH+2(b2$%eJu&>{C8L5JJ@r)7jy$&+%iUY) z+$|1$h2bc7Fffr0urM%leShsn>S=1qPWl9t_FlI9|NODpep-iugzSKV3f&kQ61}=V zQKAD7e976_bbKH%!1Xgsxb2=a$%&2RsjbSIHKD*vpPZdd^K8#x)>~_R(;D$tpD6PD zsjz-xzjrA@Vq1KKBW}t&&F#K#_dyAm?0p{2;Pqs~3^Bko>5NPGE|JS*JT`__q3Y|G ze_hnPCmdu95+p*B&KZ=az(J@Kn#2bQ1qJ0bZ5uiGYm&E%HyZEa0=`cDYqY+;jDm}s zTdrEK=M&ryJ?dv=a)oN30r0{@uy=<#%+_=J5(G8n8E*(kMsr9)e$v{}lIQ}Eh@q%3 z!AZE8KA{V&57IpN1nn~mPUU4~WtY!4d#oo|SWPO)$-@YEJS(*}n`?J_#;=<mevmmpLt_;Q9;EgCTG#8SHc@gdHZnHs?EM$gX!s+jkotPAVwue1 zsEs>qb#!rb=tD0;Hoxj>+57u@0m(Ar8*$Qr`+KJ%7DWq-@^&cbnGa}APR_+b_wkAf zJsccN4wu7)6Pf#|c_;+@6~}e!7FWIKkV|D{)nEU+2Ze0T@soFt%(w9t8W7mm+B{;r zh^5*2&1mnp$KTbDNF#B{3hT}CO6LkpS5fzH(m6a>oNb&VlaosM+an_*0vu#n2czX)WQCTJ`f?1|bFkGkNDk;THB$p9#aY2BAfmP7fjuOJAq#6!_ zMiF?bmz0ufFiB0FwzV=-$A$@2n@Rd?-W!g!-fDL~!w2Ah4szgS<6*M@3t<$}PuYFhVi#6sVvVDpwU{RWG@r z_+Hns8X6jz9&fKxAeeoQQ4juzK1lxyvir3^RMx8FVdrDd=iBCXoi#;6MFnh(VSjzl zst@|y`h;vQSFq_)jhcz9*68R&ze$BAsK41}DvM;PtuzrBeNE{=LXi|>sx&V<#qj&z z9gk{u28J1*zkR`zzHeuGzIOvCay;;Pu+v0S^Onm2|4XiJdV^WPVk_w15k1Gh7(}T+ zO9t2?3QH;`?z1+u&$qf@X));hbQO_3^V8>Tjb{i)W>lPH&;D}we)4FpugUA_g>pKM zDd^}#zuaMz3b%>>_*GI=WIXTj8g1)wmwBYDtlas&^Cz$eq!xY}c?pV>*z{jcBd<5x zAWmm--aXiQ53l!7T5%T?wP~bx?EO#*tp(33S*839|5qL}I~%XGqGGta%hT?DMZrl4 zmA>)!db2h0t*{}*LeksJ4&jCyF6Dh!!tQq(?Z$8PJ~xpnLHIJ!0rC>gb)V|K*4C4U zF)=axU)Q1hUYG(XLzrhNS~eiS zvZb7ar$~P0$v4HG)$b1mC9kGcKzxytWAoh2vbcSmEtTHhF8UR-mYb82QZDWFaLVfT zH&Qq3{M-udPpFVVVM)>7^HpXF{O30?U*IVl_C?%58bUg2KdT1&-_2nnBVbJ@(muP< zs8zc&qnL}Ty5K)P7@L}_sG3*TMrc7C>4KO}#U+C#+>lJCvi^XqWvHsD1r807%fq`o zciUPtB`$DM&Mrj%9^SK;uX5G)?T2qY8OmH(YWnS_-IXY*&`vu5s7mL*e%t=~5>2$UhH@b;Um)9W7e+lMBM8SQu`1P6l^#Y&KH>Kpf0Da0Dv(>Hp zJSJ?tLQ2$#e5Q~MR%m#H)6-162r>d4_wKO#av^J6q-g2OzNkz|$K8I_~$H^3Ov}U(x|$)%RmJ2^G!%zw85Bp2*b`lrWJhqNip0rIfK)XDzS9 z;?`aYOBg+heLpXR!}BdR=i-UyZdky;068L3is355az<9cL&>lp!-pdNH+!H*YK4Ve z-KWppFu+?%B|ekaviUVcQ;7naC~v*8{H!sl%i-yAbGZAV$~GIy?t4Ly$mHsue>AX*s?c_^oSs)It4yinzYjgskW0L@1(VQsISV!!w*L>(aZ)k@m_qbPWvor>FM$BBVm%^{+B2!vOu7qWXvsY zW#;N=k5Yh~T_)Z6_8V@~fmR#&&vFzej(LAba4%~wOlLu$vDIolnakJ5Qw#s&is8`- zV!U@F?FGlCD7r52uSA;sm?c@c5I@EZDq3o zcefYLPvECV*$Q5&wTurN%O7sGUWdE_)-BcYTbDKGOSQczNw95xJ)PCg2o_CeOL1X9rJ8e-n6 z0o7x8Ne!Y%)*L)Cf{4e(avezUo_BULOu#SZxy}yq>^U=#izqtvFSLq>Dk>^nQ3*qH zd-fRp0T$8r3fTI^i{2;mS4M3of)ga7hXX&vcXC<9zhkvB-NIsIY~+64m*^n!zuSR1 ztE?mJ7|i(??oLCI`~$}{An=~;x-{hHClvXi<%@I2RpIl5_N6L{?0@HSAh>LoXwD_; zD8@%SOco%mMl^gT_n;t-|1r{f@Dq`D;qHk4tF5h|z%W+UssPy@X&UFhi(*=^FuDKf z3zjm|>^lA`Ui|P&w;)*hKBlfS9a!#5r^0_5pSaP8mH9Kl4ol;Vp+|+qMx%Tu@~LC{ zqdPmJ3Kyg{r7@cYuAMXN!pU1Wd6pI4 z#y3e5+g3(r$L-E6qe&ft_#{+$UY9n*;g}U5n$iJQq}N1GhcNpgfVH3w^vHx|WXEg@ z%S8J3W4=leSy7}mJA#~Kuhmn)_j^uwnCYjacoY)horprMIR9j7M8IBq9(0XDGpL{qAYGNa;x#R#LQS5egBAs!~r8zFcgEp+gX66?yrnEAGl*nGr znP7&`9zgWiMHC!n6x_Ie6Ewso-!W~MQIhg61CT!-bbG)3qL9rp1ISCA_WtO#1cp|< z-zZV25LFSIGMnXhYb(dwF#qR`gXX#?w+L!3r}OE8cT(xyMSjB zUG@QhJdynPN%6rI*YF*VSyJ0|^FdWm@DH%9QleIdVy09HiVo`9J7muzwqJgT`YU9S z*qs!QgLOwP;V27(?atu1*-1~MGXL?5<;xD&gkTm(=gLVmiy=2q#S4{>S+e_h#1u<)nci1 z7J#f3{$j1E0=d^+X`l?N{n5Dh%rp?xrGhHISpS;H0<2F-45U0$s=l;oP!PnnTi830r1Py@SF z<4HFB``L1h?_j6<-PX^Nc>!_C@kz-Sk5z=32)cFk!%$mBo zp9$yZ=K+G7t~@8iZGwHyylC+_{bD;!g_!JYrPq9;cO(>T&_n_U>U&U#_*PFmSKxko zq_NTO4hERy_INzf5tTX}E;7!}55qt1TC{OEM8Ps*a$nE%zFuLIqVD~Jj5xkl(>VK4 z(a}*4jt(XfLxoO~1kfv|LIwh8Q>Z?7J?ILL`s6b|w)koTfycl4 zvmk=Pu5@fTP}Q>K!R-f^J%~@fs-H$Z;M{fI=6F;kE+sb|fjCGMXVwam$mTihy*&?Y z(_gX_Z9q-eMTbDP8MuMjPAW*PVT6wmyqNU4)#V9wc81tuj=~>3?iZb9ure^nfFjp* z)%{j(=5a-2@$!sJBpktX%~)JnX{BpnVL|S9%s_$xyk+mx$BD?`;3AO)5xVPMZ&C3; z)B0<-FwbS*a+ORV40h|`T+>pbOc4%<=&Kzr4j35NN~^iyRXVfjeIr+fefsqRSO2xL z2Mnd8XRls^-QPa?_2%ruH@+Nd+~IIt&x@wPr1vGOh%xYp(RW9NiTZ|s(;3hkperS^0ngpkNVe@E7zB;5yI{#IAq(S`-F zR#Wf-{ilXPU(91jN_cp9hyD=wP379d#x3rxQPI!oK8DUFn%9Qh534_Cx=-zTaV6+6 zE~q{UZae-^Y>J0(bWArkI&CuP4|uK{3a_ES_5_vDC&y5cIHLQ;~-=#OJ+e~ysEcD@5y)ElGw3HbCKgXY50($c2$ zvJT?srEAZ;mYFox644K&*Y)ksrOk~Eub})p2fU`?GHXNTD*}QCNVdXWR#?bqQZ>sk z)a9d`IgSarG&XCGK@pNC@9BhYTWPepG|Rl^Hgh$L;>9MS@qMM!QHUSuKfV2oawIIS z?}wQ^JUl41y!Fmk>I`KR$G8Ah&lLK=a>jP^Wqd`GSIE)usJFSt3|IYUGe9fOXs=#^ z?edZi=gEp~6^X=V0EJjs-w+Aodl*t!zFs*4?hRP6?t3UC; zn6ZkGont{h$6cx#{Z^y7QgAp-Aijeh06(RO<(m1RPNTuZ{r)h}ocHa zLtxiN09R6&~A?ND2v%&LMyZKOxYm+LGy;M$=wK+%jFc+Vxe@lm#s?csl2js zXJ-#|X~~J1yUJ#ak5N@Qe4vyoNUW!|;B~Gdm))kjW_`8QE^LZW3HRgk?J5GORmo^} zu>fv+LDy3t2y^56LhKvY)5NF3 zy<~{kqhEY1b$y4J;6eurWEr+hj^_k6pUfOGX#$Uo+Z&y8E3?83fAa00Yo%L`Aj2gv*e%zE>n{=JmeNb)W z!^r74ehW-(+(pHAJ5wAIZm?b-E99_5``U*szkLO0KKWr{Di+~JIX1+?pz>Kd@|?E5fPLUk z3oat5bUHRklRln;xGpcm_shANKuMh#qc>8UVS9J!dCWOtW390P*&9pnzBM!)lmFv> z9=aY&4e=AiPYc=Ya+tukb2^UbC!HvpD`p-Z(_B8QK@yiHwlVMgcu!yhOntqy48c*M zZ;fu(quEBQJ%Pn5?C2q^QT9{88A}S$=Uj#(Q(>*F!QT|x zOj`Zse1nP*+K0RHferiAMH|bCal;jy(x#zy@_P5WB|MF#jT`g%5|#JQH(TnBMy^XFzxZC=T4q}#1GLpVJyAYOqGyJU;Pe}CDN@gICvv1e%~q= zR^!D+K~nQ#Rf=xO?G16~4b?8XYGTfNb|fC9s(D$r?MY(x^a8u`?4};I$UXy%fWguL z>?_D^1iU;oC*-rJ0^lC*fth0R%}*=-*+jKWHuOwCg((t;R^`zznCH}IG@<eClE6yJ(!xN$7SC@7%@o zo|^uCJnooOTFTcBtJjZ&AP1&7Iy8UR6?*SUf__U?Wnk-j{RhgS`Zg2+?-gp7({rKl z`}V&&Sd``K%xh@A8At=R!{Il{`FLk9EsOD&2*rI_U-h>_YW3zTa&$}7*c}&W3i>xo z{lTaNoY3AUmN-v8MiX(X!)S}RrL|M+2@rdwzOc{he#FeO2Pu|rKb8M-XBFMgEng0I zZYH}=b{ik5MCBs(Cj#d_7V(h^%s@+;j9wF^JN~>BeHTlFcx9kOu0s?Gf%|^E#`jsA z2X?gRt9oS4nE7zfpa#?FZanmtpqie~_BlzJaaLNiK4lpYcLjyn5G|Xw1FfQ7wZVwD zm_D?I&ma_8v*(>aL|qBnCk^2)2=doz^Pj$XdS#gjrb%MQ+If-4)Wl z^?s8>_im^GJ)=7vQ-8NQh+VGaOG*f8qYiSJ3|#VI5*#kpn?bXxSbKj%*a~4z$d20w z)W>H>o+yI@U=fpR;^YT-E8$zxl%p{cQ0D&V`?WwXC+P2nu>97DfXB5F)G(`zD^X83 z6;sQ>X1^<@g~0z#z{?b87kF&atC3P}Xvjm#1d5AtSiG1lE&W}<)rzp?blYPzFvLL@ zQDSNGc6BW(;deTBH{(AJ083*9NW^~30Wwa{pbuI{PXVvKAn06>Mnj0+&89yL^Jo=3 zbkyO7_C_VL+0`aL*;!{5QFri#O*g&yDyHy-_nKG2q4g>%?=mj*q43@Gw=+QP1zcmy zKroSWo!nrC>~WY)q^U16hZR)Ux1Co^;$<+uHXNrXjTxq|_hR`!g-Rf;`G(F|tQT4p z_Ut(3{VLeN);h5wt89LlOD3?E1>gJ92(;{Ifpth!kc?7+DMlPGrBP&ORf+@l{UMqo zGk&ojeOH0!*$pGnHDMl?VGpL<>CH=YH303Q@5ez6OZ`!YE*;ofVuW7XW?-1)fj%cuYF}Xqp{>bGYHO zB{6n$XZ)tQOoR>Ig&kCXS_z$vR~3nhpAHpv#d2Roa7X4%6X?Hg{&$Evvdr1s=&W|8 zD019($A$5NPl_4$FyrUfC&+V;L7%ynAi?&@4RSZf{}gP z?@lXfKBpj}WPk!BA#hWmBQ;_b&fZPxc9FIogDqzQ&N{ow9yoY6YWkw|NCoJ|EkG(I zZ#08SgIj+7zG5Bl;p2JQaKuPY@N26c0mU%!Yi1?WZSZ=zCA;eS5@ZC^TZ4@Y{R?Mg zR8NE6o|X-nn&h$I?ag$vUL84pm8RVO-TMY#gB>xGNN zrl}sd7&)uU4bB8ry?*<&w!NEw_+f={g(jxfPDe~Tjr7}DmR$%1Neuh0=?qwBnAu@W zu{NEQI+l<#TxGl#N)xP@g$c$;h#F-kJ zMGuII=1c&*7HeC(F&PAODX1eVyq&LHtspiNpiZHC<1Uz3IA0en+vA_FmVaT|z(e-` zE3X%8)+X-r#WEcj-Y3X_!$-g8GnfH(bsWzk0wneb9S*cEy4IZlcEZO-hG7=R!wCuD zcsV5Kbny-Jgqu-CMDk^YTeH-)g^o?AOYhss z_kBn_Ou@)c!8Xse~MCdxda1nfy4>hDA5?wC}Y(i6z?%$VE}#x z$=j~n+4^{?SIcl*mA2;yxHMQ9>6UDmCq8F{U%=SH`6OQ>x4Pbp2! zkXep5JD!TxGbQ4BlFyNidfGl-5s#OC>%46`I68{hsGROW&#)AqEgU+2cO@}Wb6SL6 z*RS@NuA=9K(7)%0zXjdZ&{&;%eK^}QnwCtV(Wn=n#6$GssqJ+U3E{HP;C);*%^fZ* zij3yH;IoehG`$Y6ldms4Kw7Uw5MJR9UPpu;tdQ;|IDJs$dfhU83|zI#3f9p~`XCBy zr0%82aCOn$HoHbj68I&tedD_sK(Up7eV(7F=fmJh8NdU-NR}d-_nLZmB&$o}R@6Sr4+5&pa@Z2(Ca~<1^w?jOsP?BY4uJz&)^xhUnHwY$b<` zK*^G(;lprJJfigwldFECpBgr3{)n9T10rl2 zK5rK-`S72?5W6^FNOC>Y{@>cUk6sl?tTSU~DL(tlN^-cSKyRWo|5!uaaNHvKwM7nJ zC}IhN*r6pf7K9%!_kV8n!TCSZX0Y4F!)s+XGh-Na$r7uck-!9Os%DcS4f$rdb zGj)pWOv`I0Nl8vdDvRHXRWPB7m+&PPHH9n$FM9y$2qF_UXZgWrpoi=PlKYveI`8aJ z9tU^tRTyw4V6w~dr!Wo4+>%TMpcK+!pVJ-AWz)JiY**iZ$Ri8LY(mlNr$Dx^B7C&dB>_ zO#XUfvFv~n zUSV!x4iL>l29#BRNnhd2J8y{ZN!C0UNUvy?jYM(NasOI;P>AY?ezhaHOmrG`XG~hx zHMzf_FD9KSS2;uSin^4ZwWK6v!tx<5voz!iXinbvzRm1+Wytyc0M>1sX|~17I_*+1 zmAxbL%;7(#x@V;`t-jB30vzC1Yz7PT-5%Gn&)ntiP@Y%X{%B?3DXWcf!TW4DhlHSs} zW3U#1HpC@c)xjZ|01uyOHHz;(G6l;C4#i%pVYd8{Y!-+t$Q5_yeLDxEa>Ez~opx)? zUbeNkP17cDk${c3-}M`0dZy|E`0>Uf;FW-hmO*tB5)N3GOTm)`EE3FzbBZz*x&@r} zxrLaDQRDQ(hg{#!7v0+6+;cJ2nxrI{S^n6^*Z<84@4(iiH43Vjk!~5 z)ygpDzLwU~QnT<()oq|^XWiJ#lF12$XLd7!=r`#F?!3U~<#*eg=o|(A`3w}6y&wd^ z3y25%c>eH+mof8JvZEB(#KXrYt6JOw`A&|37%TPwui^=3rM5U%$>YiV(RKn_+(_J+ zx-9+G9YvO1AGkXL*e+GFjrxqapGdD_&)*Q7HO1~$*6bt?a6`8#6yS(n?r%YPZX52f zxb(L*%Nm{N`Q?~5G9CDbEAwbCotRD4oHL-%uM5;iJQi!zYTV7uiKYG`@YY$ZtM;^X z_WvNnkCo8W5nDWDPh6bX9O0cxc&z7g{!aPuJl(@lXDZ4))oL%BR#%7x2FdYTw}YE# z^t(W1VhS@Ou{~B?J^r?&fERQH6|fJp@U&FM#~H~3L*%)}@9m7W5;9@#<3@`<<`af~ zBUyHjFU)}3`XM2<9Dq%k>8_)=8$0eULxD}eY%=lO0VEMxO}{OX*wLFcP8Rkvw;iW> zpZehV77FJSieK-FGi^NlqCM))f|4-->}B_P_}w3r&VJ9jeDuylrA1DY1uNc9n@{;F zN+~Lp0vpyFa5tI5m%f(m{Lx z|F8y-w-Ol(-mop2hLG4D)J?yi3%rZ)I&dmYHPRM};l4>_DI_vx;~%eQHHgH#uYSix zC=%jH7{U8&De#ZZn5_rc0~gBe)uC6Q;IfAHGKbQEu<=r{UlK_Qk5a5fbUmh`sx>U%UH~z3{0M-FY_Gd1!CuqJkoyy&Q*eh5H@ha6|27j^Cya!EB8RR zLQyq5yboTy^c(-DFMKbWzmlrDv*7@0IP*!{jDXu&Rf`KQgMRNtz8^U?8VXDJ!Aev z@$Jr%0dtiM6MEJ(xJD^R`&xm1TZmG$m1>n{(=AYg^FY65C#=?r`L!tWccL{VVOTuv zrs@FuwtaTn_sg3H;SV*Ei!|33s680cSBcU|27BD#SaVpGLE@qdUb>{StPxopd3uTm zp9`=@jb@^GP(BB?+i$n;chkPh!n-g7uF}hX4m=?C_B_)vp+yMDR$%3hu|j#;x_F$i zx3Z|w0fIn#{|vcGG<&i-K9gYVN`j@@c{M?zBVF)d4u>wE&dN;oJd_}7@SALUNFQ7d;hWt;Tqd6^M2Duz*n@A$av8YHFufg|yzo{uzulz>`!1^+Ei1JBR(0ZajKL$m-g?KG&WNX!+l={?klONmrtG*~qi zV3iv0!<4beKE9#=f~4C3r;iDy9$kX2YmjeenSAjphz+cfY4bupzmHM9gx_-~L1`1qBvTV9hZ1@taYl1&MYk?N>lS@qV>qMQ&(&I?HxhGe>0D**6o{QlK{cQ$Ke`l_6pS z6f8lRK3Vl}!FxoPhe0{uV=aHFC!9F5<|rQdtVX8P&U3~jJ^K9!QT@8J?YtSPVGFYi z`Oq-U&DM(3tA)~tYo24LBh3CAP|qlCn_`j4?V6P=&Y#}i`oiglmqL~&11^i7#U3P~ z&NLjK-|X*Ad)s%UVqgCVhc=pHz9IiAa)PP2ivGiZ%)k8o!o7S zZ-ysc)>3XX%!Gvbc7Z<8*UY4ca;?z%vGm9ru-T|KZg$yL{`O0e%OC2dwPoWHVXje4 z_8U*kP|_m4I1rm&A(JR|eco?|edWpgX}R{4)YV&R^|pOH|2nZnUt<#~?WtPWxHRgZ z#W#9bo&AAvlWNaG18syD2=>0Tqcs#>L(s?5=?rr>y32kJ2oA??ZLlgsIdrv}K{!cH zJqmhS>9=2N*?#R4zSU?f31=pev~fI|(3oBZHrMz-4X+8^56R1Xd@@5322=IE71(a2 zVW)lk-YkN)St#gmIbXS9D#$uq-kGBj?*nOz~Y;rJ#T5gq13M`-MekCXeYLmag` zXJQ1?;*`^bHG|O|e$?m%;ZcnD1 z`(5Sg7xJjHmoyAU>A>e0=`#Mi3Fa1gRm((4$?Rq&KBFn;s^W* zvC*>1xK}rI?|@4B=!8sMSb)` zg^NwqEaPmjD>y86ef^=_zlWj^@-y4^7T%?@N4I^nc6D?4H9GBRn}LUg5F>?4AV+ea zBfa$6l3Dquoc>y}hydaH23e*j%!vxf-lS=^^OBN{QS;MB4d0dMQw4*3w$qfOWCt}HkSxgG(L;a(b(y06Bn z_Er%4kaQN_^V)v=6ebvR^X&nKk?>egr2aW&Ybiac?6*_p7|Nm~t|O=X%sTawlDd=l zawq~XaS+mpKSnfb*qcrg1sz`t>B&A<(i9oV@yCp@k$X)xRVW~Nds3+!H)K-oMzne` zeqg&e?3y1zFojJ|MLiS>KA{M*t#Y|l#Ee;iG;{a30UKb9)zc;eiH9AtZa`zVX%#fm z_xW#V!_&GgKcC)BZ7k=?{OqBRAYUtfLVO3+G$9o2VgKynXC{&Si;UbB(0ZjOTBsM# zo|hD8r$d+*iK`_Ar61r#LMjy?e(FD~?y!LipvR#Bu=iG-?I;u_c1y)`U_s7yfnpJ!xy6zxt*b^J*sgnUYyX# zQI_nl|Hjtf5GUX9D9Q`7;*?}Li?DLvpoA?6(S{S>yqIE+xHUZ%BeRCJY?ceeV!P^@ z8XUgE-PhsiOF5Hq89gt0SHjMUNQ_YBW(K zYrnj(3=ckCbnNR7;rzW+)q-H{Pn4Ue_hXpaaad&3IvY5sFi|%6Pa|a1kmI=-pt10C9f=fx?|Z5~)lQ5#R&5Rk32R_`EU#8!;B* z5T=5yuW8>pNir*icgU=0z93e%KX)VP+0uMWVF$*g!Mml3XL<8)BI(+XAv68Z`?rSe z68Io0rL0Sav*e1nZMWAU2V^Q%p*b|f?5w>wZ9wm@6?93+x|oa9cpJq28Rgzg;c{6> zJ&&-WI$sCMYx}2*HQQCz>n=a{n@|KUF%2+$1~Yz=yDGW8XvcjF}H<1jL`edK@Pi$;m?G;DfdH}i> z=#6Hxy8!qdSag~+_?0gV(FcNEZ>_wB)wOSi9ZY}V+tz%G+bO3q*=-TZo^N(hDTjZ| z6-lM?C>~e1cPkF1_=r$F>KGA^SN&x{Ll0|^z8{%0YSwA=^s}tz4(cU=`-xXu1=^WY ztoBa9IjxFnE}*PBaEP@sVc#(h7Tie(28Hn6!eQ+L{fnWWBEkDbQ)HK~P|Y&uj~wK& z(bVK`pKPT5T2uA8hTV}jh?|cm{yfG8tk=Z~wH9Mi#X(CE2$~D{5EsUkqc$^1dwlAz z=grmklai@oIX?UR+G*y>BzN_ynMayYa3`Sb8S`2hok(wM;Jzy$pP6-6_m3GGchq38`&}Ua39dwAkL}3k zp_@A44-U7^x1U=z1i87|cxzP;jO#jgtSq!ETC9u{|3dD~tJb^SpkD#bmT&_Zaup)d zx(1vNWWCeHddpSMAjnOoB88;R;0tQVhs8lyl1*e*=!PRZ3j!%NqOCLL`3bpJ`Z1Bk zZXZwVRK`KlJX7;QMNQT>#d56nC2Ra9N+B(08fWXj_=2URW z2AIawDvU3mzt9ta(Ev#k(@3@n`X2CyE1Qhnt{MV2xw)~Vy#F%cV~@=s4E|Ns{l0@z zlyO9vK7mT_aMsn*7$&(4+Vu1*oxFS_+}eaFR%|#>8)F-5mSakVA|wUZN^=sOUYACI zOR#s|C|Q{W*HKM-vCOc2(Q2+xLT#x^%QbJi9oV3Zr+y#hGu?M_O}H=LTfB-vxlQ}F zYiHxde0~xko^HVJHWDYF-PhMG-u+l!88yp+hLbVFpZ!hZraU{Iqbs zfnVsQIPj-w5RYh@p&l4je?n-8qIo40@Zm_-Tq6=(iV)4V-!#~qL{OPBwnSlh#FqX* z5o|nXIZk0k%}7(M^i*M)Da6W9py-zpmQw{7aKBMRwO`qiA5>$VLDE>@ck(jjs4j_B zwQ6uDxQRFK5&Mz!x)NHz-?WKYhPSKU-Q>O`4W|{@sY7E4zOf2}`sQ!aU7$ zM=9W21$mRb`;D5y=yrc}xflNmif#PkRITX(y56CAPJd2Z8?NfMc%$aS&LhKmZ9q#l z3dfluNrG2fa{_P~QPbm)&m)=LE?KXcwQilT(CkQNl6y5Zag)P~(sfLPHImSTc1y^u z`a7aE#M7jjn~)6qAN8dYl#a z@lCZoPKpRrQP74ipiOG4xM%U~NO|`{Yj0eVEkW$Q{UBr0*Z74S0H*ZGpqPe`P8*pTa~EFFFPM z7gLo9bJKl!E?XOLU=Pu3z1UhVXK1pt0US6OAz`XEm3^k{^6?rX6i_AC^|W zfwn|BXN0_1t&S7Q>w`+z;aS)5@+{xKE?)TDxiFXvs=6Uw!{lx8ZR$^OVek|CgHAq0 zj}S@r4*Lc?{N1}7??0A3O3IqaPF#<+#;<|JjrEWPJHxusq1ZKQ?vP8RrgN~ zPC$BL{m=KCEKb=MHNR)Q$gEn}%Vf(Xj`)0H$7^nza9qpWt(eYQBM2srVrkrPpvl^B zdX!sYyN^rjFn@{$?3q>1PTTJ153{^(N27_}t?K3uRWeo*gLrYaZ}ije&sv|Bxy5MV z$ZZUId_JnlzCU4X>I<*ZD^}_+CXKHd$SKSSIW<0c&Dmw&QRHz%I@9*~Rc&u7$HfPVv%aiTe zl@a+O7|>9G#o#(fq~Jy_R7UYQ`Oz}i<_bO_QIUD@d=J75Hz*;T)IIG^N7s;D zgunJ(q7g!y{oEV?iMOBo2sn^>B|N@iU3iC>66FsdAMULB#ya5sigV>S;0FSRU$p&6 z=FaELTVX-`6Erk0&d@W>aMW38+rA!zfO@baqVPzts4#rs?eTK+O?5P8MAC#qUop`) z=B|FqdCkS8#!dX8BUilVEgp#Dn5ULg9D7lW=wTQtKd0_k$lHwP*!dcPQ@A>qKTn&} z?5W7SyFHqeK0lshjqq;|E=LqVUdG^YvLYVNP-OK*6Exk_tCE1TxlN8t9#1avfL%Om zWHHcf;_=_6JRuFLlIRloH*GeLg{m4rI1he7Is!owv7);*pxY_t3zPZutJdk@dv59Z zxG;Xn8&kA;#M7-|&y11$uuM0iCyYIL?P~hPidUBT4gOYxWNO`5lXhZU|BVhXvc+De z!aN$~@hA~CqD}pO05(C%zHLmh$;$K9qye1AO8c@_d-HvbtSB6b(|l^p7tr5+qkx+n zuO+e)+c`|Pu8q|||PCC4Oe@mZwy7n`1N zU(uu*M~map_|#KReNvnQzY?#{KmYvOh$qe0WJdGaJF^83?f-7{yWh#R@^yc4KSvn6 z^DJP#S|7jPy8f!wtLy*$?}zQvsBzLl?YS4 zs-$Gcrqls#8ITfU+L^qrq}8+NU(bL+|HmJHRIt`@eI*)S_s1OQOhABz{DzGWh+iejo0Z-bjQkdU$c(;`t^x?nmza2bHkWz zd_2H$F=^53Xw$j_0?L1=Vco_5ZzRIF;G>T|Iu3CSsmnIz?;6P8vI<%GtXw_tq9(;( zNZ+1EI=P{rTBFPc2gG0GTo;?PE@ZU&T!$wasd*>PRo#tjVl@roVx;L?;-s}!edysN z=Od&eI_m9B8R_{V<%ECnK62dSjZ=%C3{c!gBz)T7!Gka0|Gy_Yk9+O4*Of%gyYqEj z>$t+(3s{VF9Y#w1Lb)c!xkAGB8zt_NjP$49d;Tl0yfTuELTA6NW~63+A;a>e0H7?> ztG+Yq;wD3Z<5cg03odv{K3{$(8{+u9Cz8#2jBYCAysWJ3*3EZoJ_tTR9my_*hs_D*K`o+;K8u4+ZicGmQm!gH_?PQEiEMb?6Z$U^spIF{GOWL zhx7@54ak@jCadO31?ISkCL047=aIVgm8Qf=dJBhSnISo$EVesN)m_vpn{ho%9bBF( zLj8OuKrn;fUySoo#P4KMhi}gN?9by+X*qLJH0tE7U~JDzlV)2WNg7*3px z2Zc>;M#l=tjboo`fZXrv*bW;E=F@O~j{(Gel{+{;#Q^6RMQ&5Xx}8@SM~U_p$xw*n z#b?M*N5vm}9w(YeJe}h|>Eu)Dz$F-1w_d&0@%YxyZ5XhWaibAx<8e~xW}Y}dlqKyS zPThe6olI)w#lQaQY@9SnBKGuI>0UqU+<7a}txg>$4qKh}xP&vYY~{)**|9C`BQnHB zR#^b#wbB9*H&F=v%WEONY+yrfn9qYj-k%>y*UP0%t!9M_udx+I9X(9;LK6wijYqb&wK5)*9IPc{PAOOnwq%RC5{5%yC!&m>bK%ZJ4ueDJ|Bs3ES@b#eW=JHiwpF_+Z-p{-lDK3g0cuA8rp3LLB#4Tx*O z7r)2fx>c(tJ$m-sJ1-}g2a<=~Oc1 ztT-IrKAF4fG}!^~utei++9m>lxC}_afsk{<6v1+`ee2!c@g+{JwgAWjIaU@CS{9pa zJw3LtfB*h_@i5W#!n4ihS_1%{Eemo~KK-Z%v)P|b%6E`ytrCFPUUC;+zp2-@q<;M{ zq?LC_^^W9uO$1tM)&1k?Mmh8+H>2I^OrzbsE#rM{M8xGy0TQCwDx%ekIQRdMzh!e3 zuqy$;|9jbGmrX#>rBn;Km`7L?<_17OJ1M;0Bk40FS)Z_E0_wVlqG>C+9P&(_1cK=$PDM+=f)nKUEJ?PFdXEcR9(4LzwXYEU?sKRY0o|Pe1Ll_v~MR)`QQs|~g)aUsL$0#H>xppOd2A8>M^$h`#*H#NG zZWeXrL3pH@I$cdVtb;^1s=gdf;X@p%j^)heUY9JunM7e{;Xt%9;4M+xjxYfd#6XTk z!77v1r@I_1?H+g)rLjR?Ky+FsnZ9-$W2nYkv>+9ensrFqU55iOM8HOX91_;ltFF3g zG&S7SUNgkippG0?8SPtN;!K>*^=s$&FwS)uY4tTp-nRzvJO)M_PW}EVfH6m|6>A{? zJ`xqXrS5T-TG5(VE;{BiG^W1aS~A&~=JI;#UQ0#2Et^SVyAw6vDG{?R(8B*qC~3^B zro(-D`A6rdbykckfi&OTgOW*vH+^3T9@O3Rd{`lk1 zrK3VSA*qVi9CFCt>(y`2U@(q)yM$;_90od|9pgMk5PiXe-AZm_NoqZz?8f&>{`$)) zBki6=-8?SW5g^Z~Ns^mn1v+(dLVf!(T`f~S7}UnIjeKrYBw5Kw2#EjXzUNwI0og4u zwE?n0A1V>B{(zI>ZV1>ma6uz81)^9;10E|MFs)A-_8h$3DUhUY<@H)ogLh0_I8_s7 zG#lnh`hx#psKHN64*Q*r%5$Irz-FP%bUek~xr$Qm|MWGT|csI8t)8uwrUalhFD$;hO0 zpP6HYGf`Ut~m6HA+ z=@%!ZejA_V{&K%@Y`*&4DXERKKs;?HBs(XkD_sr41gWDEd1nBiast+`bE=5CB^nn1 zH!`VlDW|a~NK`J;tPwfp%E}~BcN%SHjT<`|g9kfdQum4fb6uqbBteC=oKezR?JBvg zaQvt?bsd;X)`k~{j3}j5(LC`rK{p-H^*dXy8L+$?;*_f1~SUlCa);!O- zY(9m_qVaVYWVR29j55gzT!mmtJ4sD*4wg{k9{I)_Z!EM})FrYkMzyS{0-cbhwwEI< zgruf@l_Qv`Jk3tko9Fccak>GHrX=w=j#icc0h`=gh}66YSlTnX4M@dUnK&eWr}N=* zIWKap{Tivv5)ZK-U-kP56DHg(1U#6=^N0Yu*w=&zbD9U?F}|&SYo2qz?%lgzj}PGc zy?pxVr(eRDpP@uwbiefuF?~+B7XQF$JezWWFK0P|5xu{_do{h{+a+29S+y4q^g!+x z`Ruv_Nzl4qu_BRH51Z)NWvfT!IPrh@<&;zBp;Q*)FNyj%5kDz>*O3UxJs9INx`}&z ziQ79~8~}M>wSKH4A{GB+!^`p#wSa(BCk+rcK#+ryRSN*`Kh!LbU?UOm@=sh-)4`@; z5X(LUT$Z{ZqQO`!1O4c=tXXWR7tp$Ph+`R9f!*EqwmjArvrnX|hMqaWVorClh&3q5W`xWGKKS^S(=IUo;{|-a7M2)|LCV^MMB*_yo_BNi^IWdCM zi9sZ>)oYxprOTvvo&ff++i@aFZW4i4ao>cJh(u`Bi*Qh2%ERCAmcdAP=lIPwC1fq8$LR9lfpeCpFG2AESJo>Y{Lf^dK174?-Ym zjECz#I#WhMU;%afv5=MKSt2zh9&GvyHWFkc?%=KG~HO6bK7THwg zy!ZkvG8&??HWDXsIT@OA0A0q%%Ih1p`tLXuCDj0V-0S*^=nI^MS8$Mg*Og-!_vtHS zx7HgF)GY6vR2R>Nhthy7&}iw+_p1YsQ~BrBS6@BRWD>S_BHO@$gZgys)~%nswk(l8 z4e_sP)k-4rIvXsvy#<)b-%d1;HZS9<*ZpV-WivM0WR5j zIZo-;x#Q(@8LZ%VXSrpqT5AE22OutkEefge-ji%#0?}ApIlajgzj9i(Y*`3+-9$?7 z0uh)Yv+TQ0s?vOwq$uBm(DfO|S!C6SOH_+eRW&oBD~TfGy!KQ8^k9?5=P{yNuTrf$ z_UhHEkhJ}ooHzZxbab|!H02in=&7w*wGt4Q*0I-+#eLlZ?#=rBq@ekoK|gm3(#Sn| z?qvPU8#tB;){u}2E6NJlHDRLL6X+xm5DyFRqcLzZ(cNqTL6bR9Af82gU(?Gkzx)LO zK8__75I0~uQ;tX1?vvfe)Wn-HflQo-tXDCdx2q(&vtOSY@pL(M&uCnMIL>Wd?z_<< z`hs)d``(>|G2mu~cdJ>=n-@8ce(`&0OYGs7oF^p6E3UZWMb4wm$4I;1efaPZ;AQi{ z5E#3oe#e!zFQGb z{7f=9IQ`M7KmNFpb72Oglm$Run=G)9Ccx0YEYg)d*{G7WOxZVcJPC;B!k})Bz{#_u zP1nWII>@6>`(ds{ zJ8IxBah?Zr-$^asc0|h&srjwCw7PyyL&_w@e+R9R```%rE(7tq>$w*1C=lNn>TMx? z4UrYSKolD}55C(t(Fb@JBI@Fr>URgATOuemP*fI+$!JKQxRBZs(fINeP8=ee$gw(7 zA7=@njR7eVmD?V+PMLd0=i(5E^OmfJ&hJSy9`4drZjQv?WZ+=G zY(TtB*N;6m`-m(ylVHQfRVS#h5rZsv{W)BAlvGEH@u`M(}=$RQn(AMGdg zWooofkXiV&n)%nI8eIHpenV7jOP&7YWa)jfBi|BL{~+g3&AyJ=HDLqdytgoeA{Jb7 z$tBlQFI^)Wx}E+vsaErM^uv#Y12B|po>u?A45eUL&pZRR%0cr~m?MI^hHS*aq=bK` zr~YTo@#%8U*^UGq4Kr}Kw)o`*@SK;ywm*x%@hy=n=N{+vb(f`HytCEYRImSj+@Cj# z<0{LKA$&52F|VJ=v3u*N`?pSXX0&V9esJ^VErf6watxtO$ZSiNI)6o=_wVn78Z~l4TQ)lx;S47$J6jyF*iS!A zD_xB4u-rDaZ9qx@?-5CPCySON81>wZp7mM_#EHmyljeMb6jclM zGX-+~4dD2k=Xr}1-+HC(tQ6U-z~MtP(# z?{PA=mBubvy?XVA(@#HrUpCV!<~Kh|?er_zAk{`+?t8OWAkHxqTz~!bck{LMuy3o~ zY(641uc=ld6OEgDLqPmQ`mZ0MZZFcRzaoBeGZ9*`ole)0I4c*Y>pUXzQ;bw=I!4yw z1ACOI7l7DxapZRo2XL?2h%v42ew@flNF_@tKs!`F>q&kdyZ{*hb1H3-H_G{x<=0RF zn}+J!bh)-WnWe5j+qxgLH@G8WXuUr``lvOVNH?)e-z3wt$d+N^DPSveq{ zAxQ4TaV(-smpXA2-Hei3h$Y~ih{gf(ROD7A3eRrR#3>v$%*mAzqyTy4j2TYF)Tz>+ zUhSl_j6s8)P`B>#wU8Ph-(}0(aY?I3X3Y3Q=8i9PC0Qc@kk>{F80xu@ciO-re}S*1 zjv2$`h7NB-qEWy!s@tFR^FIFg6EKC z=&}&;I155rfgwKOlzjH%k3X(7fTRH<+4&naYE%zcz;_X;Z8P!&6#qmk{%^cyCF%9Y zs4st``oOJ?K4lQkVHMDeel;Ywy|+~Z1=Lm|o%$G?`WiLtB4T}}b1V?gptWx@?PdQ$ z6vKdOi7Xq$4fr8_yASE?TLHbaODJf`&qKsznoSJT0I11rsLAz~@uxzbeCnyE?gh}B zG0kg;7M_u*U8L22F(7WIxpkWs+=ahG?z@NQ4EdeUZ5Z)nM&8sQzN1;{N(d(xjzSCT zv+cXQ!DsG$J{LNro~qWp6834^xwZ zi`<5j^b&ttNVNSbDdAbHQzV7Ud(bTGIh+SK17SIWs?@|>_`MlI^R%?tnQQCU;5~c* z04&#;mL1AcSNA5@uRa;E7tCkdFNl*x{)>ouwjGt(O8r> z@6H`3Lsx~8TdZhfV#1jGGpThUxkXt1)9Ngj=`It~93F+~9+$vGhMw@*OGMmy?s)qS zPN+|xge0rf=mqpel9k{iMmDAdAsmUu=eyUic3BXS2kCTLz#1@$@I_LOy}4;6GW`Nl zP-{qF8VK}8C_*q1-4bLrRao!M0N+>nFf=FnOB=*FwsAMzbkoOf6fVmqWmWhZGilAB zrjNHZ8G_MlXt@G1B3=UUjG{GZg8)-9Hn9c|VKL(vJS7sH+j^gTKPEG}Svd?fd6o$N zdj;a=b^SzZA$=WL`LMgMM4;pv9F!36%`=@2$KY}J4NJ}WH2uJKL`_QgBx>Rh35eqy zyu*F+utc#c5;xJTVYg?YpjKCih-{9H(j~WvA-wSoAUao$&9g3RT?ZoXI+Q7%A&P28 z=3qLlZezLs`k@@wPmV+L1ZesD*?_o?#*JeH5D&x26@i;vJ{wW@-1ss!{w3VEpQ-Ds z9FZLh;(Vs-&=v6*q_QEL1K%74DKjB2{EF@d+1^aT=FOX$a8LcMPMx|9A`*E^dzoah zH*XRk7uI@WglWR~nP{k2NEXjcg=4-I+Ts$)Gf*YUXHur5$#X^de~kZ!C2ejK;_~vH zj3Ijf=Iy1AT>8hUPvy!zBc+iFK3D79Xnc{gb1eY!z>>FuA!yMMk&ajRppOu5ov3RP z8rakByYIgJ*u0X}{uZc~pty++*+2@=u6|6I%ISi*7;}y%qS-yc1)Q}WAnsQaJeL-$ z_P5=3n`9o^a$Ex9l^o|toCQN*@$T*QXypMAZiB_VS28gh9GWnl0C}W)U#6#8(&-y@ zw4=)de)Z{zL|gKl_aZ2BkfgD_(!WHhU-P@K0nTzh4bQ;LJ&ziP2OvBL0K7{;ocH%4 zyoqP!d??*?8(0na<&jdq7iUGB!n8r0bGZ(O>utLmL4%-HS;N`5m-~1xvL5Tmjz}6j zlltzdLf90CR7d-iR;DYqddvoKTC|2S?(}u;-8xLkTg0L;5h~f*f~bwLWtVo7P1rK^v=h!R>i}Y@p>ES-N9AdrW>lL^1d#tH@{0$g%TyMlUj2h;I-5vb5!+PiIVsrXk)H3z zh|L%HfbJ$BQ;zYy`$^wURcvvu^kGPo+hAm$OfT#?0H-e&Gy3BbA+~*O=1=5xT%M05I6S}B(oDB5T39-LvCUiPRWagY~^Nc$AKpvPOzsP*=Hn5ssBOScEY;>q*O`xXvBGKCJ)Np(9 zy=}HEF&JYZKyPZQ5j&cp=XXe_PMxl#Mr$^Zv|5hnIe$d}M-2w?=)F~7XJsAoFv_QnT z0t0^};xr$)$5yVH?o9p^K#4yR*IZ6dh^Kpp^jCL3iR`j=m$KeIKUCLZVWM<0Fk`|jAy z<7FmsvgnewqFFZ6*R&kbqgv;PBaV20O)y=OlYqcxgi)Sh16pe$N3V2xb@R;alrusW z{n0(YgH3p#Njc*rOhKIEaW?a{Mo!d6Z9HUWGic@M!TXfWK9^0;4|}-`U>T>_&L_X0FRTtl5UH5`VSkevRD!(qw>c7$aQG70Uw@4f{*@6&K2 zBn?{uTlp5Q!ME=9Ew|F?x`v-=>f-PYp2YbpkZ3$zqb+X*3Svf!T=y);bekDbZ+{r- zk8pl7Am)uH%Os9c7Apn z+jdT9*l;J5mnUg{QwEcJG5*ar-)`c%o3#4I0LW{F1uS(4X!$U3KOl0eM=i08I^bQT z41bhOk(yo~QgJ;128qU#)vkZBNkS$XN4Vo6>f+t_5TsQfmDeS*8^eaWNIp1T>2y^p z(*Q2&YCTB_pHF@8XuviDcCt7K#YCA;AY1yiHPd^GyGrzirA0yPHa&WiUnQDoCg+Ox zX#m*Mh!FFr`F4ZkwoJ9_nN8R(|JhDSmOF%{!5w$paSV~?ag;)K7vPo%Tq1E@@*o=f zg=qa#+OTFDwKY4%tJ29~z^WcCf^T!(hH{>YsU2SnN$Xb?iI=ICI2%y&a00HS9MhA( zPn!=RlDoX_bFKqdq=i$|`O1ay-vI|y(%*$dO+P_Odt81_Iz5MLe+s1mlit@YZ3`eT zt+gEljy;3txPiaDR5C2oMCURu{9j~I%5ij0kW?_=_vM809zIm(dq=R;b*U^HncqU# z)%Q1R*6bv4SaG(0#4&4&L(@Fj=h?L5k=qM5GYIwov<7MSc7{K>RDYK>?cRS!bPf zs#hvf5s_9=LtLatLSZ7f-Ow1nOd?-4<+Pc~h_XyIDPYyx98=LpE-R0f&nh5;UMM3n z*~H%By?n~1aU9WQ2JKR1)UwC0(Vqs0e`ZqY9;w^twm_Uzc4KMNqlVT75SPvJTY$uu z#{yIQaO$|Zc6ywZYrT&GcNMbg;&iowCvYl&{Q@(|f1-`(4!*y;I7tGSHi#27tU#`I zJi6jn!E+b|i2vvkb5^>KYt8voI_M6>#w!HGIZsP@Z>Ix9)6E1kE27jbagH^VWDvE_ z3&_A2;7rSqLVp{E^;~mZ43l16`wY`&Mw#MuHsa<>FwX65Y`BT*#(Ni09vQ^rRpOYY zNp5V~cL3s-@i!q#5Z`ki{|WbC16hv{5&xckO9eQ_ABl#(iDp&QUvnU??n~&eA7({5MPgz`pwNZJ4-(LNY|J6x@MMR2BZua;DmN-0XZ(tiaOjoQW7+C z$K|s#i?zO=CjWEv2LSpn1 zHr4{a)0DJ{);B5dx79{cY1J>o)kWcePb-8?jv^vC9zg0Sj);lCiLyRKbY&cM&kZKR zw4%#Wk3kvn>d1lgCpUTd<(FTVHa!7Tp7R}ECq`dvMlu;xF(Q)2I4UC{LX9P2{sJjn zlgWrs>c|C{IuLPpWr#~(uEiiWlpdm!E`V)FZ1!tN%8!laSF#}ALB?7r@52DFy_DdI zW*rMVw>}{L2^oWb;V^7=&qJkkuDm9pWl>5gq{Q%$jPf)y>(i9oolZ3Pxt)bEAgDk* zhwMZnN*mI7(1kKd5qyv9$>5a8aWNvb9`)_xiRvZ7thP5@(&~0ugR(#d4%S(m;|ezK z(FoqW&OMZHwjj(6;&lrBWU09CH$r6mQguJ*bC;%hOVQHm*NWF2!+qIDj+1--J2Dba zB zOf+N5ecC_{z-7X~?n&KpUsC4>K+@_`Y0IzaXDl7o^(w>i#e!aoH7qYEc z<`Gtfm;Sf`5x11m**Jh{wwkS_zW%ZTaXY0hmSK9useeBUKnt?wtPVf9)I8eUsX?os2;T|lKd$-0X zn|ZWT^8R;6>Nk-g;=YvkCm{YP&Q)hJI9&wT{TL411S^xUxh7|%4<52dW7OPwGk3gk zG4iXSjIf}k6TulSBdspA@jd_ZAEy~&EONZ)**bGye?1}Dnh(LSAuVBr1qDuy2)e*i zpf6kqY379ZF>k?`-o2er_wJ%a%R7uw8_zOafe4?kwQleD(%Lk4JOJ_l#ADXRA99yO z=4Y@OH)Uh=#U_W$vq&*n!_;q2<}qI)p>&MMa+c^(+qF3WCWfYWgW^Ek^~Lyo5doeBRSQ{f4`q?>=J#?gtu&Yvl-VS#uy z4p$)~cL#fofYs4Bt$klB@tPWIH><9llJ{~T83-X5)|Gn@hW#Y^-XF$^$)JCJf3AtI zmPjJ@Rb;ik(wT&sI(Awk2e)n8u9q;?<+_M+n=sT%L@JfRBzqHmHzG1lfcT3qI)A?N zjuXNuF9g7M1KgW*>XZOBYVkP#5sX2FwR@&Qcx*f)kQWP4{&E{@DGG6#bKnXLkguti zCVhW=F1{ifFZPi5tx-}NE02ir0u=mi$O!KZ-uW8&E2T;@^o7~=Q3kl}cr z=P6cX$QmgJ?7#m3S+v3J*|Ozsoyy8MkNivYhs!kr#P_@VZl{3BWRgvo4u~(5nm9kp zM~STkAlrh7S;_;M>;YM%P zBb2{3axY1_Y96a10P@;oK}7E8+1xO&Z!}V+NlXB%oPOHx)JElyj_gayxV?~U(lLlR zzmlq6U^bF_@4a_9X~A=-dG{5WPd4TfRyl1otBJOk!kFJ^MU=8)29y+tN7UC*Sqi{) z#ADB7--kA@(QJkdsF|(BVYmh$Smgdrh}!Ba3`C_Qd36o=+})a z5I679UQuhse9luhfNdU)#l4=xIDj}_oyaH%nK12A3KfDs0N;-ch$~)1%og6^+Fwg_ ze4#|!I6qH8cKg)2uCbS1dTAKMuHgWJCwReB|CKa;vCWN8T^CV{%$H3Y+HfM;q+lqY z3mEiYSt<3h8k#e%vqL#VxAn=++%2RwaaeF_B%AdiApT?&b1<&WU@6!5xi^XAm+_hY zQKi&tER%rq)E2_vV04M=<9#RE%OaH#CmU6_Jukh~$%I%Y*#z1woCOmmI9UL52F`K) z7A>46J$gtfDgokQxdwb+2BG8tOs|AR34g0%lqVXz~ zr81lh2LjwcKO{!3-4CMEZy5gS`qfxHoFO|MDIYu|q&A_F$hk+bWGoE(m+ZDc$bNfq z9(;YKA-PWEI+}7oO=c1tvI4p7+P5D<>8L|hq$-r)e}I?`8A>u>#IOWYo%6O8#EHan zrDn~0%HsQV8#Hk0kWSCQHwg)l^LJu#vR^XzBnP0+=69k1c`8b8#zIU*3o{ihRKGq~ ztt8QMMg|bR#s--?E(22ja)Eqv0OYmR0uavzqzdULmyw$xKc0IG!*l;kjjW8avf1#4 zuyLe2rg9w<4OngAMvt(zEm2W2w??di{R1Q<7%n6i;U?CihN0(eDxI zvee~o$VR-*wO^_0;!3wY7Y6pF)ZuTI*FwPOH6qU!EG~dNI-h*<$q6`BUD$lLB|Ex~ z^ZbVfa&ul42Oz{XZvtm&V)0R?$Fro)Y%2F7> z0QMaKj_GGMN@!Vt%h2ka7ozu-36zV ztWA(8JUo23<1}sRI8tMG=Z;H8XUdexWs4UtTJA>UtDV|n0gwl#K?`3vO2M;=dsD89GwY68x^r>s^8g;LPJ)B7E&M{S6}-CImHfdxy3Ae(L zxKuWM>Xq+tZ639C08GY)i1G??Du}o}@4qO9RP7`Wt@!GA5@9k99r$b{y{BnW`bmx_ zxr30>J(=aE(mQc4JW94D;=7bm)kZ*#5-*05Qoo9g4DJd$85@@k2)*A`_9RO)K)+=UI387QryZ! z=lCUMUd8`&Wj44(&5~YsYuf_85N4bx*W3?~hwT$AQGOz=4qKg;Hrif<;3m;HwffaD z9KOvsXA+GY=PUs7z-oyp_Aj-`JB8rpS38;-hI0w1G_s>OIm~{k;()N zi`3>Ck)@dA9_ipT(w2&OosUsxyadPQdcY}@53y*^KTePMcqQX%BF1cbo`*``x@N0a zVb4AH+*IDv22!E#Fofo$6rG!V#7^#_ufH3QPZL#{{&`c%2q_l%PBZ(wQSgb&Rm;uoX3Yb-<1|%R=ToCFB5y!WT`v&PoXZ82rJNcxz z^8s*q%$1R)>_=g#fy+TLZgkVMX-+1Dv@B}nQYRO7xwNe@#l+e2^UqF{KqO_QHyneo zq}AKBNj#r81v!N>ASELATG^aAbJy~jo#Xb7*A5GSJTL`ZxqN_+XOr58sM9z20!|;O z8n#J&iBxL#wQbAv7}A1*y$wvA+w$z6nh0{Zp(The@NJPAa(E6#ONxsa3*i z2+%{mYUk=cqLk7ZhbQH0E@^1H*V>e542Yu{&=?-Z<6MvZsZ9%s>{VoSpLTzz)B>D1 zD~I2|4Y18fR;$N(_|nv{J)?0|W+g*XPk>xMuO1DH!?sA>zsf;K?o`_49URD}lrH{5 zo86H_&1RyVfZ(s(Q=?$|uak496xgDyER+G8QZ8%Z#oSjJwr{;N6s+x&jLjiS(&xYf z4%okE&mNNIC)!=h`6_oNzxS@QZtB!TDm`B!aX?(6aW0}0;k|~1nJy<#G7$V;jL&60 z{oYxy*W;WA5rYvRk1SoveZ{3xk_&9 z10WBqc9@z`jIMgCL4yW~CbjSJqST4!0B$ptc67u%HyZ5?(n+z3(F4B7u#Xi>yXMb< z(rBkXxDTpb53%925Ksa*R_M0hRO>#ERnCWB#)>0Rjl)6OY z*#gki#-;8Zw^*$a{;n7>FDE6R?~L4 zYH1Ytd-H60*rDU<6iNXbp z$q1Aphx{bUcayCtcE$F+X`*pf2>DuHb$v*y)Ag(Y_1R0;LC&M&<6zp~9>Ecr>LPtGbV0 zRqc__{|jB_W{d19IyP6El#0{!~xS>RNLx8 zK5IN=h|}`0!<-g}9_rNT*iojV={dz_B_CVr0rX*_ajB1ovN>ewPj}~za}UO*OrBE2 zH8%rNik(_!K|~&~)N@Wa;e@7$w%jGri(f7DD8@!RUez)(F{+ly z!b#X0r)G@{GLdaW^>JB`}8@8A?bJZTCU=S&D)#wk;2b?^5mi;~hTUMJams;e->U`Py6G=Fhv}#<;ZjUAkuFE+|=G<%| zYBoxOEESEXPRz?iC}{*km+q&`)*c7Mycc@1XE^f~%y;r3nB|pMChFkX9A7?Z@*Js) z1EyIr429Hrru266H~DSbI%S-9=7);cxLuRY!g}@W$=ZD@h_k}st&lZu{=DdS-+#B3 zdvmUvR*wci9$4)#t7n|3BvE%uMTLw_a5DCnY$94L!j|!5LtRSRIIYw=z1VdD!0K8( z<7opp%c?u(0M^4uZ_6grQ8rAN`m)h1WZ1^tfW~4gb<6TdzginIn|J5x$bCfmvrPZD zVlY>lb4BfNJS}ZAX*0V9R(78>Qtk54fegZZL_f0t^yjHrf5`@9(yY}@I*WOfTC%81 zw<8if7boW*@;&SKLtY?94|oaSyOj6e+DXB?D1EA-NGbGU`QILr4d=3xb zVWPNA*7Yb+a;;gMvjWoUBL)1qj!C0s9MMm_+pCl*{dr_gf26EY!TZc{Jd83!7h%~0 zxMrTbHLXu&g;=!RwPKykIXIEeV_hNX8OFUCOAEk{rbIK-%Iug`;?>?}UW;Q5B`b50 zfmyD3DL(7^dT2`yigHcRKDdEe_^Es*!V-l`nwqbpzyA7L#tO<-dHDqig|?iHkkhzk z*#NeHcox}?umCE*A0u*yY$M_?0{_d=>K|7L$ZJz!2bhHY9}3|b*(kW zH(kvdPnWQjVQ(@-jcw_{y#W9@3eYf{Oq@2P_W-{ai5!e`VzKd6v{TKn5P+`(j(`T( zN*sncDl#@89=3K3#Ov*68rc)nB{R< z+!sa2)oy!A8)mL!5)co0%pk~-h2we*#MxU+iG%lK9EJ5roaRC-D=4TVAYRug5Rfh| zazYGA$s(Fd_n4*@DWF?iJ=t&P} zAj_H|WZtT2KTX@nxm)atz*Gc49$2jsej(k}n2qE{i#JZBSIk;^sL zTr&$`T+Ig6%t_JM2>S6b(Hb9_;jXx>6aZXSwk#we3yCl?|po ztKQX~9{6h}PMmlt@AG?zai62#{vF(gH44lVMmC@+QQ?`qm$OK-t^vgF)bh7U2CPIL ze)!=RNRJ_lKomL=fR4=wR7p!au_#{IP1%iOWtNg9>=z!eyG(>HM2ekJ&B?8 z_20mpfPvz3m;fP;A))&@&Q`sl!-fxbusWpFSrFVdI#Ix0Qsu%v&mi)aCDC^YS;9)r zO9jrEq}dZ>H^7{qCR_Soy%!k(6lxsC!f_@eTi;Y>*b$Ri^pvYsxgfr*)=9DkKpqIc z&~|eNb+cAPZK?G7E`wn6xuv>Q;*n}L8(st;n@A*ZR;q1i$e0eG-KGUm{YICxm9xze zqe^|tt~=5jpN~++kwp1d^PbzthA(MLslziJ>Jy^#7m)l+u*p3lzle@@^y^WVZYk$i zN1`%RMWris8YGs#fQAd0`7OhS>#797Rwf;ra{O^%5nv%|SQZP3E z4U{zAM78V-`L7LJy3gCrEOGtr=d}um{(KGhAxp7JIR;5(Q`LO-as+1<;t1c3LfIX> zwr7BdbJvw_h^}O7WblS@CKA_0%30M-P~-bE(SCo6$$>LXIYBKiJ$TRKrX}xJ99d^u z)(De(Sk>+AdoHX?0<0WHo%W}l@}KVB@4US>GBxjv5MqCmGqCZHn9>v=kK!ov(o(mITOyp{rfv1adL1z z0gwkNb)-W7PE>HbM2~(`plmiVqL9}CWHVB-I;Ohb z*eekEc=e%&9y);!V}42=2S!wVon=>BUDJSrQzW5KN^vW0#a)V9X>pepcY?dSOK>Y* zv?VyjS|B(ScMIZf1ZogvS*3(0U1 zOS%?+=i~iq{EKB2{(C=`lgtg>zv!25+}c*nOtq+LXm*Q{S-u7~TD$SelZExplpdr$ zSE)(7<~-6glTg&TKw3|aOnd<{9xC-rvf`e9Pb4-UxU->CA)}(*5v=tZXj%7Xqz)zv zQ9nl>RVj~xx-qZNwmXm|bJh2+26?9a@#3}f z6TCLdTu&mNm@m-b!s8#Mj-NL;&PS6JM=XAJALSOhvx>Z^C{%-F-p5)MGLohFDq>)4 z^yduTQO26$C)=9vTyMMsP7>8S#8Z>1y8n%0$ek-N?SuIO379T@<$vj_aU0iiaZa-i z-)s(y03ev7js3q!x(M;cgr$DPy08(89lb4D0@S`F?*0DEdWjbrNq26;BN_{!%U zzl=DFs}EH9qBG{@HOy*?PFZ{G_5L-wurk}0A?dK87F!uR8{nSe+jyGJn~1HEL5KlO zY4Psg#MJJ-F5HluFOl?@V7QfM1yH1vOy*NqUt_6L(kCwsC+~P)#d44ChIQOxPHg+l zOY4XK;-PgTc*W7Xev4VQ?Ps%Rt1N0$^32x?PPxab5isW)ce%unhO`^!f@v_eJ^8ZZNv}xk- z{wses-8;F;IkK98Fu?j3fM`j3e7_^wP5+y&2hw=Q5-{_$UwJFY7dW6gj~{sTNlcwT z^PuLFqQDJ;U7I>A-;CWih{ySnAR1^Rf!aCu<3R0gxY- z!LJnGse7^gY2cr${dk*K$01TnpeLWb5je-Dt*^SS2kABudy^9&HcojQ{reYB`OwqI-|-5P-~=2jDwpIHioGrdJ=9;DAkS{eDue=;Op z^+W}XTkFnXB5jj?g&%}%jhU30Kt%V5E1^Q37}m0aC2un?yz;imQNr+yewUYl*uDArvd@`fbgEx}_Fp4;?cKIL> z5-fp*kU+q3Y9dp5j2TD!OQ$-&k&WR7*MR}V>(Ygxog=k(#Ebq(G)?|Oo?1!>p;?Y& z|C8eD?@t}`3+GpSA~1bI2?NuYTwpcR*LVs@Fq+~wcJV}0b0aK(Yz#PjWf?UlQ*4=# z_k^&Nt>T1}&KCR~7#;H9s-&6fNEZM{Iv{_CN&_`1=yHvE@x#46BNPPBz3mt6%`25! zJL_3Fx0JawxYUs%8bfiWCHYA>z_Dn7_;aItXmGURX!frgo#am3uVXoiC~k48InjsZms2fS4YOC1jpl9=#rtHxO zP55#oEpRIpnkEf|7CaJ;ZwnN5ZpkW3S95`w=9&}uIt;X^uMWBA`cLTG96w(yNGx1o zr8CwAH~c|MQZxnz5Ax^~QqPC;f7eRW%}F7{)bs*a0$-~U_Gu2bRB8Z&tFY?cc-E;2 zF;MG9|H-jrbMZx=gO|pBH(rdmFOgYE*D6uFhS=mJv`Wz6-kNp{fd^WXzFMMOn4(UR`AEO?==W%x zLbqxT?x)MU&z?RRBqZ#i-{F4)ibT2BSqaDd)Zc*k zp9ZP(o{Uw0XQmoVo`EKdzql$A$Nr5G%$ymR**nJ(PcRZEu!K*k=Th_04}{Gr?`?=wbEr#jOW z7bTpSzJk@#{MUL-$hbEhBF!vrOOT&#>F!RShQyVW+kNmHgUCYG>f{Qk9y6PAfbvk77mNZ5;0Tx@+c76^8^)1NX=o3uv8L%b6{O-pe$G~~9@u`)` z7+CviS+3tV``Vmp)`?MfEgj>}*u%QpMrI|rYYI@)sY@a!W1}9s^WWfW_f>QT`n?u& z4qZO$iQ><)@nmg8*=TI-`@O(2ADp9uyBn~fjx zh^A|>#L`lmuo|8a) zG+uC9L3I>AINO+jsxVBsZGuLt*7A2|lT3B1wGR4wsxD_x-h)R3h4*e)ageY8Q&u4F zP|ODnwAyWto-bmw$S+B_OVWHo_PT~Wb)p2*#h;s?S$7M)ts|^)^*^c-kppoWxTZ~Y zShOl;BuJ(0zi=vXPiL>>2#hA~y6W~{ zw3nRJL-bT)s(zt6A1Rlo9=F3IinU>b-?>f1=4-LbBPhe6>zuzvgv-8I=qp9pFcZh0 zB=NfYR8~(!YL*t#eeg*r==SEbU#QBJZq+=K51x8UBrC+-9Y*I+HeC|2n79NNV$yygNa@!=-Ne?XYMDS;a@&Tl;hk~T_34TDo#d~ne*`u(>PQ=c73 zbxY9JTDSF?lxC}%xZ$s1H{L1K@`X*gP$rWY7VEh$_`x--?d5%h-}|N(*vn)?>R05h zd=#&<+zrXn?n|VTrGA_|;Byud`S7VMze!O&Pc!}W;>TQ8qGstX3Z=1-u{~X4*f0uR z8gt5VAqqPcRN0&!fJD)(0pz2|8GCsOlr<%`S<0|BE*hd-?`--LFAzogfjD(^YYqs6 zG0&`iwZB}pj6jS~o0QyUR2~JTb5WU-abOWFD!VQ7 zZ{bzaHhu(5ZEkZ|_jT!YwZrrcO_F5{BWi2aYP-DnXFVgqT@6^eiiX0hSJg!MVn1Ru z>8y*c9`#+=Jg5SDYzsxq?o+A7jSv7uvzSNBVQDIl4tl`xI9FyP-9VNAR#$t?$B}#= z@qDRNhX|*p%&W4Ix-XezDWZ}6YWW-&KN|4AwRp8GFErW;3lz){Vf5EU!l-}CtS3ni z;LsO>)7R+fS=|&Wg$tLqT~4EJeyBN8ftnmPLL+cJB>zGfMmSEsaG@`0gL^#qUdJII z$}%b@NQozQ>hE(zEJQ#dOYYf8ewVgO{|-)PJ}Ks=QVeN_G$}G^knAite<^Ck*ydUqwIiT`2ysfD|%I{X}mj0YjZJoD?% zJJeF`aC;8yuYonY|BxQ=1*5=`3zKQ)n2|T|iJp{xd84$;#pDtk&n&-+5dikRA8)SD z`6>^6)|A0sLnm_r+oUz0ups13FMYBp+aHQrdF>U7TA1p}NgpT-@Oyvcwo6p#U?q}{ z#G0N!yb)}j{l}UZ;FBno*ZfM(|tGNeT51s-ncLsZca> zA~@tZ8{){I$j~t;B~VoPAH^ReqDSu`TK-8B>kFLE{B59R|2e?fN7FuL@fX5Lba}ke zjv-^E?y#VTO%$x}Dv0!x?wKZ#qJ*8@+70RQACRtv*G)26%W+(?@C;QcZzf$@?`hUJ zfT_&GH`QvsU*2mcU;@!y)^GnKVA_4Tan&m;fk9zh(DY!{=!n~gv(=Xtha$xIdG1awj}B96>0QHU}Y>q95EF+ z_g+(>h+QoFfQrpRHtI_XkM8e0FJB;w+ox5-dl#aMp)#wPD%}7ca&LvzW|5S{dANCr z3gLrlEV%TQ%*Qk&7wTpis&3>eUKoPzAtzd+Q9oVR(xAxPo1JKyq}r|O-50Zl%8Ecg z>gT*DAWk8vnyB-fIi41tWaLCsnKX8>#)3+oYXUt-90P@(e$Xk1Dw)L7$kWYhxbt}W zfN%=7UnoLj{AbZiViB=8-wkaq+DF;guo6qO; zzmMT#Dp6YR3m(R|+lR^Li}i}?0(2*}Efmln{^jwhNEl4RG=J-w2nSmtrBnBaiUWe} z6A}%Sykr3y9S|!KWNL0%J~%u) zoC87F=QD{r!c&~TGYKlYcdjmK6dN+WmNK zb%N8~5oy=$aX!ERl78zRHt(a%PTQ19x7~SS;?U-iY?|^{%~E)E<5E}&m+GfnaQ18! zr)qNh*zMUOHIYH_!>HLGF6XyFOK*)@m1X+d8iKRGBEzYd6d3I@<_yLx>ssB^*{&Cq z1V5})ia+b11w89U+Lg8}0<|4Fk+M$dvDJJ7o1Z;&o2^vwsEj{faj_3%HOE?ySWsWJ zr$G$6Hkxr)<4i&-eWJ?WmE3yFO+JZ!9QEFa zC=b80U{OkpADuBxX@wReQ4{;zAb|0uRULDHGj#f9UEApjx3B3nhD|bg?Vlvlf64@@ zD$vKP{DRa|H)Wc;y$*VXa{1!TZgA7muwa_a2Y2xAc;p`LN>+RBPa51)!|B41hRH%sFrVZO`TT!O74BF$t=M^d(HGlO$q|o>(yd31ebG zyfro{?45OGmYAVYgrcH!*)s17h1ucpzk>VHKfC%Rfz6<@V7yFTTP-wXseo6BN=rI* z#9rOOo5u)%un=fBMmtGXq zCu0I8`6CCDi=Nx(>aOr81~F{&BDD00;s?0= zvzR2EO&D<>?wDGWmcF53Xk7SVrlGoiNKLD;_c)huhfTv})$(od8JMu5f*nIKVZ`mNiZ|R!ck7V9zbw=4$#d6UI>WA_DiPqukP}H@Rr)r9zh+Vm^ zBJzvYcXCALB*aVa2321~P>3l1_7r*_BPAn`|;Z*y(2e2hxV3v;y_&W-G>WNF5UtGX{{MM;seN&~PE zIyw;t{L{A{h65SY%~5!fF^kK3YIMkfj~0Mz83?NImKk?|r6bEHX~uG=?>!UWLKQZ9hQ@^4dbNeO>RTii)6r@%#xk`8 zbv}3F3Q1lB@j|AR${$%bi-t7Xvq$>d?N+U_dc-GyaEP_OAHu}*nU;?Wh?lN=rV+b^ zN% z^!6EHH1eO1G+p;7W{9t@#cGgK1)njVhvHN)6;=X0vDFQ)DbC=*y(!W6_@bw$<2 zeER&n8-17Dk#~W1Zpx6QeprzK>Jag?;h;YDnOnum2y#ozgNe>faAxb9SE?>Z5h4yu zRKTJe1%!ZI!r<*o**81M>^Ss?gW8bK7WM}n`SW^QEONMV)aNf;I)LQ9`oI?Qkvg@8 zJ4?7HJMk@V{{lq?nlYc6%_rFHq49q*w<0sOgNd<|UyTP2znh3Zn0(iAW&xs0{k8A^ zXMW{Y!W=1}6l&HTS37MUE==~8j(>39B7FO-^@Q4^;by;@j176iW$PRD(3@I1r8L<& zSFP}s?r+pB(K zQA1rgykAw~`pbFU%Z^mJ9jPt(NW37?UU`-HY{W+&kt3+^%Bj8MCrE1*+PT*=nJm;=!|}hO-_e|nYpFXG)ANM2)s9D)`?;tjmcIcBm>Qv`15+e zJ+s5cZ(Ea?pq5pQAscu2JM`Kk1USi83>{ux^`5ZE><+_j4a3B`h7ixuX`Bdq--7i( zGl%h{ff8Z-ipTGhWp$+9x-?MS_@7Aco6ZySd_%E;(d>V^$eS;5dZin4jOArXt6$j| z7(A@N;B@Lg5?^HQw(hwB2PDKOF;)63YiuqXU?>~0cVJAmJd|D`R?&hfdUk2W4R->m-YIYMWueT$&ZRb57cL$l)! zD>xZyGiN~@3%6JvvFyZ#PWz)x!Bgq3P(96!B5DXS}iz2Tl z+~arP!?kgXoG9!_S~_3C`Gz8;{egD|iRb@GF&yaGo+GcghbB1w*i?Juci6ucCs~4O z4pkTP!iA7GFMBhOjOb}C94tyNVMwmT1X2K44*5??55sxa?aOW{XpM%1!D69IjHKPv z9HM8*_po{{pXwICgrt9IgA+L{%btcitqB!xmc>1Vll_$N^wse<4Xc9J zeUcN(`JPD)MG1m4{NH*agPh2`<%(WErMv|Ya%GRgs9TZN!0BjAW*aof1h^3dS6v4y z1PPs`Imc>R9*75u9mH-XoGhUk#W>RDX{`WR?Z^cZyZ)3i|9x9f1if& z19fWztj^O3o<_ZBMHX_|VAtgM%$OyU4SRzLPV=m0}dMHs;%qJcfmJZk@1mGdwo5iq+UE z4;?)8v}P)~(qyi)Tk7*i(fJj+-*wxxKP{G1b7Idlp+N!Bunt3-#6*lR};pcn$-4QfvkZaS^G$M}2 zsepkDxbQ@zS?YOjQYx|4SW|U>-gY7n+xU&f(V-!>;U1c#U-+-z`G-++$i6?|3;qi> zL+CqO@W%L>p2yBSq4eqDqq%gX+SQAUz2<*+TDgF7Ami(J+8zDmJT#_8If{5M%#SJQ zdu$a5uoGESjbk2}KMZM38q{V7O+!}P)sCkSy{BMj$t3eH6oUjG+N>eW#NPN?Co#1l zj&Xu4dHzS%wxzA4j}e`WSJvkiI|v!Pt#(nHL%fF2r}RvA=@FI79^+j^BJiwt7-lE3 z#}u;>FMKSk_`UOq2oF>ou)U%u8{SEd3T-4Q?lq7r*6k*p!5&~kboZoBXOa^oXY-YH zEbXMYl{k#$>DjBuJNUQn#o`OszB4(jid8I2GkfZeU*hwXrHDcioZtRz0BCS@TeNQ? zeZz`36M0vj9$+x0+u!0KC`r^|<9M%Ny0q{;-ms{a&Q*<2B!VRbP7PWWx# z0e-BK?8N7Z`t2Lb?cX&V3~9L=@$%ngS%}{!s{Mvc^%lLSv#NYKfVO6{QpdM%LaEFT zR21j-2b1hX-r)=ezp2PUq!c22_45>7JiyI`y(ZCt{_fnwmH1V}F^Tx&X3A%+9_Yvy zQ_X%Zp!w`>gr)f9KdF$tCvi!OnYeDHscJP&=xx}q@04^Q#@k7ito*+0n_ zM|ervTzUz$+e{fjHT;-adCskITdw+GFxY~TESjmk-&ly2h)IKCkhXJ4r;&mh9RN1{ zsJMSj-9u;5?r~DH^fj{U&6{1qgse4s8)p`+n%ED{S}KLbb!WZq?jn8<{oS5;APGEg zaSjegB=cM?BGXz{SuPSsYiMoS#F?*RL?6x6dHjaJvdLvBD*UzbO*cZU+O-Hc>wNEX z2A#AQY_GN0#2M;q-w;z(-9=>KRD=mH z0z=K^1)=}JitKzHvoS48&wh9b!+_6RR!lg(>xvH&_^ce>+FXwC3qrivDpTTO0I@|) zxh*vsXk2yBVwv*Pr5}NN&{m6zbVgfir1Kw{1K<1AxlLiQi`1`}(%24V9X-Dto(}P9 zKn*s!6od;#GD=25hG$-lKVwATlDcC*bh*T#a4?~q4mlt+dA~;yX#Sms1;fKN{mJ(| zMpc>9C4kyfF6u75V z9162ylL&$rX3SuPt;u7wr)gWMU5%xwtu2#kEtdZarVv8+Ftgpmb$)x;obvC0B2gs* zsQ9+H-mc`M$V}hO-b~T`b+#jO<{MphbGP4AboLSs6oE)bm#LlZWIN<9X=1DWrTBOiwg)^@)5bEf%1#6MZ-iL;+?D zzOBfQ)nT_M@y3|xcc>)$mZ4-Na*>8>3AG;Pfc`k|0JKt|U`HIVkrMsMbXYb!X(m`~ zODmw{6gAXe_P0Ov>MaEzm}Eu?=kre9vAO>>)iBVqFwk1I_CLbQ zg4Xx^G<> zc15;>e54ujAE%jm6`FaB)^&o(?uqf=u|3N*qKGeR2Uy4}$WEq)ky7O~ARv29Ue9+s zKWR!qmJ@#!oDI}AwK8)9g3#nAzY+bzg`E>*{<3;ZSGE1{M+xbSix9 z$@+RhB4s7(Xlt1ard?C$#)%ph-IuZt6{Atr62X;&3qOyX5 zg3v7-g5*VnaIZ+CjqfWR)MH5zT1wteV7{e^**#pS;V0PMqHj3MCUR6inJ4WFCo?18 z@nZKv-lqRPixEhAxLoz0Dh?0Oku10{U`7ozi-CBrUy>1Vt6g&urOBXs+H!n`gz;C0 zj9F})yH=S#49aWROp!-shB0JlW%--C;W0 z=(y_d0d*4PP0}!rf?6=?-m=t2PrybrAX$L&k%iJvThmo|4=m!HCWZ%m_Cn}pY}Oj) zzr=V@;w~@=NpLI9=;+OkuaMy199BC9iKRVwhdJf1DUB1)cPKj}NTx`^{HT2*hq(@y&_6}baP zL(GaC$Zv!H{HKKGz4-Gmf#IP>RXekV3x5 zj7-qkY^aaI=MXVN?~`9enBdxy)FR`TLAQvp8tJ?o5ozrU-0g!Bo;laWI@FzRH^3(i zSc8eaSa3+*9euPg@nMYJizQUHHjq2mC8b3l7LezSZ$CS8#%*8~sHmmspg3gBF{6 z=;xb%3}9n`sTl;kr>~sVP5?42B6Xw02u?@-#o>b2Ash8MojoKkmi~--mrj!e@cb8> z!|pdCL#2=f`BIMlWW`-GV^Kg6I3Uwb3<`*U2W$E;U(#b0*mP|(7DV2dIrJ7~+nJM2 zi{a*E^@SCBp@n6;-0Ft+!H*Jo3wzl3t&1d2SZ>4jfV@|+K2a)FKGudyPBMZvBRxr`oQ3QYkW5LqCn|{ z?xbyVW488(ZTnx{Dkz1RU6cL@;icYpLWnMMSIX7P&hEb{;umw23MsvWp&Y17JWVpG zmp&%JOQyyI71mSCS5-7F-T`K2d_vn#3X+s)*l8)0PG zGq=|Q!E1;>0_IU(1d|0jvqj!a+oXZ25N}ooY&I+vE&Q|-LOd)G;sc^;rX*TtRq6KW7t@xa98y!?@qg1hna`VT0pevPJ^($ju^)%Fc+!1HS`Iqfe<_AN{(`Zy_vy7$u z`DnIroJg%0YEfaUL!DXV`~wv)`(uTs?J6P^2>zNjUQ1|W+p)A`iJW3HOlx| z?y~B}4C7LT?AsHW@>enoXR73NtKb~WqdtEn#c0$J03WM-ZqWNwuZtbY;nu{p# zzc8)`!g~{Lpum6z&S^~pz+q&F?4}3YcwHbB(I~oCoZ=p$(SiXMp`z&Psp;YT&OQbv z?nb(#vxrgvFW)1z^+s8H<;GG7)vaPjZcs+?u+h@9K>!?I_Q}(z1>IMFQ-sM;*ZuB>D{#&s|00KO5UC)(+av;L;`5&R(TIY9EB0`TARUH{K#r`12Ybh-(-krfRo+)rSdM698~N*^m3>kN zYJSoV@q^4?1TZ!n`1_zQ4*PaTRK}u!G@cDTG})`^(l-ZR$z7VK?%QDdamLXUYasox z7ewV}`}!pEteLVOr%&~H34^DvTjV&wE8JaPT37g_&4rq-a5QmNXb&os`H2O3LFV8i zcnKswB6H%Uj^#2#+Zs~SsGhO86NiP&^rW}G1F#(nZfoTTe_k9p2~E2B)&HTdAFx6Tp(dEB~L0{Al^`nr8|Sdrx?{Z-2OXjOZ0Sw(m&C; z45~a7S=L$4jd`;I$4r1jwc7#TGGd>pe<(rV{0GXq>l+OXNaYXtCJRQ&%ofPX{wp|FCM--E*>6vWtf+8rL z5SylwI~k!%PV7(46{}`rH7v>(AL!2Y?zg|v(~!CHk-bqutQZlwoc`EZ!zMMU5w$~Z}S$y-b*2>WL8$PV+%ek+(2T*Qvu+ybr3e@T(GAnDi3+Wl#5Bc^OIzk3o-CGW+p^xK`={EC&~tjV5d z@?6veqZoSsdW_r#S+rx7zjHABUi-hzHQBm#Gf|uaM;UkvwwFJ~Y5N?S3^|L35!tkG zf4`$0s~XM76|ux|3a1H@ud8sO*>X@Ox1|O&v(XLwBqMFjzOM7p#zaT=kNUVvs{A&80Fpy9@CQv=B{A(__zH`-`zbbER|#9Tig%EwTKFm%u)E&{Pvb&G?`EYesKf>a=^e;PY36KEyr( z^kNr5?vYd1m*?}?IwtnOy5N)V_x7Z9(IG}Qf%rmcwc}~K(SG)L=pFV`$BQFnyecLD z0Eh;nD@VUJ|Bz8NNC#Px5DbKb1*JTM2!CkP{&|zvdQ=Q}1jPQ{@8~n~KBznCxZiEq zp=dpTb|V71N`F3`W5C3$GmQVozpspb2dx-FmmL(hE5CEw6kdY8qbJst~ zu(Z(yg9azPuFd#*eLnR2BuGY3~jhSjg)D7?}C~9sGa7{5yO`hcseCQ2)+9A^dBDiT|~j zPXF5ft^yGG|DBWX{A>U3)&Kjq|6TpRHw8q0{MY@+9F;9&<*#39R&U2!>k}BQIchjK zuTi2RuaQwuRG|a>4V1BSJN*n>IxEeM1U?dQDqLUPxR@|~O!@o#^z@^m0_Ev(UTJ)I zSmtSP&{xdT(z4F&Tz^C_UG9F>i!8(5HXlRu#X!5!S9q?hC||VWQh+F7tV1?>s3u2mTeCB#5NfoW~c5-59FKnDVzkXDk zE7YFZteTiK`z&Is8+-J52%*`Bb&$H3O#r0V*~Ly593Mg!^D+tLio@L3zBtpEt|^P4#w0MOO2eEuMZdDXAAsC8eaS#8A0{!2Po zO&y1VC6)u50@r<-@5Q$>{LkJ@B$sGdLHQofmM|yG>nq;x-@mozD-G7;QxoUM(A#Z2 zJzLzYtZKr@(hQ1p!u}bGG%`H>-w)`zGcU!QoSg6|HL-hQ%03O88pCX;{M&{_@RGN5 z>uyiqtMI|LsHGO?YHcrmch<@MjPV@NwRTH~2HlcsU zB<5#uZV*VBl{q~8SXNV`g53Q5Adjvu+u^5|2uWta-@lApA|fntBMT9ud9|~%Y6SGe z!^6W@1X@&?=1lr+O##O0K3{s*!wL(RS@aJChJ4=oPL(d)q7PequXP3fJ;C3SF#e#* zL8)4hR9QVlQk}a0k&cRluN6c{MwB}+@YTvvM2=}lrN~D_9lbV8vu#FYhE7m04R@cp zpsmfDz?+$K0Y)YOTU}Yz9lf2LA6r}b+fP3Y1Hbo0X+G}_HRJ8Iv9d8̂l{EE@V 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 UV0TLl2>6keRQg=`$t39i0cd-D5dZ)H diff --git a/img/spacer.gif b/img/spacer.gif new file mode 100644 index 0000000000000000000000000000000000000000..4bcc753a12e9854923af4b9b5b9a4b76f1bc53a6 GIT binary patch literal 42 ocmZ?wbhEHbWMp7uXkY+=|Ns9h{$ybUF?B!$NXCJQ(S^Yp0J?7nHvj+t literal 0 HcmV?d00001 diff --git a/img/twitter-card.png b/img/twitter-card.png new file mode 100644 index 0000000000000000000000000000000000000000..b828c1a9d11250f1fade78ddfb6f9d86327d0ae4 GIT binary patch literal 72287 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 tToIKn*P3(T!|(a5xfClzFR<5u{T~",a,""].join(""),k.id=h,m.innerHTML+=f,m.appendChild(k),l||(m.style.background="",g.appendChild(m)),i=c(k,a),l?k.parentNode.removeChild(k):m.parentNode.removeChild(m),!!i},z=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},A=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=F(e[d],"function"),F(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),B={}.hasOwnProperty,C;!F(B,"undefined")&&!F(B.call,"undefined")?C=function(a,b){return B.call(a,b)}:C=function(a,b){return b in a&&F(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e});var K=function(c,d){var f=c.join(""),g=d.length;y(f,function(c,d){var f=b.styleSheets[b.styleSheets.length-1],h=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"",i=c.childNodes,j={};while(g--)j[i[g].id]=i[g];e.touch="ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch||(j.touch&&j.touch.offsetTop)===9,e.csstransforms3d=(j.csstransforms3d&&j.csstransforms3d.offsetLeft)===9&&j.csstransforms3d.offsetHeight===3,e.generatedcontent=(j.generatedcontent&&j.generatedcontent.offsetHeight)>=1,e.fontface=/src/i.test(h)&&h.indexOf(d.split(" ")[0])===0},g,d)}(['@font-face {font-family:"font";src:url("https://")}',["@media (",n.join("touch-enabled),("),h,")","{#touch{top:9px;position:absolute}}"].join(""),["@media (",n.join("transform-3d),("),h,")","{#csstransforms3d{left:9px;position:absolute;height:3px;}}"].join(""),['#generatedcontent:after{content:"',l,'";visibility:hidden}'].join("")],["fontface","touch","csstransforms3d","generatedcontent"]);s.flexbox=function(){return J("flexOrder")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!F(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){try{var d=b.createElement("canvas"),e;e=!(!a.WebGLRenderingContext||!d.getContext("experimental-webgl")&&!d.getContext("webgl")),d=c}catch(f){e=!1}return e},s.touch=function(){return e.touch},s.geolocation=function(){return!!navigator.geolocation},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!J("indexedDB",a)},s.hashchange=function(){return A("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){for(var b=-1,c=p.length;++b",d.insertBefore(c.lastChild,d.firstChild)}function h(){var a=k.elements;return typeof a=="string"?a.split(" "):a}function i(a){var b={},c=a.createElement,e=a.createDocumentFragment,f=e();a.createElement=function(a){var e=(b[a]||(b[a]=c(a))).cloneNode();return k.shivMethods&&e.canHaveChildren&&!d.test(a)?f.appendChild(e):e},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+h().join().replace(/\w+/g,function(a){return b[a]=c(a),f.createElement(a),'c("'+a+'")'})+");return n}")(k,f)}function j(a){var b;return a.documentShived?a:(k.shivCSS&&!e&&(b=!!g(a,"article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio{display:none}canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden]{display:none}audio[controls]{display:inline-block;*display:inline;*zoom:1}mark{background:#FF0;color:#000}")),f||(b=!i(a)),b&&(a.documentShived=b),a)}var c=a.html5||{},d=/^<|^(?:button|form|map|select|textarea)$/i,e,f;(function(){var a=b.createElement("a");a.innerHTML="",e="hidden"in a,f=a.childNodes.length==1||function(){try{b.createElement("a")}catch(a){return!0}var c=b.createDocumentFragment();return typeof c.cloneNode=="undefined"||typeof c.createDocumentFragment=="undefined"||typeof c.createElement=="undefined"}()})();var k={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:j};a.html5=k,j(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.mq=z,e.hasEvent=A,e.testProp=function(a){return H([a])},e.testAllProps=J,e.testStyles=y,e.prefixed=function(a,b,c){return b?J(a,b,c):J(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return o.call(a)=="[object Function]"}function e(a){return typeof a=="string"}function f(){}function g(a){return!a||a=="loaded"||a=="complete"||a=="uninitialized"}function h(){var a=p.shift();q=1,a?a.t?m(function(){(a.t=="c"?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){a!="img"&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l={},o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};y[c]===1&&(r=1,y[c]=[],l=b.createElement(a)),a=="object"?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),a!="img"&&(r||y[c]===2?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i(b=="c"?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),p.length==1&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&o.call(a.opera)=="[object Opera]",l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return o.call(a)=="[object Array]"},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f Date: Fri, 28 Jun 2019 23:23:12 +0900 Subject: [PATCH 02/13] =?UTF-8?q?=E6=A7=8B=E6=88=90=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=E5=88=86(20190628)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- help/index.md | 36 -------- pages/404.html | 37 ++++++++ pages/index.html | 90 +++++++++++++++++++ pages/jekyllconf.md | 25 ++++++ news/index.html => pages/news.html | 0 pages/philosophy.md | 51 +++++++++++ pages/redirects/github.html | 4 + pages/redirects/issues.html | 4 + .../index.html => pages/releases.html | 0 pages/resources.md | 88 ++++++++++++++++++ pages/showcase.html | 46 ++++++++++ pages/team.md | 23 +++++ 12 files changed, 368 insertions(+), 36 deletions(-) delete mode 100644 help/index.md create mode 100644 pages/404.html create mode 100644 pages/index.html create mode 100644 pages/jekyllconf.md rename news/index.html => pages/news.html (100%) create mode 100644 pages/philosophy.md create mode 100644 pages/redirects/github.html create mode 100644 pages/redirects/issues.html rename news/releases/index.html => pages/releases.html (100%) create mode 100644 pages/resources.md create mode 100644 pages/showcase.html create mode 100644 pages/team.md diff --git a/help/index.md b/help/index.md deleted file mode 100644 index 5ce0846..0000000 --- a/help/index.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -layout: page -title: Getting Help ---- - -Need help with Jekyll? Try these resources. - -### [Google](https://google.com) - -Add **jekyll** to almost any query, and you'll find just what you need. - -### [Jekyll Talk](https://talk.jekyllrb.com/) - -Jekyll Talk is our official Discourse forum. Here, users and contributors -can ask questions and discuss all aspects of Jekyll. - -### [Jekyll on StackOverflow](http://stackoverflow.com/questions/tagged/jekyll) - -StackOverflow is a staple of any developer's diet. Check out the Jekyll tag -on StackOverflow for an answer to your question. Not there? Ask a new -question! - -### [Jekyll IRC Channel](irc:irc.freenode.net/jekyll) - -Get live support at **#jekyll** on **irc.freenode.net**, the official -Jekyll IRC channel. - -### [jekyll/jekyll](https://github.com/jekyll/jekyll/issues) - -Search through the issues on the main Jekyll development. Think you've -found a bug? File a new issue. - -### [@jekyllrb on Twitter](https://twitter.com/jekyllrb) - -The official Jekyll Twitter account. It's not checked often, so try the -above first. diff --git a/pages/404.html b/pages/404.html new file mode 100644 index 0000000..9edc873 --- /dev/null +++ b/pages/404.html @@ -0,0 +1,37 @@ +--- +layout: error +permalink: /404.html +sitemap: false +--- + +

+
+
+

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

+
+
+
+ +
+
+
+

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

+ +
+
+
diff --git a/pages/index.html b/pages/index.html new file mode 100644 index 0000000..fba9162 --- /dev/null +++ b/pages/index.html @@ -0,0 +1,90 @@ +--- +layout: default +overview: true +permalink: / +--- + +
+
+
+

Transform your plain text into static websites and blogs.

+
+
+
+
+
+ + + +
+
+
+
+
+
+

Get up and running in seconds.

+
+
+

Quick-start Instructions

+
+

+ ~ + $ + gem install bundler jekyll +

+

+ ~ + $ + jekyll new my-awesome-site +

+

+ ~ + $ + cd my-awesome-site +

+

+ ~/my-awesome-site + $ + bundle exec jekyll serve +

+

+ # => Now browse to http://localhost:4000 +

+
+
+
+
+
+
+
+
+
+
+ Free Jekyll hosting on GitHub Pages +
+

Free hosting with GitHub Pages

+

Sick of dealing with hosting companies? GitHub Pages are powered by Jekyll, so you can easily deploy your site using GitHub for free—custom domain name and all.

+ Learn more about GitHub Pages → +
+
+
+
+
+
+
diff --git a/pages/jekyllconf.md b/pages/jekyllconf.md new file mode 100644 index 0000000..9874c29 --- /dev/null +++ b/pages/jekyllconf.md @@ -0,0 +1,25 @@ +--- +layout: page +title: JekyllConf +permalink: /jekyllconf/ +--- + +[JekyllConf](http://jekyllconf.com) is a free, online conference for all things Jekyll hosted by [CloudCannon](http://cloudcannon.com). Each year members of the Jekyll community speak about interesting use cases, tricks they've learned, or meta Jekyll topics. + +## Featured + +{% assign random = site.time | date: "%s%N" | modulo: site.data.jekyllconf-talks.size %} +{% assign featured = site.data.jekyllconf-talks[random] %} + +{{ featured.topic }} - [{{ featured.speaker }}](https://twitter.com/{{ featured.twitter_handle }}) +
+ +
+ +{% assign talks = site.data.jekyllconf-talks | group_by: 'year' %} +{% for year in talks reversed %} +## {{ year.name }} + {% for talk in year.items %} + * [{{ talk.topic }}](https://youtu.be/{{ talk.youtube_id }}) - [{{ talk.speaker }}](https://twitter.com/{{ talk.twitter_handle }}) + {% endfor %} +{% endfor %} diff --git a/news/index.html b/pages/news.html similarity index 100% rename from news/index.html rename to pages/news.html diff --git a/pages/philosophy.md b/pages/philosophy.md new file mode 100644 index 0000000..e6c0839 --- /dev/null +++ b/pages/philosophy.md @@ -0,0 +1,51 @@ +--- +title: Philosophy +permalink: /philosophy/ +--- + +Jekyll offers a unique philosophy when approaching the problem of static +site generation. This core philosophy drives development and product +decisions. When a contributor, maintainer, or user asks herself what Jekyll +is about, the following principles should come to mind: + +### 1. No Magic + +Jekyll is not magic. A user should be able to understand the underlying +processes that make up the Jekyll build without much reading. It should +do only what you ask it to and nothing more. When a user takes a certain +action, the outcome should be easily understandable and focused. + +### 2. It "Just Works" + +The out-of-the-box experience should be that it "just works." Run +`gem install jekyll` and it should build any Jekyll site that it's given. +Features like auto-regeneration and settings like the markdown renderer +should represent sane defaults that work perfectly for the vast majority of +cases. The burden of initial configuration should not be placed on the user. + +### 3. Content is King + +Why is Jekyll so loved by content creators? It focuses on content first and +foremost, making the process of publishing content on the Web easy. Users +should find the management of their content enjoyable and simple. + +### 4. Stability + +If a user's site builds today, it should build tomorrow. +Backwards-compatibility should be strongly preferred over breaking changes. +Breaking changes should be made to support a strong practical goal, and +breaking changes should never be made to drive forward "purity" of the +codebase, or other changes purely to make the maintainers' lives easier. +Breaking changes provide a significant amount of friction between upgrades +and reduce the confidence of users in this software, and should thus be +avoided unless absolutely necessary. +Upon breaking changes, provide a clear path for users to upgrade. + +### 5. Small & Extensible + +The core of Jekyll should be simple and small, and extensibility should be +a first-class feature to provide added functionality from community +contributors. The core should be kept to features used by at least 90% of +users–everything else should be provided as a plugin. New features should +be shipped as plugins and focus should be put on creating extensible core +API's to support rich plugins. diff --git a/pages/redirects/github.html b/pages/redirects/github.html new file mode 100644 index 0000000..6042d0d --- /dev/null +++ b/pages/redirects/github.html @@ -0,0 +1,4 @@ +--- +permalink: /github.html +redirect_to: https://github.com/jekyll/jekyll +--- diff --git a/pages/redirects/issues.html b/pages/redirects/issues.html new file mode 100644 index 0000000..6776051 --- /dev/null +++ b/pages/redirects/issues.html @@ -0,0 +1,4 @@ +--- +permalink: /issues.html +redirect_to: https://github.com/jekyll/jekyll/issues +--- diff --git a/news/releases/index.html b/pages/releases.html similarity index 100% rename from news/releases/index.html rename to pages/releases.html diff --git a/pages/resources.md b/pages/resources.md new file mode 100644 index 0000000..2626970 --- /dev/null +++ b/pages/resources.md @@ -0,0 +1,88 @@ +--- +layout: page +title: Resources +permalink: /resources/ +redirect_from: + - /docs/resources/ +--- +Jekyll's growing community produces wide variety of themes, plugins, tutorials +and other resources that can be helpful. Below is a collection of links to +some of the most popular Jekyll resources. + +## Themes +- [jekyllthemes.org](http://jekyllthemes.org/) +- [jekyllthemes.io](https://jekyllthemes.io/) + +## Plugins +- [jekyll-plugin topic on GitHub](https://github.com/topics/jekyll-plugin) +- [Planet Jekyll](https://github.com/planetjekyll/awesome-jekyll-plugins) + +## Editors + +- [jekyll-atom](https://atom.io/packages/jekyll): A collection of snippets and tools for Jekyll in Atom +- [markdown-writer](https://atom.io/packages/markdown-writer): An Atom package for Jekyll. It can create new posts/drafts, manage tags/categories, insert link/images and add many useful key mappings. +- [sublime-jekyll](https://github.com/23maverick23/sublime-jekyll): A Sublime Text package for Jekyll static sites. This package should help creating Jekyll sites and posts easier by providing access to key template tags and filters, as well as common completions and a current date/datetime command (for dating posts). You can install this package manually via GitHub, or via [Package Control](https://packagecontrol.io/packages/Jekyll). +- [vim-jekyll](https://github.com/parkr/vim-jekyll): A vim plugin to generate new posts and run `jekyll build` all without leaving vim. +- [WordPress2Jekyll](https://wordpress.org/plugins/wp2jekyll/): A WordPress plugin that allows you to use WordPress as your editor and (automatically) export content in to Jekyll. WordPress2Jekyll attempts to marry these two systems together in order to make a site that can be easily managed from all devices. + +## Useful Guides + +- [Official tutorials](/tutorials/home/) +- [CloudCannon Academy](https://learn.cloudcannon.com/) is a set of resources created by [CloudCannon](https://cloudcannon.com/) to help folks get up and running with Jekyll. They cover all skill levels, and even include some great video tutorials. +- [Jekyll Cheatsheet](https://learn.cloudcannon.com/jekyll-cheat-sheet/) is a single-page resource for Jekyll filters, variables, and the like. +- ["Creating and Hosting a Personal Site on GitHub"](http://jmcglone.com/guides/github-pages/) +- ['Build A Blog With Jekyll And GitHub Pages' on Smashing Magazine](https://www.smashingmagazine.com/2014/08/01/build-blog-jekyll-github-pages/) +- Publishing to GitHub Pages? [Check out our documentation page for just that purpose](/docs/github-pages/). +- [Blogging with Git, Emacs and Jekyll](https://metajack.im/2009/01/23/blogging-with-git-emacs-and-jekyll/) +- [Tips for working with GitHub Pages Integration](https://gist.github.com/jedschneider/2890453) + +## Integrations + +Use a SaaS service as a backend for functionality on your Jekyll site + +### Comments + - [Staticman](https://staticman.net): Add user-generated content to a Jekyll site (free and open source) + - [Talkyard](https://www.talkyard.io/blog-comments): Embedded comments for Jekyll and others (free and open source, or hosted serverless) + +### Content Management + - [CloudCannon](https://cloudcannon.com/): The Cloud CMS for Jekyll + - [Contentful](https://github.com/contentful/jekyll-contentful-data-import) Content infrastructure for digital teams + - [Forestry.io](https://forestry.io/): A static CMS that commits + - [Netlify CMS](https://www.netlifycms.org/): Open source content management for your Git workflow + - [Siteleaf](https://www.siteleaf.com/): Built for developers, Loved by everyone + - [Statictastic](https://www.statictastic.com/): Static site hosting, publishing and content management for teams + +### E-commerce + - [Snipcart](https://snipcart.com/blog/static-site-e-commerce-part-2-integrating-snipcart-with-jekyll): Add a shopping cart to a Jekyll site + +### Forms + - [Getform](https://getform.io) + - [99Inbound](https://www.99inbound.com) + - [Formingo](https://www.formingo.co/guides/jekyll?utm_source=github&utm_medium=jekyll-docs&utm_campaign=Jekyll%20Documentation) + - [FormKeep](https://formkeep.com/guides/contact-form-jekyll?utm_source=github&utm_medium=jekyll-docs&utm_campaign=contact-form-jekyll) + - [Formspark](https://formspark.io/) + - [Formspree (open source)](https://formspree.io/) + - [formX](https://formx.stream) + - [Simple Form](https://getsimpleform.com/) + +### Search + - [Algolia](https://blog.algolia.com/instant-search-blog-documentation-jekyll-plugin/): Add a powerful instant search to your Jekyll site + - [CloudSh](https://cloudsh.com/generators/How-to-setup-search-on-Jekyll/): Website search with a few lines of JavaScript + +## Other commentary + +- [How I'm using Jekyll in 2016](https://mademistakes.com/articles/using-jekyll-2016/) +- [Talkyard comments instructions for Jekyll](https://jekyll-demo.talkyard.io/2018/01/09/installation-instructions.html) +- [Static Comments with Jekyll & Staticman](https://mademistakes.com/articles/improving-jekyll-static-comments/) +- [Adding Ajax pagination to Jekyll](https://eduardoboucas.com/blog/2014/11/05/adding-ajax-pagination-to-jekyll.html) +- ['My Jekyll Fork', by Mike West](https://mikewest.org/2009/11/my-jekyll-fork) + + > "Jekyll is a well-architected throwback to a time before WordPress, when men were men, and HTML was static. I like the ideas it espouses, and have made a few improvements to it's core. Here, I'll point out some highlights of my fork in the hopes that they see usage beyond this site." + +- ['About this Website', by Carter Allen](http://cartera.me/2010/08/12/about-this-website/) + + > "Jekyll is everything that I ever wanted in a blogging engine. Really. It isn't perfect, but what's excellent about it is that if there's something wrong, I know exactly how it works and how to fix it. It runs on the your machine only, and is essentially an added"build" step between you and the browser. I coded this entire site in TextMate using standard HTML5 and CSS3, and then at the end I added just a few little variables to the markup. Presto-chango, my site is built and I am at peace with the world." + +- A way to [extend Jekyll](https://github.com/rfelix/jekyll_ext) without forking and modifying the Jekyll gem codebase and some [portable Jekyll extensions](https://wiki.github.com/rfelix/jekyll_ext/extensions) that can be reused and shared. +- [Using your Rails layouts in Jekyll](http://numbers.brighterplanet.com/2010/08/09/sharing-rails-views-with-jekyll) +- [Jekpack](https://github.com/yfxie/jekpack/) an integration of Jekyll and Webpack to make them work together. diff --git a/pages/showcase.html b/pages/showcase.html new file mode 100644 index 0000000..58d52c0 --- /dev/null +++ b/pages/showcase.html @@ -0,0 +1,46 @@ +--- +layout: page +title: Showcase +permalink: /showcase/ +redirect_from: + - /docs/sites/ +--- + +

Jekyll is used for all kinds of usecases. Here's some of our favorites:

+ + + + + + diff --git a/pages/team.md b/pages/team.md new file mode 100644 index 0000000..60a3b85 --- /dev/null +++ b/pages/team.md @@ -0,0 +1,23 @@ +--- +layout: page +title: The Jekyll Team +permalink: /team/ +--- + +## Core Team + +_The Jekyll Core Team's responsibility is to ensure the development and +community around the Jekyll ecosystem thrive._ + +* Ashwin (@ashmaroli) +* Frank (@DirtyF) +* Matt (@mattr-) + +## Emeritus Core Team Members + +_Emeritus Core Team Members were once members of Jekyll's Core Team._ + +* Alfred (@alfredxing) +* Nick (@qrush) +* Parker (@parkr) +* Tom (@mojombo) From 4ead6b29d86de8dd562568cad4003ab46f98f521 Mon Sep 17 00:00:00 2001 From: SetoAira Date: Sat, 29 Jun 2019 11:26:10 +0900 Subject: [PATCH 03/13] master(bc54047) --- _config.yml | 76 +++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 59 insertions(+), 17 deletions(-) diff --git a/_config.yml b/_config.yml index 8a61ea4..532aa92 100644 --- a/_config.yml +++ b/_config.yml @@ -1,25 +1,67 @@ -markdown: kramdown -highlighter: pygments -permalink: /news/:year/:month/:day/:title/ -excerpt_separator: "" - -gauges_id: 503c5af6613f5d0f19000027 -google_analytics_id: UA-50755011-1 - +--- +version: 3.8.5 +min_ruby_version: 2.4.0 +name: Jekyll • シンプルで、ブログのような、静的サイト +# name: Jekyll • Simple, blog-aware, static sites +description: プレーンテキストを静的サイトやブログに変えましょう +# description: Transform your plain text into static websites and blogs +url: http://jekyllrb-ja.github.io +# url: https://jekyllrb.com repository: https://github.com/jekyll/jekyll -help_url: https://github.com/jekyll/jekyll-help +timezone: America/Los_Angeles +# twitter: +# username: jekyllrb +logo: "/img/logo-2x.png" +# google_analytics_id: UA-50755011-1 +# google_site_verification: onQcXpAvtHBrUI5LlroHNE_FP0b2qvFyPq7VZw36iEY collections: docs: + permalink: "/:collection/:path/" + output: true + posts: + permalink: "/news/:year/:month/:day/:title/" + output: true + tutorials: output: true -name: Jekyll • Simple, blog-aware, static sites -description: Transform your plain text into static websites and blogs -# url: http://jekyllrb.com +defaults: +- scope: + path: _docs + type: docs + values: + layout: docs +- scope: + path: _posts + type: posts + values: + layout: news_item +- scope: + path: "" + values: + image: "/img/jekyll-og.png" -gems: - - jekyll-feed +plugins: +- jekyll-avatar +- jekyll-feed +- jekyll-mentions +- jekyll-redirect-from +- jekyll-seo-tag +- jekyll-sitemap +- jemoji -# jekyllrb-ja -exclude: [vendor, diff] -url: http://jekyllrb-ja.github.io +feed: + categories: + - release + +sass: + style: compressed + +exclude: +- .gitignore +- .jekyll-cache +- CNAME +- icomoon-selection.json +- README.md +- diff +- vendor \ No newline at end of file From 1a8be6335cd3f74e85226c708f7df01dbc129977 Mon Sep 17 00:00:00 2001 From: SetoAira Date: Sat, 29 Jun 2019 11:37:22 +0900 Subject: [PATCH 04/13] =?UTF-8?q?master(f721386)=E3=81=BE=E3=81=A7?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _data/docs.yml | 47 ----- _data/docs_nav.yml | 15 +- _data/jekyll_filters.yml | 346 +++++++++++++++++++++++++++++++++---- _data/jekyll_variables.yml | 299 +++++++++++++++++++++++--------- 4 files changed, 534 insertions(+), 173 deletions(-) delete mode 100644 _data/docs.yml diff --git a/_data/docs.yml b/_data/docs.yml deleted file mode 100644 index bcdf352..0000000 --- a/_data/docs.yml +++ /dev/null @@ -1,47 +0,0 @@ -- title: Getting Started - docs: - - home - - quickstart - - installation - - usage - - structure - - configuration - -- title: Your Content - docs: - - frontmatter - - posts - - drafts - - pages - - static-files - - variables - - collections - - datafiles - - assets - - migrations - -- title: Customization - docs: - - templates - - permalinks - - pagination - - plugins - - extras - -- title: Deployment - docs: - - github-pages - - deployment-methods - - continuous-integration - -- title: Miscellaneous - docs: - - troubleshooting - - sites - - resources - - upgrading - -- title: Meta - docs: - - contributing - - history diff --git a/_data/docs_nav.yml b/_data/docs_nav.yml index 8aac2be..cf75f2d 100644 --- a/_data/docs_nav.yml +++ b/_data/docs_nav.yml @@ -1,15 +1,18 @@ -- title: Getting Started +# - title: Getting Started +- title: 入門 docs: - link: /docs/ - link: /docs/ruby-101/ - link: /docs/installation/ - link: /docs/community/ - link: /docs/step-by-step/01-setup/ -- title: Build +# - title: Build +- title: ビルド docs: - link: /docs/usage/ - link: /docs/configuration/ -- title: Content +# - title: Content +- title: コンテンツ docs: - link: /docs/pages/ - link: /docs/posts/ @@ -18,7 +21,8 @@ - link: /docs/datafiles/ - link: /docs/assets/ - link: /docs/static-files/ -- title: Site Structure +# - title: Site Structure +- title: サイトの構成 docs: - link: /docs/structure/ - link: /docs/liquid/ @@ -28,7 +32,8 @@ - link: /docs/permalinks/ - link: /docs/themes/ - link: /docs/pagination/ -- title: Guides +# - title: Guides +- title: ガイド docs: - link: /docs/plugins/ - link: /docs/migrations/ diff --git a/_data/jekyll_filters.yml b/_data/jekyll_filters.yml index 27089e7..f809183 100644 --- a/_data/jekyll_filters.yml +++ b/_data/jekyll_filters.yml @@ -16,10 +16,290 @@ # backslashes to escape quotes. # --------------------------------------------------------------------------------------- # +# - name: Relative URL +# description: >- +# Prepend the baseurl value to the input. Useful if +# your site is hosted at a subpath rather than the root of the domain. +# examples: +# - input: '{{ "/assets/style.css" | relative_url }}' +# output: '/my-baseurl/assets/style.css' +# +# # +# +# - name: Absolute URL +# description: Prepend the url and baseurl value to the input. +# 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: 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 %XX replacements. CGI escape normally +# replaces a space with a plus + 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 %20. +# Reserved characters +# 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. +# examples: +# - input: '{{ page.content | number_of_words }}' +# output: 1337 +# +# # +# +# - 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 “smart quotes.”' +# 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. property name +# 2. nils order (first or last). +# 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 NON-DESTRUCTIVE, 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: + - name: Relative URL description: >- - Prepend the baseurl value to the input. Useful if - your site is hosted at a subpath rather than the root of the domain. + 入力値の前にbaseurlを追加する。サイトがrootドメインの場合よりサブパスでホストされている場合に便利です。 examples: - input: '{{ "/assets/style.css" | relative_url }}' output: '/my-baseurl/assets/style.css' @@ -27,7 +307,7 @@ # - name: Absolute URL - description: Prepend the url and baseurl value to the input. + description: 入力値の前にurlbaseurlを追加する。 examples: - input: '{{ "/assets/style.css" | absolute_url }}' output: 'http://example.com/my-baseurl/assets/style.css' @@ -35,7 +315,7 @@ # - name: Date to XML Schema - description: Convert a Date into XML Schema (ISO 8601) format. + description: DateをXML Schema (ISO 8601)フォーマットに変換する。 examples: - input: '{{ site.time | date_to_xmlschema }}' output: '2008-11-07T13:07:54-08:00' @@ -43,7 +323,7 @@ # - name: Date to RFC-822 Format - description: Convert a Date into the RFC-822 format used for RSS feeds. + description: DateをRSSフィードで使うthe RFC-822フォーマットに変換する。 examples: - input: '{{ site.time | date_to_rfc822 }}' output: 'Mon, 07 Nov 2008 13:07:54 -0800' @@ -51,7 +331,7 @@ # - name: Date to String - description: Convert a date to short format. + description: dateをshortフォーマットに変換する。 examples: - input: '{{ site.time | date_to_string }}' output: '07 Nov 2008' @@ -68,7 +348,7 @@ # - name: Date to Long String - description: Format a date to long format. + description: dateをlongフォーマットにする。 examples: - input: '{{ site.time | date_to_long_string }}' output: '07 November 2008' @@ -85,7 +365,7 @@ # - name: Where - description: Select all the objects in an array where the key has the given value. + description: キーで指定した値を持つ配列内のオブジェクトを全て選択する。 examples: - input: '{{ site.members | where:"graduation_year","2014" }}' output: @@ -93,7 +373,7 @@ # - name: Where Expression - description: Select all the objects in an array where the expression is true. + description: 式がtrueになる配列内の全てのオブジェクトを選択する。 version_badge: 3.2.0 examples: - input: |- @@ -112,7 +392,7 @@ # - name: Group By - description: Group an array's items by a given property. + description: 指定したプロパティで配列内のアイテムをグループ化する。 examples: - input: '{{ site.members | group_by:"graduation_year" }}' output: |- @@ -122,7 +402,7 @@ # - name: Group By Expression - description: Group an array's items using a Liquid expression. + description: Liquidの式を使用して、配列内のアイテムをグループ化する。 version_badge: 3.4.0 examples: - input: |- @@ -135,7 +415,7 @@ # - name: XML Escape - description: Escape some text for use in XML. + description: XMLで使用するためにテキストをエスケープする。 examples: - input: '{{ page.content | xml_escape }}' output: @@ -144,9 +424,7 @@ - name: CGI Escape description: >- - CGI escape a string for use in a URL. Replaces any special characters - with appropriate %XX replacements. CGI escape normally - replaces a space with a plus + sign. + CGI escapeはURLで使用する文字列をエスケープする。特殊文字を適切な%XXに置き換える。CGI escapeは通常、スペースをプラス+にする。 examples: - input: '{{ "foo, bar; baz?" | cgi_escape }}' output: 'foo%2C+bar%3B+baz%3F' @@ -155,10 +433,7 @@ - name: URI Escape description: >- - Percent encodes any special characters in a URI. - URI escape normally replaces a space with %20. - Reserved characters - will not be escaped. + URI内の特殊文字をパーセントエンコードする。URIエスケープは通常スペースを%20に置き換る。予約文字はエスケープされない。 examples: - input: '{{ "http://foo.com/?q=foo, \bar?" | uri_escape }}' output: 'http://foo.com/?q=foo,%20%5Cbar?' @@ -166,7 +441,7 @@ # - name: Number of Words - description: Count the number of words in some text. + description: テキストのワード数を数える。 examples: - input: '{{ page.content | number_of_words }}' output: 1337 @@ -175,8 +450,7 @@ - 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' @@ -186,7 +460,7 @@ # - name: Markdownify - description: Convert a Markdown-formatted string into HTML. + description: Markdown-formatted stringをHTMLに変換する。 examples: - input: '{{ page.excerpt | markdownify }}' output: @@ -194,7 +468,7 @@ # - name: Smartify - description: 'Convert "quotes" into “smart quotes.”' + description: '"quotes"を“smart quotes.”に変換する。' examples: - input: '{{ page.title | smartify }}' output: @@ -202,7 +476,7 @@ # - name: Converting Sass/SCSS - description: Convert a Sass- or SCSS-formatted string into CSS. + description: Sass-やSCSS-formatted stringをCSSに変換する。 examples: - input: '{{ some_sass | sassify }}' output: @@ -212,7 +486,7 @@ # - name: Slugify - description: Convert a string into a lowercase URL "slug". See below for options. + description: stringを小文字のURL "slug"に変換する。オプションは下記をご覧ください。 examples: - input: '{{ "The _config.yml file" | slugify }}' output: 'the-config-yml-file' @@ -226,7 +500,7 @@ # - name: Data To JSON - description: Convert Hash or Array to JSON. + description: HashやArrayをJSONに変換。 examples: - input: '{{ site.data.projects | jsonify }}' output: @@ -234,7 +508,7 @@ # - name: Normalize Whitespace - description: Replace any occurrence of whitespace with a single space. + description: すべての空白を単一の空白に置き換える。 examples: - input: '{{ "a \n b" | normalize_whitespace }}' output: @@ -243,9 +517,9 @@ - name: Sort description: >- - Sort an array. Optional arguments for hashes - 1. property name - 2. nils order (first or last). + 配列をソート。ハッシュのオプション引数 + 1. プロパティ名 + 2. nils order (firstlast). examples: - input: '{{ page.tags | sort }}' output: @@ -257,7 +531,7 @@ # - name: Sample - description: 'Pick a random value from an array. Optionally, pick multiple values.' + description: '配列からランダムに取得。オプションで複数を取得可能。 ' examples: - input: '{{ site.pages | sample }}' output: @@ -267,7 +541,7 @@ # - name: To Integer - description: Convert a string or boolean to integer. + description: stringやbooleanをintegerに変換。 examples: - input: '{{ some_var | to_integer }}' output: @@ -276,9 +550,7 @@ - name: Array Filters description: >- - Push, pop, shift, and unshift elements from an Array. - These are NON-DESTRUCTIVE, i.e. they do not mutate the array, - but rather make a copy and mutate that. + 配列のPush, pop, shift, and unshift属性。これらは破壊的ではありません。つまり、配列を変更するのではなく、コピーを作成してそれを変更します。 examples: - input: '{{ page.tags | push: "Spokane" }}' output: '["Seattle", "Tacoma", "Spokane"]' @@ -292,7 +564,7 @@ # - name: Inspect - description: Convert an object into its String representation for debugging. + description: デバッグのためにオブジェクトをそのStringに変換する。 examples: - input: '{{ some_var | inspect }}' output: diff --git a/_data/jekyll_variables.yml b/_data/jekyll_variables.yml index 4ee9bcf..41705ed 100644 --- a/_data/jekyll_variables.yml +++ b/_data/jekyll_variables.yml @@ -3,173 +3,304 @@ # name: : name of the variable # description: : content returned by the varialble +# global: +# - name: site +# description: >- +# Site wide information + configuration settings from _config.yml. +# See below for details. +# - name: page +# description: >- +# Page specific information + the front matter. +# Custom variables set via the front matter will be available here. See below for details. +# - name: layout +# description: >- +# Layout specific information + the front matter. +# 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 paginate configuration option is set, this variable becomes available +# for use. See Pagination for details. +# +# site: +# - name: site.time +# description: >- +# The current time (when you run the jekyll 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 jekyll command with the --lsi +# (latent semantic indexing) +# option. Also note GitHub Pages does not support the +# lsi option when generating sites. +# - name: site.static_files +# description: >- +# A list of all static files (i.e. +# files not processed by Jekyll's converters or the Liquid renderer). +# Each file has five properties: path, modified_time, +# name, basename and extname. +# - name: site.html_pages +# description: >- +# A subset of `site.pages` listing those which end in `.html`. +# - name: site.html_files +# description: >- +# A subset of `site.static_files` listing those which end in `.html`. +# - 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 _data +# 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 CATEGORY. +# - name: site.tags.TAG +# description: >- +# The list of all Posts with tag TAG. +# - name: site.url +# description: >- +# Contains the url of your site as it is configured in the _config.yml. +# For example, if you have url: http://mysite.com in your configuration file, +# then it will be accessible in Liquid as site.url. For the development +# environment there is an +# exception, if you are running jekyll serve in a development environment +# site.url will be set to the value of host, port, +# and SSL-related options. This defaults to url: http://localhost:4000. +# - name: "site.[CONFIGURATION_DATA]" +# description: >- +# All the variables set via the command line and your _config.yml are available +# through the site variable. For example, if you have foo: bar in +# your configuration file, then it will be accessible in Liquid as site.foo. +# Jekyll does not parse changes to _config.yml in +# watch 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 page 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. +# /2008/12/14/my-post.html +# - name: page.date +# description: >- +# The Date assigned to the Post. This can be overridden in a Post’s front matter by specifying +# a new date/time in the format YYYY-MM-DD HH:MM:SS (assuming UTC), or +# YYYY-MM-DD HH:MM:SS +/-TTTT (to specify a time zone using an offset from UTC. +# e.g. 2008-12-14 10:30:00 +0900). +# - name: page.id +# description: >- +# An identifier unique to a document in a Collection or a Post (useful in RSS feeds). e.g. +# /2008/12/14/my-post/my-collection/my-document +# - name: page.categories +# description: >- +# The list of categories to which this post belongs. Categories are derived from the directory +# structure above the _posts directory. For example, a post at +# /work/code/_posts/2008-12-24-closures.md would have this field set to +# ['work', 'code']. These can also be specified in the +# front matter. +# - name: page.collection +# description: >- +# The label of the collection to which this document belongs. e.g. posts for a post, or +# puppies for a document at path _puppies/rover.md. 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 +# front matter. +# - name: page.dir +# description: >- +# The path between the source directory and the file of the post or page, e.g. +# /pages/. +# This can be overridden by permalink in the front matter. +# - name: page.name +# description: >- +# The filename of the post or page, e.g. about.md +# - name: page.path +# description: >- +# The path to the raw post or page. Example usage: Linking back to the page or post’s source +# on GitHub. This can be overridden in the front matter. +# - name: page.next +# description: >- +# The next post relative to the position of the current post in site.posts. +# Returns nil for the last entry. +# - name: page.previous +# description: >- +# The previous post relative to the position of the current post in site.posts. +# Returns nil 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 nil if no previous page exists +# - name: paginator.previous_page_path +# description: >- +# The path to the previous page, or nil if no previous page exists +# - name: paginator.next_page +# description: >- +# The number of the next page, or nil if no subsequent page exists +# - name: paginator.next_page_path +# description: >- +# The path to the next page, or nil if no subsequent page exists + global: - name: site description: >- - Site wide information + configuration settings from _config.yml. - See below for details. + サイト全体の情報と_config.ymlの設定。詳細は下記をご覧ください。 - name: page description: >- - Page specific information + the front matter. - Custom variables set via the front matter will be available here. See below for details. + ページ固有の情報とfront matterの情報。ページのfront matterで設定したカスタム変数はこれで使用できます。詳細は下記をご覧ください。 - name: layout description: >- - Layout specific information + the front matter. - Custom variables set via front matter in layouts will be available here. + レイアウト固有の情報とfront matterの情報。レイアウトのfront matterで設定したカスタム変数はこれで使用できます。 - 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 paginate configuration option is set, this variable becomes available - for use. See Pagination for details. + paginateが設定されているときに、この変数は使用可能です。詳細はPaginationをご覧ください。 site: - name: site.time description: >- - The current time (when you run the jekyll command). + 現在の時刻。(jekyllを実行した時) - 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 jekyll command with the --lsi - (latent semantic indexing) - option. Also note GitHub Pages does not support the - lsi option when generating sites. + 処理を行っているページがポストの場合、最大10件の関連するポストのリストが含まれます。デフォルトでは、最新の10件のポストです。計算結果が遅いですが高品質のためには、jekyllコマンド実行時に--lsi + (latent semantic indexing)オプションを追加します。GitHub Pagesではサイト生成時のlsiオプションをサポートしていません。 - name: site.static_files description: >- - A list of all static files (i.e. - files not processed by Jekyll's converters or the Liquid renderer). - Each file has five properties: path, modified_time, - name, basename and extname. + 全ての静的ファイル (JekyllやLiquidの処理が行われないファイル)のリスト。各ファイルに5つのプロパティがあります:path, modified_time, + name, basename and extname。 - name: site.html_pages description: >- - A subset of `site.pages` listing those which end in `.html`. + `site.pages`のサブセットで`.html`で終わるファイルのリスト。 - name: site.html_files description: >- - A subset of `site.static_files` listing those which end in `.html`. + `site.static_files`のサブセットで`.html`で終わるファイルのリスト。 - 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 _data - directory. + _dataディレクトリのYAMLファイルからロードされたデータのリスト。 - 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 CATEGORY. + CATEGORYカテゴリのポストのリスト。 - name: site.tags.TAG description: >- - The list of all Posts with tag TAG. + TAGタグのポストのリスト。 - name: site.url description: >- - Contains the url of your site as it is configured in the _config.yml. - For example, if you have url: http://mysite.com in your configuration file, - then it will be accessible in Liquid as site.url. For the development - environment there is an - exception, if you are running jekyll serve in a development environment - site.url will be set to the value of host, port, - and SSL-related options. This defaults to url: http://localhost:4000. + _config.ymlで設定されているサイトのURLです。例えば、設定ファイルでurl: http://mysite.comとすると、site.urlとしてLiquidからアクセスできます。開発環境でjekyll serveを実行した場合は異なり、site.urlhostportとSSL関連オプションで設定されます。デフォルトでは、url: http://localhost:4000です。 - name: "site.[CONFIGURATION_DATA]" description: >- - All the variables set via the command line and your _config.yml are available - through the site variable. For example, if you have foo: bar in - your configuration file, then it will be accessible in Liquid as site.foo. - Jekyll does not parse changes to _config.yml in - watch mode, you must restart Jekyll to see changes to variables. + コマンドやインや_config.ymlsite変数として登録した値です。例えば、設定ファイルにfoo: barとあれば、Liquidからsite.fooでアクセスできます。Jekyllはwatchでは_config.ymlの変更を反映できません。変数を変更した場合はJekyllをリスタートしてください。 page: - name: page.content description: >- - The content of the Page, rendered or un-rendered depending upon - what Liquid is being processed and what page is. + ページのコンテンツ。Liquidの処理やどんなpageなのかに応じてレンダリングされたりされなかったりします。 - 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. - /2008/12/14/my-post.html + ドメインを含まないポストのURL。/2008/12/14/my-post.htmlの様にスラッシュから始まります。 - name: page.date description: >- - The Date assigned to the Post. This can be overridden in a Post’s front matter by specifying - a new date/time in the format YYYY-MM-DD HH:MM:SS (assuming UTC), or - YYYY-MM-DD HH:MM:SS +/-TTTT (to specify a time zone using an offset from UTC. - e.g. 2008-12-14 10:30:00 +0900). + ポストに割り当てられた日付。ポストのfront matterで日時を上書きできます。フォーマットはYYYY-MM-DD HH:MM:SS(UTC)かYYYY-MM-DD HH:MM:SS +/-TTTT(2008-12-14 10:30:00 +0900などUTCからの差で特定のタイムゾーンを指定) - name: page.id description: >- - An identifier unique to a document in a Collection or a Post (useful in RSS feeds). e.g. - /2008/12/14/my-post/my-collection/my-document + (RSSフィードに便利な)コレクションやポストのドキュメントのユニークID。/2008/12/14/my-post/my-collection/my-documentなど。 - name: page.categories description: >- - The list of categories to which this post belongs. Categories are derived from the directory - structure above the _posts directory. For example, a post at - /work/code/_posts/2008-12-24-closures.md would have this field set to - ['work', 'code']. These can also be specified in the - front matter. + ポストのカテゴリのリスト。カテゴリは_postsの所属するディレクトリで決まります。例えば、/work/code/_posts/2008-12-24-closures.mdのカテゴリは['work', 'code']です。front matterでも指定できます。 - name: page.collection description: >- - The label of the collection to which this document belongs. e.g. posts for a post, or - puppies for a document at path _puppies/rover.md. If not part of a - collection, an empty string is returned. + そのドキュメントが属するコレクションのラベル。ポストのpostsや、_puppies/rover.mdドキュメントのpuppies。コレクションで無ければ、空文字が返されます。 - name: page.tags description: >- - The list of tags to which this post belongs. These can be specified in the - front matter. + そのポストのタグのリスト。front matterで指定できます。 - name: page.dir description: >- - The path between the source directory and the file of the post or page, e.g. - /pages/. - This can be overridden by permalink in the front matter. + ソースディレクトリとポストやページの間のパス。/pages/など。front matterpermalinkで上書きできます。 - name: page.name description: >- - The filename of the post or page, e.g. about.md + ポストやページのファイル名。about.mdなど。 - name: page.path description: >- - The path to the raw post or page. Example usage: Linking back to the page or post’s source - on GitHub. This can be overridden in the front matter. + ページやポストの元ファイルへのパス。使用例:GitHubでページやポストのソースへバックリンクを行う。front matterで無効にできます。 - name: page.next description: >- - The next post relative to the position of the current post in site.posts. - Returns nil for the last entry. + site.postsでの現在のポストから相対的に次のポスト。最後の投稿の場合は、nilが返されます。 - name: page.previous description: >- - The previous post relative to the position of the current post in site.posts. - Returns nil for the first entry. + site.postsでの現在のポストから相対的に前のポスト。最初の投稿の場合は、nilが返されます。 paginator: - name: paginator.page - description: The number of the current page + description: 現在のページ番号 - name: paginator.per_page - description: Number of posts per page + description: 1ページに表示するポストの数 - name: paginator.posts - description: Posts available for the current page + description: 現在のページに表示されているポスト - name: paginator.total_posts - description: Total number of posts + description: ポストの総数 - name: paginator.total_pages - description: Total number of pages + description: ページの総数 - name: paginator.previous_page description: >- - The number of the previous page, or nil if no previous page exists + 前のページのページ番号。無い場合はnil。 - name: paginator.previous_page_path description: >- - The path to the previous page, or nil if no previous page exists + 前のページへのパス。無い場合はnil。 - name: paginator.next_page description: >- - The number of the next page, or nil if no subsequent page exists + 次のページのページ番号。無い場合はnil。 - name: paginator.next_page_path description: >- - The path to the next page, or nil if no subsequent page exists + 次のページへのパス。無い場合はnil。 From 39e85d52969abf7c444301526c18e3bbda53d590 Mon Sep 17 00:00:00 2001 From: SetoAira Date: Sat, 29 Jun 2019 11:48:29 +0900 Subject: [PATCH 05/13] =?UTF-8?q?master(079b723)=E3=81=BE=E3=81=A7?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _includes/docs_variables_table.html | 6 ++++-- _includes/footer.html | 6 ++++-- _includes/top.html | 1 + _layouts/step.html | 3 ++- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/_includes/docs_variables_table.html b/_includes/docs_variables_table.html index df5e9b1..738dbc4 100644 --- a/_includes/docs_variables_table.html +++ b/_includes/docs_variables_table.html @@ -2,8 +2,10 @@ - - + + + diff --git a/_includes/footer.html b/_includes/footer.html index 7e28b8e..973eb97 100644 --- a/_includes/footer.html +++ b/_includes/footer.html @@ -1,8 +1,10 @@

diff --git a/_includes/top.html b/_includes/top.html index a76e22a..0a9a9ab 100644 --- a/_includes/top.html +++ b/_includes/top.html @@ -12,6 +12,7 @@ + {% seo %}

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

{{ content }} {% include step-index.html %} From 53106dc96061fb2727a3cb03033b1cdcc9ab7164 Mon Sep 17 00:00:00 2001 From: SetoAira Date: Sat, 29 Jun 2019 11:52:01 +0900 Subject: [PATCH 06/13] =?UTF-8?q?master(378147d)=E3=81=BE=E3=81=A7?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _tutorials/cache_api.md | 87 ++ _tutorials/convert-existing-site-to-jekyll.md | 762 ++++++++++++++++++ _tutorials/custom-404-page.md | 107 +++ _tutorials/index.md | 67 ++ _tutorials/navigation.md | 729 +++++++++++++++++ _tutorials/orderofinterpretation.md | 231 ++++++ _tutorials/using-jekyll-with-bundler.md | 140 ++++ _tutorials/video-walkthroughs.md | 43 + 8 files changed, 2166 insertions(+) create mode 100644 _tutorials/cache_api.md create mode 100644 _tutorials/convert-existing-site-to-jekyll.md create mode 100644 _tutorials/custom-404-page.md create mode 100644 _tutorials/index.md create mode 100644 _tutorials/navigation.md create mode 100644 _tutorials/orderofinterpretation.md create mode 100644 _tutorials/using-jekyll-with-bundler.md create mode 100644 _tutorials/video-walkthroughs.md diff --git a/_tutorials/cache_api.md b/_tutorials/cache_api.md new file mode 100644 index 0000000..2690dc1 --- /dev/null +++ b/_tutorials/cache_api.md @@ -0,0 +1,87 @@ +--- +layout: tutorials +permalink: /tutorials/cache-api/ +title: Cache API +--- + +Jekyll includes a caching API, which is used both internally as well as exposed +for plugins, which can be used to cache the output of deterministic functions to +speed up site generation. This cache will be persistent across builds, but +cleared when Jekyll detects any changes to `_config.yml`. + +## Jekyll::Cache.new(name) → new_cache + +If there has already been a cache created with `name`, this will return a +reference to that existing Cache. Otherwise, create a new Cache called `name`. + +If this Cache will be used by a Gem-packaged plugin, `name` should either be the +name of the Gem, or prefixed with the name of the Gem followed by `::` (if a +plugin expects to use multiple Caches). If this Cache will be used internally by +Jekyll, `name` should be the name of the class that is using the Cache (ie: +`"Jekyll::Converters::Markdown"`). + +Cached objects are shared between all Caches created with the same `name`, but +are _not_ shared between Caches with different names. There can be an object +stored with key `1` in `Jekyll::Cache.new("a")` and an object stored with key +`1` in `Jekyll::Cache.new("b")` and these will not point to the same cached +object. This way, you do not need to ensure that keys are globally unique. + +## getset(key) {block} + +This is the most common way to utilize the Cache. + +`block` is a bit of code that takes a lot of time to compute, but always +generates the same output given a particular input (like converting Markdown to +HTML). `key` is a `String` (or an object with `to_s`) that uniquely identifies +the input to the function. + +If `key` already exists in the Cache, it will be returned and `block` will never +be executed. If `key` does not exist in the Cache, `block` will be executed and +the result will be added to the Cache and returned. + +```ruby +def cache + @@cache ||= Jekyll::Cache.new("ConvertMarkdown") +end + +def convert_markdown_to_html(markdown) + cache.getset(markdown) do + expensive_conversion_method(markdown) + end +end +``` + +In the above example, `expensive_conversion_method` will only be called once for +any given `markdown` input. If `convert_markdown_to_html` is called a second +time with the same input, the cached output will be returned. + +Because posts will frequently remain unchanged from one build to the next, this +is an effective way to avoid performing the same computations each time the site +is built. + +## clear + +This will clear all cached objects from a particular Cache. The Cache will be +empty, both in memory and on disk. + + +### The following methods will probably only be used in special circumstances + +## cache[key] → value + +Fetches `key` from Cache and returns its `value`. Raises if `key` does not exist +in Cache. + +## cache[key] = value + +Adds `value` to Cache under `key`. +Returns nothing. + +## key?(key) → true or false + +Returns `true` if `key` already exists in Cache. False otherwise. + +## delete(key) + +Removes `key` from Cache. +Returns nothing. diff --git a/_tutorials/convert-existing-site-to-jekyll.md b/_tutorials/convert-existing-site-to-jekyll.md new file mode 100644 index 0000000..a2c877c --- /dev/null +++ b/_tutorials/convert-existing-site-to-jekyll.md @@ -0,0 +1,762 @@ +--- +layout: tutorials +permalink: /tutorials/convert-site-to-jekyll/ +title: HTMLサイトをJekyllに変換 +--- + + +Jekyllサイトのテーマをお探しでしたら、既存のJekyllテーマにこだわる必要はありません。様々な静的HTMLファイルをJekyll Webサイトに変換するのは簡単です。 + + + +色々な意味で、現在の静的サイトは*既に*Jekyll Webサイトです。Jekyllを使うと、ファイルを処理するときに、サイトの一部(テンプレートへのページの挿入、ナビゲーション用のリストのレンダリング、フィードとサイトマップの生成など)を自動化できます。 + + + +HTMLサイトにJekyllテンプレートを適用する方法を理解すると、Jekyllテーマの様々なオプションであなたの世界が開けるでしょう。[オンラインで*Jekyll themes*を探す](https://duckduckgo.com/?q=Jekyll+themes){:target="_blank"}代わりに、サイトのための多種多様なHTMLテンプレートから選ぶことができます。HTMLテンプレートを必要に応じて素早くJekyll化し、Jekyllの出力用に構築しましょう。 + + + +Webサイトは洗練された機能とコントロールを持つことができますが、このチュートリアルでは単純化して説明します。 + + + +## Jekyll Webサイトとは + + +まずは、基礎から始めましょう。Jekyllサイトを基本レベルまで削除すると、何が起こっているのか分かりやすくなります。Jekyll gemをまだインストールしていないなら、[インストールしましょう]({{ "/docs/installation/" | relative_url }})。 + + + +3つのファイルからなる*基本のJekyllサイト*からスタートします。 + + + +``` +├── _config.yml +├── _layouts +│   └── default.html +└── index.md +``` + +`my_jekyll_site`かあなたの好きなフォルダにこれらの3つのファイルを手動で作成します。`default.html`は`_layouts`フォルダに入れます。 + + + +```sh +$ touch _config.yml index.md default.html +$ mkdir _layouts && mv default.html _layouts +``` + +好きなエディタを起動し、`default.html`と`index.md`、`_config.yml`ファイルに以下のような基本の内容を書き込みます。 + + + +**_config.yml** + +```yaml +name: My Jekyll Website +``` + +**_layouts/default.html** + +```html + + + + {% raw %}{{ content }}{% endraw %} + + +``` + +**index.md** + +```yaml +--- +title: My page +layout: default +--- + +# {% raw %}{{ page.title }}{% endraw %} + +Content is written in [Markdown](https://learnxinyminutes.com/docs/markdown/). Plain text format allows you to focus on your **content**. + + +``` + +`cd`で`my_jekyll_site`に移動し、serveでサイトをサーバーに構築します。 + + + +``` +cd my_jekyll_site +jekyll serve +``` + +Gemfileがあるのなら、代わりに`bundle exec jekyll serve`と入力して[Bundlerを使用]({{ "/docs/ruby-101/#bundler" | relative_url }})してください。 +{: .note .info} + + + +サイトをサーブしたら、`http://127.0.0.1:4000/`(`http://localhost:4000/`と同じ)でプレビューを見ることができます。サイトのファイルはデフォルトでは`_site`に構築されます。 + + + +これは最も基本的な機能レベルのJekyllのサイトです。以下が起こっていることです。 + + + + * `_config.yml`ファイルは、Jekyllがサイトを変換するときに使用する設定が書かれています。空の設定ファイルなら、Jekyllサイト構築時にデフォルトの値が使用されます。例えば、[Markdown](https://learnxinyminutes.com/docs/markdown/){:target="_blank"}をHTMLに変換するのに、Jekyllはその他の指定が無ければ、自動で[kramdown Markdown filter](https://rubygems.org/gems/kramdown/){:target="_blank"}を使用します。 + * Jekyllは[front matterタグ]({{ "/docs/front-matter/" | relative_url }})(`index.md`のような2行の`---`のセット)のあるファイルを探し、そのファイルで作業を行います(サイト変数の処理、[Liquid](https://shopify.github.io/liquid/){:target="_blank"}のレンダリング、MarkdownからHTMLへの変換)。 + * Jekyllは全てのページとポストをfront matterで指定されたレイアウト(`default`)の`{% raw %}{{ content }}{% endraw %}`変数に押し出します。 + * 処理の終わったファイルを`_site`ディレクトリに`.html`で書き出します。 + + + +Jekyllのファイル処理については[解釈の順番]({{ "/tutorials/orderofinterpretation/" | relative_url }})にも情報があります。 + + + +Jekyllサイトの働きの基本的な理解で、多くのHTMLテーマをJekyll用に変換することができます。以降のセクションでは、その手順を順を追って説明します。 + + + +## 1. デフォルトレイアウトのテンプレートを作る + + +HTMLテーマを見つけ、`default`レイアウトとして保存します。既存のサイトを変換・複製している場合は、ページを右クリックしてソースコードを表示できます。 + + + +例えば、同じブランドのドキュメントサイトを作るために、会社のサイトを複製している場合。HTMLで構築した個人サイトをJekyllで作ろうとしている場合。その様なときは、HTMLソースコードを取得しましょう。 + + + +{: .note .info} +サイトに関係なく、ライセンスを確認し、コードをコピーして使用する権利があることを確認してください。 + + + +ソースコードを`default.html`にコピー&ペーストします。`default.html`ファイルは`_layouts`フォルダに入れます。これがページやポストのデフォルトレイアウトになります — Jekyllがサイトを構築するときに各ページやポストにこのレイアウトを使用します。 + + + +テンプレートを探す際には、HTML出力されたテンプレートが必要です。テンプレートにPHPタグやその他ダイナミックスクリプトがある場合は、それらをHTMLや[Liquid](https://shopify.github.io/liquid/){:target="_blank"}に変換する必要があります。Liquidは動的コンテンツを取得するための[Jekyllテンプレートシステム]({{ "/docs/liquid/" | relative_url }})です。 + + + +`default.html`をローカルでブラウザで開き、オンライン時とサイトの見た目が変わらないかを確認します。おそらく、CSS, JSやイメージへのパスを調整する必要があるでしょう。 + + + +例えば、相対パスで指定されていれば、同じアセットをJekyllサイトにダウンロードするか、クラウドのアセットに絶対パスで指定(`src =" // `のような構文がローカルブラウザで動作するためには`src = "http://`のように接頭辞が必要です)する必要があります。 + + + +Jekyllはパスの前にサイトURLを追加するためのいくつかの[フィルタ]({{ "/docs/liquid/filters" | relative_url }})を提供しています。例えば、スタイルシートを次のようにします。 + + + +```liquid +{% raw %}{{ "/assets/style.css" | relative_url }}{% endraw %} +``` + +`relative_url`フィルタは設定ファイルから[`baseurl`](https://byparker.com/blog/2014/clearing-up-confusion-around-baseurl/){:target="_blank"}の値(例えば`blog`)を取得します。これは、ドメインのrootよりサブパスでホストしているとき(例えば`http://mysite.com/blog/`)に便利です。 + + + +`absolute_url`フィルタを使用することもできます。これは、`url`*と*`baseurl`の値を取得します。 + + + +```liquid +{% raw %}{{ "/assets/style.css" | absolute_url }}{% endraw %} +``` + +`url`と`baseurl`は次のように設定ファイルで定義することができます。 + + + +``` +url: http://mysite.com +baseurl: /blog +``` + +出力される結果は、`http://mysite.com/blog/assets/style.css`となります。 + + + +スラッシュ(`/`)から始まるページの`url`プロパティは、`url`や`baseurl`の最後のスラッシュが省略されるためです。 + + + +必ずしもリンクパスにフィルタを追加する必要はありません。サイト全体に相対リンクを使用することもできます。ただし、アセットへのパスをコーディングすることにした場合は、それらが正しくレンダリングされるようにします。 + + + +ローカルの`default.html`はブラウザできちんと表示されていますか? 全ての画像、スタイルや他の要素は表示されていますか? できていれば、OKです。そのまま進めていきましょう。このテンプレートをレイアウトとして全てのページやポストに使うことも、必要に応じて多くのテンプレートを作ることもできます。 + + + +次のセクションでは、レイアウトのコンテンツ部を空白にして、Jekyllページに動的に取り込まれるプレースホルダタグに置き換えます。 + + + +## 2. レイアウトのコンテンツ部を識別する + + +`default.html`でページコンテンツの開始部(通常は`h1`や`h2`タグ)を見つけます。表示されるタイトルを`{% raw %}{{ page.title }}{% endraw %}`で置き換えます。 + + + +コンテンツ部を取り除き(ナビゲーションメニューやサイドバーフッターは残します)、`{% raw %}{{ content }}{% endraw %}`に変えます。 + + + +ブラウザで再度レイアウトをチェックし、重要な`div`や他の要素を誤って削除していないか確認します。タイトルとページコンテンツだけが変更されてる状態です。この段階では内容はブランクで、プレースホルダタグがそのまま表示されています。 + + + +## 3. front matterタグのある2つのファイルを作成する。 + + +rootディレクトリに2つのファイル(`index.md`と`about.md`)をさくせいします。 + + + +`index.md`ファイルには以下のように、`title`と`layout`プロパティのあるfront matterタグを追加します。 + + + +```yaml +--- +title: Home +layout: default +--- + +Some page content here... +``` + +テスト用に同様のfront matterタグのある`about.md`も作成します。 + + + +{: .note .info} +ページでレイアウトを指定しない場合、Jekyllは単にスタイルの内ベーシックなHTMLページとしてレンダリングします。 + + + +## 4. 設定ファイルを追加する + + +rootディレクトリに`_config.yml`を追加します。`_config.yml`では、オプションで好きなMarkdownフィルタを指定することができます。デフォルトは[kramdown](https://kramdown.gettalong.org/){:target="_blank"}です(指定する必要はありません)。他のフィルタが指定されていなければ、設定ファイルは自動でデフォルトの設定を使用します。 + + + +``` +markdown: kramdown +``` + +[GitHub Flavored Markdown (GFM)](https://github.github.com/gfm/){:target="_blank"}の様に振る舞うようkramdownの[オプション](https://kramdown.gettalong.org/converter/html.html){:target="_blank"}を指定することもできます。 + + + +``` +kramdown: + input: GFM + auto_ids: true + hard_wrap: false + syntax_highlighter: rouge +``` + +## 5. ページのテスト + + +`jekyll serve`を実行し`index.html`と`about.html`ページを切り替えます。どちらのページもdefaultレーアウトが読み込まれているはずです。 + + + +コンテンツを別々のファイルに出力し、同じレイアウトを定義することができました。 + + + +必要なだけページのレイアウトを定義できます。特定のページで使用したいレイアウトを指定するだけです。例えば: + + + +``` +--- +title: Sample page +layout: homepage +--- +``` + +このページは、`_layouts`フォルダの`homepage.html`テンプレートを使用します。 + + + +front matter変数でレイアウトを指定する必要がないように、ページやポスト、[コレクション]({{ "/docs/collections/" | relative_url }})の[デフォルトfront matterタグ]({{ "/docs/configuration/front-matter-defaults/" | relative_url }})を、`_config.yml`ファイルでセットすることもできます。デフォルトの設定に関しては、このチュートリアルの範囲外ですので、作業に戻ります。 + + + +## 6. サイト変数の設定 + + +ページタイトルを`{% raw %}{{ page.title }}{% endraw %}`タグを使用することで既に指定しました。しかし、使用する`title`タグは他にもあります。ブラウザのタブやウィンドウに表示する[`title`](https://moz.com/learn/seo/title-tag){:target="_blank"}タグもあります。通常はページのタイトルとサイトのタイトルをここに表示します。 + + + +`default.html`レイアウトの`head`タグの間にある`title`タグを探します。 + + + +``` +ACME Website +``` + +以下のサイト変数を挿入します。 + + + +``` +{% raw %}{{ page.title }} | {{ site.title }}{% endraw %} +``` + +`_config.yml`を開き、`title`プロパティにサイト名を追加します。 + + + +``` +title: ACME Website +``` + +`_config.yml`ファイルに追加したプロパティには、`site`ネームスペースでアクセスできます。同様にページのfront matterのプロパティには`page`ネームスペースでアクセスできます。変数にアクセスするには、`site`や`page`の後にドットをつけます。 + + + +Ctrl + CでJekyllサーバーを停止し、リスタートします。`title`タグがきちんと表示されることを確認します。 + + + +{: .note .info} +設定ファイルを修正する度に、変更を反映させるにはJekyllを再起動します。他のファイルを修正したときは、Jekyllが自動で変更をピックアップし再構築します。 + + + +サイトに使用する他の変数があれば、同様の操作を繰り返します。 + + + +## 7. ポストとページを表示する + + +ホームページにポストのリストを表示します。まずは、いくつかのポストを作成します。 + + + +`_posts`フォルダに基本の`YYYY-MM-DD-title.md`ポストフォーマットでいくつかのポストを追加します。 + + + + * `2017-01-02-my-first-post.md` + * `2017-01-15-my-second-post.md` + * `2017-02-08-my-third-post.md` + +各ポストには、基本の内容を追加します。 + + + +``` +--- +title: My First Post +layout: default +--- + +Some sample content... +``` + +では、ポストを並べるレイアウトを作成しましょう。`_layouts`に以下の内容の`home.html`を作成します。 + + + +``` +--- +layout: default +--- + +{% raw %}{{ content }} +
    +{% for post in site.posts %} +
  • {{ post.title}} + +
  • +{% endfor %} +
{% endraw %} +``` + +rootディレクトリに`blog.md`を、`home`レイアウトを指定して作成します。 + + + +``` +--- +title: Blog +layout: home +--- +``` + +今回の場合、`blog.md`のコンテンツは`home`レイアウトの`{% raw %}{{ content }}{% endraw %}`タグに入ります。そして、その`home`レイアウトが`default`レイアウトの`{% raw %}{{ content }}{% endraw %}`タグに入ります。 + + + + +### レイアウトの働き方 + + +レイアウトに他のレイアウトが指定されていたら、最初のレイアウトのコンテンツが2つ目のレイアウトの`{% raw %}{{ content }}{% endraw %}`に取り込まれることを意味します。アナログで言えば、ロシアのマトリョーシカのように一方をその中に取り込みます。各レイアウトは指定したレイアウトに入ります。 + + + +以下の図はJekyllでレイアウトがどのように働くかを示しています。 + + + +Concept of Jekyll layouts + +{: .image-description} +この例では、`document.md`で`layout: docs`が指定されており、そのコンテンツは`docs.html`の`{% raw %}{{ content }}{% endraw %}`に入ります。`docs`レイアウトが`layout: page`を指定しているので、`docs.html`のコンテンツは`page.html`の`{% raw %}{{ content }}{% endraw %}`に入ります。最後に`page`レイアウトで`layout: default`を指定しているので、`page.html`のコンテンツが`default.html`の`{% raw %}{{ content }}{% endraw %}`に入ります。 + + + +複数のレイアウトが必要なければ、`default`だけを使用すればいいです。サイトのデザインの選択権はあなたにあります。通常はポスト用とページ用のレイアウトを用意しますが、`default`テンプレート(通常はサイトの最初と最後を定義します)を継承するようにします。 + + + +ブラウザで`blog.html`に行き、ポストのリストを確認します。 +ここで説明した方法を使用する必要はありません。これらの投稿を表示するために `index.md`のようなページに`for`ループを単に追加することもできます。ただし、他の機能に対してより複雑なロジックがある場合があるので、頻繁にコンテンツを入力するページ領域とは別のテンプレートにロジックを格納すると便利です。 + + + +{: .note .info} +最低限、レイアウトにはレンダリング時に*content*を受け取る`{% raw %}{{ content }}{% endraw %}`が必要です。 + + + +### Forループ + + +ここで少し立ち止まって、`for`ループのロジックをもう少し詳しく見てみましょう。[LiquidのForループ](https://shopify.github.io/liquid/tags/iteration/){:target="_blank"}は最も一般的なLiquidタグの一つです。*Forループ*はJekyllサイトのコンテンツを反復して、その結果を構築することができます。`for`ループは、ループ中の場所に基づく(繰り返しの最初や最後といった)[利用可能なプロパティ](https://help.shopify.com/themes/liquid/objects/for-loops){:target="_blank"}があります。 + + + +ポストを取得するのは、`for`ループでできることのほんの一部に過ぎません。例えば、特定のカテゴリのポストを表示したい場合は、`categories`プロパティをポストのfront matterに追加し、そのカテゴリで見つけます。`limit`プロパティを使用して、結果の数を制限することもできます。以下がその例です。 + + + +```liquid +{% raw %}
    +{% for post in site.categories.podcasts limit:3 %} +
  • {{ post.title}} + +
  • +{% endfor %} +
{% endraw %} +``` + +このループは、front matterにカテゴリが`podcasts`という指定がある、最近の3ポストを取得します。 + + + +## 8. ナビゲーションの設定 + + +ポストを設定しましたので、ページナビゲーションの設定を行いましょう。多くのWebサイトはサイドバーやヘッダーエリアにナビゲーションがあります。 + + + +このチュートリアルでは、生成したページのシンプルなリストを取得します。手で数えられるようなページだけなら、`site.pages`オブジェクトに`for`ループを使用して、front matterで並び順を指定しリストを作ることができます。 + + + +ページのリストが表示されているコード部分を識別します。通常これはさまざまな子要素`
  • `を持つ`
      `要素です。そのコードを次のコードに置き換えます。 + + + +```html +{% raw %}
        + {% assign mypages = site.pages | sort: "order" %} + {% for page in mypages %} +
      • {{ page.title }}
      • + {% endfor %} +
      {% endraw %} +``` + +この例では、次のように各ページのfront matterに`title`と`order`が指定されていると仮定しています。 + + + +``` +--- +title: My page +order: 2 +--- +``` + +`order`プロパティはページのソートで取得され、リストの最初に`1`が表示されます + + + +別のデータファイルで管理しているページのリストを繰り返すこともできます。これは、たくさんのページがある場合や、保存したいページに関する他のプロパティがある場合に適しています。 + + + +この方法でリンクを管理するために、jekyllプロジェクトに`_data`フォルダを作成します。このフォルダに、次の内容の`navigation.yml`を作成します。 + + + +```yaml +- title: Sample page 1 + url: /page-1-permalink/ + +- title: Sample page 2 + url: /page-2-permalink/ + +- title: Sample page 3 + url: /page-3-permalink/ +``` + +{: .note .info} +YAMLをこれまで書いたことが無くても、すぐに慣れることができるでしょう。[YAMLでできること](https://learnxinyminutes.com/docs/yaml/){:target="_blank"}を見てください。 + + + +必要に応じて、このデータファイルに各項目の追加のプロパティを保存できます。リスト項目は、表示したい順序に並べます。 + + + +データファイルからページのリストを表示するには、次のようなコードを使用します。 + + + +```html +{% raw %}{% endraw %} +``` + +ドキュメンテーションを構築するときなど、ナビゲーションに対してより高度な要件がある場合は、[ナビゲーションの詳細なチュートリアル]({{ "/tutorials/navigation/" | relative_url }})をご覧ください。 + + + +## 9. サイトをインクルードで単純化する + + +`default.html`ファイルが大規模で作業が困難だとします。HTMLコードを*include*ファイルとして配置することで、レイアウトを分割することができます。 + + + +rootディレクトリに`_includes`フォルダを追加します。そのフォルダに`sidebar.html`を追加します。 + + + +`default.html`レイアウトからサイドバーを取り除き、`sidebar.html`に挿入します。 + + + +`default.html`のサイドバーがあったところには、"include"を配置します。 + + + +```liquid +{% raw %}{% include sidebar.html %}{% endraw %} +``` + +ヘッダーやフッターなどテーマの他の要素も同様にして分割することができます。同じ要素は他のレイアウトファイルに適用することもできます。この方法なら、コードを複製せずに済みます。 + + + +## 10. RSS feed + +JekyllサイトにRSS feedが必要です。[こちら](http://www.w3schools.com/xml/xml_rss.asp){:target="_blank"}は基本のRSS feed構文です。RSSファイルをJekyllに作成するために、rootディレクトリに`feed.xml`を作成し、以下を追加します。 + + + +```xml +--- +layout: null +--- + +{% raw %} + + + + {{ site.title }} + {{ site.url }} + {{ site.description }} + {{ site.time | date_to_rfc822 }} + {% for post in site.posts %} + + {{ post.title }} + + {{ post.url | prepend: site.url }} + + + {{ post.content | escape | truncate: '400' }} + + {{ post.date | date_to_rfc822 }} + + {{ post.url | prepend: site.url }} + + + {% endfor %} + +{% endraw %} +``` + +`_config.yml`ファイルに`title`と`url`、`description`のプロパティを忘れないでください。 + + + +このコードは最近の20ポストを探すために`for`ループを使用しています。[Liquid filters](https://help.shopify.com/themes/liquid/filters){:target="_blank"}を使用して、ポストのコンテントから400時以降を切り捨てています。 + + + +`default.html`レイアウトのヘッダからRSSやAtom feedへの参照を探し、先ほど作成したファイルへの参照に書き換えます。 + + + +```html + +``` + +[`jekyll-feed`](https://help.github.com/articles/atom-rss-feeds-for-github-pages/){:target="_blank"}というgemを追加することで、自動でfeedを生成することもできます。このGemは、GitHub Pagesでも動きます。 + + + +## 11. sitemapを追加する + + +最後に、[site map](https://www.sitemaps.org/protocol.html){:target="_blank"}を追加します。rootディレクトリに`sitemap.xml`を作成し、次のコードを追加します。 + + + +```xml +--- +layout: null +search: exclude +--- + +{% raw %} + + + {% for page in site.pages %} + + {{page.url}} + {{site.time | date: '%Y-%m-%d' }} + daily + 0.5 + + {% endfor %} + + {% for post in site.posts %} + + {{post.url}} + {{site.time | date: '%Y-%m-%d' }} + daily + 0.5 + + {% endfor %} + +{% endraw %} +``` + +全てのページとポストをsitemapに追加するために、再び`for`ループを使用しています。 + + + +[`jekyll-sitemap`](https://help.github.com/articles/sitemaps-for-github-pages/){:target="_blank"}というgemを追加することで、自動でsitemapを生成することもできます。このGemは、GitHub Pagesでも動きます。 + + + +## 12. 外部サービスを追加する + + +(コンタクトフォームや検索、コメントなど)他のサービスが必要になったら、サードパーティーサービスを探してください。例えば、以下のサービスを使用できます。 + + + + * コメント: [Disqus](https://disqus.com/){:target="_blank"} + * ニュースレター: [Tinyletter](https://tinyletter.com/){:target="_blank"} + * コンタクトフォーム: [Wufoo](https://www.wufoo.com/){:target="_blank"} + * 検索: [Algolia Docsearch](https://community.algolia.com/docsearch/){:target="_blank"} + + + +静的サイトのサービスの詳細は、[Third Parties](https://learn.cloudcannon.com/jekyll-third-parties/){:target="_blank"}リストとCloudCannonのチュートリアルを見てください。 + + + +JekyllのページはHTML、CSS、JavaScriptで構成されており、埋め込みコードはほとんど問題なく動作します。 + + + +これらのサービスのコードを統合するとき、**Jekyllサイトのページにfront matterが無ければ、Jekyll八草のページの内容に手を加えない**ことを覚えておいてください。サイト構築時に`_site`フォルダにページが渡されるだけです。 + + + +(設定ファイルで定義した変数を有効にするなど)Jekyllのプロセスを経たい場合は、front matterタグを追加してください。ページにレイアウトを適用したくない場合は、次のように`layout: null`を指定します。 + + + +``` +--- +layout: null +--- +``` + +## 13.最後に + + +Webサイトはさらに見た目をよくしたり機能を実装することができますが、このチュートリアルでは基本部分をカバーしました。Jekyllサイトの沢山の機能を使えるようになったはずです。 + + + +[GitHub Pages](https://pages.github.com/){:target="_blank"}、[Netlify](https://www.netlify.com/){:target="_blank"}を使って、[s3_website plugin](https://github.com/laurilehmijoki/s3_website){:target="_blank"}を使用して[Amazon AWS S3](https://aws.amazon.com/s3/){:target="_blank"}、もしくはFTPでWebサーバーにファイルを転送して、あなたのサイトを公開しましょう。 + + + +アセットを含めたレイアウトをRuby `gem`にパッケージして、[Jekyllのテーマを作る]({{ "/docs/themes/" | relative_url }})こともできます。 + + + +## 追加情報 + + +こちらは、Jekyllサイトを作るための追加のチュートリアルです。 + + + + * [Convert a static site to Jekyll](http://jekyll.tips/jekyll-casts/converting-a-static-site-to-jekyll/){:target="_blank"} + * [Building a Jekyll Site – Part 1 of 3: Converting a Static Website To Jekyll](https://css-tricks.com/building-a-jekyll-site-part-1-of-3/){:target="_blank"} diff --git a/_tutorials/custom-404-page.md b/_tutorials/custom-404-page.md new file mode 100644 index 0000000..756c22e --- /dev/null +++ b/_tutorials/custom-404-page.md @@ -0,0 +1,107 @@ +--- +layout: tutorials +permalink: /tutorials/custom-404-page/ +title: カスタム404ページ +--- + + +壊れたリンクへアクセスしたときに表示されるデフォルトの**Error 404 -- File Not Found**ページを、Jekyllで簡単にカスタム404エラーページに置き換えることができます。 + + + +## GitHub Pagesの場合 + + +**`_site`ディレクトリのroot**に`404.html`がGitHub PagesとローカルWEBrick開発サーバーにより自動で提供されます。 + + + +簡単には、`404.md`か`404.html`をサイトのソースディレクトリのrootに追加し、テーマの基本レイアウトを使用するようfront matterを記載します。 + + + +エラーページ用のファイルを細部ディレクトリに入れる場合は、以下のようにfront matterに`permalink: /404.html`を記載します。これで、コンパイル後の`404.html`はサイトのrootディレクトリに存在することになり、サーバーに認識されます。 + + + +```markdown +--- +# example 404.md + +layout: default +permalink: /404.html +--- + +# 404 + +Page not found! :( +``` + +## Apache Webサーバーによるホスティングの場合 + + +Apache Webサーバーはその機能に変化を加えるために、[`.htaccess`](http://www.htaccess-guide.com/){:target="_blank"}という設定ファイルを読み込みます。 + + + +簡単には、以下の内容を`.htaccess`に追加します。 + + + +```apache +ErrorDocument 404 /404.html +``` + +`.htaccess`ファイルでは、サブディレクトリのエラーページも自由に指定できます。 + + + +```apache +ErrorDocument 404 /error_pages/404.html +``` + +パスは、サイトのドメインからの相対パスです。 + + + +Apache Errorページの設定に関する更なる情報は、[official documentation](https://httpd.apache.org/docs/current/mod/core.html#errordocument){:target="_blank"}をご覧ください。 + + + +## Nginxサーバーによるホスティングの場合 + + +Apacheサーバーの場合と同様に簡単ですが、少し異なります。 + + + +Nginxの設定ファイルは、インストールされているシステムに依存します。多くの場合は、`/etc/nginx/`か`/etc/nginx/conf/`にある`nginx.conf`です。しかし、Ubuntuの様な他のサーバーでは、サーバー関連の情報を含む`default`というNginx設定ファイルを探す必要があります。通常は`/etc/nginx/sites-available/`か`/etc/nginx/sites-enabled/`にあります。以下をNginx設定ファイル(`nginx.conf`ファイルや`default`ファイル)に追加します。 + + + +```nginx +server { + error_page 404 /404.html; + location = /404.html { + internal; + } +} +``` + +もし、`server`ブロックが既にあれば、上記の`server`ブロックに中身だけを追加してください。`location`はユーザーが直接404.htmlページを見ることを防ぎます。 + + + +Nginxエラーページに関する更なる情報は、[nginx official documentation](http://nginx.org/en/docs/http/ngx_http_core_module.html#error_page){:target="_blank"}をご覧ください。 + + + +

      + 設定ファイルの編集は注意して進めてください。 + +

      diff --git a/_tutorials/index.md b/_tutorials/index.md new file mode 100644 index 0000000..40ce624 --- /dev/null +++ b/_tutorials/index.md @@ -0,0 +1,67 @@ +--- +layout: tutorials +title: チュートリアル +permalink: /tutorials/home/ +redirect_from: /tutorials/index.html +--- + + +[Docs]({{ "/docs/home/" | relative_url }})とは対照的に、チュートリアルではJekyllの様々なトピックやシナリオをカバーしたより詳細な説明を行います。チュートリアルには以下の内容が含まれています。 + + + +* 特定のシナリオや課題のstep-by-stepプロセス。 +* サンプルデータを利用したチュートリアル。サンプルデータの入力と結果。 +* Jekyllの長所と短所の説明。 +* Jekyllサイトの全ての機能を開発するための端から端までの解説。 +* ドキュメンテーションを横断した様々なテクニックの解説。 + + + +簡単に言うと、チュートリアルはドキュメンテーションの情報の要約ではありません。ユーザーの最初から最後のプロセスを辿るものです。 + + + +{: .info .note} +**注:**チュートリアルのセクションは新しく、まだ数は多くありません。作成を助けるために、あなたのチュートリアルを追加することもできます。 + + + +いくつかのテクニックは、サポートツールやスクリプトサービス、他のJekyllサイトのハックを通じたガイドの場合もあります。Jekyllを使った外部サービスに関することも、気軽に追加してください。ただし、チュートリアルに紹介されているサードパーティーツールを、Jekyllが推薦することはありません。 + + + +## チュートリアルへの貢献の仕方 + + +チュートリアルへの貢献を歓迎します。あなたのチュートリアルを追加するには、 + + + +1. [jekyll/jekyll project Github repo](https://github.com/jekyll/jekyll/){:target="_blank"}の右上の**Fork**ボタンをクリックして、JekyllプロジェクトをForkします。 +2. `_tutorials`コレクションにあなたのチュートリアルを追加します。 +3. 他のチュートリアルと同様のfront matterを用意してください。 +4. `_data/tutorials.yml`にあなたのチュートリアルのファイル名を追加してください。これであなたのチュートリアルをチュートリアルのサイドバーに表示します。 +5. 通常のgitのワークフローに従い、pullリクエストを送信してください。 + + + +pullリクエストが送信されると、Jekyllドキュメンテーションチームがレビューを行い、mergeするか編集の提案を行います。 + + + + diff --git a/_tutorials/navigation.md b/_tutorials/navigation.md new file mode 100644 index 0000000..86c74bd --- /dev/null +++ b/_tutorials/navigation.md @@ -0,0 +1,729 @@ +--- +layout: tutorials +permalink: /tutorials/navigation/ +title: ナビゲーション +--- + + +Jekyllサイトに多くのページがあるなら、ページのナビゲーションを作りたくなるでしょう。ナビゲーションリンクをハードコーディングする代わりに、ページのリストをプログラムで取得してサイトのナビゲーションを構築することができます。 + + + +Jekyllドキュメンテ—ションには[dataファイルとのやりとり]({{ "/docs/datafiles/" | relative_url }})についての情報がありますが、ここではより堅牢なナビゲーションの構築に挑戦します。 + + + +jekyllサイトのページを取得するには主に2つの方法があります。 + + + +* **YAMLデータソースにリストされているページの取得**。`_data`フォルダのYAML(やJSONやCSV)ファイルにページデータを保管し、YAMLプロパティをル—プさせ、その値をテーマに挿入します。 +* **ページのfront matterをループしてページを取得**。front matterを通じページを識別し、ページを返し、そのページのfront matterの値をテーマに挿入します。 + + + +以下では、基本的なナビゲーションのシナリオから始め、ページを返す異なる方法のデモンストレーションに洗練された要素の追加を例示します。どのシナリオでも、3つの要素があります。 + + + +* YAML +* Liquid +* Result + +`_data`ディレクトリのYAMLファイルは、`samplelist.yml`という名前です。 + + + +シナリオは次の通りです。 + + + +* TOC +{:toc} + +## シナリオ1:基本的なリスト + + +ページの基本的なリストを返します。 + + + +**YAML** + +```yaml +docs_list_title: ACME Documentation +docs: + +- title: Introduction + url: introduction.html + +- title: Configuration + url: configuration.html + +- title: Deployment + url: deployment.html +``` + +**Liquid** + +{% raw %} +```liquid +

      {{ site.data.samplelist.docs_list_title }}

      +
        + {% for item in site.data.samplelist.docs %} +
      • {{ item.title }}
      • + {% endfor %} +
      +``` +{% endraw %} + +**Result** +
      +

      ACME Documentation

      + +
      + +{: .note .info } +この架空のサンプルの結果では、404エラーを回避するために実際のリンク値を`#`に手動で置き換えています。 + + + +`for`ループを使用する場合、参照するためのアイテムは選ぶことができます。選択した変数(この場合は`item`)はリストの各アイテムのプロパティにアクセスするためのものになります。ドットはアイテムのプロパティを取得するのに使います(例:`item.url`)。 + + + +YAMLコンテンツには、こちらに関連する2つの主なフォーマットがあります。 + + + +* マッピング +* リスト + + + +`docs_list_title: ACME Documentation`はマッピングです。`site.data.samplelist.docs_list_title`変数でアクセスします。 + + + +`docs:`はリストです。リストの各アイテムはハイフンから始まります。マッピングとは異なり、通常はリストのプロパティに直接アクセスしません。リストの特定のアイテムにアクセスしたい場合、通常の配列表記に従って、リスト内の場所を指定します。例えば、`site.data.samplelist.docs[0]`でリストの最初のアイテムにアクセスします。しかし、これは滅多に行いません。 + + + +リストでは通常、リストのアイテムを回すために`for`ループを用い、各アイテムに操作を行います。ナビゲーションの場合、通常はHTMLテーマのナビゲーションの部分の`li`タグに各リストを挿入します。 + + + +各ハイフン(`-`)は、リストの他のアイテムであることを示します。この例では、`title`と`url`の2つのプロパティだけを持っています。各アイテムに望むだけプロパティを追加することができます。リスト内のプロパティの順序は関係ありません。 + + + +## シナリオ2:リストのソート + + +`title`でリストをソートする場合を考えます。行うには、`docs`コレクションへの参照を変数に変換する時に、Liquidの`sort`フィルタを使用します。 + + + +**Liquid** + +{% raw %} +```liquid +{% assign doclist = site.data.samplelist.docs | sort: 'title' %} +
        +{% for item in doclist %} +
      1. {{ item.title }}
      2. +{% endfor %} +
      +``` +{% endraw %} + +**Result** + + + +アルファベット順になりました。Liquidフィルタの`sort`プロパティがリストの実際のプロパティである`title`に適用されました。`title`がプロパティで無ければ、他のプロパティでソートする必要があります。 + + + +フィルタのオプションは[Liquid array filter](https://help.shopify.com/themes/liquid/filters/array-filters){:target="_blank"}を見てください。この構文を以下のようにシンプルにすることはできません。 + + + +{% raw %} +```liquid +{% for item in site.data.samplelist.docs | sort: "title" %}{% endfor %} +``` +{% endraw %} + +`site.data.samplelist.docs`を`assign`や`capture`タグで変数に変換する必要があります。 + + + +## シナリオ3:2レベルのナビゲーションリスト + + +見出しタイトルとサブアイテムの複数のセクションからなるリストが必要な場合を考えます。これを行うには、この情報を保管するために各リストアイテムにレベルを追加します。 + + + +**YAML** + +```yaml +toc: + - title: Group 1 + subfolderitems: + - page: Thing 1 + url: /thing1.html + - page: Thing 2 + url: /thing2.html + - page: Thing 3 + url: /thing3.html + - title: Group 2 + subfolderitems: + - page: Piece 1 + url: /piece1.html + - page: Piece 2 + url: /piece2.html + - page: Piece 3 + url: /piece3.html + - title: Group 3 + subfolderitems: + - page: Widget 1 + url: /widget1.html + - page: Widget 2 + url: /widget2.html + - page: Widget 3 + url: /widget3.html +``` + +**Liquid** + +{% raw %} +```liquid +{% for item in site.data.samplelist.toc %} +

      {{ item.title }}

      + + {% endfor %} +``` +{% endraw %} + +**Result** +
      +

      Group 1

      + + +

      Group 2

      + + +

      Group 3

      + +
      + +この例では、`Group 1`が最初のリストアイテムです。このリストアイテムのサブページに、そのリスト(`subfolderitems`)をプロパティとして含んでいます。 + + + +Liquidコードは`for item in site.data.samplelist.toc`でファーストレベルを、`for entry in item.subfolderitems`でセカンドレベルを見通しています。`item`はアイテムをループするための任意の名前で、`entry`も同様です。 + + + +## シナリオ4:3レベルのナビゲーションリスト + + +前のセクションを発展させ、もう1つリストにレベル(`subsubfolderitems`)を追加しましょう。フォーマットは複雑になりますが、原則は同じです。 + + + +**YAML** + +```yaml +toc2: + - title: Group 1 + subfolderitems: + - page: Thing 1 + url: /thing1.html + - page: Thing 2 + url: /thing2.html + subsubfolderitems: + - page: Subthing 1 + url: /subthing1.html + - page: Subthing 2 + url: /subthing2.html + - page: Thing 3 + url: /thing3.html + - title: Group 2 + subfolderitems: + - page: Piece 1 + url: /piece1.html + - page: Piece 2 + url: /piece2.html + - page: Piece 3 + url: /piece3.html + subsubfolderitems: + - page: Subpiece 1 + url: /subpiece1.html + - page: Subpiece2 + url: /subpiece2.html + - title: Group 3 + subfolderitems: + - page: Widget 1 + url: /widget1.html + subsubfolderitems: + - page: Subwidget 1 + url: /subwidget1.html + - page: Subwidget 2 + url: /subwidget2.html + - page: Widget 2 + url: /widget2.html + - page: Widget 3 + url: /widget3.html +``` + +**Liquid** + +{% raw %} +```liquid +
      +{% if site.data.samplelist.toc2[0] %} + {% for item in site.data.samplelist.toc2 %} +

      {{ item.title }}

      + {% if item.subfolderitems[0] %} +
        + {% for entry in item.subfolderitems %} +
      • {{ entry.page }} + {% if entry.subsubfolderitems[0] %} + + {% endif %} +
      • + {% endfor %} +
      + {% endif %} + {% endfor %} +{% endif %} +
      +``` +{% endraw %} + +**Result** + +
      +
      +

      Group 1

      + +

      Group 2

      + +

      Group 3

      + +
      +
      + +この例では、`if site.data.samplelist.toc2[0]`でYAMLレベルに本当にアイテムがあるのかを確認しています。ポジション`[0]`に何もなければ、そのレベルの処理をスキップします。 + + + +
      +
      ProTip: forループとif文を揃える
      + +

      コードをきれいに保つために、forループとif文のように、Liquidタグの始まりと終わりを揃えます。この方法で、タグがどこで始まりどこで終わったかが分かりやすくなります。コードがMarkdownページに表示される場合は、Markdownフィルタがコードサンプルとして扱わないように、HTMLタグの開始と終了を左端にあわせてください。 必要に応じて、コードサンプル全体をdivタグで囲むことで、コードにコードを補足するHTMLタグを確実に含めることができます。

      + +
      + +## シナリオ5:YAMLリストの選択にページ変数を使用する + + +いくつかのドキュメンテーションのセットでサイドバーを変更したい場合を考えます。サイトに3つの異なるプロダクトがあり、それぞれにあわせて3つの異なるサイドバーが必要だとします。 + + + +ページのfront matterにサイドバーのリストの名前を格納し、その値を動的にリストに渡します。 + + + +**Page front matter** + +```yaml +--- +title: My page +sidebar: toc +--- +``` + +**Liquid** + +{% raw %} +```liquid +
        + {% for item in site.data.samplelist[page.sidebar] %} +
      • {{ item.title }}
      • + {% endfor %} +
      +``` +{% endraw %} + +**Result** + + + +このシナリオでは、ページのfront matterからその値を`for`ループに渡しました。割り当てられた変数が文字列ではなくデータ参照である場合は、front matterの値を参照するために(中括弧ではなく)大括弧を使用する必要があります。 + + + +更なる情報は、Liquidのドキュメンテーションの[Expressions and Variables](https://github.com/Shopify/liquid/wiki/Liquid-for-Designers#expressions-and-variables){:target="_blank"}を見てください。ドット表記が使えない場所で大括弧が使用されます。この詳細は[Stack Overflow answer](http://stackoverflow.com/questions/4968406/javascript-property-access-dot-notation-vs-brackets/4968448#4968448){:target="_blank"}で読むことができます。 + + + +## シナリオ6:現在のページにactiveクラスを適用する + + +YAMLデータファイルからリストへアイテムを挿入するとき、現在見ているページへのリンクは強調したいこともあるでしょう。現在のページのURLとアイテムがマッチした場合に`active`クラスを挿入することで、実現できます。 + + + +**CSS** +```css +.result li.active a { + color: lightgray; + cursor: default; + } +``` +**Liquid** + +{% raw %} +```liquid +{% for item in site.data.samplelist.docs %} +
    • + {{ item.title }} +
    • +{% endfor %} +``` +{% endraw %} + +**Result** + + + + + +この例では`Deployment`が現在のページとしています。 + + + +(YAMLファイルに格納されている)`item.url`が`page.url`と確実に一致するようにするには、{%raw%} {{page.url}} {%endraw%}をページに出力すると便利です。 + + + +## シナリオ7:条件付きでアイテムを含める + + +リストに条件付きで項目を含めたい場合を考えます。例えば、複数のサイトを持っていて、特定の項目だけを含むサイドバーが欲しい場合です。リストの各項目にプロパティを追加して、含める内容の条件にそのプロパティを使います。 + + + +**YAML** +```yaml +docs2_list_title: ACME Documentation +docs2: + +- title: Introduction + url: introduction.html + version: 1 + +- title: Configuration + url: configuration.html + version: 1 + +- title: Deployment + url: deployment.html + version: 2 +``` + +**Liquid** + +{% raw %} +```liquid +
        + {% for item in site.data.samplelist.docs2 %} + {% if item.version == 1 %} +
      • {{ item.title }}
      • + {% endif %} + {% endfor %} +
      +``` +{% endraw %} + +**Result** + + + +`Deployment`は`version`が`2`ですので書き出されていません。 + + + +## シナリオ8:front matterのプロパティに基づくアイテムの取得 + + +ナビゲーションアイテムを`_data`フォルダのYAMLファイルに格納したくない場合、各ページやコレクションのfront matterを取得して`for`ループを使用し、front matterのプロパティを元にコンテンツを取得します。 + + + +このシナリオでは、`_docs`というコレクションがあるとします。コレクションは、ループできるリストを持っているため、ページよりよい場合が多いです。(ビルド時間が長くなるため、多数の項目をループ処理するシナリオは避けてください。 [コレクション]({{ "/docs/collections/" | relative_url }})は範囲を狭めるのに役立ちます。) + + + +このシナリオでは、`docs`コレクションにSample 1, Sample 2, Topic 1, Topic 2, Widget 1, そしてWidget 2の6つのドキュメントがあるとします。 + + + +コレクションの各ドキュメントにはfront matterに最低3つのプロパティを含めます。 + + + +* `title` +* `category` +* `order` + +各ページのfront matterは以下の通りです。(簡潔にするためここでは統合しています) + + + +```yaml +--- +Title: Sample 1 +category: getting-started +order: 1 +--- + +--- +Title: Sample 2 +category: getting-started +order: 2 +--- + +--- +Title: Topic 1 +category: configuration +order: 1 +--- + +--- +Title: Topic 2 +category: configuration +order: 2 +--- + +--- +Title: Widget 1 +category: deployment +order: 1 +--- + +--- +Title: Widget 2 +category: deployment +order: 2 +--- +``` + +`category`をドキュメントのfront matterで使用していても、`category`はポストの場合の組み込み変数とは異なります。言い換えれば、`site.docs.category`で`category`の内部を直接見ることはできません。 + + + +コレクション内の特定のカテゴリのドキュメントを簡単に取得したい場合、`for`ループ内で`if`文を使いそのカテゴリかをチェックします。 + + + +{% raw %} +```liquid +

      Getting Started

      +
        + {% for doc in site.docs %} + {% if doc.category == "getting-started" %} +
      • {{ doc.title }}
      • + {% endif %} + {% endfor %} +
      +``` +{% endraw %} + +結果は以下のようになります。 + + + +
      +

      Getting Started

      + +
      + +これは、ナレッジベースを設定し、各カテゴリに多数のトピックがあり、各カテゴリをそれぞれのページに表示する場合に便利です。 + + + +カテゴリ名をハードコーディングせずに、カテゴリ別にアイテムをソートし、それらをカテゴリ名の下にグループ化する場合を考えます。2つのフィルタを利用して、実現することができます。 + + + +* `group_by` +* `sort` + +カテゴリヘッダに対応したグループのページのリストを取得するコードを示します。 + + + +**Liquid** + +{% raw %} +```liquid +{% assign mydocs = site.docs | group_by: 'category' %} +{% for cat in mydocs %} +

      {{ cat.name | capitalize }}

      +
        + {% assign items = cat.items | sort: 'order' %} + {% for item in items %} +
      • {{ item.title }}
      • + {% endfor %} +
      +{% endfor %} +``` +{% endraw %} + +**Result** + +
      +

      Getting-started

      + +

      Configuration

      + +

      Deployment

      + +
      + +コードを見ていきましょう。まず、コレクションの内容(`site.docs`)の為の変数(`mydocs`)を設定しています。 + + + +`group_by`フィルタでコレクションを`category`でグループ化しています。より正確には、`group_by`フィルタは`mydocs`を以下のように`name`, `items`, そして`size`の配列に変換しています。 + + + +```yaml +[ + {"name": "getting-started", "items": [Sample 1, Sample 2],"size": 2}, + {"name": "configuration", "items": [Topic 1, Topic 2], "size": 2}, + {"name": "deployment", "items": [Widget 1, Widget 2, "size": 2} +] +``` + +`for cat in mydocs`を使用して、`mydocs`配列のアイテムを確認し、カテゴリ`name`をプリントしています。 + + + +カテゴリ名を取得した後、`sort`フィルタで`order`プロパティ順に並べたドキュメントを変数`items`に設定します。コンテンツの`items`配列にアクセスするために`cat.items`を使用しています。`sort`フィルタでアイテムの番号で昇順に並べ替えています。 + + + +`for item in items`ループは各`item`を確認し、リストのアイテムをリンクするために`title`と`url`を取得しています。 + + + +`group_by`フィルタの詳細は[Jekyll's Templates documentation](https://jekyllrb.com/docs/templates/){:target="_blank"}や[this Siteleaf tutorial](https://www.siteleaf.com/blog/advanced-liquid-group-by/){:target="_blank"}をご覧ください。`sort`フィルタの詳細はLiquidドキュメンテーションの[sort](https://shopify.github.io/liquid/filters/sort/){:target="_blank"}をご覧ください。 + + + +ドキュメントのfront matterを使用する場合、YAMLデータファイルを使用する場合のどちらでも、サイトに為のより堅牢なナビゲーションを構築することができるでしょう。 + + diff --git a/_tutorials/orderofinterpretation.md b/_tutorials/orderofinterpretation.md new file mode 100644 index 0000000..3bdf2f0 --- /dev/null +++ b/_tutorials/orderofinterpretation.md @@ -0,0 +1,231 @@ +--- +layout: tutorials +permalink: /tutorials/orderofinterpretation/ +title: 解釈の順番 +--- + + +Jekyllの主な仕事は、あなたのテキストファイルを静的Webサイトに変換することです。LiquidやMarkdown、その他の変換を行い、静的HTMLを作成し出力します。 + + + +この変換プロセス中の、Jekyllの解釈の順番を理解することは重要です。「解釈の順番」は、何がレンダリングされるのか、どのような順序でレンダリングされるのか、そしてコンテンツの変換にどのような規則が適用されるのかを意味します。 + + + +要素が変換されない場合は、解釈の順番を分析して問題を解決できます。 + + + +## 解釈の順番 + + +Jekyllは以下の順番でサイトを作成します。 + + + +1. **サイト変数** Jekyllはファイルを調べて`site`, `page`, `post`やコレクションオブジェクトといった[サイト変数]({{ "/docs/variables/" | relative_url }})を設定します。(これらから、パーマリンク、タグ、カテゴリなど詳細の値を決定します) +2. **Liquid** [front matter]({{ "/docs/front-matter/" | relative_url }})を含むページの[Liquid](https://github.com/Shopify/liquid){:target="_blank"}フォーマットを処理します。次のようにLiquidを識別できます。 + * **Liquid タグ** `{% raw %}{%{% endraw %}`から`{% raw %}%}{% endraw %}`まで。例えば、`{% raw %}{% highlight %}{% endraw %}`や`{% raw %}{% seo %}{% endraw %}`タグはブロックを定義することもインラインにすることもできます。 ブロック定義タグには対応する終了タグも付きます — `{% raw %}{% endhighlight %}{% endraw %}`など。 + * **Liquid 変数** 2つの中括弧で囲まれた部分。例えば、`{% raw %}{{ site.myvariable }}{% endraw %}`や`{% raw %}{{ content }}{% endraw %}`。 + * **Liquid フィルタ** **Liquid 変数**内でのみ使用できる、変数名の文字列の後で縦棒(`|`)から始まる部分。例えば、`{% raw %}{{ "css/main.css" | relative_url }}{% endraw %}`中の`relative_url`フィルタ。 +3. **Markdown** 設定ファイルで指定されたMarkdownフィルタを用いてJekyllはMerkdownをHTMLに変換します。Jekyllがファイルを変換するためには、ファイルにMarkdownファイル拡張子とfront matterが必要です。 +4. **レイアウト** (設定ファイルや)ページのfront matterで指定されたレイアウトに、コンテンツを押し込みます。コンテンツはレイアウト内の`{% raw %}{{ content }}{% endraw %}`タグ部に入ります。 +5. **ファイル** 生成されたコンテンツを`_site`のディレクトリ構造内のファイルに書き込みます。 ページ、ポスト、およびコレクションは、パーマリンクの設定に基づいて構造化されます。`_`で始まるディレクトリ(`_includes`や`_data`など)は通常、出力時には隠されます。 + + + + + + + + + + + +## 誤った構成が問題を引き起こすシナリオ + + +Jekyllサイトの構築で、多くの場合は解釈の順番を考える必要はありません。レンダリングが上手くいかない場合にこれらの詳細が重要になります。 + + + +以下のシナリオでは、発生する可能性がある潜在的な問題を強調しています。これらの問題は解釈の順番の誤解から来ており、簡単に修正することができます。 + + + +### レイアウト上で割り当てられた変数はページ上ではレンダリングされません + + +レイアウトファイル(`_layouts/default.html`)で変数を割り当てたとします。 + + + +{% raw %} +```liquid +{% assign myvar = "joe" %} +``` +{% endraw %} + +レイアウトを使用するページで、その変数を参照します。 + + + +{% raw %} +```liquid +{{ myvar }} +``` +{% endraw %} + +変数はレンダリングされません。なぜなら、まずLiquidをレンダリングしてからレイアウトのプロセスに移行するという順番で解釈するためです。Liquidがレンダリングされる時点では、変数はまだ割り当てられていません。 + + + +このコードを動かすためには、変数の割り当てをページのfront matterで行います。 + + + +### インクルードファイルのMarkdownは処理されません + + +`_includes/mycontent.md`というMarkdownファイルがあるとします。Markdownファイルでは、Markdownのフォーマットで書かれています。 + + + +```markdown +This is a list: +* first item +* second item +``` + +以下のように、HTMLファイルに先ほどのファイルをインクルードします。 + + + +{% raw %} +```liquid +{% include mycontent.md %} +``` +{% endraw %} + +Markdownは処理されません。なぜなら、Liquid(`include`)タグがまず処理され、`mycontent.md`がHTMLファイルに挿入されるためです。Markdownは*それから*処理されることになります。 + + + +ですが、*HTML*ページに挿入したため、Markdownは処理されません。Markdownの変換プロセスは、Markdownファイルでのみ行われます。 + + + +コードを動かすためには、HTMLファイルにインクルードするファイルはHTML形式にします。 + + + +`highlight`タグはMarkdownの処理を必要としません。以下のインクルードコンテンツがあるとします。 + + + +{% raw %} +```liquid +{% highlight javascript %} +console.log('alert'); +{% endhighlight %} +``` +{% endraw %} + +`highlight`タグはLiquidです。(Liquidはコンテンツを構文強調表示のためにRougeに渡します。)その結果、このコードはHTMLにシンタックスハイライト処理され変換されます。Jekyllは`highlight`タグにMarkdown処理のプロセスを必要としません。 + + + +### LiquidとJavaScriptを混合するとレンダリングされません + + +Liquidの`assign`タグをJavaScriptで使おうとしているとします。 + + + +{% raw %} +```javascript + + +

      + + +``` +{% endraw %} + +`assign`タグはサイトのLiquidレンダリング中のみ使用可能ですので、これは動きません。このJavaScriptの例では、HTMLページでユーザーがボタン("Click me")をクリックしたときに実行されます。Liquidロジックはもはや有効ではなく、`assign`タグは何も返しません。 + + + +しかしながら、Jekyllサイトの変数やLiquidを、後からスクリプト実行時に*渡す*事もできます。例えば、`someContent: "This is some content"`のfront matterプロパティがあるとします。次のようにできます。 + + + +{% raw %} +```js + + +

      + + +``` +{% endraw %} + +Jekyllがビルドするときに、`someContent`プロパティをスクリプトの値に渡し、`{% raw %}{{ page.someContent }}{% endraw %}`を`"This is some content"`に変換します。 + + + +JekyllがビルドするときにLiquidをレンダリングすることを覚えておいてください。Liquidはブラウザで実行時のユーザーイベントでは利用できません。 + + + +## YAMLでのLiquid使用についてのメモ + + +LiquidはYAMLやfront matterではレンダリングされないことを覚えておいてください。(これは解釈の順番とは関係ありませんが、要素のレンダリングに関する一般的な問題ですので、言及する価値があります。) + + + +例えば、`highlight`タグを`_data/mydata.yml`ファイルで使用したい場合を考えます。 + + + +{% raw %} +```liquid +myvalue: > + {% highlight javascript %} + console.log('alert'); + {% endhighlight %} +``` +{% endraw %} + +ページにこの値を挿入します。 + + + +{% raw %} +```liquid +{{ site.data.mydata.myvalue }} +``` +{% endraw %} + +これは、構文を強調表示するコードサンプルではなく、文字列として表示されます。 コードをレンダリングするには、代わりにインクルードを使用することを検討してください。 + + diff --git a/_tutorials/using-jekyll-with-bundler.md b/_tutorials/using-jekyll-with-bundler.md new file mode 100644 index 0000000..10d89d0 --- /dev/null +++ b/_tutorials/using-jekyll-with-bundler.md @@ -0,0 +1,140 @@ +--- +layout: tutorials +permalink: /tutorials/using-jekyll-with-bundler/ +title: BundlerでJekyllを使う +--- + + +>Bundlerは、必要なgemとバージョンを追跡しインストールすることで、Rubyプロジェクトに一貫した環境を提供します。 + + + +[Bundler](https://bundler.io){:target="_blank"}はJekyllで使用できる素晴らしいツールです。プロジェクト毎に依存関係を追跡するため、異なるプロジェクトで異なるバージョンのJekyllを使用する場合や、システムやユーザーレベルでJekyllをインストールしたくない場合に、特に便利です。このチュートリアルでは、Baundlerを使用して、Jekyllをプロジェクト外にインストールせずに、新しいJekyllプロジェクトを作る方法を示します。 + + + +## 始める前に + + +このチュートリアルでは、[Ruby](https://www.ruby-lang.org/en/){:target="_blank"}と[Bundler](https://bundler.io/){:target="_blank"}のインストールが必要です。インストール手順は、それぞれのwebサイトをご確認ください。 + + + +## Bunblerの初期化 + + +まず始めに行うことは、プロジェクト用の新しいディレクトリを作り、`bundle init`を実行することです。これは、(空のGemfileを作ることで)新しいBundlerプロジェクトを作成します。 + + + +```sh +mkdir my-jekyll-website +cd my-jekyll-website +bundle init +``` + +## Bundlerの設定 + + +このステップはオプションですが、行った方がよいでしょう。プロジェクトのサブディレクトリ`./vendor/bundle/`にgemをインストールするため、Bundlerの設定を行います。これにより、依存関係を独立した環境にインストールして、システム上の他のgemと競合しないようにすることができます。このステップを飛ばすと、Bundlerは依存関係をシステムにグローバルにインストールします。 + + + +```sh +bundle install --path vendor/bundle +``` + +
      +
      Bundler設定は永続的です
      + +

      + この手順はプロジェクト毎に1回だけ必要です。Bundlerは設定を./.bundle/configに保存するので、将来のgemは同じ場所にインストールされます。 +

      + +
      + +## Jekyllを追加する + + +次は、新しいプロジェクトが依存するJekyllを追加するためにBundlerを使用します。このコマンドはJekyll gemをGemfileに追加し、`./vendor/bundle/`フォルダにインストールします。 + + + +```sh +bundle add jekyll +``` + +## Jekyll骨格を作成する + + +Jekyllがインストールされました。サイトの骨格を作るためにjekyllを使うことができます。フォルダにはBundlerのファイルが既にあり空ではないので、`--force`パラメータが必要です。Gemfileが既に存在しているとJekyllが混乱するので、`bundle install`を分割して実行します。 + + + +```sh +bundle exec jekyll new --force --skip-bundle . +bundle install +``` + +## サイトをサーブする + + +webサイトの準備ができました! `bundle exec jekyll serve`でWebサイトをサーブして、[http://127.0.0.1:4000](http://127.0.0.1:4000){:target="_blank"}を訪れましょう。これであなた自身がサイトの構築を続けていく準備ができました。Jekyllの通常のコマンドは全て利用できますが、プロジェクトフォルダにインストールしたJekyllのバージョンをBundlerで実行するために`bundle exec`をコマンドの前につけることを忘れないでください。 + + + +## ソース管理へのコミット + + +新しいサイトをバージョン管理で保存している場合、`./vendor/`と`./.bundle/`フォルダにはユーザーやプラットフォーム固有の情報が含まれているため無視したいでしょう。新しいユーザーは最新の`Gemfile`と`Gemfile.lock`に基づいて正しい依存関係をインストールできます。`Gemfile`と`Gemfile.lock`はどちらもチェックインが必要です。必要に応じて、次の`.gitignore`を使用してください。 + + + +**.gitignore** + +``` +# Ignore folders generated by Bundler +vendor +.bundle + +# Ignore folders generated by Jekyll +.sass-cache +_site +``` + diff --git a/_tutorials/video-walkthroughs.md b/_tutorials/video-walkthroughs.md new file mode 100644 index 0000000..75ba653 --- /dev/null +++ b/_tutorials/video-walkthroughs.md @@ -0,0 +1,43 @@ +--- +layout: tutorials +permalink: /tutorials/video-walkthroughs/ +title: 動画での解説 +--- + + +[Giraffe Academy](https://www.youtube.com/c/GiraffeAcademy){:target="_blank"}は、Jekyllの基本的な使用方法の動画での解説シリーズを用意しています。このシリーズでは、Jekyllのインストールから最初のサイトの設定、変数やレイアウト・条件といった複雑な機能の使い方までを学ぶことができます。 + + + +
      + +
      + +## レッスンのリスト + + +1. [Introduction to Jekyll (see above)](https://www.youtube.com/watch?v=T1itpPvFWHI&list=PLLAZ4kZ9dFpOPV5C5Ay0pHaa0RJFhcmcB&index=1){:target="_blank"} +2. [Mac Installation](https://www.youtube.com/watch?v=WhrU9m82Wm8&list=PLLAZ4kZ9dFpOPV5C5Ay0pHaa0RJFhcmcB&index=2){:target="_blank"} +3. [Windows Installation](https://www.youtube.com/watch?v=LfP7Y9Ja6Qc&list=PLLAZ4kZ9dFpOPV5C5Ay0pHaa0RJFhcmcB&index=3){:target="_blank"} +4. [Creating a Site](https://www.youtube.com/watch?v=pxua_1vyFck&index=4&list=PLLAZ4kZ9dFpOPV5C5Ay0pHaa0RJFhcmcB){:target="_blank"} +5. [Front Matter](https://www.youtube.com/watch?v=ZtEbGztktvc&index=5&list=PLLAZ4kZ9dFpOPV5C5Ay0pHaa0RJFhcmcB){:target="_blank"} +6. [Writing Posts](https://www.youtube.com/watch?v=gsYqPL9EFwQ&list=PLLAZ4kZ9dFpOPV5C5Ay0pHaa0RJFhcmcB&index=6){:target="_blank"} +7. [Working With Drafts](https://www.youtube.com/watch?v=X8jXkW3k2Jg&index=7&list=PLLAZ4kZ9dFpOPV5C5Ay0pHaa0RJFhcmcB){:target="_blank"} +8. [Creating Pages](https://www.youtube.com/watch?v=1na-IWfv08M&index=8&list=PLLAZ4kZ9dFpOPV5C5Ay0pHaa0RJFhcmcB){:target="_blank"} +9. [Permalinks](https://www.youtube.com/watch?v=938jDG_YPdc&list=PLLAZ4kZ9dFpOPV5C5Ay0pHaa0RJFhcmcB&index=9){:target="_blank"} +10. [Front Matter Defaults](https://www.youtube.com/watch?v=CLCaJJ1zUHU&index=10&list=PLLAZ4kZ9dFpOPV5C5Ay0pHaa0RJFhcmcB){:target="_blank"} +11. [Themes](https://www.youtube.com/watch?v=NoRS2D-cyko&list=PLLAZ4kZ9dFpOPV5C5Ay0pHaa0RJFhcmcB&index=11){:target="_blank"} +12. [Layouts](https://www.youtube.com/watch?v=bDQsGdCWv4I&list=PLLAZ4kZ9dFpOPV5C5Ay0pHaa0RJFhcmcB&index=12){:target="_blank"} +13. [Variables](https://www.youtube.com/watch?v=nLJBF2KiOZw&index=13&list=PLLAZ4kZ9dFpOPV5C5Ay0pHaa0RJFhcmcB){:target="_blank"} +14. [Includes](https://www.youtube.com/watch?v=HfcJeRby2a8&index=14&list=PLLAZ4kZ9dFpOPV5C5Ay0pHaa0RJFhcmcB){:target="_blank"} +15. [Looping Through Posts](https://www.youtube.com/watch?v=6N1X5XffuUA&index=15&list=PLLAZ4kZ9dFpOPV5C5Ay0pHaa0RJFhcmcB){:target="_blank"} +16. [Conditionals](https://www.youtube.com/watch?v=iNZBEki_x6o&list=PLLAZ4kZ9dFpOPV5C5Ay0pHaa0RJFhcmcB&index=16){:target="_blank"} +17. [Data Files](https://www.youtube.com/watch?v=M6b0KmLB-pM&list=PLLAZ4kZ9dFpOPV5C5Ay0pHaa0RJFhcmcB&index=17){:target="_blank"} +18. [Static Files](https://www.youtube.com/watch?v=knWjmVlVpso&index=18&list=PLLAZ4kZ9dFpOPV5C5Ay0pHaa0RJFhcmcB){:target="_blank"} +19. [Hosting on Github Pages](https://www.youtube.com/watch?v=fqFjuX4VZmU&list=PLLAZ4kZ9dFpOPV5C5Ay0pHaa0RJFhcmcB&index=19){:target="_blank"} + + From 8423d87ebc32f56fbc23c5b0cdce9a09e840c9bf Mon Sep 17 00:00:00 2001 From: SetoAira Date: Sat, 29 Jun 2019 11:59:48 +0900 Subject: [PATCH 07/13] =?UTF-8?q?master(8abd495)=E3=81=BE=E3=81=A7?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 154 ------------------------------------- pages/404.html | 6 +- pages/index.html | 44 +++++++---- pages/jekyllconf.md | 7 +- pages/resources.md | 182 ++++++++++++++++++++++++++------------------ pages/team.md | 16 ++-- 6 files changed, 156 insertions(+), 253 deletions(-) delete mode 100644 index.html diff --git a/index.html b/index.html deleted file mode 100644 index 6d63aa6..0000000 --- a/index.html +++ /dev/null @@ -1,154 +0,0 @@ ---- -layout: default -title: Jekyll • シンプルで、ブログのような、静的サイト -overview: true ---- - -
      -
      -
      -

      プレーンテキストから静的な Web サイトやブログを作成しましょう。

      - -
      -
      -
      -
      -
      -

      ※ Jekyllの最新内容を知りたい場合は 本家サイト(jekyllrb.com) を参照してください。翻訳に関する質問/要望は本家ではなく jekyllrb-jaのIssues へお願いします。

      -
      -
      -
      -
      - - - -
      -
      -
      -
      -
      -
      -

      起動から実行まで一瞬です。

      - -
      -
      -

      Quick-start Instructions

      -
      -

      - ~ - $ - gem install jekyll -

      -

      - ~ - $ - jekyll new my-awesome-site -

      -

      - ~ - $ - cd my-awesome-site -

      -

      - ~/my-awesome-site - $ - jekyll serve -

      -

      - # => http://localhost:4000 を見てください - -

      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      - Free Jekyll hosting on GitHub Pages -
      -

      GitHub Pages の無料ホスティング

      - -

      - ホスティング会社との取引にうんざりしていませんか? - GitHub PagesJekyll で動いています。 - だから、あなたも自分のサイトを簡単に GitHub にデプロイできます。 - しかも、 カスタムドメイン名を含む全てが無料です。 - - GitHub Pages についてもっと知る → - -

      -
      -
      -
      -
      -
      -
      diff --git a/pages/404.html b/pages/404.html index 9edc873..25fc900 100644 --- a/pages/404.html +++ b/pages/404.html @@ -7,7 +7,8 @@
      -

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

      +

      あぁ。このページはきっと
      隠れているんだ...

      +
      @@ -15,7 +16,8 @@
      -

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

      +

      要求されたリソースは見つかりませんでした。
      ここに、あなたが知りたいことを見つける手助けとなるリンクがあります:

      +
  • VariableDescription変数説明
    - - - - - - - - - - - - - - - - - - - - -
    変数解説
    -

    collection

    -
    -

    コレクションのラベル

    -
    -

    path

    -
    -

    コレクションのディレクトリに対するドキュメントの相対パス

    -
    -

    output_ext

    -
    -

    出力ファイルの拡張子

    -
    - +```yaml +collections: + tutorials: + order: + - hello-world.md + - introduction.md + - concepts/basics.md + - concepts/advanced.md +``` - +どちらのメタデータキーも設定されている場合、`order`のリストが優先されます。 -## Liquid属性 + +{% endif %} - +## Liquid属性 + ### コレクション + - - -各コレクションには、Liquid変数`site`を通してアクセス可能です。例えば、`_albums`にある`albums`コレクションにアクセスしたい場合は、`site.albums`を使います。 -各コレクションそれ自体は、ドキュメントの配列です(例えば、`site.albums` -は、`site.pages`や`site.posts`と同じようなドキュメントの配列です)。これらのドキュメントの属性にアクセスする方法については、以下を参照してください。 +コレクションは、`site.collections`下に`_config.yml`で指定したメタデータを付加することで使用できます。情報を以下に示します。 - - -また、コレクションには`site.collections`を通してアクセスできますが、これには、`_config.yml`で指定がなされているならそのメタデータと、次の情報とがあります。 - - +
    - + + @@ -289,8 +244,11 @@ The collections are also available under `site.collections`, with the metadata y @@ -301,70 +259,22 @@ The collections are also available under `site.collections`, with the metadata y

    ドキュメントの配列。

    + - - - - - - - - - - - -
    変数解説説明

    - コレクションの名前(例:my_collection)。 + コレクションの名前。my_collectionなど。

    +
    -

    relative_directory

    -
    -

    - コレクションのソースディレクトリのパス(サイトソースからの相対パス)。 -

    -
    -

    directory

    -
    -

    - コレクションのソースディレクトリのフルパス。 -

    -
    -

    output

    -
    -

    - 個別ファイルとしてコレクションのドキュメントを出力するか否かの指定。 -

    -
    -
    - - @@ -373,8 +283,12 @@ The collections are also available under `site.collections`, with the metadata y

    - The path to the collections's source directory, relative to the site source. + コレクションのディレクトリへの、サイトからの相対パス。

    + @@ -383,8 +297,11 @@ The collections are also available under `site.collections`, with the metadata y

    - The full path to the collections's source directory. + コレクションのディレクトリへのフルパス。

    + @@ -393,34 +310,71 @@ The collections are also available under `site.collections`, with the metadata y

    - Whether the collection's documents will be output as individual files. + コレクションのドキュメントを個別のファイルとして出力するかどうか。

    + ---> -### ドキュメント +
    +
    強制コレクション
    + +

    あなたが作成したコレクションに加え、Jekyllはpostsコレクションを強制的に保持しています。_postsディレクトリがあるかどうかは、関係ありません。site.collectionsの反復処理を行う場合は注意してください。フィルタで除外する必要があるかもしれません。

    + +

    コレクションを見つけるには、フィルタを使用するのがよいでしょう。 + {% raw %}{{ site.collections | where: "label", "myCollection" | first }}{% endraw %}

    + +
    + +
    +
    コレクションと日時
    + +

    postsコレクションのドキュメントを除き、作成した全てのコレクションのドキュメントは、割り当てられた日付の有無に関係なくLiquidでアクセス可能ですので、レンダリング可能です。 +

    + +

    関連するコレクションのメタデータでoutput: trueが指定されている場合のみ、ドキュメントがディスクに書き込まれます。加えて、未来の日付のドキュメントはsite.futureがtrueの場合だけです。 +

    + +

    ドキュメントをディスクに書き込むかの更に細かい設定は、front matterで published: false (デフォルトはtrue)を設定することで可能です。 +

    + +
    - +### ドキュメント + -ドキュメントの対応するファイルに備えられたYAML front-matterのものに加えて、各ドキュメントは、次の属性を持っています。 +各ドキュメントのfront matterで記載されたものに加えて、次の属性を持っています。 - +
    - - + + + @@ -430,8 +384,15 @@ In addition to any YAML front-matter provided in the document's corresponding fi @@ -440,8 +401,12 @@ In addition to any YAML front-matter provided in the document's corresponding fi @@ -450,8 +415,11 @@ In addition to any YAML front-matter provided in the document's corresponding fi @@ -460,8 +428,11 @@ In addition to any YAML front-matter provided in the document's corresponding fi @@ -470,8 +441,11 @@ In addition to any YAML front-matter provided in the document's corresponding fi @@ -482,88 +456,24 @@ In addition to any YAML front-matter provided in the document's corresponding fi

    ドキュメントのコレクションの名前。

    - - - -
    変数解説変数説明

    - (出力前の)ドキュメントの内容。YAML front-matterを備えていない場合、ファイルにある内容のすべてがこれに該当する。YAML front-matterが使われている場合は、ファイルにおけるfront-matterの終端を示す`---`以降の内容がこれに該当する。 + ドキュメントの(レンダリングされていない)コンテンツ。front matterが無い場合、Jekyllはコレクション内のファイルを生成しません。front matterがある場合は、front matter終了の`---`以降の全てです。

    +

    - contentに基づくドキュメントのレンダリング出力。 + contentの出力。

    +

    - ドキュメントのソースファイルのフルパス。 + ドキュメントのソースファイルへのフルパス。

    +

    - ドキュメントのソースファイルのパス(サイトソースからの相対パス)。 + サイトからのドキュメントのソースへの相対パス。

    +

    - 出力されたコレクションのURL。ファイルは、サイトの設定ファイルにおけるrenderキーに、それが属するコレクションの名前が含まれているときに限り、出力先に書き出される。 -

    + 出力されたコレクションのURL。サイトの設定でoutput: trueが指定されている場合のみファイルが出力されます。 +

    +
    -
    - - -

    collection

    +

    date

    - The name of the document's collection. + ドキュメントのコレクションの日付

    + ---> diff --git a/_docs/community/bug.md b/_docs/community/bug.md new file mode 100644 index 0000000..ee3cd9e --- /dev/null +++ b/_docs/community/bug.md @@ -0,0 +1,16 @@ +--- +title: バグの報告 +permalink: "/docs/community/bug/" +--- + + +バグがJekyllプラグインのものだと思う場合は、そのプラグインのリポジトリのissueを開いてください。 — まず、[rubygemsでプラグインを探し](https://rubygems.org/){:target="_blank"}、プラグインのリポジトリへアクセスするための`Homepage`リンクをクリックしてください。 + + + +Jekyll自身のバグだと思う場合は、[issueを開いて](https://github.com/jekyll/jekyll/issues/new){:target="_blank"}ください。 + + diff --git a/_docs/community/community.md b/_docs/community/community.md new file mode 100644 index 0000000..fd3f1d4 --- /dev/null +++ b/_docs/community/community.md @@ -0,0 +1,60 @@ +--- +title: コミュニティ +permalink: /docs/community/ +redirect_from: "/help/index.html" +--- + + +## Jekyll貢献者 行動規範 + + +このプロジェクトの貢献者・維持者として、そしてオープンで歓迎されるコミュニティーが成長するために、全ての人の問題の報告・機能のリクエストの投稿・ドキュメンテーションの更新・プルリクエストやパッチの提出・その他の活動を尊重することを約束します。 + + +全[行動規範]({{ "/docs/conduct/" | relative_url }})を読む + + +## サポートを得る場所 + + +Jekyllのサポートを探しているのなら、多くの選択肢があります: + + +* [Jekyllドキュメンテーション](https://jekyllrb.com/docs/)を読む +* Jekyllの使い方について質問があれば、[Jekyll Forum](https://talk.jekyllrb.com/){:target="_blank"}や[StackOverflow](https://stackoverflow.com/questions/tagged/jekyll){:target="_blank"}でディスカッションを始めてください。 +* Jekyllerとのチャット — [Gitter channel](https://gitter.im/jekyll/jekyll){:target="_blank"}や[IRC channel on Freenode](irc:irc.freenode.net/jekyll)に参加してください。 + + + +これらのサービスには、あなたに正しい方向を示してくれる、親切なコミュニティメンバーが沢山います。 + + +**覚えておいてください:Jekyllのissue trackerはサポートフォーラムではありません。** + + +## 貢献する方法 + + +* [貢献の方法]({{ "/docs/contributing/" | relative_url }}) +* [バグの報告方法]({{ "/docs/community/bug/" | relative_url }}) +* [Jekyllのメンテナンスガイド]({{ "/docs/maintaining/" | relative_url }}) + + + + +## Jekyllconf + +Jekyllコミュニティのメンバーからの興味深い使用方法、彼らが学んだ技術、メタJekyllトピックについて話している[ビデオを見て]({{ "/jekyllconf/" | relative_url }})ください。 + + +## Jekyll on Twitter + +The [official Jekyll Twitter account](https://twitter.com/jekyllrb){:target="_blank"}. diff --git a/_docs/conduct.md b/_docs/conduct.md new file mode 100644 index 0000000..431d0b9 --- /dev/null +++ b/_docs/conduct.md @@ -0,0 +1,127 @@ +--- +title: 行動規範 +permalink: "/docs/conduct/" +note: This file is autogenerated. Edit /CONDUCT.markdown instead. +redirect_from: "/conduct/index.html" +editable: false +--- + + +## 誓約 + + +オープンで歓迎される環境を促進するために、私たちは貢献者及びメンテナンス者として、誰に対してもハラスメントなく、次の事柄にかかわらず、プロジェクトとコミュニティに参加します。年齢、体格、身体障害、人種、性別、性同一性とその表現、経験のレベル、教育、社会経済的地位、国籍、個人的な外見、人種、宗教、や性的アイデンティティとその方向性。 + + + +## スタンダード + + +前向きな環境の構築に貢献する行動の例は以下が含まれています。 + + + +* 歓迎的で包括的な言葉を使う +* 異なる視点や経験を尊重する +* 建設的な批判を優雅に受け入れる +* コミュニティにとって何が最善なのかに焦点を当てる +* 他のコミュニティメンバーに共感を示す + + + +参加者による容認できない行動の例は次の様な事柄です。 + + + +* 性的表現の言語や画像の使用、および歓迎されない性的注意や進言 +* トローリング、侮辱的/軽蔑的なコメント、および個人的または政治的攻撃 +* 公開またはプライベートの嫌がらせ +* 許可なく、他者の電子的アドレスやリアルの住所など、他者の個人情報を公開すること +* 職業的に不適切と合理的に考えられるその他の行為 + + + +## 責任 + + +プロジェクト管理者は、許容できる行動の基準を明確にする責任があり、許容できない行動が発生した場合には、それに応じて適切かつ公正な是正措置を講じることが求められます。 + + + +プロジェクト管理者は、この行動規範に合わないコメント、コミット、コード、ウィキの編集、問題、その他の貢献を削除、編集、または棄却する、あるいはその他の行為を一時的または恒久的に禁止する権限を持ちます。それらは不適切、脅迫的、攻撃的、または有害と見なします。 + + + +## 範囲 + + +この行動規範は、個人がプロジェクトまたはそのコミュニティを代表している場合に、プロジェクトスペース内および公共スペース内の両方に適用されます。プロジェクトまたはコミュニティを代表する例としては、公式のプロジェクトEメールアドレスの使用、公式のソーシャルメディアアカウントによる投稿、オンラインまたはオフラインのイベントでの代表者としての行動などがあります。プロジェクトの表現は、プロジェクト管理者によって定義がさらに明確にされる可能性があります。 + + + +## 実施 + + +虐待、嫌がらせ、またはその他の容認できない行動が見られた場合は、プロジェクトチームの[olivia@jekyllrb.com](mailto:olivia@jekyllrb.com)に連絡してください。すべての苦情はレビューおよび調査され、必要かつ状況に適していると思われる対応がとられます。プロジェクトチームは、インシデントの報告者に関して機密性を維持する義務があります。特定の執行方針の詳細は別に掲載される可能性があります。 + + + +誠意を持って行動規範を遵守しない、または執行しないプロジェクト管理者は、他のプロジェクトの指導者の決定に応じて一時的または恒久的な影響を受ける可能性があります。 + + + +## 帰属 + + +この行動規範は、[https://www.contributor-covenant.org/version/1/4/code-of-conduct.html](https://www.contributor-covenant.org/version/1/4/code-of-conduct.html){:target="_blank"}で入手可能な[寄稿者規約][homepage]、バージョン1.4から改訂されたものです。 + + + +[homepage]: https://www.contributor-covenant.org + +この行動規範に関するよくある質問への回答は、[https://www.contributor-covenant.org/faq](https://www.contributor-covenant.org/faq){:target="_blank"}をご覧ください。 + + diff --git a/_docs/configuration.md b/_docs/configuration.md index b550ef1..f20976f 100644 --- a/_docs/configuration.md +++ b/_docs/configuration.md @@ -1,875 +1,33 @@ --- -layout: docs -title: 設定項目 -prev_section: structure -next_section: frontmatter +title: 構成・設定 permalink: /docs/configuration/ --- - - - -Jekyll はあなたが夢見る任意の方法でサイトを組むことができます、 -それはパワフルで柔軟なコンフィグオプションのおかげで可能になります。 -これらのオプションは、サイトのルートディレクトリに置かれる `_config.yml` ファイルか、 -ターミナルから実行した `jekyll` のフラグとしてのどちらでも指定することができます。 - - - -## コンフィグ設定 - - - -### グローバルコンフィグ - - - -以下のテーブルは、Jekyll で使用可能な設定と、 -それらを制御するためのオプション (設定ファイルで指定します) と -フラグ (コマンドラインで指定します) の一覧です。 - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    設定 - オプションフラグ -
    -

    サイトソース

    -

    Jekyll がファイルを読み込むディレクトリを変更します。

    -
    -

    source: DIR

    -

    -s, --source DIR

    -
    -

    サイト出力先

    -

    Jekyll がファイルを書き出すディレクトリを変更します。

    -
    -

    destination: DIR

    -

    -d, --destination DIR

    -
    -

    セーフモード

    -

    カスタムプラグインを無効化します。

    -
    -

    safe: BOOL

    -

    --safe

    -
    -

    エクスクルード

    -

    ディレクトリやファイルを変換対象から除外します。 - 除外はサイトのソースディレクトリからの相対指定であり、 - ソースディレクトリ外のものは指定できません。 -

    -
    -

    exclude: [DIR, FILE, ...]

    -
    -

    インクルード

    -

    - ディレクトリまたはファイルを強制的に変換対象に含めます。 - ドットファイルはデフォルトで除外されるため、 .htaccess を指定するのがよい例です。 -

    -
    -

    include: [DIR, FILE, ...]

    -
    -

    タイムゾーン

    -

    - サイト生成のためにタイムゾーンを設定します。 - このオプションは、Ruby が日付の作成と操作を処理するために使用する環境変数 TZ を設定します。 - IANA タイムゾーン データベース からの - 任意のエントリが有効です、例えば America/New_York のような。 - デフォルトでは、あなたが使っているオペレーティングシステムのローカルタイムゾーンがセットされています。 -

    -
    -

    timezone: TIMEZONE

    -
    -

    エンコーディング

    -

    - 名前によってファイルのエンコーディングがセットされます。 - ( Ruby 1.9 またはそれ以降でのみ利用可能です。) - デフォルトの値は、2.0.0以降では utf-8 、2.0.0より前では nil で、 - Rubyのデフォルト ASCII-8BIT を使います。 - Ruby で利用可能なエンコーディングは、コマンド - ruby -e 'puts Encoding::list.join("\n")' - によって一覧することができます。 -

    -
    -

    encoding: ENCODING

    -
    -
    - - - -### ビルドコマンドオプション - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    設定オプションフラグ
    -

    再生成

    -

    ファイルが変更された場合の、サイトの自動再生成を有効にします。

    -
    -

    -w, --watch

    -
    -

    設定

    -

    - 自動的に読み込まれる _config.yml の代わりに - 設定ファイルを指定します。 - 先に指定したファイルの設定は、後に指定したファイルの設定で上書きされます。 -

    -
    -

    --config FILE1[,FILE2,...]

    -
    -

    ドラフト

    -

    ドラフトの posts を処理し、レンダリングします。

    -
    -

    --drafts

    -
    -

    未来日付の出力

    -

    未来の日付の posts も出力します。

    -
    -

    future: BOOL

    -

    --future

    -
    -

    LSI

    -

    関連 posts の索引を作成します。

    -
    -

    lsi: BOOL

    -

    --lsi

    -
    -

    Posts 制限

    -

    解析、出力する posts の数を制限します。

    -
    -

    limit_posts: NUM

    -

    --limit_posts NUM

    -
    -
    - - - -### Serve コマンドオプション - - - -以下のオプションに加え、 `serve` サブコマンドは `build` サブコマンドの -オプションすべてを受け入れることができます。 -それらのオプションを使用してサイトをビルドしたうえで、サイトを serve します。 - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - -
    設定オプションフラグ
    -

    ローカルサーバのポート

    -

    与えられたポートを Listen します。

    -
    -

    port: PORT

    -

    --port PORT

    -
    -

    ローカルサーバのホスト名

    -

    与えられたホスト名を Listen します。

    -
    -

    host: HOSTNAME

    -

    --host HOSTNAME

    -
    -

    ベース URL

    -

    与えられたベース URL から Web サイトを提供します。

    -
    -

    baseurl: URL

    -

    --baseurl URL

    -
    -

    切り離し

    -

    ターミナルからサーバを切り離します。

    -
    -

    detach: BOOL

    -

    -B, --detach

    -
    -
    - - - -
    -
    設定ファイルにタブは使わないでください
    -

    - パースエラーにつながるか、 Jekyll のデフォルト設定に戻るかのどちらかになるでしょう。 - 代わりにスペースを使用してください。 -

    -
    - - - -## デフォルト設定 - - - -Jekyll はデフォルトでは以下のオプションで実行されます。 -代わりのオプションが設定ファイルまたはコマンドラインから明示的に指定されない限り、 -Jekyll はこれらのオプションを使用して起動します。 - - - -
    -
    サポートしていない kramdown のオプションが 2 つあります
    -

    - remove_block_html_tagsremove_span_html_tags の両方が - kramdown HTML コンバータに含まれていないので、現在 Jekyll でもそれらをサポートしていません。 - ご注意ください。 -

    -
    - - - -{% highlight yaml %} -source: . -destination: ./_site -plugins: ./_plugins -layouts: ./_layouts -include: ['.htaccess'] -exclude: [] -keep_files: ['.git','.svn'] -gems: [] -timezone: nil -encoding: nil - -future: true -show_drafts: nil -limit_posts: 0 -pygments: true - -relative_permalinks: true - -permalink: date -paginate_path: 'page:num' - -markdown: maruku -markdown_ext: markdown,mkd,mkdn,md -textile_ext: textile - -excerpt_separator: "\n\n" - -safe: false -watch: false # deprecated -server: false # deprecated -host: 0.0.0.0 -port: 4000 -baseurl: / -url: http://localhost:4000 -lsi: false - -maruku: - use_tex: false - use_divs: false - png_engine: blahtex - png_dir: images/latex - png_url: /images/latex - fenced_code_blocks: true - -rdiscount: - extensions: [] - -redcarpet: - extensions: [] - -kramdown: - auto_ids: true - footnote_nr: 1 - entity_output: as_char - toc_levels: 1..6 - smart_quotes: lsquo,rsquo,ldquo,rdquo - use_coderay: false - - coderay: - coderay_wrap: div - coderay_line_numbers: inline - coderay_line_numbers_start: 1 - coderay_tab_width: 4 - coderay_bold_every: 10 - coderay_css: style - -redcloth: - hard_breaks: true -{% endhighlight %} - - - -
    -
    Kramdown をデフォルトに設定したバージョンは、まだリリースされていません。
    -

    - 最新の開発版リリースにおいて、私たちは Maruku を非推奨としました。代わりに Kramdown がデフォルトになる予定です。 - それより前のバージョンでは Maruku をデフォルトで使用しています。 -

    -
    - - - -## Markdown オプション - - - -Jekyll でサポートしているさまざまな Markdown レンダラでは、 -追加のオプションを利用できる場合があります。 - - - -### Redcarpet - - - -Redcarpet は `extensions` サブセッティングを設けることで設定が可能です。 -値は文字列の配列である必要があります。 -各々の文字列は `Redcarpet::Markdown` クラスの拡張の -いずれかの名前であるべきです。 -配列に名前が存在する場合、当該の拡張を `true` にセットします。 - - - -Jekyll は Redcarpet の 2 つの特別な拡張を処理します: - - - -- `no_fenced_code_blocks` --- デフォルトでは、 - Jekyll は `fenced_code_blocks` 拡張(トリプルチルダまたはトリプルバッククォートで - コードブロックを区切るための拡張)を `true` に設定しています。 - おそらく、GitHub がこれを積極的に採用しているので、避けられなくなりつつある、という理由からです。 - Jekyll で使用するときには、 Redcarpet の通常の `fenced_code_blocks` 拡張は不活性です。 - 代わりに、この逆バージョンの拡張を使って fenced code を無効化できます。 - 最初の区切りのあとに、ハイライトする言語の指定もできることに注目: - - ```ruby - # ...ruby code - ``` - - fenced code block と highlighter を両方有効にすると、静的にコードをハイライトします。 - highlighter なしの場合、`` 要素に `class="LANGUAGE"` を追加し、 - 様々な JavaScript のコードハイライトライブラリがこれをヒントとして使用できるようにします。 -- `smart` --- この擬似拡張は SmartyPants をオンにし、 - straight quotes を curly quotes に、 - ハイフンの連打を em (`---`) ダッシュ、 en (`--`) ダッシュに変換します。 - - - -その他の拡張はすべて Redcarpet における本来の名前を維持しており、 -`smart` 以外のレンダリングオプションは Jekyll によって指定されることはありません。 -[利用可能な拡張のリストは Redcarpet の README から見つけられます。][redcarpet_extensions] -Redcarpet の正しいバージョンの README を見ていることを確認してください。 -Jekyll は現在 v2.2.x を使用しています。 `footnotes` や `highlight` のような拡張は -バージョン 3.0.0 以降まで追加されません。 -もっとも一般的に使用される拡張は以下の通りです: - - - -- `tables` -- `no_intra_emphasis` -- `autolink` - - - -[redcarpet_extensions]: https://github.com/vmg/redcarpet/blob/v2.2.2/README.markdown#and-its-like-really-simple-to-use - - - -### Kramdown - - - -上記のデフォルトに加えて、 `input` オプションに `GFM` 値を渡すことで、 -GitHub Flavored Markdown の認識を有効にすることができます。 - - - -例えば、あなたの `_config.yml` にこう書きます: - - - - kramdown: - input: GFM - - +--- --> + +Jekyllではサイトをどのように構築するか、柔軟にカスタマイズすることができます。これらのオプションは、サイトのrootディレクトリにある`_config.yml`か`_config.toml`で指定することができます。また、ターミナルで`jekyll`を実行するときにflagsとして設定することもできます。 + + +* [オプション設定]({{ "/docs/configuration/options/" | relative_url }}) +* [デフォルト設定]({{ "/docs/configuration/default/" | relative_url }}) +* [Front Matterのデフォルト]({{ "/docs/configuration/front-matter-defaults/" | relative_url }}) +* [環境]({{ "/docs/configuration/environments/" | relative_url }}) +* [Markdownオプション]({{ "/docs/configuration/markdown/" | relative_url }}) +* [Liquidオプション]({{ "/docs/configuration/liquid/" | relative_url }}) +* [Webrickオプション]({{ "/docs/configuration/webrick/" | relative_url }}) +* [増分の再生成]({{ "/docs/configuration/incremental-regeneration/" | relative_url }}) + + + diff --git a/_docs/configuration/default.md b/_docs/configuration/default.md new file mode 100644 index 0000000..3adb6df --- /dev/null +++ b/_docs/configuration/default.md @@ -0,0 +1,92 @@ +--- +title: デフォルト設定 +permalink: "/docs/configuration/default/" +--- + + +Jekyllはデフォルトでは以下の設定を使用します。設定ファイルやコマンドラインで特定のオプションを変更することができます。 + + + +```yaml +# Where things are +source : . +destination : ./_site +collections_dir : . +plugins_dir : _plugins +layouts_dir : _layouts +data_dir : _data +includes_dir : _includes +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 +rdiscount: + extensions : [] + +redcarpet: + extensions : [] + +kramdown: + auto_ids : true + entity_output : as_char + toc_levels : 1..6 + smart_quotes : lsquo,rsquo,ldquo,rdquo + input : GFM + hard_wrap : false + footnote_nr : 1 + show_warnings : false +``` diff --git a/_docs/configuration/environments.md b/_docs/configuration/environments.md new file mode 100644 index 0000000..7ba183f --- /dev/null +++ b/_docs/configuration/environments.md @@ -0,0 +1,71 @@ +--- +title: 環境 +permalink: "/docs/configuration/environments/" +--- + + +`build`(や`serve`)引数で、Jekyllの環境と値を指定できます。その後、ビルドはこの値をコンテンツの条件付きステートメントに適用します。 + + + +例えば、コードで次の条件を設定したとします。 + + + +{% raw %} +```liquid +{% if jekyll.environment == "production" %} + {% include disqus.html %} +{% endif %} +``` +{% endraw %} + +Jekyllサイトを構築するとき、`if`内のコンテンツは、次のようにビルドコマンドで`production`environmentを指定しなければ実行されません。 + + + +```sh +JEKYLL_ENV=production jekyll build +``` + +environmentの値を指定することで、特定の場合のみコンテンツを利用可能にすることができます。 + + + +`JEKYLL_ENV`のデフォルト値は、`development`です。従って、ビルド引数から`JEKYLL_ENV`を省略すると、デフォルト値は`JEKYLL_ENV=development`になります。{% raw %}`{% if jekyll.environment == "development" %}`{% endraw %}タグ内の全てのコンテンツは自動的にビルド時に表示されます。 + + + +environment値は(`development`と`production`以外は)好きなものを使用できます。DisqusコメントフォームやGoogle Analyticsを含む開発時には隠したい要素があるでしょう。"Edit me in GitHub"ボタンは開発環境では表示して、製品環境では含まないようにしたいのではないでしょうか。 + + + +ビルドコマンドのオプションでの指定で、ある環境から別の環境への変更時に、設定ファイル内の値を変更する必要がありません。 + + + +
    +

    + 環境に応じて設定の一部を切り替えるには、ビルドコマンドオプションを使用します。例えば--config _config.yml、_config_development.ymlです。 後のファイルの設定は、前のファイルの設定を上書きします。 +

    + +
    diff --git a/_docs/configuration/front-matter-defaults.md b/_docs/configuration/front-matter-defaults.md new file mode 100644 index 0000000..5840dd2 --- /dev/null +++ b/_docs/configuration/front-matter-defaults.md @@ -0,0 +1,198 @@ +--- +title: Front Matterのデフォルト +permalink: "/docs/configuration/front-matter-defaults/" +--- + + +[front matter]({{ "/docs/front-matter/" | relative_url }})の使用は、サイトのページやポストに特別な設定行う方法の一つです。デフォルトのレイアウトやタイトルのカスタマイズ、ポストの正確な日時の指定のような設定は、ページやポストのfront matterで追加することができます。 + + + +度々、多くのオプション設定を繰り返す場合が出てくるでしょう。各ファイルへの同じレイアウトの指定、ポストへの同じカテゴリの指定等です。著者名といったカスタム変数の追加も、ブログの多数のポストで同じです。 + + + +新しいポストやページを作成する度に設定を繰り返す代わりに、Jekyllはサイト設定でこれらのデフォルトを設定する方法を提供しています。これを行うには、プロジェクトのrootディレクトリの`_config.yml`に`defaults`キーを使用してサイト全体のデフォルトを設定します。 + + + +`defaults`キーはデフォルトを定義する特定のpathとscopeとvalueのペアの配列で指定します。オプションでパスのファイルの種類を指定することもできます。 + + + +サイトの全てのページとポストのデフォルトレイアウトを追加したい場合です。以下を`_config.yml`ファイルに追加します。 + + + +```yaml +defaults: + - + scope: + path: "" # an empty string here means all files in the project + values: + layout: "default" +``` + +
    + +
    一度止めて`jekyll serve`コマンドを再実行します
    +

    + グローバル設定と変数定義が含まれているマスター設定ファイルの_config.ymlは、実行時に一度だけ読み込まれます。自動再生成をしている時に_config.ymlに変更を加えても、次の実行まで読み込まれません。 +

    + +

    + Dataファイルは自動再生成時も再読込されます。 +

    + +
    + +ここでは、`scope`パスの中に存在するファイルに`values`に当てはめています。pathに空の文字列が指定されているので、プロジェクトの**全ファイル**に適用されます。例えばcssファイルのように、全てのファイルにはレイアウトを設定したくないでしょう。`scope`キーに`type`を指定することができます。 + + + +```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" +``` + +これで、`posts`タイプのファイルにのみレイアウトが設定されます。`pages`や`posts`、`drafts`、サイトのコレクションをtypeで使用することができます。`type`はオプションですが、`scope/values`ペアを指定するときは`path`を指定する必要があります。 + + + +前述のように、`defaults`には複数のscope/valuesペアを指定することができます。 + + + +```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" +``` + +このdefaultsで、全てのページは`my-site`レイアウトを使用します。`projects/`フォルダのhtmlファイルは`project`レイアウトを使用し、`page.author` [liquid変数]({{ "/docs/variables/" | relative_url }})に`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" +``` + +この例では、`my_collection`という[コレクション]({{ "/docs/collections/" | relative_url }})に`layout`は`default`だと設定します。 + + + +### Front MatterデフォルトでのGlobパターン + + +デフォルトをマッチさせるために、Globpパターンを使用することもできます(現在は、`*`を含むパター限定です)。例えば、`section`フォルダのサブフォルダにある各`special-page.html`に特定のレイアウトを設定することができます。{%- 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" +``` + +
    +
    Globとパフォーマンス
    + +

    + パスをGlobで指定するとパフォーマンスへの悪影響があることが知られており、特にWindowsでは最適化されていません。パスをGlobで指定すると、コレクションディレクトリの大きさに応じて構築時間が長くなります。 +

    + +
    + +### 優先順位 + + +Jekyllは`_config.yml`の`defaults`セクションで指定された設定を全て適用します。他の特定のパスへのscope/valuesペアを設定することで、上書きすることができます。 + + + +上に戻って下から3つ目の例を見てください。まず、`my-site`へのデフォルトページレイアウトを設定しています。そして、`project`用の`projects/`パスのページへのデフォルトを設定しています。ページやポストのfront matterに設定する任意の値で実行可能です。 + + + +最後に、`_config.yml`ファイルに`defaults`セクションを追加してサイト設定のデフォルトを設定した場合、それらの設定はページやポストで上書きできます。ページやポストのfront matterで設定を行うだけです。例えば、 + + + +```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... +``` + +`projects/foo_project.md`は、`layout`には`project`の代わりに`foobar`が、`author`には`Mr. Hyde`の代わりに`John Smith`がサイト構築時に設定されます。 + + diff --git a/_docs/configuration/incremental-regeneration.md b/_docs/configuration/incremental-regeneration.md new file mode 100644 index 0000000..1c9779c --- /dev/null +++ b/_docs/configuration/incremental-regeneration.md @@ -0,0 +1,53 @@ +--- +title: デフォルト設定 +permalink: "/docs/configuration/incremental-regeneration/" +--- + + +## 増分の再生成 + +
    +
    増分の再生成はまだ実験的な機能です
    + +

    + 増分の再生成は多くの一般的な状況で働きますが、全てのシナリオで働くわけではありません。この機能を使用するときは細心の注意を払ってください。また、以下にない問題はGitHubのissueを開いて報告してください。 +

    + +
    + +増分の再生成は、以前の構築から更新されたドキュメントやページだけを生成することで、構築時間を短くします。これは、ファイルの更新時刻と`.jekyll-metadata`ファイル内の内部ファイルの依存関係両方の追跡を行うことで実行されます。 + + + +現在の実装では、ドキュメントかページ、またはその依存関係にあるもののいずれかが変更された場合にのみ増分の再生成を行います。現在は({% raw %}`{% include %}`{% endraw %}タグを使用した)インクルードとレイアウトの依存関係のみ追跡しています。これは、他のドキュメントへの単純な参照(たとえば、投稿リストページで`site.posts`を反復処理する一般的なケース)は依存関係として検出されないことを意味します。 + + + +この欠点を解決するために、ドキュメントのfront matterに`regenerate: true`を設定すると、変更されているかどうかにかかわらず、Jekyllは強制的に再生成します。これは指定されたドキュメントだけを生成することに注意してください。他のドキュメントのコンテンツへの参照は再レンダリングされないため機能しません。 + + + +増分の再生成は、コマンドラインで`--incremental`フラッグ(省略形は`-I`)を使用、もしくは設定ファイルで`incremental: true`を指定することで有効にできます。 + + diff --git a/_docs/configuration/liquid.md b/_docs/configuration/liquid.md new file mode 100644 index 0000000..4f8d791 --- /dev/null +++ b/_docs/configuration/liquid.md @@ -0,0 +1,33 @@ +--- +title: Liquidオプション +permalink: "/docs/configuration/liquid/" +--- + + +エラーに対するLiquidの応答は、`error_mode`を設定することで設定できます。オプションは、 + + + +- `lax` --- 全てのエラーを無視する +- `warn` --- 各エラーをコンソールに警告出力する +- `strict` --- エラーメッセージを出力し、ビルドを中止する + + + +また、`strict_variables`や`strict_filters`を`true`に設定することで、割り当てられていない変数や存在しないフィルタをキャッチするようにLiquidのレンダラを設定することもできます。{% include docs_version_badge.html version="3.8.0" %} + + + +`error_mode`はLiquidのパーサを設定しますが、`strict_variables`と`strict_filters`オプションはLiquidのレンダラを設定し、結果として、相互に排他的です。 + + diff --git a/_docs/configuration/markdown.md b/_docs/configuration/markdown.md new file mode 100644 index 0000000..a95210b --- /dev/null +++ b/_docs/configuration/markdown.md @@ -0,0 +1,201 @@ +--- +title: Markdownオプション +permalink: "/docs/configuration/markdown/" +--- + + +Jekyllでサポートされている様々なMarkdownレンダラーには、追加のオプションがある場合があります。 + + + +### Kramdown + +KramdownはJekyllのデフォルトMarkdownレンダラーです。以下は現在サポートされているオプションのリストです。 + + + +* **auto_id_prefix** - 自動的に生成された見出しのIDのプレフィックス +* **auto_id_stripping** - 自動ID生成のために見出しテキストからすべてのフォーマットを削除 +* **auto_ids** - 自動見出しID生成を使用 +* **coderay_bold_every** - 行番号を太字にする頻度を定義 +* **coderay_css** - 強調表示されたコードのスタイル設定方法の定義 +* **coderay_default_lang** - ハイライトコードブロックのデフォルト言語を設定 +* **coderay_line_number_start** - 行番号の開始番号 +* **coderay_line_numbers** - 行番号を表示するかの定義 +* **coderay_tab_width** - 強調表示されたコードのtabの長さ +* **coderay_wrap** - 強調表示されたコードをどのように折り返すかを定義 +* **enable_coderay** - 構文の強調表示にcoderayを使う +* **entity_output** - エンティティの出力方法を定義 +* **footnote_backlink** - 脚注のバックリンクに使用するテキストを定義 +* **footnote_backlink_inline** - 脚注のバックリンクを常にインラインにするかどうかを指定 +* **footnote_nr** - 最初の脚注の番号 +* **gfm_quirks** - GFM特有の癖のセットを有効にします +* **hard_wrap** - 改行を文字通りに解釈する +* **header_offset** - ヘッダの出力オフセットを設定します +* **html_to_native** - HTML要素をネイティブ要素に変換する +* **line_width** - 文書を出力するときに使用される線の長さを定義 +* **link_defs** - リンク定義を事前定義 +* **math_engine** - mathエンジンの設定 +* **math_engine_opts** - mathエンジンのオプションを設定 +* **parse_block_html** - blockHTMLタグでkramdown構文を処理する +* **parse_span_html** - spanHTMLタグでkramdown構文を処理する +* **smart_quotes** - スマートクォート出力用のHTMLエンティティ名またはコードポイントを定義 +* **syntax_highlighter** - シンタックスハイライトの設定 +* **syntax_highlighter_opts** - シンタックスハイライトのオプションの設定 +* **toc_levels** - 目次に使用されるレベルを定義 +* **transliterated_header_ids** - IDを生成する前にヘッダテキストを音訳する +* **typographic_symbols** - 活版印刷シンボルから出力文字へのマッピングを定義 + + + + +
    +
    サポートされていないkramdownオプションが2つあります
    + +

    + remove_block_html_tagsremove_span_html_tagsは、kramdown HTMLコンバータに含まれていないため、現在Jekyllではサポートされていません。 +

    + +
    + +これらのオプションの詳細は、[Kramdown configuration documentation](https://kramdown.gettalong.org/options.html){:target="_blank"}をご覧ください。 + + + +### CommonMark + +[CommonMark](https://commonmark.org/){:target="_blank"}はMarkdown構文の合理化バージョンであり、Cで実装されているため、Rubyで実装されているデフォルトのKramdownよりも高速です。元のMarkdownとは[少し異なり](https://github.com/commonmark/CommonMark#differences-from-original-markdown){:target="_blank"}、[Block Inline Attribute Lists](https://kramdown.gettalong.org/syntax.html#block-ials){:target="_blank"}のようにKramdownで実装されているすべての構文要素をサポートするわけではありません。 + + + +[jekyll-commonmark](https://github.com/jekyll/jekyll-commonmark){:target="_blank"}プラグインを使った基本CommonMarkとGitHub Pagesでサポートされている[GitHub Flavored Markdown](https://github.com/github/jekyll-commonmark-ghpages){:target="_blank"}の2種類があります。 + + + +### Redcarpet + +Redcarpetは、文字列の配列の`extensions`サブ設定を提供することによって、設定することができます。 各文字列は、`Redcarpet::Markdown`クラスの拡張の名前でなければなりません。配列内に存在する場合は、対応する拡張子を`true`に設定します。 + + + +Jekyllは2つの特別なRedcarpet拡張を扱えます。 + + + +- `no_fenced_code_blocks` --- デフォルトで、Jekyllは(チルダ3つまたはバッククォート3つでコードブロックを区切るため)`fenced_code_blocks`拡張を`true`に設定しています。おそらく、GitHubが積極的に採用しており、不可避の設定になってきています。Redcarpetの通常の`fenced_code_blocks`はJekyllで使用するときは無効です。——言い換えれば、区切られたコードを無効にするためにこの反転の拡張を使用できます。 + + + +最初の区切り文字の後に言語のハイライトを設定できます。 + + + + ```ruby + # ...ruby code + ``` + +コードブロックとハイライトは共に有効にできます。これはコードを静的にハイライトします。シンタックスハイライトがない場合は、``要素に `class =" LANGUAGE "`属性を追加します。これは様々なJavaScriptコードハイライトライブラリでヒントとして使用できます。 + + + +- `smart` --- この擬似拡張はSmartyPantsを有効にします。これは、ストレート引用符を中引用符に変換し、ハイフンをem(`---`)とen(`--`)ダッシュとします。 + + + +他のすべての拡張はRedcarpetからの通常の名前を保持しており、Jekyllでは`smart`以外のレンダラオプションは指定できません。利用可能な拡張のリストは[RedcarpetのREADMEファイル](https://github.com/vmg/redcarpet/blob/v3.2.2/README.markdown#and-its-like-really-simple-to-use){:target="_blank"}にあります。Redcarpetの正しいバージョンのREADMEを見ていることを確認してください:Jekyllは現在v3.2.xを使っています。 最も一般的に使用されている拡張は次のとおりです。 + + + +- `tables` +- `no_intra_emphasis` +- `autolink` + +### カスタムMarkdownプロセス + + +カスタムmarkdownプロセッサの作成に興味があるなら、あなたは運がいいです! `Jekyll::Converters::Markdown`ネームスペースに新しいクラスを作成します。 + + + +```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 +``` + +一度クラスを作成し、`_plugins`フォルダのプラグインかgemとして適切に設定したら、`_config.yml`で指定します。 + + + +```yaml +markdown: MyCustomProcessor +``` diff --git a/_docs/configuration/options.html b/_docs/configuration/options.html new file mode 100644 index 0000000..f82a87e --- /dev/null +++ b/_docs/configuration/options.html @@ -0,0 +1,504 @@ +--- +title: オプション設定 +permalink: "/docs/configuration/options/" +--- + + +

    以下の表は、Jekyllで使用可能な設定と、それらを制御する様々なoptions(設定ファイルで指定)とflags(コマンドラインで指定)です。

    + + + +

    グローバル設定

    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    設定 + OptionsFlags +
    +

    Site Source

    +

    Jekyllが読むファイルのディレクトリを変更

    + +
    +

    source: DIR

    +

    -s, --source DIR

    +
    +

    Site Destination

    +

    Jekyllが書き出すファイルのディレクトリを変更

    + +
    +

    destination: DIR

    +

    -d, --destination DIR

    +
    +

    Safe

    +

    カスタムプラグインを無効にし、シンボリックリンクを無視する。

    + +
    +

    safe: BOOL

    +

    --safe

    +
    +

    Exclude

    +

    + ファイルやディレクトリを変換時に除外する。サイトのソースディレクトリからの相対パスで指定し、ソースディレクトリ外にはならない。 +

    + +
    +

    exclude: [DIR, FILE, ...]

    +
    +

    Include

    +

    + ディレクトリやファイルを強制的に変換に含める。ドットから始まるファイルはデフォルトでは無視されるため、.htaccessはよい例である。 +

    + +
    +

    include: [DIR, FILE, ...]

    +
    +

    Keep files

    +

    + サイトの出力先に変更を加える際に、選択したファイルを残す。Jekyllが生成しないファイル、例えばビルドツールが生成したファイルやアセット、に便利です。パスは出力先からの相対パスです。 +

    + +
    +

    keep_files: [DIR, FILE, ...]

    +
    +

    Time Zone

    +

    + サイト生成時のタイムゾーンを設定。これはTZ環境変数を設定し、Rubyが日時の作成と操作を処理するために使用する。IANA Time Zone + Databaseからの全てのエントリは有効です(例:Asia/Tokyo)。 + こちらに使用可能な全ての変数のリストがあります。 ローカルマシン上のサーバーの場合、デフォルトのタイムゾーンはオペレーティングシステムによって設定されます。 しかし、リモートホスト/サーバー上で提供される場合、デフォルトのタイムゾーンはサーバーの設定や場所によって異なります。 +

    + +
    +

    timezone: TIMEZONE

    +
    +

    Encoding

    +

    + ファイルのエンコーディングを名前で設定する(Ruby 1.9以降のみ)。デフォルト値は2.0.0以降ではutf-8で、2.0.0より前はnilでrubyのデフォルトのASCII-8BITが使用される。ruby -e 'puts Encoding::list.join("\n")'コマンドで使用可能なエンコーディングが表示される。 +

    + +
    +

    encoding: ENCODING

    +
    +

    Defaults

    +

    + front matter変数のデフォルト値を設定する。 +

    + +
    +

    こちらをご覧ください

    + +
    +
    + +
    +
    出力先は、サイト構築時に消去されます。
    + +

    + <destination>コンテンツは出力時にデフォルトで自動的に消去されます。サイトで生成されないファイルやフォルダは消去されます。<keep_files>で指定することで、消去を防ぐことができます。 +

    + +

    + <destination>に重要な場所を設定しないでください。ステージング領域として使用し、そこからWebサーバーにコピーしてください。 +

    + +
    + +

    Buildコマンドオプション

    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    設定 + OptionsFlags +
    +

    Regeneration

    +

    ファイルを修正したときのサイトの自動再生成を有効にする

    + +
    +

    -w, --[no-]watch

    +
    +

    Configuration

    +

    _config.ymlファイルの代わりに特定の設定ファイルを使用する。後のファイルの設定は前のファイルの設定で上書きされる。 + +

    +

    --config FILE1[,FILE2,...]

    +
    +

    Drafts

    +

    ドラフトを処理してレンダリングする。

    + +
    +

    show_drafts: BOOL

    +

    --drafts

    +
    +

    Environment

    +

    ビルド時に特定の環境値を使用する。

    + +
    +

    JEKYLL_ENV=production

    +
    +

    Future

    +

    未来の日付のポストやコレクションドキュメントを公開する。

    + +
    +

    future: BOOL

    +

    --future

    +
    +

    Unpublished

    +

    unpublishedとしてマークされたポストをレンダリングする。

    + +
    +

    unpublished: BOOL

    +

    --unpublished

    +
    +

    LSI

    +

    関連記事のインデックスを作成する。classifier-rebornプラグインが必要。

    + +
    +

    lsi: BOOL

    +

    --lsi

    +
    +

    Limit Posts

    +

    解析及び公開する投稿数のリミット。

    + +
    +

    limit_posts: NUM

    +

    --limit_posts NUM

    +
    +

    Force polling

    +

    pollingを使用するようwatchを強要する。

    + +
    +

    --force_polling

    +
    +

    Verbose output

    +

    詳細な出力をプリントする。

    + +
    +

    -V, --verbose

    +
    +

    Silence Output

    +

    ビルド時のJekyllからの通常の出力を黙らせる。

    + +
    +

    -q, --quiet

    +
    +

    Incremental build

    +

    + 実験的なインクリメンタルビルド機能を有効にする。インクリメンタルビルドでは、変更された投稿とページのみが再ビルドされるため、大規模サイトではパフォーマンスが大幅に向上するが、場合によってはサイトの生成が中断されることもある。 +

    + +
    +

    incremental: BOOL

    +

    -I, --incremental

    +
    +

    Liquid profiler

    +

    + パフォーマンスのボトルネックを特定するのに役立つLiquidレンダリングプロファイルを生成する。 +

    + +
    +

    profile: BOOL

    +

    --profile

    +
    +

    Strict Front Matter

    +

    + ページのfront matterのYAML構文にエラーがあるとビルドを失敗するようにする。 +

    + +
    +

    strict_front_matter: BOOL

    +

    --strict_front_matter

    +
    +
    + +

    Serveコマンドオプション

    + + +

    以下のオプションに加えて、`serve`サブコマンドは`build`サブコマンドを受け入れることができます。これらのオプションはサイトが供給される直前の構築時に適用されます。

    + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    設定 + OptionsFlags +
    +

    Local Server Port

    +

    与えられたポートに従う

    + +
    +

    port: PORT

    +

    --port PORT

    +
    +

    Local Server Hostname

    +

    与えられたホスト名に従う

    + +
    +

    host: HOSTNAME

    +

    --host HOSTNAME

    +
    +

    Base URL

    +

    与えられたベースURLでWebサイトを提供する

    + +
    +

    baseurl: URL

    +

    --baseurl URL

    +
    +

    Live Reload

    +

    内容を変更した場合に、自動でページを再読込する。

    + +
    +

    livereload: true

    +

    --livereload

    +
    +

    Detach

    +

    ターミナルからサーバーを切り離す

    + +
    +

    detach: BOOL

    +

    -B, --detach

    +
    +

    Skips the initial site build.

    +

    サーバー開始時の最初のサイト構築をスキップする

    + +
    +

    --skip-initial-build

    +
    +

    X.509 (SSL) Private Key

    +

    サイトのソースに保存またはシンボリックリンクされている、SSLプライベートキー

    + +
    +

    --ssl-key

    +
    +

    X.509 (SSL) Certificate

    +

    サイトのソースに保存またはシンボリックリンクされている、SSL公開証明書

    + +
    +

    --ssl-cert

    +
    +
    + +
    +
    設定ファイルにはtabを使わないでください
    + +

    + 構文解析エラーに繋がったり、Jekyllの設定がデフォルトに戻ることになります。代わりにスペースを使用してください。 +

    + +
    diff --git a/_docs/configuration/webrick.md b/_docs/configuration/webrick.md new file mode 100644 index 0000000..90cce97 --- /dev/null +++ b/_docs/configuration/webrick.md @@ -0,0 +1,30 @@ +--- +title: WEBrickオプション +permalink: "/docs/configuration/webrick/" +--- + + +`_config.yml`に追加することで、サイトにカスタムヘッダを提供することができます。 + + + +```yaml +# File: _config.yml +webrick: + headers: + My-Header: My-Value + My-Other-Header: My-Other-Value +``` + +### デフォルト + + +Jekyllはデフォルトで`Content-Type`と`Cache-Control`レスポンスヘッダを提供します。提供されるデータの所為室を指定するための動的な一つと、開発モードでChromeの積極的なキャッシングを無効にするため静的なものです。 + + diff --git a/_docs/continuous-integration/buddyworks.md b/_docs/continuous-integration/buddyworks.md new file mode 100644 index 0000000..216a1fc --- /dev/null +++ b/_docs/continuous-integration/buddyworks.md @@ -0,0 +1,80 @@ +--- +title: "Buddy" +--- + +[Buddy][buddy-homepage]は[Docker][docker-homepage]ベースのCIサーバーで、15〜20分でセットアップしてJekyll Webサイトを構築、テスト、および展開できます。[GitHub][github-homepage]、[Bitbucket][bitbucket-homepage]、および[GitLab][gitlab-homepage]リポジトリをサポートしており、オンプレミスでインストールすることも、クラウドで使用することもできます。以下のガイドでは、Jekyllプロジェクトをビルドしてテストするための無料の環境を設定する方法を説明しています。 + + + +[buddy-homepage]: https://buddy.works +[docker-homepage]: https://www.docker.com/ +[github-homepage]: https://github.com +[bitbucket-homepage]: https://bitbucket.org/ +[gitlab-homepage]: https://gitlab.com + +## 1. 始める + + +1. [https://buddy.works][buddy-homepage]にGitHub/BitbucketアカウントかEメールでログインします。 +2. Gitプロバイダーを選び、Jekyllプロジェクトを選択するかプッシュします。 +3. 新しいパイプラインを作成し、'On every push'にトリガーをセットします。 +4. Jekyllアクション設定を追加し、パイプラインを保存します。 + + + +## 2. 働き方 + + +選択したブランチにプッシュするたびに、Jekyllアクションは孤立した[Jekyll Dockerイメージ][jekyll-docker-image]で`jekyll build`を実行します。 出力は`/filesystem`ディレクトリに生成され、さらにFTP/SFTPおよびIaaSサービスにデプロイできます。あなた自身のコマンドを追加したり、追加のパッケージをインストールしたり、サービスをアタッチしたり、Seleniumテストを実行したり、そして他のアクション(Slack通知やサーバーを再起動するSSHスクリプトなど)をパイプラインの下に追加することができます。 + + + +[jekyll-docker-image]: https://hub.docker.com/r/jekyll/jekyll/ + +## 3. 設定にYAMLを使用する + + +GUIよりもコードとして設定したい場合は、ターゲットブランチにプッシュするとJekyllアクションでパイプラインを作成する`buddy.yml`を生成できます。 + + + +```yaml +- pipeline: "Build and Deploy Jekyll site" + trigger_mode: "ON_EVERY_PUSH" + ref_name: "master" + actions: + - action: "Execute: jekyll build" + type: "BUILD" + docker_image_name: "jekyll/jekyll" + docker_image_tag: "latest" + execute_commands: + - "chown jekyll:jekyll $WORKING_DIR" + - "jekyll build" +``` + +## 4. オンプレミスサーバーの設定 + + +セルフホスト版のBuddyは、[Linux][bw-linux]、[Mac][bw-mac]、 [AWS EC2][bw-aws-ec2]、[DigitalOcean][bw-digitalocean]、[Microsoft Azure][bw-azure]など、Dockerをサポートするあらゆる種類のサーバーにインストールできます。 + + + +[bw-linux]: https://buddy.works/knowledge/standalone/installation-linux +[bw-mac]: https://buddy.works/knowledge/standalone/installation-mac-osx +[bw-aws-ec2]: https://buddy.works/knowledge/standalone/installation-amazon-ec2 +[bw-digitalocean]: https://buddy.works/knowledge/standalone/installation-digitalocean +[bw-azure]: https://buddy.works/knowledge/standalone/installation-azure + +## 5. 疑問がありますか? + + +このガイドはオープンソースです。修正がある場合は[編集][jekyll-docs-ci-buddy]を、トラブルがあり助けが必要な場合は[助けを求めて][jekyll-help]ください。CircleCIには、助けになる[オンラインコミュニティー][buddy-forum]もあります。 + + + +[jekyll-docs-ci-buddy]: https://github.com/jekyll/jekyll/edit/master/docs/_docs/continuous-integration/buddyworks.md +[jekyll-help]: https://jekyllrb.com/help/ +[buddy-forum]: http://forum.buddy.works/ diff --git a/_docs/continuous-integration/circleci.md b/_docs/continuous-integration/circleci.md new file mode 100644 index 0000000..88ccd5b --- /dev/null +++ b/_docs/continuous-integration/circleci.md @@ -0,0 +1,189 @@ +--- +title: "CircleCI" +--- + +Jekyllによって生成されたWebサイトの構築、テスト、およびデプロイは、継続的な統合および配信ツールである[CircleCI][0]を使用して素早く実行できます。CircleCIは[GitHub][1]と[Bitbucket][2]をサポートしており、オープンソースまたはプライベートのリポジトリを使って無料で始めることができます。 + + + +[0]: https://circleci.com/ +[1]: https://github.com/ +[2]: https://bitbucket.org/ + +## 1. CircleCIでプロジェクトをフォローする + + +CircleCIでプロジェクトの構築を開始するには、CircleCIのWebサイトからプロジェクトを'follow'するだけです。 + + + +1. 'Add Projects'ページへ行きます +2. 左のGitHubかBitbucketタブから、ユーザーか組織を選択します。 +3. リストからプロジェクトを見つけ出し、右の'Build project'をクリックします。 +4. 最初のビルドはそれ自身で始まります。リポジトリのrootに[circle.yml][3]ファイルを作成することで、CircleCIにプロジェクトのビルド方法を指示することができます。 + + + +[3]: https://circleci.com/docs/configuration/ + +## 2. 依存関係 + + +(CircleCIの利用に関係なく)Jekyllプロジェクトの依存関係管理の最も簡単な方法は、[Gemfile][4]の利用です。`Gemfile`でJekyll、Jekyllプラグイン、[HTML Proofer](#html-proofer)、その他のgemを使用することをお勧めします。`Gemfile.lock`のバージョンも忘れないでください。こちらが`Gemfile`の例です。 + + + +[4]: http://bundler.io/gemfile.html + +```ruby +source 'https://rubygems.org' + +ruby '2.4.0' + +gem 'jekyll' +gem 'html-proofer' +``` + +CircleCIは、`Gemfile`が存在することを検出し、`dependencies`フェーズで自動的に`bundle install`を実行します。 + + + +## 3. テスト + + +最も基本的なテストは、`jekyll build`がきちんと動くかを確認することです。これは、生成されたサイトで他のテストを実行するためのブロッカーであり、あなたがそうするなら依存関係です。そのため、`dependencies`フェーズでBundler経由でJekyllを実行します。 + + + +```yaml +dependencies: + post: + - bundle exec jekyll build +``` + +### HTML Proofer + +サイトを構築したら、有効なHTML、リンク切れなどを確認するためのテストを実行すると便利です。それにはいくつかのツールがありますが、[HTML Proofer][5]はJekyllユーザーの間で人気があります。いくつかの優先フラグを付けて`test`フェーズで実行します。利用可能な全フラグについては、`html-proofer` [README][6]をチェックするか、または`htmlproofer --help`をローカルで実行してください。 + + + +[5]: https://github.com/gjtorikian/html-proofer +[6]: https://github.com/gjtorikian/html-proofer/blob/master/README.md#configuration + +```yaml +test: + post: + - bundle exec htmlproofer ./_site --check-html --disable-external +``` + +## circle.ymlファイルの例 + + +まとめると、こちらは`circle.yml`ファイルがv1でどのように見えるかの例です。 + + + +```yaml +machine: + environment: + NOKOGIRI_USE_SYSTEM_LIBRARIES: true # speeds up installation of html-proofer + +dependencies: + post: + - bundle exec jekyll build + +test: + post: + - bundle exec htmlproofer ./_site --allow-hash-href --check-favicon --check-html --disable-external + +deployment: + prod: + branch: master + commands: + - rsync -va --delete ./_site username@my-website:/var/html +``` + +新しいプロジェクトが従うDockerベースのシステムであるCircleCI v2の場合は、`S3_BUCKET_NAME`環境変数を設定します(必要な設定ファイルの例を以下に示します)。 + + + +```yaml +defaults: &defaults + working_directory: ~/repo +version: 2 +jobs: + build: + <<: *defaults + docker: + - image: circleci/ruby:2.5 + environment: + BUNDLE_PATH: ~/repo/vendor/bundle + steps: + - checkout + - restore_cache: + keys: + - rubygems-v1-{% raw %}{{ checksum "Gemfile.lock" }}{% endraw %} + - rubygems-v1-fallback + - run: + name: Bundle Install + command: bundle check || bundle install + - save_cache: + key: rubygems-v1-{% raw %}{{ checksum "Gemfile.lock" }}{% endraw %} + paths: + - vendor/bundle + - run: + name: Jekyll build + command: bundle exec jekyll build + - run: + name: HTMLProofer tests + command: | + bundle exec htmlproofer ./_site \ + --allow-hash-href \ + --check-favicon \ + --check-html \ + --disable-external + - persist_to_workspace: + root: ./ + paths: + - _site + deploy: + <<: *defaults + docker: + - image: circleci/python:3.6.3 + environment: + S3_BUCKET_NAME: <> + steps: + - attach_workspace: + at: ./ + - run: + name: Install AWS CLI + command: pip install awscli --upgrade --user + - run: + name: Upload to s3 + command: ~/.local/bin/aws s3 sync ./_site s3://$S3_BUCKET_NAME/ --delete --acl public-read +workflows: + version: 2 + test-deploy: + jobs: + - build + - deploy: + requires: + - build + filters: + branches: + only: master +``` + +## 疑問がありますか? + + +このガイドはオープンソースです。修正がある場合は[編集][7]を、トラブルがあり助けが必要な場合は[助けを求めて][8]ください。CircleCIには、助けになる[オンラインコミュニティー][9]もあります。 + + + +[7]: https://github.com/jekyll/jekyll/edit/master/docs/_docs/continuous-integration/circleci.md +[8]: https://jekyllrb.com/help/ +[9]: https://discuss.circleci.com diff --git a/_docs/continuous-integration/travis-ci.md b/_docs/continuous-integration/travis-ci.md new file mode 100644 index 0000000..084ecdc --- /dev/null +++ b/_docs/continuous-integration/travis-ci.md @@ -0,0 +1,327 @@ +--- +title: "Travis CI" +--- + +Webサイトのビルドを1つ以上のバージョンのRubyに対してテストできます。次のガイドでは、プルリクエスト用の[GitHub][github]統合を使用して、[Travis][travis]で無料ビルド環境を設定する方法を説明します。 + + + +[travis]: https://travis-ci.org/ +[github]: https://github.com/ + +## 1. TravisとGithubの有効化 + + +GitHubリポジトリのTravisビルドを有効にします。 + + + +1. travis-ci.orgのあなたのプロフィールへ行きます:https://travis-ci.org/profile/username +2. ビルドを有効にしたいリポジトリを見つけます。 +3. リポジトリスイッチをオンにして、青色にします。 +4. 歯車アイコンをクリックしてビルドのうプション設定ができます。それ以上の設定は`.travis.yml`ファイルで行います。詳細は下記をご覧ください。 + + + +## 2. テストスクリプト + + +最も単純なテストスクリプトは`jekyll build`を実行し、Jekyllがサイトの構築に失敗しないことを確認します。結果のサイトは確認しませんが、物事が適切に構築されていることは確認します。 + + + +Jekyllの出力をテストするには、[html-proofer][html-proofer]が最も良いツールです。このツールは結果のサイトをチェックして、すべてのリンクと画像が存在することを確認します。便利な`htmlproofer`コマンドライン実行ファイルでそれを利用するか、あるいはgemを利用するRubyスクリプトを書いてください。 + + + +実行したい成功したコマンドを`./script/cibuild`ファイルに保存します。 + + + +### The HTML Proofer Executable + +```sh +#!/usr/bin/env bash +set -e # halt script on error + +bundle exec jekyll build +bundle exec htmlproofer ./_site +``` + +一部のオプションはコマンドラインスイッチで指定できます。これらのスイッチの詳細については、`html-proofer`のREADMEを確認するか、`htmlproofer --help`をローカルで実行してください。 + + + +外部のサイトをテストを避ける上記の例は、以下のコマンドを使用します。 + + + +```sh +bundle exec htmlproofer ./_site --disable-external +``` + +### The HTML Proofer Library + +Rubyスクリプト(Rakefileなど)で`html-proofer`を呼び出すこともできます。 + + + +```ruby +#!/usr/bin/env ruby + +require 'html-proofer' +HTMLProofer.check_directory("./_site").run +``` + +オプションは`.new`の2番目の引数として与えられ、シンボルキー付きのRuby Hashでエンコードされています。設定オプションの詳細については、`html-proofer`のREADMEファイルをご覧ください。 + + + +[html-proofer]: https://github.com/gjtorikian/html-proofer + +## 3. Travisビルドの設定 + + +このファイルはTravisビルドを設定するために使用されます。JekyllはRubyでビルドされており、インストールにはRubyGemsが必要なので、Ruby言語ビルド環境を使います。 以下はサンプルの`.travis.yml`ファイルで、その後に各行の説明が続きます。 + + + +**注:**Gemfileも必要です。Travisは参照されているgemに基づいて依存関係を[自動的にインストール](https://docs.travis-ci.com/user/languages/ruby/#Dependency-Management)します。こちらは、2つの参照gem、"jekyll"と"html-proofer"を持つ`Gemfile`です。 + + + +```ruby +source "https://rubygems.org" + +gem "jekyll" +gem "html-proofer" +``` + +`.travis.yml`は次のようにします。 + + + +```yaml +language: ruby +rvm: + - 2.4.1 + +before_script: + - chmod +x ./script/cibuild # or do this locally and commit + +# Assume bundler is being used, therefore +# the `install` step will run `bundle install` by default. +script: ./script/cibuild + +# branch whitelist, only for GitHub Pages +branches: + only: + - gh-pages # test the gh-pages branch + - /pages-(.*)/ # test every branch which starts with "pages-" + +env: + global: + - NOKOGIRI_USE_SYSTEM_LIBRARIES=true # speeds up installation of html-proofer + +addons: + apt: + packages: + - libcurl4-openssl-dev + +sudo: false # route your build to the container-based infrastructure for a faster build + +cache: bundler # caching bundler gem packages will speed up build + +# Optional: disable email notifications about the outcome of your builds +notifications: + email: false +``` + +それでは、各行について説明します。 + + + +```yaml +language: ruby +``` + +この行は、TravisにRubyビルドコンテナを使用することを伝えます。Bundler、RubyGems、Ruby runtimeへのアクセスを与えます。 + + + +```yaml +rvm: + - 2.4.1 +``` + +RVMは(rbenv、chrubyのように)有名なRubyのバージョン管理です。これはTravisにテストスクリプトを実行するときに使うRubyのバージョンを伝えます。ビルドをスピードアップするために[Travisビルドドッカーイメージにプレインストールされているバージョン][5]を使用してください。 + + + +```yaml +before_script: + - chmod +x ./script/cibuild +``` + +ビルドスクリプトファイルには*実行可能*属性を設定する必要があります。そうしないと、Travisはパーミッション拒否エラーで失敗します。これをローカルで実行して権限を直接コミットすることもでき、このステップは無関係です。 + + + +```yaml +script: ./script/cibuild +``` + +Travisはあなたのサイトをテストするために任意のシェルスクリプトを実行することを可能にします。1つの規則は、プロジェクトのすべてのスクリプトを`script`ディレクトリに置き、テストスクリプトを`cibuild`と名付けます。この行は完全にカスタマイズ可能です。スクリプトがそれほど変わらない場合は、テストの呪文をここに直接記述できます。 + + + +```yaml +install: gem install jekyll html-proofer +script: jekyll build && htmlproofer ./_site +``` + +`script`ディレクティブは、絶対に任意の有効なシェルコマンドにすることができます。 + + + +```yaml +# branch whitelist, only for GitHub Pages +branches: + only: + - gh-pages # test the gh-pages branch + - /pages-(.*)/ # test every branch which starts with "pages-" +``` + +サイト用のTravisビルドがサイトを含むブランチでのみ実行されていることを確認します。この分離を確実にする1つの方法は、Travis設定ファイルにブランチホワイトリストを含めることです。`gh-pages`ブランチを指定することで、関連するテストスクリプト(上記で説明)がサイトブランチでのみ実行されるようになります。変更を提案するためにプルリクエストフローを使用する場合は、上記の`/pages-(.*)/`正規表現で例証されているように、編集を含むすべてのブランチにプレフィックスを付けるように、ビルドを強制することができます。 + + + +`branches`ディレクティブは完全にオプションです。省略した場合、Travisはリポジトリの任意のブランチへのすべてのプッシュから構築します。 + + + +```yaml +env: + global: + - NOKOGIRI_USE_SYSTEM_LIBRARIES=true # speeds up installation of html-proofer +``` + +`html-proofer`を使用していますか? この環境変数を必要とするでしょう。NokogiriはコンパイルされたサイトでHTMLファイルを解析するのに使われ、それがインストールされるたびにコンパイルされなければならないライブラリにバンドルされています。幸いなことに、環境変数`NOKOGIRI_USE_SYSTEM_LIBRARIES`を`true`に設定することによって、Nokogiriのインストール時間を劇的に減らすことができます。 + + + +
    +
    _config.ymlからvendorを除外してください
    + +

    Travisはビルドサーバー上のvendorディレクトリの全gemをバンドルしています。Jekyllが間違えて読んで爆発します。

    + +
    + +```yaml +exclude: [vendor] +``` + +デフォルトではTravisに`sudo: false`コマンドを与えるべきです。このコマンドは、Travisの[コンテナベースのインフラストラクチャ](https://docs.travis-ci.com/user/workers/container-based-infrastructure/#Routing-your-build-to-container-based-infrastructure)でビルドを実行するようにTravisに明示的に指示します。コンテナーベースのインフラストラクチャーで実行すると、ビルドの速度が上がることがよくあります。ビルドに問題がある場合、またはビルドに`sudo`アクセスが必要な場合は、その行を`sudo: required`に変更します。 + + + +```yaml +sudo: false +``` + +ビルドをスピードアップするために、`bundler`によって作成されたgemパッケージをキャッシュするべきです。Travisは事前定義された[ツールのキャッシュストラテジー][6]を持っています。正確にするためにすべてのデフォルト設定が必要です。 + + + +```yaml +cache: bundler +``` + +オプションで、ビルドEメール通知が必要ない場合は、この構成でそれらを無効にすることができます。Travisはさまざまな通知サービスをサポートしており、[(slackなど)別の役立つサービス][7]を見つけることができるでしょう。 + + + +```yaml +notifications: + email: false +``` + +### トラブルシューティング + + +**Travis error:** *"Gemfileを変更した後でデプロイモードをインストールしようとしています。他の場所でbundle installを実行し、更新されたGemfile.lockをバージョン管理に追加してください。"* + + + +**Workaround:** `bundle install`をローカルで実行して`Gemfile.lock`への変更をコミットするか、`Gemfile.lock`ファイルをリポジトリから削除して`.gitignore`ファイルにエントリを追加して、再度チェックインされないようにしてください。 + + + +### 疑問がありますか? + + +このガイド全体はオープンソースです。修正がある場合は先に進んで[編集][3]し、問題が発生して助けが必要な場合は[助けを求めて][4]ください。 + + + +[3]: https://github.com/jekyll/jekyll/edit/master/docs/_docs/continuous-integration/travis-ci.md +[4]: https://jekyllrb.com/help/ +[5]: https://docs.travis-ci.com/user/languages/ruby/#Specifying-Ruby-versions-and-implementations +[6]: https://docs.travis-ci.com/user/caching/#Caching-directories-(Bundler%2C-dependencies) +[7]: https://docs.travis-ci.com/user/notifications/ diff --git a/_docs/contributing.md b/_docs/contributing.md index 9394f2d..34440a1 100644 --- a/_docs/contributing.md +++ b/_docs/contributing.md @@ -1,323 +1,262 @@ --- -layout: docs title: 貢献 -prev_section: upgrading -next_section: history -permalink: /docs/contributing/ -base_revision: 0fbdc6944041147c2d21b306751b078860b6603b[refs/heads/master] +permalink: "/docs/contributing/" +note: This file is autogenerated. Edit /.github/CONTRIBUTING.markdown instead. --- - - - -あなたは Jekyll に投じるすばらしいアイディアを持っています。 -すばらしいことです!次の事柄を心に留めてください。 - - - -* 取り組んでいるのが細かな修正や既存機能へのパッチなら、簡単な内容で構わないのでテストも追加してください。 - 現在のテストスイートの範囲にとどまり、そして - [Shoulda](https://github.com/thoughtbot/shoulda/tree/master) や - [RR](https://github.com/btakita/rr/tree/master) を使用してください。 -* もし、それが新しい機能の場合は、必ず新しい - [Cucumber](https://github.com/cucumber/cucumber/) の機能を作成し、 - 必要に応じて手順を再利用します。 - また、あなたがフォークした `site` に - 急ぎいくつかのドキュメントを用意し、一度マージを行い - メイン `site` の jekyllrb.com に転送していただければ幸いです。 -* あなたの貢献によって Jekyll の振る舞いが変わった場合、 - それは `site/docs` にあります。 - もし、 docs に情報の誤りがあった場合、遠慮なく追加してください。 - すばらしいドキュメントはすばらしいプロジェクトを作ります! -* Ruby のコードを変更するときは、 [GitHub Ruby Styleguide](https://github.com/styleguide/ruby) - に従ってください。 -* **小さなプルリクエスト** に最善を尽くしてください。 - 簡単に提案された変更はレビューされ、マージされる可能性が高いです。 -* プルリクエストを送信するとき、プルリクエストのボディを賢明に使用してください。 - 変更されたかどうかの記述、変更の背後にある動機、 [完了したかどうかのタスクリスト](http://git.io/gfm-tasks) - もレビュー時間を早めます。 - - - - -
    -
    テストなしでは貢献はできません
    -

    - もし、既存の機能への小さな修正やパッチを作成したなら、ただのシンプルなテストを行います。 -

    -
    - - - -テストの依存関係 ------------------ - - - - -テストスイートの実行や gem のビルドのために、 -Jekyll の依存ツールをインストールする必要があります。 -Jekyll は Bundler を使用しており、 `bundle` コマンドを実行すると全ての設定が迅速に行われます! - - - -{% highlight bash %} -$ bundle -{% endhighlight %} - - - -はじめる前に、テストを実行し、必ずテストが通ることを -確認してください(あなたの環境が適切に設定されているかを確認するために): - - - -{% highlight bash %} -$ bundle exec rake test -$ bundle exec rake features -{% endhighlight %} - - - -ワークフロー --------- - - - -これは、あなたの作業がプロジェクトにマージされるもっとも直接的な方法です: - - - -* プロジェクトをフォークします -* あなたのフォークプロジェクトをクローンします: - - - -{% highlight bash %} -git clone git://github.com//jekyll.git -{% endhighlight %} - - - -* トピックブランチを作成し、あなたの変更を含んでください: - - - -{% highlight bash %} -git checkout -b my_awesome_feature -{% endhighlight %} - - - -* ハックし、テストを追加します。必ずしもこの順番でなくてかまいません -* `rake` を実行し、テストが必ず全て通ることを確認してください -* 必要に応じて、エラーがないようにコミットを論理的な塊にリベースしてください -* ブランチをプッシュしてください - - - -{% highlight bash %} -git push origin my_awesome_feature -{% endhighlight %} - - - -* jekyll/jekyll プロジェクトの master ブランチに対してプルリクエストを作成し、 - あなたの変更内容と、なぜそれをマージすべきかを記述してください - - - -ドキュメントの更新 ----------------------- - - - -私たちは Jekyll のドキュメントについて最善を尽くしたいです。 -私たちはドキュメントをオープンソース化しました、そして -あなたが Jekyll に欠けているものを見つけた場合、私たちはプルリクエストを歓迎しています。 - - - -あなたは、 GitHub.com 上の Jekyll リポジトリの [site](https://github.com/jekyll/jekyll/tree/master/site) で -jekyllrb.comのドキュメントを見つけることができます。 - - - -全てのドキュメントのプルリクエストは `master` に向けられる必要があります。 -他のブランチに向けたプルリクエストは受け入れられません。 - - - -GitHub の [Jekyll wiki]({{ site.repository }}/wiki) は、 -自由に更新することができるように、プルリクエストなしで -全ての GitHub ユーザがアクセス権を持つことができます。 - - - -もし、あなたのプラグインを[プラグイン一覧](/docs/plugins/#available-plugins)に追加したいなら、 -あなたのプラグインのタイプに応じて適切な小見出しの下にリンクを追加し、 -[プラグインページのソースファイル]({{ site.repository }}/blob/master/site/docs/plugins.md)へ -プルリクエストを送ってください。 - - - -落とし穴 -------- - - - -* もし、 gem のバージョンをあげる場合は、コミットを分けてください。 - この方法だと、メンテナが gem をリリースするときに制御できます。 -* jekyll/jekyll の最新コミットに基づいて(複数の)パッチを維持してください。 - それは適用するためのあなたの仕事で、メンテナがしなければならないことを少なくするのは - とてもよいことです。 -* あなたの GitHub issue で \[fix\], \[feature\] などのタグをつけないでください。 - メンテナは積極的に issue を読み、彼らが問題に出くわしたらラベルをつけるでしょう。 - - - -
    -
    もっとよくできる方法をお知らせください!
    -

    - Jekyll の使用とハックは楽しく単純、簡単でなければなりません。 - なんらかの理由で苦痛を見つけた場合、 あなたの経験をGitHub の - issue に報告(英語)すると、 - 私たちはそれを改善することができます。 -

    -
    - - +permalink: "/docs/contributing/" +note: This file is autogenerated. Edit /.github/CONTRIBUTING.markdown instead. +--- --> + +こんにちは! Jekyllへの貢献に興味がありますか? あなたの助けが大好きです。Jekyllはオープンソースプロジェクトで、あなたのようなユーザーの貢献の積み重ねでできています。 + + + +## 問題の報告や助けを得る場所 + + +[サポートガイドライン]({{ "/docs/support/" | relative_url }})を見てください。 + + + +## 貢献の仕方 + + +あなたが開発者でも、デザイナーでも、あるいは単にJekyllの信者でも、貢献する方法はたくさんあります。ここにいくつかのアイデアを示します。 + + + +* [コンピュータにJekyllをインストール]({{ "/docs/installation/" | relative_url }})し、ざっと操作を行ってみてください。動きましたか? 希望通りの動作ですか? そうでなければ、[issueを開き](https://github.com/jekyll/jekyll/issues/new){:target="_blank"}知らせてください。 +* プロジェクトの[開いているissue](https://github.com/jekyll/jekyll/issues){:target="_blank"}にコメントしてください。同じ問題を経験しましたか? 回避策を知っていますか? この機能がどのように優れているかについての提案はありますか? +* [documentation]({{ "/docs/home/" | relative_url }})を読み、"improve this page"をクリックしてください。何かを混乱させているのを見たり、改善することができる何かについての提案をしている時はいつでも。 +* [Jekyll discussion forum](https://talk.jekyllrb.com/){:target="_blank"}をブラウズして、質問に手を貸してください。他のユーザーが体験していることを既に経験していれば、いいチャンスです。 +* [未解決のissue](https://github.com/jekyll/jekyll/issues){:target="_blank"}(特に[`help-wanted`のラベル](https://github.com/jekyll/jekyll/issues?q=is%3Aopen+is%3Aissue+label%3Ahelp-wanted){:target="_blank"})のもの)を見つけて、修正案を提出してください。それがあなたの最初のプルリクエストであるならば、我々は噛み付かないと約束します、そして、どんな質問にでも答えて喜んでいます。 +* 変更をローカルでテストし、提案内容を確認することは、[オープンプルリクエスト](https://github.com/jekyll/jekyll/pulls){:target="_blank"}を評価するのに役立ちます。 + + + +## プルリクエストの送信 {#submitting-a-pull-request} + + +### プルリクエストの基本 + + +* 提案された変更は小さい方が良いです。無関係な変更を2つ提案する場合は、2つのプルリクエストを送信してください。 +* 情報が多いほど、優れています。プルリクエストボディをしっかりと使用してください。どのような変更が行われたのか、なぜ変更が行われたのか、およびそれらがユーザーに与える影響について説明します。 +* これがあなたの最初のプルリクエストなら、それは[GitHub Flowを理解する](https://guides.github.com/introduction/flow/){:target="_blank"}のを助けるかもしれません。 +* コードの投稿を送信する場合は、必ず以下の[コードへの貢献](#code-contributions)セクションを読んでください。 + + + +### github.comでのプルリクエストの送信 + + +github.comのWebインターフェースを介して、多くの小さな変更を完全に行うことができます。 + + + +1. 編集を行う[`jekyll/jekyll`](https://github.com/jekyll/jekyll){:target="_blank"}内のファイルに移動します。 +2. ファイルを編集するために、右上の鉛筆のアイコンをクリックします。 +3. 提案する変更を行います。 +4. "Propose file change"をクリックします。 +5. "Create pull request"をクリックします。 +6. 提案する変更の説明的なタイトルと詳細な説明を追加します。詳しい方が良いです。 +7. "Create pull request"をクリックします。 + + + +以上です。提案した変更を他の人が確認してフィードバックを提供すると、自動的に更新を受け取るように登録されます。 + + + +### Gitコマンドラインでプルリクエストを送信する + + +1. [`jekyll/jekyll`](https://github.com/jekyll/jekyll){:target="_blank"}の右上のコーナーの"Fork"をクリックし、プロジェクトをForkします。 +2. `git clone https://github.com//jekyll`でローカルリポジトリにクローンします。 +3. 変更を行うための、説明的な名前のブランチを作成します。( `git checkout -b my-awesome-feature` ) +4. 修正とテストを行います。必ずしも必要な手順ではありません。 +5. `script/cibuild`を実行して、また全てが上手くいくことを確認してください。([テストセクション](#running-tests-locally)もご確認ください) +6. ブランチをプッシュします( `git push origin my-awesome-feature` )。 +7. `https://github.com//jekyll`に行き、プルリクエストを作成します。そして、画面上部の指示に従ってください。 + + + +## ドキュメントの更新を提案する + + +Jekyllのドキュメンテーションをできるだけベストな状態にしたいと考えています。ドキュメンテーションをオープンソース化しており、かけているところを見つけられた際はプルリクエストを送信してください。 + + + +### 変更の送信の仕方 + + +jekyllrb.comのドキュメンテーションは[docs](https://github.com/jekyll/jekyll/tree/master/docs){:target="_blank"}ディレクトリにあります。上のセクションを見て、変更の情報を[プルリクエストで送信](#submitting-a-pull-request)してください。 + + + +注意点を一つ。すべてのpullリクエストは`master`ブランチ(デフォルトのブランチ)に向けてください。 + + + +### jekyllrb.comのFontAwesome iconsetを更新 + + +使用しているアイコンだけを含む、カスタムバージョンのFontAwesomeを使用しています。 + + + +カスタムアイコンセットでまだ使用できないアイコンを使用してドキュメンテーションを更新する必要がある場合、Icomoon's Generatorを使用してアイコンをレンダリングし直す必要があります。 + + + +1. に行きます。 +2. 上部のバーの`Import Icons`をクリックし、`/docs/icomoon-selection.json`を実行してアップロードします。 +3. ページの下の`Add Icons from Library..`をクリックし、'Font Awesome'を追加します。 +4. ライブラリから必要なアイコンを選択します('IcoMoon-Free'ライブラリの代わりに'FontAwesome'ライブラリを使用してください)。 +5. ボタンのバーの`Generate Font`をクリックします。 +6. 含まれるアイコンを確認して、`Download`をクリックして次に進みます。 +7. フォントファイルを抽出し、CSSをJekyllで使用しているパスに適応させます。 + - `fonts`ディレクトリ全体をコピーし、`/docs/`のそれを上書きします。 + - `selection.json`の内容をコピーし、`/docs/icomoon-selection.json`の内容を上書きします。 + - `@font-face {}`の宣言をコピーし、**新しいアイコンのcss宣言**だけを`/docs/_sass/_font-awesome.scss`のsass部分を更新します。 + - `@font-face {}`宣言のパスの`fonts/FontAwesome.*`の前に`../`を追加してパスを修正します。`('../fonts/Fontawesome.woff?9h6hxj')`の様にします。 + + + + + +## コードへの貢献 {#code-contributions} + + +プルリクエストの送信に興味がありますか? あなたが落とし穴にはまるのを避けられるように、いくつかの共通の注意事項を示します。 + + + +### テストとドキュメンテーション + + +コードの変更を提案するときはいつでも、ドキュメンテーションとテストの更新を同じプルリクエストに含めてください。 + + + +#### ドキュメンテーション + + +あなたの貢献がJekyllの振る舞いを変えるなら、ドキュメンテーションを必ず更新してください。ドキュメンテーションは`docs/_docs`フォルダにあります(警報:それはJekyllサイトです!)。ドキュメントに情報が欠けている場合は、気軽に追加してください。優れたドキュメントは、プロジェクトを素晴らしいものにします。プルリクエストにドキュメントの変更を含めると、マージ時に`jekyllrb.com`が更新されます。 + + + +#### テスト + + +* 既存の機能に対して小さな修正やパッチを作成する場合は、簡単なテストで十分です。通常、`tests`フォルダの既存の例からコピー&ペーストすることができますが、必要に応じて私たちのテストsuiteの[Shoulda](https://github.com/thoughtbot/shoulda/tree/master){:target="_blank"}と[RSpec-Mocks](https://github.com/rspec/rspec-mocks){:target="_blank"}について調べてください。 +* 全く新しい機能なら、新しい[Cucumber](https://github.com/cucumber/cucumber/){:target="_blank"}を作成し、必要に応じて既存の手順を再利用してください。 + + + +### コード貢献の基本 + + +* Jekyllは[Rubocop](https://github.com/bbatsov/rubocop){:target="_blank"}静的アナライザーを使って、貢献が[GitHub Ruby Styleguide](https://github.com/styleguide/ruby){:target="_blank"}に従っていることを確認してます。あなたのブランチをプッシュする前に、`script/fmt`を使ってあなたのコードをチェックし、エラーを解決してください。 +* プルリクエストでGemバージョンをbumpしないでください(意味がわからない場合は、おそらくしなかったでしょう)。 +* `script/console`のコマンドを使ってREPLを起動し、Jekyllのメソッドの結果を調べることができます。また、サイトや設定をすばやく作成するのに役立つ方法もあります。[ぜひお試しください!](https://github.com/jekyll/jekyll/blob/master/script/console){:target="_blank"} + + + +## ローカルでのテスト実行 {#running-tests-locally} + + +### 依存関係をテスト + + +テストsuiteを実行し、Jekyllの依存関係に必要なgemを構築するために、以下のコマンドを実行します。 + + + +```sh +script/bootstrap +``` + +変更を行う前に、テストを実行しパスすることを確認します(環境が正しく設定されていることを確認します)。 + + + +```sh +script/cibuild +``` + +`test/`内のファイルだけを更新した場合は、次のコマンドを使います。 + + + +```sh +script/test test/blah_test.rb +``` + +`.feature`ファイルだけを更新した場合は、次のコマンドを使用します。 + + + +```sh +script/cucumber features/blah.feature +``` + +`script/test`と`script/cucumber`はどちらも引数なしで実行することができ、その場合はそれぞれのsuite全体を実行します。 + + + +## A thank you + +ありがとうございます。Jekyllをハッキングするのは楽しいはずです。もしあなたがこれを理解するのが難しいと思うなら、私たちが私たちのプロセスやドキュメンテーションを改善できるように知らせてください! + diff --git a/_docs/datafiles.md b/_docs/datafiles.md index 314bdf6..72a04d5 100644 --- a/_docs/datafiles.md +++ b/_docs/datafiles.md @@ -1,133 +1,85 @@ --- -layout: docs -title: データファイル -prev_section: collections -next_section: assets +title: Dataファイル permalink: /docs/datafiles/ -base_revision: 0fbdc6944041147c2d21b306751b078860b6603b[refs/heads/master] --- - - +--- --> -Jekyll から利用できる[組み込み変数](../variables/)に加えて、 -[Liquid templating system](https://wiki.github.com/shopify/liquid/liquid-for-designers) を -介してアクセス可能な独自のカスタムデータを指定できます。 +Jekyllの[組み込み変数](../variables/)に加えて、[Liquid +templating system](https://wiki.github.com/shopify/liquid/liquid-for-designers){:target="_blank"}からアクセスできるカスタムデータを設定できます。 - +templating system](https://wiki.github.com/shopify/liquid/liquid-for-designers). --> -Jekyll は `_data` ディレクトリの中に配置された [YAML](http://yaml.org/) ファイルおよび -[JSON](http://www.json.org/) ファイルからのデータ読み込みをサポートしています。 +Jekyllは`_data`ディレクトリの[YAML](http://yaml.org/){:target="_blank"}・[JSON](http://www.json.org/){:target="_blank"}・[CSV](https://en.wikipedia.org/wiki/Comma-separated_values){:target="_blank"}・[TSV](https://en.wikipedia.org/wiki/Tab-separated_values){:target="_blank"}ファイルのデータ読み込みをサポートしています。 +注:CSVとTSVはヘッダ行が*必要*です。 - + -この強力な機能を利用すれば、テンプレート内で繰り返しを避けることができ、また、 -`_config.yml` を変更せずともサイト特有のオプションを設定することができます。 +この強力な機能は、`_config.yml`を変更することなく、テンプレートでの繰り返し処理やサイトの特別なオプションを提供します。 - + -プラグイン/テーマも環境設定のためにデータファイルを活用することができます。 +プラグインやテーマはデータファイルを利用して、設定用変数をセットできます。 - + ## データフォルダ + - - -[ディレクトリ構成](../structure/)ページで説明しているように、 -あなたのサイトを生成する時に Jekyll が使用する追加的なデータを -格納できる場所が `_data` フォルダです。 -これらのファイルは YAML ファイル(拡張子は `.yml`, `.yaml` または `.json` を使用) -であるべきであり、そしてそれらは `site.data` 経由でアクセスできるようになります。 - - +`_data`フォルダがJekyllがサイトを生成するときに使う追加データを保管するフォルダです。ファイルは、YAMLかJSON、CSV(拡張子が`.yml`, `.yaml`, `.json`, `.csv`)ファイルで、`site.data`からアクセス可能になります。 -## 例: メンバーのリスト + - +## 例:メンバーのリスト + -データファイルを使用すれば、 Jekyll テンプレートでたくさんのコードをコピー&ペーストしなくて済むようになります。 -基本的な例は下記の通りです。 +大量のコードをJekyllテンプレートにコピー&ペースとしなくてすむように、データファイルの基本的な使用例を示します。 - + -`_data/members.yml` に次のように記述します: - - -{% highlight yaml %} -- name: Tom Preston-Werner - github: mojombo +```yaml +- name: Eric Mill + github: konklone - name: Parker Moore github: parkr - name: Liu Fengyun github: liufengyun -{% endhighlight %} +``` - - -このデータには `site.data.members` 経由でアクセスできます -(ファイル名が変数名を決定していることに注意してください)。 +このデータは`site.data.members`でアクセスできます(注:ファイル名が変数名になります)。 - + -これで、テンプレート内のメンバーリストをレンダリングできるようになりました: +これで、次のようテンプレートに記述すると、メンバーのリスト作成できます。 - + -{% highlight html %} {% raw %} +```liquid
      {% for member in site.data.members %}
    • @@ -137,48 +89,22 @@ You can now render the list of members in a template:
    • {% endfor %}
    +``` {% endraw %} -{% endhighlight %} - - - -## 例: Organizations - - +## サブフォルダ + -データファイルは `_data` フォルダの下位のフォルダに配置することもできます。 -各フォルダレベルが変数の名前空間に追加されます。 -以下の例は、GitHub の organizations を `orgs` フォルダ配下のファイルに -分割して定義するとしたらどのようになるかを示しています。 +データファイルは`_data`フォルダのサブフォルダに配置することもできます。各フォルダのレベルが変数のネームスペースとして追加されます。GitHub組織が`orgs`フォルダの各ファイルで設定されている場合の例を、以下にしまします。 - + -`_data/orgs/jekyll.yml` に次のように記述します: - - -{% highlight yaml %} +```yaml username: jekyll name: Jekyll members: @@ -187,53 +113,25 @@ members: - name: Parker Moore github: parkr -{% endhighlight %} - - - -`_data/orgs/doeorg.yml` に次のように記述します: - - - -{% highlight yaml %} -username: doeorg -name: Doe Org -members: - - name: John Doe - github: jdoe -{% endhighlight %} - +``` -organizations は `site.data.orgs` のあとにファイル名を続ける形でアクセスできます: +組織には、`site.data.orgs`にファイル名を続けてアクセスすることができます。 - + -{% highlight html %} {% raw %} +```liquid
      {% for org_hash in site.data.orgs %} {% assign org = org_hash[1] %} @@ -245,23 +143,44 @@ The organizations can then be accessed via `site.data.orgs`, followed by the fil {% endfor %}
    +``` {% endraw %} -{% endhighlight %} - + +ページやポストもデータアイテムにアクセスすることができます。以下にその例を示します。 + + + +`_data/people.yml`: + +```yaml +dave: + name: David Smith + twitter: DavidSilvaSmith +``` + +ポストのfront matterでページ変数として著者(author)を指定できます。 + + + {% raw %} -
      -{% for org_hash in site.data.orgs %} -{% assign org = org_hash[1] %} -
    • - - {{ org.name }} - - ({{ org.members | size }} members) -
    • -{% endfor %} -
    +```liquid +--- +title: sample post +author: dave +--- + +{% assign author = site.data.people[page.author] %} + +``` {% endraw %} -{% endhighlight %} ---> + +(特にドキュメンテーションサイトや多くのページが存在するJekyllサイトを持っているなら)しっかりしたナビゲーションの構築のための情報は、[ナビゲーション]({{ "tutorials/navigation" | relative_url }})を見てください。 + + diff --git a/_docs/deployment.md b/_docs/deployment.md new file mode 100644 index 0000000..a4e21c0 --- /dev/null +++ b/_docs/deployment.md @@ -0,0 +1,17 @@ +--- +title: Deployment +permalink: /docs/deployment/ +redirect_from: "/docs/deployment-methods/index.html" +--- + +Jekyllを使用して構築されたサイトは、静的なファイルが出力されますので、さまざまな方法で配置できます。 最も一般的な方法は次のとおりです。 + + + +* [手動で]({{ "/docs/deployment/manual/" | relative_url }}) +* [自動で]({{ "/docs/deployment/automated/" | relative_url }}) +* [サードパーティ]({{ "/docs/deployment/third-party/" | relative_url }}) + + diff --git a/_docs/deployment/automated.md b/_docs/deployment/automated.md new file mode 100644 index 0000000..fd5425b --- /dev/null +++ b/_docs/deployment/automated.md @@ -0,0 +1,94 @@ +--- +title: 自動デプロイ +permalink: /docs/deployment/automated/ +--- + + +Jekyllサイトは多くの簡単に自動でデプロイする方法があります。 + + + +## Continuous Integration Service + +自動デプロイの最も簡単なセットアップのフローはCIを使用することです。 + + + +これらのサービスはGitリポジトリにコミットしたときにスクリプトを実行します。このスクリプトでサイトを構築し、出力に対してテストを実行してから、選択したサービスに配置することをお勧めします。 + + + +以下のプロバイダのガイドを用意しています。 + + + +* [Travis CI]({{ "/docs/continuous-integration/travis-ci/" | relative_url }}) +* [CircleCI]({{ "/docs/continuous-integration/circleci/" | relative_url }}) +* [Buddy]({{ "/docs/continuous-integration/buddyworks/" | relative_url }}) + + + +## Git post-receive hook + +Gitを使用して変更をプッシュするたびにリモートサーバーが展開を処理するようにするには、その`authorized_keys`ファイルに展開が許可されている全ての公開鍵を持つユーザーアカウントを作成します。これを設定したら、受信後フックの設定は次のようセットアップします。 + + + +```sh +laptop$ ssh deployer@example.com +server$ mkdir myrepo.git +server$ cd myrepo.git +server$ git --bare init +server$ cp hooks/post-receive.sample hooks/post-receive +server$ mkdir /var/www/myrepo +``` + +次に、以下の行をhooks/post-receiveに追加し、Jekyllがサーバーにインストールされたことを確認します。 + + + +```bash +#!/bin/bash -l + +# Install Ruby Gems to ~/gems +export GEM_HOME=$HOME/gems +export PATH=$GEM_HOME/bin:$PATH + +GIT_REPO=$HOME/myrepo.git +TMP_GIT_CLONE=$HOME/tmp/myrepo +GEMFILE=$TMP_GIT_CLONE/Gemfile +PUBLIC_WWW=/var/www/myrepo + +git clone $GIT_REPO $TMP_GIT_CLONE +BUNDLE_GEMFILE=$GEMFILE bundle install +BUNDLE_GEMFILE=$GEMFILE bundle exec jekyll build -s $TMP_GIT_CLONE -d $PUBLIC_WWW +rm -Rf $TMP_GIT_CLONE +exit +``` + +最後に、このフックを使用して展開できるようにする必要がある全ユーザーのラップトップで、次のコマンドを実行します。 + + + +```sh +laptops$ git remote add deploy deployer@example.com:~/myrepo.git +``` + +デプロイは、nginxやApacheに`/var/www/myrepo`を調べて次のコマンドを実行するように指示するのと同じくらい簡単です。 + + + +```sh +laptops$ git push deploy master +``` diff --git a/_docs/deployment/manual.md b/_docs/deployment/manual.md new file mode 100644 index 0000000..a85fd0b --- /dev/null +++ b/_docs/deployment/manual.md @@ -0,0 +1,52 @@ +--- +title: 手動デプロイ +permalink: /docs/deployment/manual/ +--- + + +Jekyllはデフォルトで`_site`ディレクトリにサイトを生成します。このディレクトリのコンテンツをホスティングプロバイダのサイトディレクトリに転送することができます。いくつかの手動で行う方法を示します。 + + + +## rsync + +Rsyncはscpに似ていますが、ファイル全体ではなく変更されたファイルの部分だけを送信するので高速です。[Digital Oceanチュートリアル](https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local-and-remote-directories-on-a-vps){:target="_blank"}でrsyncの使い方についてもっと学ぶことができます。 + + + +## Amazon S3 + +サイトをAmazon S3でホストしたい場合は、[s3_website](https://github.com/laurilehmijoki/s3_website){:target="_blank"}アプリケーションを使用して実行できます。サイトをAmazon S3にプッシュします。Amazon S3はあらゆるウェブサーバーのようにサイトを提供でき、ほぼ無制限のトラフィックに動的に拡大します。このアプローチには、使用するだけを支払うので、少量のブログで利用可能な最も安いホスティングオプションがあるという利点があります。 + + + +## FTP + +最も伝統的なWebホスティングプロバイダは、FTPを介してサーバーにファイルをアップロードすることを可能にします。FTPを使用してJekyllサイトをWebホストにアップロードするには、`jekyll build`コマンドを実行して、生成された`_site`フォルダの内容をホスティングアカウントのrootフォルダにコピーします。多くのホスティングプロバイダでは`httpdocs`または`public_html`フォルダです。 + + + +## scp + +デプロイメントWebサーバーに直接アクセスできる場合、ファイルを転送するために他の方法(`scp`、または直接ファイルシステムアクセスなど)を使用できる場合を除いて、プロセスは基本的に同じです。 生成された`_site`フォルダの内容が、Webサーバーの適切なWeb rootディレクトリに配置されるようにしてください。 + + + +## Rack-Jekyll + +[Rack-Jekyll](https://github.com/adaoraul/rack-jekyll/){:target="_blank"}を使用すると、Amazon EC2、Slicehost、Herokuなどのラックサーバにサイトをデプロイできます。また、[shotgun](https://github.com/rtomayko/shotgun/){:target="_blank"}、[rackup](https://github.com/rack/rack)、[mongrel](https://github.com/mongrel/mongrel){:target="_blank"}、[unicorn](https://github.com/defunkt/unicorn/){:target="_blank"}や[その他](https://github.com/adaoraul/rack-jekyll#readme){:target="_blank"}でも実行できます。 + + diff --git a/_docs/deployment/third-party.md b/_docs/deployment/third-party.md new file mode 100644 index 0000000..d071532 --- /dev/null +++ b/_docs/deployment/third-party.md @@ -0,0 +1,69 @@ +--- +title: 3rd Party +permalink: /docs/deployment/third-party/ +--- + +## Aerobatic + +[Aerobatic](https://www.aerobatic.com){:target="_blank"}には、カスタムドメイン、グローバルCDN配布、基本認証、CORSプロキシ、そして増え続けるプラグインのリストが含まれています。 + + + +自動でのJekyllサイトのデプロイはシンプルです。詳細は[Jekyll docs](https://www.aerobatic.com/docs/static-site-generators/#jekyll){:target="_blank"}をご覧ください。ビルドした`_site`フォルダを高可用性のグローバルに分散されたホスティングサービスにデプロイします。 + + + +## AWS Amplify + +[AWS Amplify Console](https://console.amplify.aws){:target="_blank"}は、最新のウェブアプリ(シングルページアプリと静的サイトジェネレータ)の継続的なデプロイとホスティングを提供します。継続的な展開により、開発者はGitリポジトリへのコードコミットごとにWebアプリケーションの更新を展開することができます。ホスティングには、グローバルに利用可能なCDN、ワンクリックカスタムドメイン設定 + HTTPS、機能ブランチの展開、リダイレクト、末尾のスラッシュ、パスワード保護などの機能が含まれています。 + + + +JekyllサイトをAWS Amplifyでデプロイとホストするために[step-by-step guide](https://medium.com/@FizzyInTheHall/build-and-publish-a-jekyll-powered-blog-easily-with-aws-amplify-529852042ab6){:target="_blank"}を読んでください。 + + + +## CloudCannon + +[CloudCannon](https://cloudcannon.com){:target="_blank"}にはJekyllサイトをビルド、ホスト、更新するのに必要な物が全てあります。グローバルCDN、自動SSL、継続的導入[など](https://cloudcannon.com/features/)を{:target="_blank"}活用してください。 + + + +## GitHub Pages + +GitHub Pagesのサイトは、舞台裏でJekyllによって提供されています。ですので、手間のかからない、コストのかからないソリューションを探しているのであれば、GitHub Pagesは[Jekyllで運営されているWebサイトを無料でホスト]({{ "/docs/github-pages/" | relative_url }})するのに最適な方法です。 + + + +## Kickster + +GitHub Pagesでサポートされていないプラグインを使用する場合は、GitHub Pagesへの自動デプロイに[Kickster](http://kickster.nielsenramon.com/){:target="_blank"}を使用してください。 + + + +Kicksterは、Webのベストプラクティスと、プロジェクト全体の品質を向上させる便利な最適化ツールが満載の基本的なJekyllプロジェクト設定を提供します。Kicksterには、GitHub Pages用の自動化された、心配のないデプロイスクリプトが付属しています。 + + + +Kickster gemをインストールしてください。より多くのドキュメンテーションは[こちら](https://github.com/nielsenramon/kickster#kickster){:target="_blank"}で見つけることができます。gemを使用したくない、または新しいプロジェクトを開始したくない場合は、[Travis CI](https://github.com/nielsenramon/kickster/tree/master/snippets/travis){:target="_blank"}や[Circle CI](https://github.com/nielsenramon/kickster#automated-deployment-with-circle-ci){:target="_blank"}用のデプロイスクリプトをコピー&ペーストするだけです。 + + + + +## Netlify + +Netlifyは、グローバルCDN、継続的導入、ワンクリックHTTPS[など](https://www.netlify.com/features/){:target="_blank"}を提供し、複雑さを増すことなく、最新のWebプロジェクトで利用可能な最も堅牢なツールセットを開発者に提供します。NetlifyはJekyll用のカスタムプラグインをサポートし、オープンソースプロジェクトのための無料プランを持っています。 + + + +JekyllサイトをNetlifyでセットアップするには、[Jekyll step-by-step guide](https://www.netlify.com/blog/2015/10/28/a-step-by-step-guide-jekyll-3.0-on-netlify/){:target="_blank"}をご覧ください。 + + + +## Static Publisher + +[Static Publisher](https://github.com/static-publisher/static-publisher){:target="_blank"}は、ウェブフックの投稿を待機しているサーバーを使用したもう1つの自動導入オプションです。ただし、GitHubとは特に関係ありません。Herokuにワンクリックでデプロイでき、1つのサーバーから複数のプロジェクトを見ることができ、ユーザー管理が簡単なインターフェースを備え、S3またはgitリポジトリ(gh-pagesなど)にパブリッシュできます。 + + diff --git a/_docs/front-matter.md b/_docs/front-matter.md new file mode 100644 index 0000000..fd1279a --- /dev/null +++ b/_docs/front-matter.md @@ -0,0 +1,278 @@ +--- +title: Front Matter +permalink: /docs/front-matter/ +redirect_from: /docs/frontmatter/index.html +--- + +[YAML](https://yaml.org/ target="_blank") front matterブロックを含むファイルは全て、Jekyllに特別なファイルとして処理されます。front matterはファイルの最初で3つのダッシュの行に挟まれた有効なYAMLでなければなりません。次は基本的な例です。 + + + +```yaml +--- +layout: post +title: Blogging Like a Hacker +--- +``` + +3つのダッシュの行の間で、定義済みの変数(下記を参照してください)を設定したり、カスタム変数を作ることができます。これらの変数は、そのファイルやそのページやポストのレイアウトで、Liquidタグを使ってアクセスできるようになります。 + + + +
    +
    UTF-8エンコーディング時の警告
    + +

    + UTF-8エンコーディングを使用している場合、BOMをヘッダに含めないでください。Jekyllに非常に悪いことが起こります。特にJekyll on Windowsを使用している場合に影響があります。 +

    + +
    + +
    +
    ProTip™: Front Matter変数はオプションです
    + +

    + Liquidタグや変数は使いたいけれどfront matterでは何も必要ない場合、取り除いて空にしましょう。3つのダッシュの行が2行続いていれば、Jekyllはそのファイルで作業をします。(これは、CSSやRSSフィードのファイルで便利です!) +

    + +
    + +## 定義済みグローバル変数 + + +ページやポストのfront matterで設定できる、定義済みのグローバル変数です。 + + + +
    + + + + + + + + + + + + + + + + + + + + + + +
    変数説明
    +

    layout

    +
    +

    + + 設定したらそのレイアウトファイルを使用します。レイアウトファイルの名前を拡張子無しで使います。レイアウトファイルは、_layoutsディレクトリになければなりません。 + +

    + +
      +
    • + nullを使用するとレイアウトファイルを使用しません。ファイルがpost/documentで + front matterのデフォルトが定義されている場合、上書きします。 +
    • + +
    • + バージョン3.5.0から始めた場合、post/documentでnoneを使用すると、front matterのデフォルトに関係なく、レイアウトファイルを使用しません。pageでnoneを使用すると、Jekyllは"none"というレイアウトを使用しようとします。 +
    • + +
    +
    +

    permalink

    +
    +

    + + サイト全体のURLのスタイル(デフォルトは/year/month/day/title.html)と異なるURLで作成したい場合この変数を設定します。最終的なURLとして使用されます。 +

    + +
    +

    published

    +
    +

    + サイトを生成するときに、特定のポストを表示したくない場合にfalseを設定します。 +

    + +
    +
    + +
    +
    ProTip™: 非公開としてマークされたポストをレンダリングする
    + +

    + 非公開のページをプレビューするには、jekyll servejekyll buildを実行するときに--unpublishedスイッチを使います。 Jekyllには、ブログポスト専用の便利なドラフト機能もあります。 +

    + +
    + +## カスタム変数 + + +Liquidでアクセスできる、あなた自身のfront matter変数を設定することもできます。例えば、`food`という変数を使用したい場合、ページには次のように記載します。 + + + +{% raw %} +```liquid +--- +food: Pizza +--- + +

    {{ page.food }}

    +``` +{% endraw %} + +## ポストの定義済み変数 + + +ポストのfront matterですぐに使用できます。 + + + +
    + + + + + + + + + + + + + + + + + + + + + + +
    変数説明
    +

    date

    +
    +

    + ポストのファイル名からの日付を上書きします。これはポストを正しくソートするために使用できます。日付は特定のフォーマットYYYY-MM-DD HH:MM:SS +/-TTTTで、時刻とタイムゾーンはオプションです。 +

    + +
    +

    category

    +

    categories

    +
    +

    + + ポストをフォルダ分けする代わりに、1つ以上のカテゴリを設定できます。サイトにポストを生成するときに、これらのカテゴリが設定されているように振る舞います。Categories(複数キー)ではYAML listやスペース区切りの文字列で指定できます。 + +

    + +
    +

    tags

    +
    +

    + + カテゴリとよく似ており、1つ以上のタグをポストに追加できます。カテゴリと同様tagsもYAML listやスペース区切りの文字列で指定できます。 + +

    + +
    +
    + +
    +
    ProTip™: 繰り返さないで
    + +

    + よく使用するfront matter変数を、何度も何度も繰り返し記述したくない場合は、デフォルトを変更し必要に応じて上書きしてください。これは定義済み変数でもカスタム変数でも行えます。 +

    + +
    diff --git a/_docs/github-pages.md b/_docs/github-pages.md index efbaadc..738acc0 100644 --- a/_docs/github-pages.md +++ b/_docs/github-pages.md @@ -1,229 +1,188 @@ --- -layout: docs -title: GitHub Pagesについて -prev_section: extras -next_section: deployment-methods -permalink: /docs/github-pages/ -base_revision: 52c76b5d9333a98285db7e04ee7ae8051228ec76[refs/heads/master] ---- - - - -[GitHub Pages](http://pages.github.com) はユーザや、組織、そしてレポジトリ -(これらはGitHubの `github.io` ドメインあるいは、ユーザが選んだドメイン名で自由にホストされます) -のための公開できるウェブページです。GitHub Pages は -裏側でJekyllが動作しており、通常のHTMLコンテンツをサポートすることに加え、 -Jekyllで動作するウェブサイトを無料でホストするとても優れた方法です。 - - - -## GitHub Pages へ Jekyll をデプロイ - - - -GitHub上のレポジトリのあるブランチを指定することでGitHub Pagesは動作します。 -利用できる2つの基本的なタイプがあります:ユーザー/組織のページとプロジェクトのページです。 -2,3の細かな部分を除いて、これら2つのタイプのサイトをデプロイする方法は、ほとんど同じです。 - - -### ユーザーと組織ページ +[GitHub Pages](https://pages.github.com)は、ユーザー、組織、リポジトリの公開Webページで、`github.io`かカスタムドメイン名を選択でき、GitHubにホストされています。GitHub PagesはJekyllによって供給されているので、無料でJekyllで運営されているWebサイトをホストするのに最適な方法です。 - + -GitHub Pagesファイル専用の特別なGithubレポジトリでユーザーと組織ページは動作します。 -このレポジトリは、アカウント名をとって名付けられなければなりません。たとえば、 -[@mojomboというユーザのレポジトリ](https://github.com/mojombo/mojombo.github.io) -は、`mojombo.github.io`という名前になります。 +ソースファイルをプッシュすると、GitHub Pagesによりサイトが自動で生成されます。GitHub Pagesは通常のHTMLコンテンツでも同様に機能します。理由は簡単で、Jekyllはfront matterの無いファイルは静的なassetとして扱うためです。生成されたHTMLをプッシュするのでしたら、更なる設定を何もせずに行えばいいです。 - + -あなたのレポジトリの`master`ブランチの内容はGitHub Pagesサイトの構築・公開するのに -使用されるので、あなたのJekyllサイトがそこに保存されてることを確認してください。 +GitHub Pagesでサイトを構築するのは初めてですか? [Jonathan McGloneによる素晴らしいガイド](http://jmcglone.com/guides/github-pages/){: target="_blank"}を見て、行ってみてください。このガイドでは、GitHub Pagesで自身のWebサイトを作るために、GitやGitHub、Jekyllについて知っておくべきことを説明しています。 - + -
    -
    カスタムドメインの場合はレポジトリ名の制限はありません
    +## The github-pages gem + +GitHubの友人たちは、[JekyllとそのGitHub Pagesへの依存関係](https://pages.github.com/versions/){: target="_blenk"}を管理するために使用される[github-pages](https://github.com/github/pages-gem)を提供しています。プロジェクトでそれを使うことは、サイトをGitHub Pagesにデプロイするとき、gemの様々なバージョン間の予想外の違いに捕まることはないということを意味します。 + + + +GitHub Pagesは`safe`モードで動作し、[ホワイトリストに登録されたプラグインのセット](https://help.github.com/articles/configuring-jekyll-plugins/#default-plugins){: target="_blenk"}のみを許可していることに気をつけてください。 + + + +プロジェクトで現在デプロイされているバージョンのgemを使用するには、`Gemfile`に以下を追加します。 + + + +```ruby +source "https://rubygems.org" + +gem "github-pages", group: :jekyll_plugins +``` + +必ず`bundle update`を頻繁に実行してください。 + + + +
    +
    GitHub Pagesのドキュメンテーションとヘルプ、サポート
    +

    - GitHub Pagesはまず最初にusername.github.ioサブドメインで - 動作するように構成されます。 - そして、これがカスタムドメインが利用されるとしても、 - リポジトリにこのような名前を付けられなければならない理由です。 + GitHub Pagesでできることやトラブルシューティングガイドの詳細については、GitHubのPagesヘルプセクションをご覧ください。 それでもうまくいかない場合は、GitHubサポートに連絡してください。

    +
    - + +GitHubにプッシュする前にJekyllサイトをプレビューした方が良い場合があります。GitHubがプロジェクトページに使用するサブディレクトリのようなURL構造は、URLの適切な解決を複雑にします。あなたのサイトが正しく構築されていることを確認するために、便利な[URLフィルタ]({{ "/docs/liquid/filters/" | relative_url }})を使用してください。 + + + +{% raw %} +```liquid + + + +[{{ page.title }}]("{{ page.url | relative_url }}") +``` +{% endraw %} + +この方法で、localhost上のサイトrootからローカルでプレビューできます。そして、GitHubがページを生成するときには、全てのURLが正しく解決されます。 + + + +## JekyllをGitHub Pagesにデプロイ + + +GitHub PagesはGitHub上のリポジトリの特定のブランチを見ることによって機能します。利用可能な2つの基本的な種類があります:[user/organization と project pages](https://help.github.com/articles/user-organization-and-project-pages/){: target="_blenk"}。これら2種類のサイトを展開する方法は、いくつかの細かい点を除いてほぼ同じです。 + + + +### UserとOrganizationページ + + +UserとOrganizationページは、GitHub Pagesのファイル専用の特別なGitHubリポジトリにあります。このリポジトリは、アカウント名にちなんで命名する必要があります。たとえば、[@mojomboのユーザーページのリポジトリ](https://github.com/mojombo/mojombo.github.io){: target="_blenk"}の名前は`mojombo.github.io`です。 + + + +GitHub Pagesサイトの構築と公開には、リポジトリの`master`ブランチのコンテンツが使用されます。そのため、Jekyllサイトがそこに格納されていることを確認してください。 + + +
    -
    Custom domains do not affect repository names
    +
    カスタムドメインはリポジトリ名に影響しません
    +

    + GitHub Pagesは、まずusername.github.ioサブドメインの下に存在するように設定されています。そのため、カスタムドメインを使用している場合でも、リポジトリにこのように名前を付ける必要があります。 +

    +
    ---> - -### プロジェクトページ - -ユーザーと組織ページと違って、プロジェクトページは彼らのプロジェクトと同じリポジトリに -保存されますが、ウェブサイトコンテンツは特別な名前をつけられた`gh-pages`ブランチに保存されます。 -このブランチのコンテンツはJekyllを利用して生成されます。そして出力されたものは -あなたのユーザーページのサブドメイン、例えば`username.github.io/project` -(明示的なカスタムドメインでない限り。下記参照)のような形で利用できます。 +UserとOrganizationページとは異なり、プロジェクトページは、目的のプロジェクトと同じリポジトリに保存されます。ただし、Webページのコンテンツは、特別な名前の`gh-pages`ブランチ、または`master`ブランチの`docs`フォルダに格納されているます。コンテンツはJekyllを使用してレンダリングされ、出力は`username.github.io/project`などのユーザーページサブドメインのサブパスの下に表示されます(カスタムドメインが指定されていない場合)。 - - -Jekyll プロジェクトのリポジトリ自体が — この[master ブランチ]({{ site.repository }}) -を含むブランチ構成が — Jekyllというソフトウエアの完璧な例になっています。 -しかし、Jekyllウェブサイト(あなたがたった今見ているこのサイト)は同じリポジトリの -[gh-pages ブランチ]({{ site.repository }}/tree/gh-pages) に含まれているものになります。 - - + +Jekyllプロジェクトのリポジトリ自体が、このブランチ構造の完璧な例です。[マスターブランチ]({{ site.repository }}){: target="_blenk"} にはJekyllの実際のソフトウェアプロジェクトが含まれています。現在見ているJekyll Webサイトは、同じリポジトリの[docsフォルダ]({{ site.repository }}/tree/master/docs){: target="_blenk"}にあります。 + + +actual software project for Jekyll, and the Jekyll website that you’re +looking at right now is contained in the [docs +folder]({{ site.repository }}/tree/master/docs) of the same repository. --> -
    -
    ソースファイルはルートディレクトリ内にある必要があります
    -

    -Github Pages は “Site Source” 設定値を -上書きします。 -だから、ルートディレクトリ以外のソースファイルを探そうとした場合、 -正しくビルドできない可能性があります。 -

    -
    +より詳細な例については、GitHubの公式ドキュメントの[user, organization and project pages](https://help.github.com/articles/user-organization-and-project-pages/){: target="_blenk"}を参照してください。 + + -

    -Github Pages overrides the “Site Source” configuration value, so if you locate your files anywhere other than the root directory, your site may not build correctly. -

    +GitHub Pagesは“Site Source”の設定値を上書きするため、ファイルをルートディレクトリ以外の場所に配置すると、サイトが正しく構築されない可能性があります。

    +
    ---> - -### Project Page URL Structureについて - - - -時々、あなたのJekyllサイトの`gh-pages`ブランチをGitHubへpush する前にプレビューするとよい -です。しかし、GitHubがプロジェクトページのために使用するサブディレクトリのようなURL構造は -URLの適切な解決を困難にします。 -そこで、ローカルでにJekyllサイトをプレビューする機能を維持する -GitHubGitHub Project Page URL structure (`username.github.io/project-name/`) を -利用するアプローチがあります。 - - - -1. `_config.yml` ファイルにて、`baseurl` オプションを`/project-name`に設定します。 -- 先頭にスラッシュをつけて、最後にスラッシュを**つけない**ことに注意してください。 -2. JSやCSSファイルを参照する際は、次のようにしてください: - `{% raw %}{{ site.baseurl }}/path/to/css.css{% endraw %}` -- 変数に続いてスラッシュを記述することに注意してください。("path"のすぐ前に記述) -3. パーマリンクや内部リンクを行う時には、次のようにしてください: - `{% raw %}{{ site.baseurl }}{{ post.url }}{% endraw %}` -- 2つの変数の間にスラッシュは**ない**ことに注意してください。 -4. 最後に、もしあなたがコミット・デプロイする前にプレビューしたい場合は`jekyll serve`を実行してください。 - `--baseurl` オプションに空文字列を渡せば`localhost:4000`で見ることができます。(最初に`/project-name`をつけることなしに) - - - -この方法ならlocalhost上でサイトのトrootからあなたのサイトを手元でプレビューすることができます。 -しかし、gh-pages ブランチからあなたのページをGitHubが生成する時にはすべてのURLは - `/project-name` で始まり、適切に解決されます。 - - - -
    -
    GitHubのページマニュアル、ヘルプ、サポート
    -

    - GitHub Pagesを使って何ができるかのさらに詳細な情報が必要な場合やだけでなく、 - トラブルシューティングガイドについては GitHub’s Pages Help - sectionをチェックアウトする必要があります。 それらのすべてでも解決しない場合にはGitHub サポートにご連絡ください。 -

    -
    +
    +
    Windowsでのgithub-pages gemのインストール
    + -
    ---> diff --git a/_docs/history.md b/_docs/history.md index 440dc6e..8d646bf 100644 --- a/_docs/history.md +++ b/_docs/history.md @@ -1,168 +1,2576 @@ --- -layout: docs title: History permalink: "/docs/history/" -prev_section: contributing +note: This file is autogenerated. Edit /History.markdown instead. --- - +## 3.8.5 / 2018-11-04 +{: #v3-8-5} + +### Bug Fixes +{: #bug-fixes-v3-8-5} + +- Re-implement handling Liquid blocks in excerpts ([#7250]({{ site.repository }}/issues/7250)) + + +## 3.8.4 / 2018-09-18 +{: #v3-8-4} + +### Bug Fixes +{: #bug-fixes-v3-8-4} + +- 3.8.x: security: fix `include` bypass of `EntryFilter#filter` symlink check ([#7228]({{ site.repository }}/issues/7228)) + + +## 3.8.3 / 2018-06-05 +{: #v3-8-3} + +### Bug Fixes +{: #bug-fixes-v3-8-3} + +- Fix --unpublished not affecting collection documents ([#7027]({{ site.repository }}/issues/7027)) + + +## 3.8.2 / 2018-05-18 +{: #v3-8-2} + +### Development Fixes +{: #development-fixes-v3-8-2} + +- Update rubocop version ([#7016]({{ site.repository }}/issues/7016)) + +### Bug Fixes +{: #bug-fixes-v3-8-2} + +- Add whitespace control to LIQUID_TAG_REGEX ([#7015]({{ site.repository }}/issues/7015)) + + +## 3.8.1 / 2018-05-01 +{: #v3-8-1} + +### Bug Fixes +{: #bug-fixes-v3-8-1} + +- Fix rendering Liquid constructs in excerpts ([#6945]({{ site.repository }}/issues/6945)) +- Liquify documents unless published == false ([#6959]({{ site.repository }}/issues/6959)) + + +## 3.8.0 / 2018-04-19 +{: #v3-8-0} + +### Development Fixes +{: #development-fixes-v3-8-0} + +- move duplicate code to a single private method ([#6593]({{ site.repository }}/issues/6593)) +- Test against Ruby 2.5 on AppVeyor ([#6668]({{ site.repository }}/issues/6668)) +- Replace simple regex with a native Ruby method ([#6732]({{ site.repository }}/issues/6732)) +- Codeclimate: exclude livereload.js ([#6776]({{ site.repository }}/issues/6776)) +- Add a cucumber feature to test link tag ([#6777]({{ site.repository }}/issues/6777)) +- Fix theme gem feature ([#6784]({{ site.repository }}/issues/6784)) +- Replace simple regex with equivalent Ruby methods ([#6736]({{ site.repository }}/issues/6736)) +- Rewrite `script/rubyprof` as a Ruby script ([#6813]({{ site.repository }}/issues/6813)) +- Add debug output to theme rendering ([#5195]({{ site.repository }}/issues/5195)) +- fix minitest deprecation warning in test ([#6839]({{ site.repository }}/issues/6839)) +- Memoize `Site#site_data` ([#6809]({{ site.repository }}/issues/6809)) +- Memoize document output extension ([#6814]({{ site.repository }}/issues/6814)) +- Access document permalink attribute efficiently ([#6740]({{ site.repository }}/issues/6740)) +- Minimize array allocations in the `where` filter ([#6860]({{ site.repository }}/issues/6860)) +- Bump JRuby ([#6878]({{ site.repository }}/issues/6878)) +- Assert existence of <collection>.files ([#6907]({{ site.repository }}/issues/6907)) +- Bump RuboCop to 0.54.x ([#6915]({{ site.repository }}/issues/6915)) +- Regenerate unconditionally unless its an incremental build ([#6917]({{ site.repository }}/issues/6917)) +- Centralize require statements ([#6910]({{ site.repository }}/issues/6910)) +- Bump to RuboCop 0.55 ([#6929]({{ site.repository }}/issues/6929)) +- Refactor private method `HighlightBlock#parse_options` ([#6822]({{ site.repository }}/issues/6822)) + +### Minor Enhancements +{: #minor-enhancements-v3-8-0} + +- Two massive performance improvements for large sites ([#6730]({{ site.repository }}/issues/6730)) +- Cache the list of documents to be written ([#6741]({{ site.repository }}/issues/6741)) +- Allow Jekyll Doctor to detect stray posts dir ([#6681]({{ site.repository }}/issues/6681)) +- Excerpt relative-path should match its path ([#6597]({{ site.repository }}/issues/6597)) +- Remind user to resolve conflict in `jekyll new` with `--force` ([#6801]({{ site.repository }}/issues/6801)) +- Memoize helper methods in site-cleaner ([#6808]({{ site.repository }}/issues/6808)) +- Compute document's relative_path faster ([#6767]({{ site.repository }}/issues/6767)) +- Create a single instance of PostReader per site ([#6759]({{ site.repository }}/issues/6759)) +- Allow date filters to output ordinal days ([#6773]({{ site.repository }}/issues/6773)) +- Change regex to sanitize and normalize filenames passed to LiquidRenderer ([#6610]({{ site.repository }}/issues/6610)) +- Allow passing :strict_variables and :strict_filters options to Liquid's renderer ([#6726]({{ site.repository }}/issues/6726)) +- Debug writing files during the build process ([#6696]({{ site.repository }}/issues/6696)) +- Improve regex usage in `Tags::IncludeTag` ([#6848]({{ site.repository }}/issues/6848)) +- Improve comment included in the starter index.md ([#6916]({{ site.repository }}/issues/6916)) +- Store and retrieve converter instances for Jekyll::Filters via a hash ([#6856]({{ site.repository }}/issues/6856)) +- Implement a cache within the `where` filter ([#6868]({{ site.repository }}/issues/6868)) +- Store regexp in a constant ([#6887]({{ site.repository }}/issues/6887)) +- Optimize computing filename in LiquidRenderer ([#6841]({{ site.repository }}/issues/6841)) + +### Documentation + +- Adding the jekyll-algolia plugin to the list of plugins ([#6737]({{ site.repository }}/issues/6737)) +- Added Premonition plugin to list of plugins ([#6750]({{ site.repository }}/issues/6750)) +- Add document on releasing a new version ([#6745]({{ site.repository }}/issues/6745)) +- Mention Talkyard, a new commenting system for Jekyll and others. ([#6752]({{ site.repository }}/issues/6752)) +- Add 'jekyll-fontello' to plugins ([#6757]({{ site.repository }}/issues/6757)) +- Install dh-autoreconf on Windows ([#6765]({{ site.repository }}/issues/6765)) +- Fix common typos ([#6764]({{ site.repository }}/issues/6764)) +- Fix documentation for {% raw %}`{{ page.excerpt }}`{% endraw %} ([#6779]({{ site.repository }}/issues/6779)) +- Update docs on permalink configuration ([#6775]({{ site.repository }}/issues/6775)) +- Propose fix some typos ([#6785]({{ site.repository }}/issues/6785)) +- Say hello to Jekyll's New Lead Developer ([#6790]({{ site.repository }}/issues/6790)) +- Add reference to Liquid to plugin docs ([#6794]({{ site.repository }}/issues/6794)) +- Draft a release post for v3.7.3 ([#6803]({{ site.repository }}/issues/6803)) +- add missing step for gem-based theme conversion ([#6802]({{ site.repository }}/issues/6802)) +- Update windows.md to explain an issue with jekyll new. ([#6838]({{ site.repository }}/issues/6838)) +- Add Bundler Installation Instructions ([#6828]({{ site.repository }}/issues/6828)) +- Docs: describe difference between tags and categories ([#6882]({{ site.repository }}/issues/6882)) +- Add `jekyll-random` plugin to docs ([#6833]({{ site.repository }}/issues/6833)) +- Fixed typo in description of categories and tags ([#6896]({{ site.repository }}/issues/6896)) +- Add missing ul-tag ([#6897]({{ site.repository }}/issues/6897)) +- doc: add liquid tag plugin jekyll-onebox for html previews ([#6898]({{ site.repository }}/issues/6898)) +- Add `jekyll-w2m` to plugins ([#6855]({{ site.repository }}/issues/6855)) +- Fix tutorials navigation HTML ([#6919]({{ site.repository }}/issues/6919)) +- add Arch Linux instalation troubleshoot ([#6782]({{ site.repository }}/issues/6782)) +- Docs: Install Jekyll on macOS ([#6881]({{ site.repository }}/issues/6881)) +- Fix CodeClimate badges [ci skip] ([#6930]({{ site.repository }}/issues/6930)) +- Update index.md ([#6933]({{ site.repository }}/issues/6933)) + +### Site Enhancements +{: #site-enhancements-v3-8-0} + +- Remove links to Gists ([#6751]({{ site.repository }}/issues/6751)) +- Always load Google Fonts over HTTPS ([#6792]({{ site.repository }}/issues/6792)) +- always load analytics.js over HTTPS ([#6807]({{ site.repository }}/issues/6807)) + +### Bug Fixes +{: #bug-fixes-v3-8-0} + +- Append appropriate closing tag to Liquid block in an excerpt ### -minor ([#6724]({{ site.repository }}/issues/6724)) +- Bypass rendering via Liquid unless required ([#6735]({{ site.repository }}/issues/6735)) +- Delegated methods after `private` keyword are meant to be private ([#6819]({{ site.repository }}/issues/6819)) +- Improve handling non-default collection documents rendering and writing ([#6795]({{ site.repository }}/issues/6795)) +- Fix passing multiline params to include tag when using the variable syntax ([#6858]({{ site.repository }}/issues/6858)) +- `include_relative` tag should find related documents in collections gathered within custom `collections_dir` ([#6818]({{ site.repository }}/issues/6818)) +- Handle liquid tags in excerpts robustly ([#6891]({{ site.repository }}/issues/6891)) +- Allow front matter defaults to be applied properly to documents gathered under custom `collections_dir` ([#6885]({{ site.repository }}/issues/6885)) + + +## 3.7.4 / 2018-09-07 +{: #v3-7-4} + +### Bug Fixes +{: #bug-fixes-v3-7-4} + +- Security: fix `include` bypass of EntryFilter#filter symlink check ([#7224]({{ site.repository }}/issues/7224)) + + +## 3.7.3 / 2018-02-25 +{: #v3-7-3} + +### Bug Fixes +{: #bug-fixes-v3-7-3} + +- Do not hardcode locale unless certainly necessary ([#6791]({{ site.repository }}/issues/6791)) + + +## 3.7.2 / 2018-01-25 +{: #v3-7-2} + +### Development Fixes +{: #development-fixes-v3-7-2} + +- CI: Test against Ruby 2.5.0 ([#6664]({{ site.repository }}/issues/6664)) +- Bump rdoc to 6.0 ([#6600]({{ site.repository }}/issues/6600)) +- Lint file and bump theme dependencies ([#6698]({{ site.repository }}/issues/6698)) +- Write a Rubocop Cop to ensure no `#p` or `#puts` calls get committed to master. ([#6615]({{ site.repository }}/issues/6615)) +- Remove redgreen gem ([#6720]({{ site.repository }}/issues/6720)) + +### Site Enhancements +{: #site-enhancements-v3-7-2} + +- Display latest version in header ([#6676]({{ site.repository }}/issues/6676)) +- Update version in `config.yml` via YAML load / dump ([#6677]({{ site.repository }}/issues/6677)) + +### Documentation + +- Fix: Add note about posts in context of collections_dir ([#6680]({{ site.repository }}/issues/6680)) +- Update deploy-script in documentation ([#6666]({{ site.repository }}/issues/6666)) +- Add note about naming of collections_dir ([#6703]({{ site.repository }}/issues/6703)) +- Update installation.md ([#6694]({{ site.repository }}/issues/6694)) +- Add `jekyll-html` to plugins. ([#6654]({{ site.repository }}/issues/6654)) +- Update plugins.md ([#6716]({{ site.repository }}/issues/6716)) +- Release v3.7.1 ([#6695]({{ site.repository }}/issues/6695)) + +### Bug Fixes +{: #bug-fixes-v3-7-2} + +- inform that symlinks are not allowed in safe mode ([#6670]({{ site.repository }}/issues/6670)) +- Glob scope path only if configured with a pattern ([#6692]({{ site.repository }}/issues/6692)) +- Add gem "wdm" to all newly generated Gemfiles ([#6711]({{ site.repository }}/issues/6711)) +- Fix timezone inconsistencies between different ruby version ([#6697]({{ site.repository }}/issues/6697)) +- Refactor collections_dir feature for consistency ([#6685]({{ site.repository }}/issues/6685)) + +### Minor Enhancements +{: #minor-enhancements-v3-7-2} + +- Require external library only if necessary ([#6596]({{ site.repository }}/issues/6596)) + + +## 3.7.0 / 2018-01-02 +{: #v3-7-0} + +### Minor Enhancements +{: #minor-enhancements-v3-7-0} + +- Add LiveReload functionality to Jekyll. ([#5142]({{ site.repository }}/issues/5142)) +- Add Utils::Internet.connected? to determine whether host machine has internet connection. ([#5870]({{ site.repository }}/issues/5870)) +- Disable default layouts for Pages with a `layout: none` declaration ([#6182]({{ site.repository }}/issues/6182)) +- Scope path glob ([#6268]({{ site.repository }}/issues/6268)) +- Allow the user to set collections_dir to put all collections under one subdirectory ([#6331]({{ site.repository }}/issues/6331)) +- Upgrade to Rouge 3 ([#6381]({{ site.repository }}/issues/6381)) +- Allow URL filters to work directly with documents ([#6478]({{ site.repository }}/issues/6478)) +- filter relative_url should keep absolute urls with scheme/authority ([#6490]({{ site.repository }}/issues/6490)) +- `.sass-cache` doesn't *always* land in `options['source']` ([#6500]({{ site.repository }}/issues/6500)) +- Allow plugins to modify the obsolete files. ([#6502]({{ site.repository }}/issues/6502)) +- Add latin mode to `slugify` ([#6509]({{ site.repository }}/issues/6509)) +- Log Kramdown warnings if log level is WARN ([#6522]({{ site.repository }}/issues/6522)) +- Add an option to configure kramdown warning output ([#6554]({{ site.repository }}/issues/6554)) +- Add `json` extension to list of directory indices ([#6550]({{ site.repository }}/issues/6550)) +- Dependency: Bump jekyll-watch to 2.0 ([#6589]({{ site.repository }}/issues/6589)) +- Remove paginate check ([#6606]({{ site.repository }}/issues/6606)) +- update classifier-reborn to 2.2.0 ([#6631]({{ site.repository }}/issues/6631)) +- Switch to an actively-maintained TOML parser. ([#6652]({{ site.repository }}/issues/6652)) +- Do not coerce layout paths in theme-gem to the source directory ([#6603]({{ site.repository }}/issues/6603)) + +### Bug Fixes +{: #bug-fixes-v3-7-0} + +- Raise when theme root directory is not available ([#6455]({{ site.repository }}/issues/6455)) +- Avoid block parser warning in SmartyPants ([#6565]({{ site.repository }}/issues/6565)) +- Fail gracefully if "sass" gem cannot be loaded ([#6573]({{ site.repository }}/issues/6573)) +- return correct file in dir if dir has same name as file ([#6569]({{ site.repository }}/issues/6569)) +- Register reload hooks in Server#process ([#6605]({{ site.repository }}/issues/6605)) +- Memoize path to metadata file ([#6602]({{ site.repository }}/issues/6602)) +- Use `require_relative` to load Jekyll classes ([#6609]({{ site.repository }}/issues/6609)) + +### Development Fixes +{: #development-fixes-v3-7-0} + +- Added direct collection access to future collection item feature test([#6151]({{ site.repository }}/issues/6151)) +- add failing test for non-utf8 encoding ([#6339]({{ site.repository }}/issues/6339)) +- Upgrade to Cucumber 3.0 ([#6395]({{ site.repository }}/issues/6395)) +- Provide a better default hash for tracking liquid stats ([#6417]({{ site.repository }}/issues/6417)) +- Add configuration for first-timers bot ([#6431]({{ site.repository }}/issues/6431)) +- Do not linkify escaped characters as PRs in History ([#6468]({{ site.repository }}/issues/6468)) +- Rely on jekyll-mentions for linking usernames ([#6469]({{ site.repository }}/issues/6469)) +- Update first-timers-issue-template.md ([#6472]({{ site.repository }}/issues/6472)) +- Enable `Lint/RescueWithoutErrorClass` Cop ([#6482]({{ site.repository }}/issues/6482)) +- Clean up Rubocop config ([#6495]({{ site.repository }}/issues/6495)) +- Use Gem to discover the location of bundler ([#6499]({{ site.repository }}/issues/6499)) +- Remove unnecessary encoding comment ([#6513]({{ site.repository }}/issues/6513)) +- Suggest using Rubocop to automatically fix errors ([#6514]({{ site.repository }}/issues/6514)) +- Assert raising Psych::SyntaxError when`"strict_front_matter"=>true` ([#6520]({{ site.repository }}/issues/6520)) +- Use Kernel#Array instead of explicit Array check ([#6525]({{ site.repository }}/issues/6525)) +- RuboCop: Enable `Style/UnneededCapitalW` cop ([#6526]({{ site.repository }}/issues/6526)) +- Refactor method to reduce ABC Metric size ([#6529]({{ site.repository }}/issues/6529)) +- Remove parentheses around arguments to raise ([#6532]({{ site.repository }}/issues/6532)) +- Use double-quotes around gem name ([#6535]({{ site.repository }}/issues/6535)) +- Dependencies: upgrade to toml 0.2.0 ([#6541]({{ site.repository }}/issues/6541)) +- Lock to cucumber 3.0.1 on Ruby 2.1 ([#6546]({{ site.repository }}/issues/6546)) +- Bump JRuby version in Travis config ([#6561]({{ site.repository }}/issues/6561)) +- Rescue from Psych::SyntaxError instead of SyntaxError after parsing YAML([#5828]({{ site.repository }}/issues/5828)) +- Drop forwarding to private methods by exposing those methods as public([#6577]({{ site.repository }}/issues/6577)) +- Upgrade pygments to v1.x ([#5937]({{ site.repository }}/issues/5937)) +- Bump yajl-ruby ([#6582]({{ site.repository }}/issues/6582)) +- Cleanup test_redcarpet.rb ([#6584]({{ site.repository }}/issues/6584)) +- Add PageWithoutAFile class from jekyll plugins ([#6556]({{ site.repository }}/issues/6556)) +- Cleanup LiveReloadReactor ([#6607]({{ site.repository }}/issues/6607)) + +### Documentation + +- Add formester to the list of saas form backend ([#6059]({{ site.repository }}/issues/6059)) +- GitHub Pages instructions ([#6384]({{ site.repository }}/issues/6384)) +- Improve documentation for theme-gem installation ([#6387]({{ site.repository }}/issues/6387)) +- Fix diff syntax-highlighting ([#6388]({{ site.repository }}/issues/6388)) +- Update instructions ([#6396]({{ site.repository }}/issues/6396)) +- Fix code-block highlighting in docs ([#6398]({{ site.repository }}/issues/6398)) +- Filtering Posts with categories, tags, or other variables ([#6399]({{ site.repository }}/issues/6399)) +- Fixes formatting on pre-formatted text. ([#6405]({{ site.repository }}/issues/6405)) +- Added new tutorial to tutorials section on docs ([#6406]({{ site.repository }}/issues/6406)) +- Updates ([#6407]({{ site.repository }}/issues/6407)) +- Fix `collections_dir` example ([#6408]({{ site.repository }}/issues/6408)) +- Renaming duplicate of "Scenario 6" to "Scenario 7" ([#6411]({{ site.repository }}/issues/6411)) +- Mark `collection_dir` as unreleased ([#6412]({{ site.repository }}/issues/6412)) +- Fix link to SUPPORT ([#6415]({{ site.repository }}/issues/6415)) +- Fix list appearance by adding missing `ol` tag ([#6421]({{ site.repository }}/issues/6421)) +- Explain how to override output collection index page ([#6424]({{ site.repository }}/issues/6424)) +- Added github-cards to the list of plugins ([#6425]({{ site.repository }}/issues/6425)) +- CoC violation correspondants ([#6429]({{ site.repository }}/issues/6429)) +- Add a note about Liquid and syntax highlighting ([#6466]({{ site.repository }}/issues/6466)) +- Remove `sudo` from macOS troubleshooting instructions ([#6486]({{ site.repository }}/issues/6486)) +- Add a note on `:jekyll_plugins` group in the docs ([#6488]({{ site.repository }}/issues/6488)) +- Updated custom-404-page.md ([#6489]({{ site.repository }}/issues/6489)) +- Fix a few minor issues in the docs ([#6494]({{ site.repository }}/issues/6494)) +- Add jekyll-pwa-plugin ([#6533]({{ site.repository }}/issues/6533)) +- Remove Jekyll-Smartify from plugins directory ([#6548]({{ site.repository }}/issues/6548)) +- Updated Jekyll-Pug listing to include official website ([#6555]({{ site.repository }}/issues/6555)) +- Remove link to severely outdated asset plugin ([#6613]({{ site.repository }}/issues/6613)) +- Default time zone depends upon server ([#6617]({{ site.repository }}/issues/6617)) +- Add `disqus-for-jekyll` to plugins. ([#6618]({{ site.repository }}/issues/6618)) +- Update "Requirements" for Ruby version ([#6623]({{ site.repository }}/issues/6623)) +- Fix: Update link to i18n_filter plugin ([#6638]({{ site.repository }}/issues/6638)) +- Correct WordPress capitalization ([#6645]({{ site.repository }}/issues/6645)) +- Add Tweetsert, Stickyposts, Paginate::Content ([#6651]({{ site.repository }}/issues/6651)) +- Post: Jekyll 3.7.0 released ([#6634]({{ site.repository }}/issues/6634)) + +### Site Enhancements +{: #site-enhancements-v3-7-0} + +- Add special styling for code-blocks run in shell ([#6389]({{ site.repository }}/issues/6389)) +- Add post about diversity ([#6447]({{ site.repository }}/issues/6447)) +- Update list of files excluded from Docs site ([#6457]({{ site.repository }}/issues/6457)) +- Update site History ([#6460]({{ site.repository }}/issues/6460)) +- Add default twitter card image ([#6476]({{ site.repository }}/issues/6476)) +- Update normalize.css to v7.0.0 ([#6491]({{ site.repository }}/issues/6491)) +- Optimize images ([#6519]({{ site.repository }}/issues/6519)) +- Back to original main navigation ([#6544]({{ site.repository }}/issues/6544)) +- Styles: mobile-docs select element ([#6545]({{ site.repository }}/issues/6545)) +- Search with DocSearch by @Algolia ([#6557]({{ site.repository }}/issues/6557)) +- Site header redesign ([#6567]({{ site.repository }}/issues/6567)) +- Move logo above site navigation on small screens ([#6570]({{ site.repository }}/issues/6570)) +- Docs: Include version badge for latest features ([#6574]({{ site.repository }}/issues/6574)) +- Use version-badge on an existing feature intro ([#6575]({{ site.repository }}/issues/6575)) +- Add jekyll-category-pages plugin ([#6632]({{ site.repository }}/issues/6632)) +- Improve docs styling for code to be run in shell ([#6641]({{ site.repository }}/issues/6641)) +- Fix permalink icon markup in news-item layout ([#6639]({{ site.repository }}/issues/6639)) + + +## 3.6.3 / 2018-09-18 +{: #v3-6-3} + +### Bug Fixes +{: #bug-fixes-v3-6-3} + +- 3.6.x: security: fix `include` bypass of `EntryFilter#filter` symlink check ([#7229]({{ site.repository }}/issues/7229)) + + +## 3.6.2 / 2017-10-21 +{: #v3-6-2} + +### Development Fixes +{: #development-fixes-v3-6-2} + +- Update Rubocop to 0.51.0 ([#6444]({{ site.repository }}/issues/6444)) +- Add test for layout as string ([#6445]({{ site.repository }}/issues/6445)) + +### Bug Fixes +{: #bug-fixes-v3-6-2} + +- Problematic UTF+bom files ([#6322]({{ site.repository }}/issues/6322)) +- Always treat `data.layout` as a string ([#6442]({{ site.repository }}/issues/6442)) + + +## 3.6.1 / 2017-10-20 +{: #v3-6-1} + +### Documentation + +- Doc y_day in docs/permalinks ([#6244]({{ site.repository }}/issues/6244)) +- Update frontmatter.md ([#6371]({{ site.repository }}/issues/6371)) +- Elaborate on excluding items from processing ([#6136]({{ site.repository }}/issues/6136)) +- Style lists in tables ([#6379]({{ site.repository }}/issues/6379)) +- Remove duplicate "available" ([#6380]({{ site.repository }}/issues/6380)) + +### Development Fixes +{: #development-fixes-v3-6-1} + +- Bump rubocop to use `v0.50.x` ([#6368]({{ site.repository }}/issues/6368)) + + +## 3.6.0 / 2017-09-21 +{: #v3-6-0} + +### Minor Enhancements +{: #minor-enhancements-v3-6-0} + +- Ignore final newline in folded YAML string ([#6054]({{ site.repository }}/issues/6054)) +- Add URL checks to Doctor ([#5760]({{ site.repository }}/issues/5760)) +- Fix serving files that clash with directories ([#6222]({{ site.repository }}/issues/6222)) ([#6231]({{ site.repository }}/issues/6231)) +- Bump supported Ruby version to `>= 2.1.0` ([#6220]({{ site.repository }}/issues/6220)) +- set `LiquidError#template_name` for errors in included file ([#6206]({{ site.repository }}/issues/6206)) +- Access custom config array throughout session ([#6200]({{ site.repository }}/issues/6200)) +- Add support for Rouge 2, in addition to Rouge 1 ([#5919]({{ site.repository }}/issues/5919)) +- Allow `yield` to logger methods & bail early on no-op messages ([#6315]({{ site.repository }}/issues/6315)) +- Update mime-types. ([#6336]({{ site.repository }}/issues/6336)) +- Use a Schwartzian transform with custom sorting ([#6342]({{ site.repository }}/issues/6342)) +- Alias `Drop#invoke_drop` to `Drop#[]` ([#6338]({{ site.repository }}/issues/6338)) + +### Bug Fixes +{: #bug-fixes-v3-6-0} + +- `Deprecator`: fix typo for `--serve` command ([#6229]({{ site.repository }}/issues/6229)) +- `Reader#read_directories`: guard against an entry not being a directory ([#6226]({{ site.repository }}/issues/6226)) +- kramdown: symbolize keys in-place ([#6247]({{ site.repository }}/issues/6247)) +- Call `to_s` on site.url before attempting to concatenate strings ([#6253]({{ site.repository }}/issues/6253)) +- Enforce Style/FrozenStringLiteralComment ([#6265]({{ site.repository }}/issues/6265)) +- Update theme-template README to note 'assets' directory ([#6257]({{ site.repository }}/issues/6257)) +- Memoize the return value of `Document#url` ([#6266]({{ site.repository }}/issues/6266)) +- delegate `StaticFile#to_json` to `StaticFile#to_liquid` ([#6273]({{ site.repository }}/issues/6273)) +- Fix `Drop#key?` so it can handle a nil argument ([#6281]({{ site.repository }}/issues/6281)) +- Guard against type error in absolute url ([#6280]({{ site.repository }}/issues/6280)) +- Mutable drops should fallback to their own methods when a mutation isn't present ([#6350]({{ site.repository }}/issues/6350)) +- Skip adding binary files as posts ([#6344]({{ site.repository }}/issues/6344)) +- Don't break if bundler is not installed ([#6377]({{ site.repository }}/issues/6377)) + +### Documentation + +- Fix a typo in `custom-404-page.md` ([#6218]({{ site.repository }}/issues/6218)) +- Docs: fix links to issues in History.markdown ([#6255]({{ site.repository }}/issues/6255)) +- Update deprecated gems key to plugins. ([#6262]({{ site.repository }}/issues/6262)) +- Fixes minor typo in post text ([#6283]({{ site.repository }}/issues/6283)) +- Execute build command using bundle. ([#6274]({{ site.repository }}/issues/6274)) +- name unification - buddy details ([#6317]({{ site.repository }}/issues/6317)) +- name unification - application index ([#6318]({{ site.repository }}/issues/6318)) +- trim and relocate plugin info across docs ([#6311]({{ site.repository }}/issues/6311)) +- update Jekyll's README ([#6321]({{ site.repository }}/issues/6321)) +- add SUPPORT file for GitHub ([#6324]({{ site.repository }}/issues/6324)) +- Rename CODE_OF_CONDUCT to show in banner ([#6325]({{ site.repository }}/issues/6325)) +- Docs : illustrate page.id for a collection's document ([#6329]({{ site.repository }}/issues/6329)) +- Docs: post's date can be overriden in front matter ([#6334]({{ site.repository }}/issues/6334)) +- Docs: `site.url` behavior on development and production environments ([#6270]({{ site.repository }}/issues/6270)) +- Fix typo in site.url section of variables.md :-[ ([#6337]({{ site.repository }}/issues/6337)) +- Docs: updates ([#6343]({{ site.repository }}/issues/6343)) +- Fix precedence docs ([#6346]({{ site.repository }}/issues/6346)) +- add note to contributing docs about `script/console` ([#6349]({{ site.repository }}/issues/6349)) +- Docs: Fix permalink example ([#6375]({{ site.repository }}/issues/6375)) + +### Site Enhancements +{: #site-enhancements-v3-6-0} + +- Adding DevKit helpers ([#6225]({{ site.repository }}/issues/6225)) +- Customizing url in collection elements clarified ([#6264]({{ site.repository }}/issues/6264)) +- Plugins is the new gems ([#6326]({{ site.repository }}/issues/6326)) + +### Development Fixes +{: #development-fixes-v3-6-0} + +- Strip unnecessary leading whitespace in template ([#6228]({{ site.repository }}/issues/6228)) +- Users should be installing patch versions. ([#6198]({{ site.repository }}/issues/6198)) +- Fix tests ([#6240]({{ site.repository }}/issues/6240)) +- Define path with `__dir__` ([#6087]({{ site.repository }}/issues/6087)) +- exit site.process sooner ([#6239]({{ site.repository }}/issues/6239)) +- make flakey test more robust ([#6277]({{ site.repository }}/issues/6277)) +- Add a quick test for DataReader ([#6284]({{ site.repository }}/issues/6284)) +- script/backport-pr: commit message no longer includes the `#` ([#6289]({{ site.repository }}/issues/6289)) +- Add Add CODEOWNERS file to help automate reviews. ([#6320]({{ site.repository }}/issues/6320)) +- Fix builds on codeclimate ([#6333]({{ site.repository }}/issues/6333)) +- Bump rubies on Travis ([#6366]({{ site.repository }}/issues/6366)) + + +## 3.5.2 / 2017-08-12 +{: #v3-5-2} + +### Bug Fixes +{: #bug-fixes-v3-5-2} + +- Backport [#6281]({{ site.repository }}/issues/6281) for v3.5.x: Fix `Drop#key?` so it can handle a nil argument ([#6288]({{ site.repository }}/issues/6288)) +- Backport [#6280]({{ site.repository }}/issues/6280) for v3.5.x: Guard against type error in `absolute_url` ([#6287]({{ site.repository }}/issues/6287)) +- Backport [#6266]({{ site.repository }}/issues/6266) for v3.5.x: Memoize the return value of `Document#url` ([#6301]({{ site.repository }}/issues/6301)) +- Backport [#6273]({{ site.repository }}/issues/6273) for v3.5.x: delegate `StaticFile#to_json` to `StaticFile#to_liquid` ([#6302]({{ site.repository }}/issues/6302)) +- Backport [#6226]({{ site.repository }}/issues/6226) for v3.5.x: `Reader#read_directories`: guard against an entry not being a directory ([#6304]({{ site.repository }}/issues/6304)) +- Backport [#6247]({{ site.repository }}/issues/6247) for v3.5.x: kramdown: symbolize keys in-place ([#6303]({{ site.repository }}/issues/6303)) + + +## 3.5.1 / 2017-07-17 +{: #v3-5-1} + +### Minor Enhancements +{: #minor-enhancements-v3-5-1} + +- Use Warn for deprecation messages ([#6192]({{ site.repository }}/issues/6192)) +- site template: Use plugins key instead of gems ([#6045]({{ site.repository }}/issues/6045)) + +### Bug Fixes +{: #bug-fixes-v3-5-1} + +- Backward compatiblize URLFilters module ([#6163]({{ site.repository }}/issues/6163)) +- Static files contain front matter default keys when `to_liquid`'d ([#6162]({{ site.repository }}/issues/6162)) +- Always normalize the result of the `relative_url` filter ([#6185]({{ site.repository }}/issues/6185)) + +### Documentation + +- Update reference to trouble with OS X/macOS ([#6139]({{ site.repository }}/issues/6139)) +- added BibSonomy plugin ([#6143]({{ site.repository }}/issues/6143)) +- add plugins for multiple page pagination ([#6055]({{ site.repository }}/issues/6055)) +- Update minimum Ruby version in installation.md ([#6164]({{ site.repository }}/issues/6164)) +- Add information about finding a collection in `site.collections` ([#6165]({{ site.repository }}/issues/6165)) +- Add {% raw %}`{% raw %}`{% endraw %} to Liquid example on site ([#6179]({{ site.repository }}/issues/6179)) +- Added improved Pug plugin - removed 404 Jade plugin ([#6174]({{ site.repository }}/issues/6174)) +- Linking the link ([#6210]({{ site.repository }}/issues/6210)) +- Small correction in documentation for includes ([#6193]({{ site.repository }}/issues/6193)) +- Fix docs site page margin ([#6214]({{ site.repository }}/issues/6214)) + +### Development Fixes +{: #development-fixes-v3-5-1} + +- Add jekyll doctor to GitHub Issue Template ([#6169]({{ site.repository }}/issues/6169)) +- Test with Ruby 2.4.1-1 on AppVeyor ([#6176]({{ site.repository }}/issues/6176)) +- set minimum requirement for jekyll-feed ([#6184]({{ site.repository }}/issues/6184)) + + +## 3.5.0 / 2017-06-18 +{: #v3-5-0} + +### Minor Enhancements +{: #minor-enhancements-v3-5-0} + +- Upgrade to Liquid v4 ([#4362]({{ site.repository }}/issues/4362)) +- Convert StaticFile liquid representation to a Drop & add front matter defaults support to StaticFiles ([#5871]({{ site.repository }}/issues/5871)) +- Add support for Tab-Separated Values data files (`*.tsv`) ([#5985]({{ site.repository }}/issues/5985)) +- Specify version constraint in subcommand error message. ([#5974]({{ site.repository }}/issues/5974)) +- Add a template for custom 404 page ([#5945]({{ site.repository }}/issues/5945)) +- Require `runtime_dependencies` of a Gem-based theme from its `.gemspec` file ([#5914]({{ site.repository }}/issues/5914)) +- Don't raise an error if URL contains a colon ([#5889]({{ site.repository }}/issues/5889)) +- Date filters should never raise an exception ([#5722]({{ site.repository }}/issues/5722)) +- add `plugins` config key as replacement for `gems` ([#5130]({{ site.repository }}/issues/5130)) +- create configuration from options only once in the boot process ([#5487]({{ site.repository }}/issues/5487)) +- Add option to fail a build with front matter syntax errors ([#5832]({{ site.repository }}/issues/5832)) +- Disable default layouts for documents with a `layout: none` declaration ([#5933]({{ site.repository }}/issues/5933)) +- In `jekyll new`, make copied site template user-writable ([#6072]({{ site.repository }}/issues/6072)) +- Add top-level `layout` liquid variable to Documents ([#6073]({{ site.repository }}/issues/6073)) +- Address reading non-binary static files in themes ([#5918]({{ site.repository }}/issues/5918)) +- Allow filters to sort & select based on subvalues ([#5622]({{ site.repository }}/issues/5622)) +- Add strip_index filter ([#6075]({{ site.repository }}/issues/6075)) + +### Documentation + +- Install troubleshooting on Ubuntu ([#5817]({{ site.repository }}/issues/5817)) +- Add Termux section on troubleshooting ([#5837]({{ site.repository }}/issues/5837)) +- fix ial css classes in theme doc ([#5876]({{ site.repository }}/issues/5876)) +- Update installation.md ([#5880]({{ site.repository }}/issues/5880)) +- Update Aerobatic docs ([#5883]({{ site.repository }}/issues/5883)) +- Add note to collections doc on hard-coded collections. ([#5882]({{ site.repository }}/issues/5882)) +- Makes uri_escape template docs more specific. ([#5887]({{ site.repository }}/issues/5887)) +- Remove duplicate footnote_nr from default config ([#5891]({{ site.repository }}/issues/5891)) +- Fixed tutorial for publishing gem to include repo. ([#5900]({{ site.repository }}/issues/5900)) +- update broken links ([#5905]({{ site.repository }}/issues/5905)) +- Fix typo in contribution information ([#5910]({{ site.repository }}/issues/5910)) +- update plugin repo URL to reflect repo move ([#5916]({{ site.repository }}/issues/5916)) +- Update exclude array in configuration.md ([#5947]({{ site.repository }}/issues/5947)) +- Fixed path in "Improve this page" link in Tutorials section ([#5951]({{ site.repository }}/issues/5951)) +- Corrected permalink ([#5949]({{ site.repository }}/issues/5949)) +- Included more details about adding defaults to static files ([#5971]({{ site.repository }}/issues/5971)) +- Create buddyworks ([#5962]({{ site.repository }}/issues/5962)) +- added (buddyworks) to ci list ([#5965]({{ site.repository }}/issues/5965)) +- Add a tutorial on serving custom Error 404 page ([#5946]({{ site.repository }}/issues/5946)) +- add custom 404 to tutorial navigation ([#5978]({{ site.repository }}/issues/5978)) +- Add link to order of interpretation tutorial in Tutorials nav ([#5952]({{ site.repository }}/issues/5952)) +- Document Jekyll's Philosophy ([#5792]({{ site.repository }}/issues/5792)) +- Require Ruby > 2.1.0 ([#5983]({{ site.repository }}/issues/5983)) +- Fix broken link ([#5994]({{ site.repository }}/issues/5994)) +- Default options for script/proof ([#5995]({{ site.repository }}/issues/5995)) +- Mention Bash on Ubuntu on Windows ([#5960]({{ site.repository }}/issues/5960)) +- Document `--unpublished` flag introduced in 91e9ecf ([#5959]({{ site.repository }}/issues/5959)) +- Update upgrading.md to mention usage of `bundle update` ([#5604]({{ site.repository }}/issues/5604)) +- Fix missing quotation mark ([#6002]({{ site.repository }}/issues/6002)) +- New tutorial: Convert an HTML site to Jekyll ([#5881]({{ site.repository }}/issues/5881)) +- Revamp Permalink section ([#5912]({{ site.repository }}/issues/5912)) +- Fixup tutorial on creating theme from existing HTML templates ([#6006]({{ site.repository }}/issues/6006)) +- Standardise on "URLs" without apostrophe in docs ([#6018]({{ site.repository }}/issues/6018)) +- Added txtpen in tutorial ([#6021]({{ site.repository }}/issues/6021)) +- fix typo using past participle ([#6026]({{ site.repository }}/issues/6026)) +- changed formatting to fit the style of the documentation ([#6027]({{ site.repository }}/issues/6027)) +- doc fix typo word usage ([#6028]({{ site.repository }}/issues/6028)) +- corrected reference to layout in index.md ([#6032]({{ site.repository }}/issues/6032)) +- (Minor) Update MathJax CDN ([#6013]({{ site.repository }}/issues/6013)) +- Add MvvmCross to samples ([#6035]({{ site.repository }}/issues/6035)) +- Update travis-ci.md to correct procedure ([#6043]({{ site.repository }}/issues/6043)) +- fix sentence in documentation ([#6048]({{ site.repository }}/issues/6048)) +- rephrase a sentence in posts.md to be more direct ([#6049]({{ site.repository }}/issues/6049)) +- Compress Website Sass output ([#6009]({{ site.repository }}/issues/6009)) +- doc correct spelling error ([#6050]({{ site.repository }}/issues/6050)) +- adjusted date-format in sitemap ([#6053]({{ site.repository }}/issues/6053)) +- Typo fix (welcomed change -> welcome change). ([#6070]({{ site.repository }}/issues/6070)) +- Fixed documentation inconsistency ([#6068]({{ site.repository }}/issues/6068)) +- Add own plugin -> Jekyll Brand Social Wall ([#6064]({{ site.repository }}/issues/6064)) +- Added plugin jekyll-analytics ([#6042]({{ site.repository }}/issues/6042)) +- Use more precise language when explaining links ([#6078]({{ site.repository }}/issues/6078)) +- Update plugins.md ([#6088]({{ site.repository }}/issues/6088)) +- windows 10 tutorial ([#6100]({{ site.repository }}/issues/6100)) +- Explain how to override theme styles ([#6107]({{ site.repository }}/issues/6107)) +- updated Bash on Ubuntu on Windows link in tutorial ([#6111]({{ site.repository }}/issues/6111)) +- Fix wording in `_docs/templates.md` links section ([#6114]({{ site.repository }}/issues/6114)) +- Update windows.md ([#6115]({{ site.repository }}/issues/6115)) +- Added windows to docs.yml ([#6109]({{ site.repository }}/issues/6109)) +- Be more specific on what to upload ([#6119]({{ site.repository }}/issues/6119)) +- Remove Blank Newlines from "Jekyll on Windows" Page ([#6126]({{ site.repository }}/issues/6126)) +- Link the troubleshooting page in the quickstart page ([#6134]({{ site.repository }}/issues/6134)) +- add documentation about the "pinned" label ([#6147]({{ site.repository }}/issues/6147)) +- docs(JekyllOnWindows): Add a new Installation way ([#6141]({{ site.repository }}/issues/6141)) +- corrected windows.md ([#6149]({{ site.repository }}/issues/6149)) +- Refine documentation for Windows ([#6153]({{ site.repository }}/issues/6153)) + +### Development Fixes +{: #development-fixes-v3-5-0} + +- Rubocop: add missing comma ([#5835]({{ site.repository }}/issues/5835)) +- Appease classifier-reborn ([#5934]({{ site.repository }}/issues/5934)) +- Allow releases & development on `*-stable` branches ([#5926]({{ site.repository }}/issues/5926)) +- Add script/backport-pr ([#5925]({{ site.repository }}/issues/5925)) +- Prefer .yaml over .toml ([#5966]({{ site.repository }}/issues/5966)) +- Fix Appveyor with DST-aware cucumber steps ([#5961]({{ site.repository }}/issues/5961)) +- Use Rubocop v0.47.1 till we're ready for v0.48 ([#5989]({{ site.repository }}/issues/5989)) +- Test against Ruby 2.4.0 ([#5687]({{ site.repository }}/issues/5687)) +- rubocop: lib/jekyll/renderer.rb complexity fixes ([#5052]({{ site.repository }}/issues/5052)) +- Use yajl-ruby 1.2.2 (now with 2.4 support) ([#6007]({{ site.repository }}/issues/6007)) +- Bump Rubocop to v0.48 ([#5997]({{ site.repository }}/issues/5997)) +- doc use example.com ([#6031]({{ site.repository }}/issues/6031)) +- fix typo ([#6040]({{ site.repository }}/issues/6040)) +- Fix CI ([#6044]({{ site.repository }}/issues/6044)) +- Remove `ruby RUBY_VERSION` from generated Gemfile ([#5803]({{ site.repository }}/issues/5803)) +- Test if hidden collections output a document with a future date ([#6103]({{ site.repository }}/issues/6103)) +- Add test for uri_escape on reserved characters ([#6086]({{ site.repository }}/issues/6086)) +- Allow you to specify the rouge version via an environment variable for testing ([#6138]({{ site.repository }}/issues/6138)) +- Bump Rubocop to 0.49.1 ([#6093]({{ site.repository }}/issues/6093)) +- Lock nokogiri to 1.7.x for Ruby 2.1 ([#6140]({{ site.repository }}/issues/6140)) + +### Site Enhancements +{: #site-enhancements-v3-5-0} + +- Corrected date for version 3.4.0 ([#5842]({{ site.repository }}/issues/5842)) +- Add the correct year to the 3.4.0 release date ([#5858]({{ site.repository }}/issues/5858)) +- Add documentation about order of interpretation ([#5834]({{ site.repository }}/issues/5834)) +- Documentation on how to build navigation ([#5698]({{ site.repository }}/issues/5698)) +- Navigation has been moved out from docs ([#5927]({{ site.repository }}/issues/5927)) +- Make links in sidebar for current page more prominent ([#5820]({{ site.repository }}/issues/5820)) +- Update normalize.css to v6.0.0 ([#6008]({{ site.repository }}/issues/6008)) +- Docs: rename `gems` to `plugins` ([#6082]({{ site.repository }}/issues/6082)) +- plugins -> gems ([#6110]({{ site.repository }}/issues/6110)) +- Document difference between cgi_escape and uri_escape [#5970]({{ site.repository }}/issues/5970) ([#6081]({{ site.repository }}/issues/6081)) + +### Bug Fixes +{: #bug-fixes-v3-5-0} + +- Exclude Gemfile by default ([#5860]({{ site.repository }}/issues/5860)) +- Convertible#validate_permalink!: ensure the return value of `data["permalink"]` is a string before asking if it is empty ([#5878]({{ site.repository }}/issues/5878)) +- Allow abbreviated post dates ([#5920]({{ site.repository }}/issues/5920)) +- Remove dependency on include from default about.md ([#5903]({{ site.repository }}/issues/5903)) +- Allow colons in `uri_escape` filter ([#5957]({{ site.repository }}/issues/5957)) +- Re-surface missing public methods in `Jekyll::Document` ([#5975]({{ site.repository }}/issues/5975)) +- absolute_url should not mangle URL if called more than once ([#5789]({{ site.repository }}/issues/5789)) +- patch URLFilters to prevent `//` ([#6058]({{ site.repository }}/issues/6058)) +- add test to ensure variables work in `where_exp` condition ([#5315]({{ site.repository }}/issues/5315)) +- Read explicitly included dot-files in collections. ([#6092]({{ site.repository }}/issues/6092)) +- Default `baseurl` to `nil` instead of empty string ([#6137]({{ site.repository }}/issues/6137)) +- Filters#time helper: Duplicate time before calling #localtime. ([#5996]({{ site.repository }}/issues/5996)) + + +## 3.4.5 / 2017-06-30 +{: #v3-4-5} + +- Backport [#6185]({{ site.repository }}/issues/6185) for v3.4.x: Always normalize the result of the `relative_url` filter ([#6186]({{ site.repository }}/issues/6186)) + + +## 3.4.4 / 2017-06-17 +{: #v3-4-4} + +- Backport [#6137]({{ site.repository }}/issues/6137) for v3.4.x: Default `baseurl` to `nil` instead of empty string ([#6146]({{ site.repository }}/issues/6146)) + + +## 3.4.3 / 2017-03-21 +{: #v3-4-3} + +- Backport [#5957]({{ site.repository }}/issues/5957) for v3.4.x: Allow colons in `uri_escape` filter ([#5968]({{ site.repository }}/issues/5968)) + + +## 3.4.2 / 2017-03-09 +{: #v3-4-2} + +- Backport [#5871]({{ site.repository }}/issues/5871) for v3.4.x: Convert StaticFile liquid representation to a Drop & add front matter defaults support to StaticFiles ([#5940]({{ site.repository }}/issues/5940)) + + +## 3.4.1 / 2017-03-02 +{: #v3-4-1} + +- Backport [#5920]({{ site.repository }}/issues/5920) for v3.4.x: Allow abbreviated post dates ([#5924]({{ site.repository }}/issues/5924)) + + +## 3.4.0 / 2017-01-27 +{: #v3-4-0} + +### Minor Enhancements +{: #minor-enhancements-v3-4-0} + +- Add connector param to `array_to_sentence_string` filter ([#5597]({{ site.repository }}/issues/5597)) +- Adds `group_by_exp` filter ([#5513]({{ site.repository }}/issues/5513)) +- Use Addressable instead of URI to decode ([#5726]({{ site.repository }}/issues/5726)) +- throw IncludeTagError if error occurs in included file ([#5767]({{ site.repository }}/issues/5767)) +- Write Jekyll::Utils::Exec.run for running shell commands. ([#5640]({{ site.repository }}/issues/5640)) +- Use the current year for the LICENSE of theme ([#5712]({{ site.repository }}/issues/5712)) +- Update License ([#5713]({{ site.repository }}/issues/5713)) + +### Bug Fixes +{: #bug-fixes-v3-4-0} + +- Escaped regular expressions when using `post_url`. ([#5605]({{ site.repository }}/issues/5605)) +- fix date parsing in file names to be stricter ([#5609]({{ site.repository }}/issues/5609)) +- Add a module to re-define `ENV["TZ"]` in Windows ([#5612]({{ site.repository }}/issues/5612)) +- Use each instead of map to actually return nothing ([#5668]({{ site.repository }}/issues/5668)) +- include: fix 'no implicit conversion of nil to String' ([#5750]({{ site.repository }}/issues/5750)) +- Don't include the theme's includes_path if it is nil. ([#5780]({{ site.repository }}/issues/5780)) +- test double slash when input = '/' ([#5542]({{ site.repository }}/issues/5542)) +- use logger.info for related posts ([#5822]({{ site.repository }}/issues/5822)) + +### Site Enhancements +{: #site-enhancements-v3-4-0} + +- Use only the used Font Awesome icons. ([#5530]({{ site.repository }}/issues/5530)) +- Switch to `https` when possible. ([#5611]({{ site.repository }}/issues/5611)) +- Update `_font-awesome.scss` to move .woff file before .ttf ([#5614]({{ site.repository }}/issues/5614)) +- Update documentation on updating FontAwesome Iconset ([#5655]({{ site.repository }}/issues/5655)) +- Use defaults for docs and news-items ([#5744]({{ site.repository }}/issues/5744)) +- Sort gems in `docs/_config.yml` ([#5746]({{ site.repository }}/issues/5746)) +- Add missing class ([#5791]({{ site.repository }}/issues/5791)) +- Improve template docs ([#5694]({{ site.repository }}/issues/5694)) + +### Development Fixes +{: #development-fixes-v3-4-0} + +- clean unit-test names in `test/test_tags.rb` ([#5608]({{ site.repository }}/issues/5608)) +- Add cucumber feature to test for bonafide theme gems ([#5384]({{ site.repository }}/issues/5384)) +- Use `assert_nil` instead of `assert_equal nil` ([#5652]({{ site.repository }}/issues/5652)) +- Rubocop -a on lib/jekyll ([#5666]({{ site.repository }}/issues/5666)) +- Bump to rake 12.0 ([#5670]({{ site.repository }}/issues/5670)) +- Rubocop Gemfile ([#5671]({{ site.repository }}/issues/5671)) +- update Classifier-Reborn to 2.1.0 ([#5711]({{ site.repository }}/issues/5711)) +- Rubocop: fix Rakefile and gemspec ([#5745]({{ site.repository }}/issues/5745)) +- Use `assert_nil` ([#5725]({{ site.repository }}/issues/5725)) +- Sort gems in `jekyll.gemspec` ([#5746]({{ site.repository }}/issues/5746)) +- Rubocop: Require consistent comma in multiline literals ([#5761]({{ site.repository }}/issues/5761)) +- Bump rubocop ([#5765]({{ site.repository }}/issues/5765)) +- New rubocop security checks ([#5768]({{ site.repository }}/issues/5768)) +- test/helper: fix flaky plugin path test by removing calls to Dir.chdir without a block ([#5779]({{ site.repository }}/issues/5779)) +- Use latest jemoji gem ([#5782]({{ site.repository }}/issues/5782)) +- Bump htmlproofer ([#5781]({{ site.repository }}/issues/5781)) +- Bump rubies we test against ([#5784]({{ site.repository }}/issues/5784)) +- Bump rdoc to v5.0 ([#5797]({{ site.repository }}/issues/5797)) +- Bump codeclimate-test-reporter to v1.0.5 ([#5798]({{ site.repository }}/issues/5798)) + +### Documentation + +- Improve quickstart docs ([#5689]({{ site.repository }}/issues/5689)) +- Add Jekyll-Post to list of plugins ([#5705]({{ site.repository }}/issues/5705)) +- Add jekyll-numbered-headings ([#5688]({{ site.repository }}/issues/5688)) +- Docs: move permalinks from documents into config ([#5544]({{ site.repository }}/issues/5544)) +- Improve collections docs ([#5691]({{ site.repository }}/issues/5691)) +- Fix [#5730]({{ site.repository }}/issues/5730): add gcc and make to the list of requirements ([#5731]({{ site.repository }}/issues/5731)) +- Remove instructions to install Jekyll 2 on Windows ([#5582]({{ site.repository }}/issues/5582)) +- Fix example URL inconsistency ([#5592]({{ site.repository }}/issues/5592)) +- Replace backticks within HTML blocks with HTML tags ([#5435]({{ site.repository }}/issues/5435)) +- Add jekyll-migrate-permalink ([#5600]({{ site.repository }}/issues/5600)) +- Fix bad config YAML in collections example ([#5587]({{ site.repository }}/issues/5587)) +- Bring documentation on 'Directory Structure' up-to-date ([#5573]({{ site.repository }}/issues/5573)) +- Fixed typo ([#5632]({{ site.repository }}/issues/5632)) +- use backticks for Gemfile for consistency since in the next sentence … ([#5641]({{ site.repository }}/issues/5641)) +- Update Core team list in the README file ([#5643]({{ site.repository }}/issues/5643)) +- Improve Permalinks documentation. ([#5653]({{ site.repository }}/issues/5653)) +- Fix typo in Variables doc page ([#5657]({{ site.repository }}/issues/5657)) +- Fix a couple of typos in the docs ([#5658]({{ site.repository }}/issues/5658)) +- Update windows.md ([#5683]({{ site.repository }}/issues/5683)) +- Improve permalinks docs ([#5693]({{ site.repository }}/issues/5693)) +- Document --unpublished build option ([#5720]({{ site.repository }}/issues/5720)) +- Improve pages docs ([#5692]({{ site.repository }}/issues/5692)) +- Added new includes.md topic to docs ([#5696]({{ site.repository }}/issues/5696)) +- Replace a dead link with a web-archived one ([#5738]({{ site.repository }}/issues/5738)) +- Remove duplicate paragraph. ([#5740]({{ site.repository }}/issues/5740)) +- Addition of a sample "typical post" ([#5473]({{ site.repository }}/issues/5473)) +- Fix a minor grammatical mistake on themes' document ### -dev ([#5748]({{ site.repository }}/issues/5748)) +- Correct comments in data_reader.rb ([#5621]({{ site.repository }}/issues/5621)) +- Add jekyll-pre-commit to plugins list ([#5752]({{ site.repository }}/issues/5752)) +- Update quickstart.md ([#5758]({{ site.repository }}/issues/5758)) +- Correct minor typo ([#5764]({{ site.repository }}/issues/5764)) +- Fix a markdown link to look properly on the web ([#5769]({{ site.repository }}/issues/5769)) +- Info about the help command usage ([#5312]({{ site.repository }}/issues/5312)) +- Add missing merge labels for jekyllbot ([#5753]({{ site.repository }}/issues/5753)) +- Fix broken links in documentation ([#5736]({{ site.repository }}/issues/5736)) +- Docs: add `match_regex` and `replace_regex` filters ([#5799]({{ site.repository }}/issues/5799)) +- Got that diaper money? ([#5810]({{ site.repository }}/issues/5810)) +- Sort content by popularity using Google Analytics ([#5812]({{ site.repository }}/issues/5812)) +- Rework CI doc to include multiple providers. ([#5815]({{ site.repository }}/issues/5815)) +- Improve theme docs ([#5690]({{ site.repository }}/issues/5690)) +- Add mention of classifier-reborn for LSI ([#5811]({{ site.repository }}/issues/5811)) +- Added note about --blank flag ([#5802]({{ site.repository }}/issues/5802)) +- Fixed inaccuracy in "Built-in permalink styles" docs ([#5819]({{ site.repository }}/issues/5819)) + + +## 3.3.1 / 2016-11-14 +{: #v3-3-1} + +### Minor Enhancements +{: #minor-enhancements-v3-3-1} + +- Collapse `gsub` for performance ([#5494]({{ site.repository }}/issues/5494)) +- URL: warn if key doesn't exist in url drop ([#5524]({{ site.repository }}/issues/5524)) + +### Bug Fixes +{: #bug-fixes-v3-3-1} + +- Fix typo in `theme_template` README ([#5472]({{ site.repository }}/issues/5472)) +- Do not swallow all exceptions on render ([#5495]({{ site.repository }}/issues/5495)) +- Site template: fixed `_config.yml` comment typo ([#5511]({{ site.repository }}/issues/5511)) +- `jekyll new-theme` should specify Jekyll as a runtime dependency for the theme ([#5457]({{ site.repository }}/issues/5457)) +- Be much more specific about ignoring specific vendored directories. ([#5564]({{ site.repository }}/issues/5564)) +- Only warn about auto-regeneration bug on Bash On Windows. ([#5464]({{ site.repository }}/issues/5464)) +- Allow permalink template to have underscores ([#5572]({{ site.repository }}/issues/5572)) + +### Site Enhancements +{: #site-enhancements-v3-3-1} + +- Documentation: `link` Liquid tag ([#5449]({{ site.repository }}/issues/5449)) +- Updating install instruction link for Jekyll 3 on Windows ([#5475]({{ site.repository }}/issues/5475)) +- Update normalize.css to v5.0.0 ([#5471]({{ site.repository }}/issues/5471)) +- Add jekyll-data to the list of plugins ([#5491]({{ site.repository }}/issues/5491)) +- Add info about checking version + updating ([#5497]({{ site.repository }}/issues/5497)) +- Add jekyll-include-absolute-plugin to list of third-party plugins ([#5492]({{ site.repository }}/issues/5492)) +- Remove jekyll-hook from deployment methods ([#5502]({{ site.repository }}/issues/5502)) +- Update deployment-methods.md ([#5504]({{ site.repository }}/issues/5504)) +- Ubuntu users should install ruby2.3-dev ([#5512]({{ site.repository }}/issues/5512)) +- Remove Glynn as deployment option ([#5519]({{ site.repository }}/issues/5519)) +- Fix broken forum link ([#5466]({{ site.repository }}/issues/5466)) +- Move documentation to docs folder ([#5459]({{ site.repository }}/issues/5459)) +- Fix broken links in CONTRIBUTING ([#5533]({{ site.repository }}/issues/5533)) +- Update documentation on jekyllrb.com ([#5540]({{ site.repository }}/issues/5540)) +- Fix HTML rendering ([#5536]({{ site.repository }}/issues/5536)) +- Remove outdated deployment information ([#5557]({{ site.repository }}/issues/5557)) +- no more invalid US-ASCII on lines 30 and 97 ([#5520]({{ site.repository }}/issues/5520)) +- Add permalinks to docs in '/maintaining/' ([#5532]({{ site.repository }}/issues/5532)) +- Add jekyll-pinboard to list of third-party plugins ([#5514]({{ site.repository }}/issues/5514)) +- Fix formatting in 2-to-3.md ([#5507]({{ site.repository }}/issues/5507)) +- Add two plugins to the plugins page ([#5493]({{ site.repository }}/issues/5493)) +- Use site.baseurl before link and post_url tags ([#5559]({{ site.repository }}/issues/5559)) +- Fix link to jekyll-pinboard plugin ([#5570]({{ site.repository }}/issues/5570)) +- mention `docs` folder as a way to deploy on GitHub Pages ([#5571]({{ site.repository }}/issues/5571)) + +### Development Fixes +{: #development-fixes-v3-3-1} + +- fix rubocop errors on testing with Rubocop 0.44 ([#5489]({{ site.repository }}/issues/5489)) +- script/test: add missing whitespace ([#5479]({{ site.repository }}/issues/5479)) +- Restrict Rubocop version ([#5496]({{ site.repository }}/issues/5496)) +- include a hashbang for all benchmark scripts & make them executable ([#5505]({{ site.repository }}/issues/5505)) +- Update source in script/proof ([#5538]({{ site.repository }}/issues/5538)) +- Collections.feature: conditional steps to have it pass on Windows ([#5546]({{ site.repository }}/issues/5546)) +- Fix tests to get script/test to pass on Windows ([#5526]({{ site.repository }}/issues/5526)) + + +## 3.3.0 / 2016-10-06 +{: #v3-3-0} + +### Minor Enhancements +{: #minor-enhancements-v3-3-0} + +- Colorize interpolated output in logger.info ([#5239]({{ site.repository }}/issues/5239)) +- Site template: exclude Gemfile and Gemfile.lock in site config ([#5293]({{ site.repository }}/issues/5293)) +- Fix [#5233]({{ site.repository }}/issues/5233): Increase our ability to detect Windows. ([#5235]({{ site.repository }}/issues/5235)) +- update gitignore template to ignore theme gems built by user ([#5326]({{ site.repository }}/issues/5326)) +- Adds ability to link to all files ([#5199]({{ site.repository }}/issues/5199)) +- Exclude vendor by default ([#5361]({{ site.repository }}/issues/5361)) +- Add ThemeAssetsReader which reads assets from a theme ([#5364]({{ site.repository }}/issues/5364)) +- Add bundle install to jekyll new command ([#5237]({{ site.repository }}/issues/5237)) +- Add absolute_url and relative_url filters. ([#5399]({{ site.repository }}/issues/5399)) +- Site template: remove `css/` from new site scaffolding ([#5402]({{ site.repository }}/issues/5402)) +- Site template: Move contents of the index.html page to the 'home' layout ([#5420]({{ site.repository }}/issues/5420)) +- Exclude node_modules by default ([#5210]({{ site.repository }}/issues/5210)) +- Run hooks in priority order. ([#5157]({{ site.repository }}/issues/5157)) +- Add `static_file.name` and `.basename` Liquid attributes ([#5264]({{ site.repository }}/issues/5264)) +- set site.url in dev environment to `http://localhost:4000` ([#5431]({{ site.repository }}/issues/5431)) +- Add support for indented link references on excerpt ([#5212]({{ site.repository }}/issues/5212)) + +### Bug Fixes +{: #bug-fixes-v3-3-0} + +- Use jekyll-feed to generate the default site's RSS feed ([#5196]({{ site.repository }}/issues/5196)) +- Site#configure_theme: do not set theme unless it's a string ([#5189]({{ site.repository }}/issues/5189)) +- Convertible: set self.output in #render_all_layouts and #do_layout ([#5337]({{ site.repository }}/issues/5337)) +- Only complain about `kramdown.coderay` if it is actually in the config ([#5380]({{ site.repository }}/issues/5380)) +- Clarify documentation in theme gem's README template ([#5376]({{ site.repository }}/issues/5376)) +- Allow underscore in highlighter language ([#5375]({{ site.repository }}/issues/5375)) +- Site template: set empty url in config file by default ([#5338]({{ site.repository }}/issues/5338)) +- Site template config: prepend 'jekyll serve' with 'bundle exec' ([#5430]({{ site.repository }}/issues/5430)) +- Don't call `File.utime` for StaticFiles if it's a symlink ([#5427]({{ site.repository }}/issues/5427)) +- Fix handling of non-ASCII characters in new `*_url` filters ([#5410]({{ site.repository }}/issues/5410)) +- Remove autoload of Draft which no longer exists. ([#5441]({{ site.repository }}/issues/5441)) +- Fix issue where Windows drive name is stripped from Jekyll.sanitized_path incorrectly ([#5256]({{ site.repository }}/issues/5256)) +- Fix bug where `post_url` tag matched incorrect post with subdirectory ([#4873]({{ site.repository }}/issues/4873)) +- Fix loading data from subdir with a period in name ([#5433]({{ site.repository }}/issues/5433)) +- Revert Commands::Serve#server_address signature change. ([#5456]({{ site.repository }}/issues/5456)) + +### Site Enhancements +{: #site-enhancements-v3-3-0} + +- Document `to_integer` and `inspect` filters ([#5185]({{ site.repository }}/issues/5185)) +- Fix path in the prompt ([#5194]({{ site.repository }}/issues/5194)) +- need subcommand build ([#5190]({{ site.repository }}/issues/5190)) +- Add the Jekyll Cloudinary plugin ([#5183]({{ site.repository }}/issues/5183)) +- Documentation : `new-theme` command ([#5205]({{ site.repository }}/issues/5205)) +- Document `link` Liquid tag ([#5182]({{ site.repository }}/issues/5182)) +- Remove mention of page for link tag in release post ([#5214]({{ site.repository }}/issues/5214)) +- fixed typo ([#5226]({{ site.repository }}/issues/5226)) +- Add missing comma ([#5222]({{ site.repository }}/issues/5222)) +- Maintain aspect ratio with `height: auto;` ([#5254]({{ site.repository }}/issues/5254)) +- Fix a link in deployment-methods.md ([#5244]({{ site.repository }}/issues/5244)) +- Documentation: improve highlight in `Creating a theme` ([#5249]({{ site.repository }}/issues/5249)) +- Bundler isn't installed by default ([#5258]({{ site.repository }}/issues/5258)) +- Update troubleshooting documentation to include fix for issue with vendored gems ([#5271]({{ site.repository }}/issues/5271)) +- Link `--lsi` option's description to Wikipedia docs on LSI ([#5274]({{ site.repository }}/issues/5274)) +- Document `--profile` option on the configuration page ([#5279]({{ site.repository }}/issues/5279)) +- Update homepage to sync with merge of [#5258]({{ site.repository }}/issues/5258) ([#5287]({{ site.repository }}/issues/5287)) +- Add post about Jekyll Admin initial release ([#5291]({{ site.repository }}/issues/5291)) +- Replace liquid highlight tag with backticks ([#5262]({{ site.repository }}/issues/5262)) +- Word update ([#5294]({{ site.repository }}/issues/5294)) +- Site documentation section links always point to https://jekyllrb.com ([#5281]({{ site.repository }}/issues/5281)) +- Missing `:site, :post_render` payload documentation on site ([#5280]({{ site.repository }}/issues/5280)) +- Site: exclude README.md and .gitignore ([#5304]({{ site.repository }}/issues/5304)) +- Add link to Staticman ([#5224]({{ site.repository }}/issues/5224)) +- Update url for OpenShift ([#5320]({{ site.repository }}/issues/5320)) +- Add help for missing static_file e.g. on heroku ([#5334]({{ site.repository }}/issues/5334)) +- Add a line about updating theme-gems in the docs ([#5318]({{ site.repository }}/issues/5318)) +- Explain how to copy a theme's files ([#5335]({{ site.repository }}/issues/5335)) +- .md as default extension in examples ([#5316]({{ site.repository }}/issues/5316)) +- Fix small typo in docs ([#5347]({{ site.repository }}/issues/5347)) +- Add missing period to sentence in first paragraph. ([#5372]({{ site.repository }}/issues/5372)) +- added jekyll-spotify plugin ([#5369]({{ site.repository }}/issues/5369)) +- Add jekyll-menus to the list of plugins. ([#5397]({{ site.repository }}/issues/5397)) +- macOS and one grammar fix ([#5403]({{ site.repository }}/issues/5403)) +- Add documentation for `relative_url` and `absolute_url` ([#5405]({{ site.repository }}/issues/5405)) +- Bugfix on logo in JSON-LD ([#5421]({{ site.repository }}/issues/5421)) +- Fix Travis.ci documentation ([#5413]({{ site.repository }}/issues/5413)) +- Update documentation regarding `bundle install` after `jekyll new` ([#5428]({{ site.repository }}/issues/5428)) +- Replace classic box-sizing reset with inheritance reset ([#5411]({{ site.repository }}/issues/5411)) +- Update Wikipedia YAML list link ([#5452]({{ site.repository }}/issues/5452)) +- Add Jekyll 3.3 release post ([#5442]({{ site.repository }}/issues/5442)) + +### Development Fixes +{: #development-fixes-v3-3-0} + +- Update appveyor.yml and fix optional deps for Ruby x64 ([#5180]({{ site.repository }}/issues/5180)) +- Improve tests for Jekyll::PluginManager ([#5167]({{ site.repository }}/issues/5167)) +- Update Ruby versions in travis.yml ([#5221]({{ site.repository }}/issues/5221)) +- Avoid installing unnecessary gems for site testing ([#5272]({{ site.repository }}/issues/5272)) +- Proposal: Affinity teams and their captains ([#5273]({{ site.repository }}/issues/5273)) +- Replace duplicate with positive local test in issue template ([#5286]({{ site.repository }}/issues/5286)) +- Update AppVeyor config. ([#5240]({{ site.repository }}/issues/5240)) +- Execute jekyll from clone instead of defined binary when running 'script/default-site' ([#5295]({{ site.repository }}/issues/5295)) +- rubocop: lib/jekyll/document.rb complexity fixes ([#5045]({{ site.repository }}/issues/5045)) +- Proxy a number of Convertible methods to Renderer ([#5308]({{ site.repository }}/issues/5308)) +- Run executable for Cucumber via Ruby instead of Shell ([#5383]({{ site.repository }}/issues/5383)) +- Appease Rubocop ([#5381]({{ site.repository }}/issues/5381)) +- remove features' directories on windows with proper access ([#5389]({{ site.repository }}/issues/5389)) +- `site_configuration.feature`: use UTC format in timezone ([#5416]({{ site.repository }}/issues/5416)) +- swallow bundle output from `jekyll new` while in CI ([#5408]({{ site.repository }}/issues/5408)) +- Add .editorconfig ([#5412]({{ site.repository }}/issues/5412)) + + +## 3.2.1 / 2016-08-02 +{: #v3-2-1} + +### Bug Fixes +{: #bug-fixes-v3-2-1} + +- Include theme directories in default gemspec ([#5152]({{ site.repository }}/issues/5152)) +- Fix for symlinked themes ([#5156]({{ site.repository }}/issues/5156)) +- Layout: set `relative_path` without using Pathname ([#5164]({{ site.repository }}/issues/5164)) + +### Development Fixes +{: #development-fixes-v3-2-1} + +- Add test to build the default site ([#5154]({{ site.repository }}/issues/5154)) +- script/default-site: specify `BUNDLE_GEMFILE` for new site ([#5178]({{ site.repository }}/issues/5178)) +- script/default-site: read Jekyll source from local clone ([#5188]({{ site.repository }}/issues/5188)) + +### Site Enhancements +{: #site-enhancements-v3-2-1} + +- Enable site excerpts ([#5150]({{ site.repository }}/issues/5150)) +- Initial 404 page ([#5143]({{ site.repository }}/issues/5143)) +- Remove the "this feature is unreleased" warning from the theme docs ([#5158]({{ site.repository }}/issues/5158)) +- Future True on GitHub Pages note ([#5173]({{ site.repository }}/issues/5173)) +- Minor updates and corrections ([#5177]({{ site.repository }}/issues/5177)) +- index.html: update instructions to require bundler ([#5169]({{ site.repository }}/issues/5169)) +- docs/quickstart: update instructions to require bundler ([#5168]({{ site.repository }}/issues/5168)) + + +## 3.2.0 / 2016-07-26 +{: #v3-2-0} + +### Minor Enhancements +{: #minor-enhancements-v3-2-0} + +- Stop testing with Ruby 2.0.x, which is EOL'd. ([#4381]({{ site.repository }}/issues/4381)) +- Allow collections to have documents that have no file extension ([#4545]({{ site.repository }}/issues/4545)) +- Add size property to `group_by` result ([#4557]({{ site.repository }}/issues/4557)) +- Site Template: Removed unnecessary nesting from `_base.scss` ([#4637]({{ site.repository }}/issues/4637)) +- Adding a debug log statement for skipped future documents. ([#4558]({{ site.repository }}/issues/4558)) +- Site Template: Changed main `
    ` to `
    ` and added accessibility info ([#4636]({{ site.repository }}/issues/4636)) +- Add array support to `where` filter ([#4555]({{ site.repository }}/issues/4555)) +- 'jekyll clean': also remove .sass-cache ([#4652]({{ site.repository }}/issues/4652)) +- Clean up `Tags::PostUrl` a bit, including better errors and date parsing ([#4670]({{ site.repository }}/issues/4670)) +- Use `String#encode` for `xml_escape` filter instead of `CGI.escapeHTML` ([#4694]({{ site.repository }}/issues/4694)) +- Add `show_dir_listing` option for serve command and fix index file names ([#4533]({{ site.repository }}/issues/4533)) +- Site Template: write a Gemfile which is educational to the new site ([#4542]({{ site.repository }}/issues/4542)) +- Site template: add explanation of site variables in the example `_config.yml` ([#4704]({{ site.repository }}/issues/4704)) +- Adds `link` Liquid tag to make generation of URLs easier ([#4624]({{ site.repository }}/issues/4624)) +- Allow static files to be symlinked in unsafe mode or non-prod environments ([#4640]({{ site.repository }}/issues/4640)) +- Add `:after_init` hook & add `Site#config=` to make resetting config easy ([#4703]({{ site.repository }}/issues/4703)) +- DocumentDrop: add `#<=>` which sorts by date (falling back to path) ([#4741]({{ site.repository }}/issues/4741)) +- Add a `where_exp` filter for filtering by expression ([#4478]({{ site.repository }}/issues/4478)) +- Globalize Jekyll's Filters. ([#4792]({{ site.repository }}/issues/4792)) +- Gem-based themes ([#4595]({{ site.repository }}/issues/4595)) +- Allow symlinks if they point to stuff inside `site.source` ([#4710]({{ site.repository }}/issues/4710)) +- Update colorator dependency to v1.x ([#4855]({{ site.repository }}/issues/4855)) +- Move EntryFilter to use Pathutil & fix `glob_include?` ([#4859]({{ site.repository }}/issues/4859)) +- Add 'jekyll new-theme' command to help users get up and running creating a theme ([#4848]({{ site.repository }}/issues/4848)) +- `markdownify` and `smartify` should convert input to string before conversion ([#4958]({{ site.repository }}/issues/4958)) +- Run `Site#generate` for 'jekyll doctor' to catch plugin issues ([#5005]({{ site.repository }}/issues/5005)) +- Add `normalize_whitepace` filter ([#4917]({{ site.repository }}/issues/4917)) +- Move bin/jekyll to exe/jekyll to prevent collision with binstubs ([#5014]({{ site.repository }}/issues/5014)) +- Cleaning up site template & theme updates. ([#4922]({{ site.repository }}/issues/4922)) +- Add fetch method to Drops ([#5056]({{ site.repository }}/issues/5056)) +- Extract tag name to class method ([#5063]({{ site.repository }}/issues/5063)) +- check if relative URL contains a colon ([#5069]({{ site.repository }}/issues/5069)) +- Enable strict (or lax) liquid parsing via a config variable. ([#5053]({{ site.repository }}/issues/5053)) +- Add filter: `to_integer` ([#5101]({{ site.repository }}/issues/5101)) +- watcher: pass site instance to watch plugin ([#5109]({{ site.repository }}/issues/5109)) +- Show liquid warnings. ([#5129]({{ site.repository }}/issues/5129)) +- Add `--baseurl` to `build` subcommand ([#5135]({{ site.repository }}/issues/5135)) + +### Bug Fixes +{: #bug-fixes-v3-2-0} + +- Site Template: Added a default lang attribute ([#4633]({{ site.repository }}/issues/4633)) +- Site template: Escape title and description where it is used in HTML ([#4606]({{ site.repository }}/issues/4606)) +- `Document#date`: drafts which have no date should use source file mtime ([#4611]({{ site.repository }}/issues/4611)) +- `Filters#time`: clone an input Time so as to be non-destructive ([#4590]({{ site.repository }}/issues/4590)) +- Doctor: fix issue where `--config` wasn't a recognized flag ([#4598]({{ site.repository }}/issues/4598)) +- Ensures `related_posts` are only set for a post ([#4620]({{ site.repository }}/issues/4620)) +- `EntryFilter#special?`: ignore filenames which begin with `~` ([#4491]({{ site.repository }}/issues/4491)) +- Cleaner: `keep_files` should only apply to the beginning of paths, not substrings with index > 0 ([#3849]({{ site.repository }}/issues/3849)) +- Use SSLEnable instead of EnableSSL and make URL HTTPS. ([#4693]({{ site.repository }}/issues/4693)) +- convertible: use `Document::YAML_FRONT_MATTER_REGEXP` to parse transformable files ([#4786]({{ site.repository }}/issues/4786)) +- Example in the site template should be IANA-approved example.com ([#4793]({{ site.repository }}/issues/4793)) +- 3.2.x/master: Fix defaults for Documents (posts/collection docs) ([#4808]({{ site.repository }}/issues/4808)) +- Don't rescue LoadError or bundler load errors for Bundler. ([#4857]({{ site.repository }}/issues/4857)) +- `Serve.process` should receive same config as `Build.process` ([#4953]({{ site.repository }}/issues/4953)) +- Prevent reset of page in Liquid payload right before rendering layouts ([#5009]({{ site.repository }}/issues/5009)) +- Add missing fields to ExcerptDrop ([#5067]({{ site.repository }}/issues/5067)) +- Stringify configuration overrides before first use ([#5060]({{ site.repository }}/issues/5060)) +- hooks: move `after_init` hook call at the end of `Site#initialize` ([#5106]({{ site.repository }}/issues/5106)) +- filters: raise error if no input given to date filters ([#5127]({{ site.repository }}/issues/5127)) +- `where_exp` filter should filter posts ([#4860]({{ site.repository }}/issues/4860)) + +### Forward Ports +{: #forward-ports-v3-2-0} + +- From v3.1.4: Add ExcerptDrop and remove excerpt's ability to refer to itself in Liquid ([#4941]({{ site.repository }}/issues/4941)) +- From v3.1.4: Configuration permalink fix and addition of Configuration.from and sorting `site.collections` by label ([#4942]({{ site.repository }}/issues/4942)) +- From v3.1.4: Fix {% raw %}`{{ layout }}`{% endraw %} oddities (proper inheritance & fixing overflow of old data) ([#4943]({{ site.repository }}/issues/4943)) +- From v3.1.5: Sort the results of the `require_all` glob ([#4944]({{ site.repository }}/issues/4944)) +- From v3.1.6: Add ability to render drops as JSON ([#4945]({{ site.repository }}/issues/4945)) + +### Development Fixes +{: #development-fixes-v3-2-0} + +- Add project maintainer profile links ([#4591]({{ site.repository }}/issues/4591)) +- Fix state leakage in Kramdown test ([#4618]({{ site.repository }}/issues/4618)) +- Unify method for copying special files from repo to site ([#4601]({{ site.repository }}/issues/4601)) +- Refresh the contributing file ([#4596]({{ site.repository }}/issues/4596)) +- change smartify doc from copy/paste of mardownify doc ([#4653]({{ site.repository }}/issues/4653)) +- Update Rake & disable warnings when running tests ([#4720]({{ site.repository }}/issues/4720)) +- Fix many warnings ([#4537]({{ site.repository }}/issues/4537)) +- Don't blindly assume the last system when determining "open" cmd ([#4717]({{ site.repository }}/issues/4717)) +- Fix "locally" typo in contributing documentation ([#4756]({{ site.repository }}/issues/4756)) +- Update Rubocop rules ([#4886]({{ site.repository }}/issues/4886)) +- Flesh out the issue template to be much more detailed ([#4849]({{ site.repository }}/issues/4849)) +- Fixing rubocop offenses in lib/jekyll/cleaner.rb ([#4892]({{ site.repository }}/issues/4892)) +- Update `jekyll/commands*` to pass rubocop rules ([#4888]({{ site.repository }}/issues/4888)) +- Clean up many test files to pass Rubocop rules ([#4902]({{ site.repository }}/issues/4902)) +- Rubocop cleanup for some utils and further test files ([#4916]({{ site.repository }}/issues/4916)) +- Rubocop: Low hanging fruit ([#4936]({{ site.repository }}/issues/4936)) +- Rubocop: `Drop` changes from v3.1 forward-ports ([#4949]({{ site.repository }}/issues/4949)) +- Rubocop: cleanup for misc files ([#4946]({{ site.repository }}/issues/4946)) +- Rubocop: Stevenson ([#4951]({{ site.repository }}/issues/4951)) +- Rubocop: lib/jekyll/entry_filter.rb ([#4950]({{ site.repository }}/issues/4950)) +- Rubocop: `test/*` ([#4947]({{ site.repository }}/issues/4947)) +- Rubocop: features ([#4934]({{ site.repository }}/issues/4934)) +- Rubocop: Liquid renderer ([#4933]({{ site.repository }}/issues/4933)) +- Rubocop: converters ([#4931]({{ site.repository }}/issues/4931)) +- Rubocop: Site Drop ([#4948]({{ site.repository }}/issues/4948)) +- Rubocop: tags ([#4938]({{ site.repository }}/issues/4938)) +- Rubocop: Readers ([#4932]({{ site.repository }}/issues/4932)) +- rubocop: jekyll/lib/frontmatter_defaults.rb ([#4974]({{ site.repository }}/issues/4974)) +- rubocop: features/step_definitions.rb ([#4956]({{ site.repository }}/issues/4956)) +- Rubocop theme and url jekyll libs ([#4959]({{ site.repository }}/issues/4959)) +- Rubocop jekyll.rb ([#4966]({{ site.repository }}/issues/4966)) +- Rubocop: use %r for all regular expressions. ([#4979]({{ site.repository }}/issues/4979)) +- Cleanup and make misc files compliant with Rubocop. ([#4940]({{ site.repository }}/issues/4940)) +- Rubocop: jekyll/lib/site.rb ([#4973]({{ site.repository }}/issues/4973)) +- Add timings for each scenario in cucumber & print worst offenders ([#4908]({{ site.repository }}/issues/4908)) +- rubocop: jekyll/lib/filters.rb ([#4993]({{ site.repository }}/issues/4993)) +- Fix rubocop offenses in exe/jekyll ([#5017]({{ site.repository }}/issues/5017)) +- Rubocop: lib/jekyll/command.rb ([#5018]({{ site.repository }}/issues/5018)) +- rubocop: lib/jekyll/static_file.rb ([#5019]({{ site.repository }}/issues/5019)) +- rubocop: lib/jekyll/utils.rb ([#5026]({{ site.repository }}/issues/5026)) +- rubocop: lib/jekyll/regenerator.rb ([#5025]({{ site.repository }}/issues/5025)) +- rubocop: lib/jekyll/configuration.rb ([#5024]({{ site.repository }}/issues/5024)) +- rubocop: lib/jekyll/renderer.rb style fixes ([#5032]({{ site.repository }}/issues/5032)) +- rubocop: lib/jekyll/convertible.rb style fixes ([#5031]({{ site.repository }}/issues/5031)) +- rubocop: lib/jekyll/document.rb style fixes ([#5030]({{ site.repository }}/issues/5030)) +- Remove ruby-head from Travis matrix & fix jruby failures ([#5015]({{ site.repository }}/issues/5015)) +- Remove useless statement from Configuration test ([#5065]({{ site.repository }}/issues/5065)) +- Change baseurl to example.com for some test cases ([#5068]({{ site.repository }}/issues/5068)) +- use activesupport < 5 if we are on a Ruby < 2.2.2 ([#5100]({{ site.repository }}/issues/5100)) +- Internal documentation for working on Jekyll ([#5011]({{ site.repository }}/issues/5011)) +- rubocop: lib/jekyll/collection.rb ([#5022]({{ site.repository }}/issues/5022)) +- tests: Typo fixes. ([#5114]({{ site.repository }}/issues/5114)) +- Normalize yml files. ([#5116]({{ site.repository }}/issues/5116)) +- Whitespace cleanup. ([#5113]({{ site.repository }}/issues/5113)) +- Add AppVeyor support. ([#5115]({{ site.repository }}/issues/5115)) +- appveyor.yml: drop Ruby 2.0.0. ([#5119]({{ site.repository }}/issues/5119)) +- Fix indentation in benchmark ([#5124]({{ site.repository }}/issues/5124)) +- Style fixes for Rubocop 0.42.0 - var == 0 becomes var.zero? - when defining method_missing, also define respond_to_missing? ([#5137]({{ site.repository }}/issues/5137)) + +### Site Enhancements +{: #site-enhancements-v3-2-0} + +- Add jekyll-seo-tag, jekyll-avatar, and jekyll-sitemap to the site ([#4553]({{ site.repository }}/issues/4553)) +- Add Google search query to /docs/help/ ([#4589]({{ site.repository }}/issues/4589)) +- Upgrading, documentation ([#4597]({{ site.repository }}/issues/4597)) +- Add 'view source' entry ([#4602]({{ site.repository }}/issues/4602)) +- Add jekyll-video-embed to list of third-party plugins. ([#4621]({{ site.repository }}/issues/4621)) +- Adding Aerobatic to list of deployment options ([#4630]({{ site.repository }}/issues/4630)) +- Update documentation: HTMLProofer CLI command ([#4641]({{ site.repository }}/issues/4641)) +- Document that subdirectories of `_posts` are no longer categories ([#4639]({{ site.repository }}/issues/4639)) +- Update continuous-integration docs with sudo: false information ([#4628]({{ site.repository }}/issues/4628)) +- Blog post on refreshed contributing file and new affinity teams ([#4645]({{ site.repository }}/issues/4645)) +- Fixes typo on collections ([#4647]({{ site.repository }}/issues/4647)) +- Documentation: future option also works for collections ([#4682]({{ site.repository }}/issues/4682)) +- Additional package needed for Fedora 23 Workspace ([#4685]({{ site.repository }}/issues/4685)) +- Fix typo on Chocolatey name in Windows documentation ([#4686]({{ site.repository }}/issues/4686)) +- Use the correct URL, Fixes [#4698]({{ site.repository }}/issues/4698) ([#4699]({{ site.repository }}/issues/4699)) +- Add jekyll-paspagon plugin ([#4700]({{ site.repository }}/issues/4700)) +- Bold-italicize note in assets documentation about needing front matter ([#4706]({{ site.repository }}/issues/4706)) +- Highlight the `script/` calls in the Contributing documentation ([#4712]({{ site.repository }}/issues/4712)) +- Add Hawkins to the list of third-party plugins ([#4755]({{ site.repository }}/issues/4755)) +- Fix a typo in pagination doc ([#4763]({{ site.repository }}/issues/4763)) +- Switch second GitHub Pages link to HTTPS ([#4760]({{ site.repository }}/issues/4760)) +- Explain data file format requirements more clearly in documentation ([#4781]({{ site.repository }}/issues/4781)) +- Add jekyll-i18n_tags to list of third-party plugins ([#4775]({{ site.repository }}/issues/4775)) +- Remove Leonard Lamprecht's website from Sites page ([#4771]({{ site.repository }}/issues/4771)) +- Updates documentation for collections to include `date` property ([#4769]({{ site.repository }}/issues/4769)) +- Added an explicit rerun note to configuration.md, defaults section ([#4734]({{ site.repository }}/issues/4734)) +- Update Rack-Jekyll Heroku deployment blog post url ([#4789]({{ site.repository }}/issues/4789)) +- Added missing single quote on rsync client side command ([#4813]({{ site.repository }}/issues/4813)) +- Organize Form Platforms-as-a-Service into unified list & add FormSpree.io ([#4754]({{ site.repository }}/issues/4754)) +- Fixed typo on Configuration page ([#4804]({{ site.repository }}/issues/4804)) +- Update FormKeep URL on the Resources doc ([#4844]({{ site.repository }}/issues/4844)) +- site: use liquid & reduce some whitespace noise ([#4854]({{ site.repository }}/issues/4854)) +- Add jekyll-breadcrumbs to list of third-party plugins ([#4874]({{ site.repository }}/issues/4874)) +- Added Pug converter to list of third-party plugins ([#4872]({{ site.repository }}/issues/4872)) +- Add jekyll-ideal-image-slider to list of third-party plugins ([#4863]({{ site.repository }}/issues/4863)) +- Add Jekyll Tips and the Cheatsheet to the list of resources ([#4887]({{ site.repository }}/issues/4887)) +- Removed extra `

    ` from `site/_docs/permalinks.md` ([#4890]({{ site.repository }}/issues/4890)) +- Add pubstorm deployment instructions to docs ([#4881]({{ site.repository }}/issues/4881)) +- Corrected pagination docs for hidden: true feature ([#4903]({{ site.repository }}/issues/4903)) +- Remove a Broken Link for Refheap Plugin ([#4971]({{ site.repository }}/issues/4971)) +- Instructions on how to install github-gem on Windows ([#4975]({{ site.repository }}/issues/4975)) +- Minor tweak to fix missing apostrophne ([#4962]({{ site.repository }}/issues/4962)) +- Instructions on how to install github-gem on Windows (v2) ([#4977]({{ site.repository }}/issues/4977)) +- Fix inaccurate HTTP response header field name ([#4976]({{ site.repository }}/issues/4976)) +- Add post about GSoC project ([#4980]({{ site.repository }}/issues/4980)) +- Link to the HTML page instead of Markdown ([#4985]({{ site.repository }}/issues/4985)) +- Update normalize.css to v4.0.0. ([#4989]({{ site.repository }}/issues/4989)) +- Add jekyll-tags-list-plugin to list of third-party plugins ([#5000]({{ site.repository }}/issues/5000)) +- Windows docs: Command needs to be called from blog path ([#5006]({{ site.repository }}/issues/5006)) +- Update text to be consitent with example ([#5010]({{ site.repository }}/issues/5010)) +- Update template links to point to core Liquid site ([#5012]({{ site.repository }}/issues/5012)) +- Add generator-jekyllized to third-party plugins ([#5027]({{ site.repository }}/issues/5027)) +- Add Jekyll Art Hallery generator plugin to list of third-party plugins ([#5043]({{ site.repository }}/issues/5043)) +- Add Formingo to the list of Jekyll form SaaS ([#5054]({{ site.repository }}/issues/5054)) +- Highlight help nav item when navigated to. ([#5058]({{ site.repository }}/issues/5058)) +- Update normalize.css to v4.2.0. ([#5096]({{ site.repository }}/issues/5096)) +- Updates html-proofer code ([#5098]({{ site.repository }}/issues/5098)) +- Jekyll Community ([#5097]({{ site.repository }}/issues/5097)) +- Typo in documentation file templates.md ([#5117]({{ site.repository }}/issues/5117)) +- Slightly, improve PNG compression. ([#5112]({{ site.repository }}/issues/5112)) +- docs: add jekyll-maps plugin reference ([#5123]({{ site.repository }}/issues/5123)) +- docs: fix link to plugins page source ([#5122]({{ site.repository }}/issues/5122)) +- Update the configuration docs to match the code ([#5131]({{ site.repository }}/issues/5131)) +- Removed confusing word repetition. ([#5139]({{ site.repository }}/issues/5139)) +- Add a note about script/fmt ([#5138]({{ site.repository }}/issues/5138)) + + +## 3.1.6 / 2016-05-19 +{: #v3-1-6} + +### Bug Fixes +{: #bug-fixes-v3-1-6} + +- Add ability to `jsonify` Drops such that, e.g. `site | jsonify`, works. ([#4914]({{ site.repository }}/issues/4914)) + + +## 3.1.5 / 2016-05-18 +{: #v3-1-5} + +### Bug Fixes +{: #bug-fixes-v3-1-5} + +- Sort the results of the `require_all` glob (affects Linux only). ([#4912]({{ site.repository }}/issues/4912)) + + +## 3.1.4 / 2016-05-18 +{: #v3-1-4} + +### Bug Fixes +{: #bug-fixes-v3-1-4} + +- Add `ExcerptDrop` and remove excerpt's ability to refer to itself in Liquid ([#4907]({{ site.repository }}/issues/4907)) +- Configuration permalink fix where `collections.posts.permalink` inherits properly from `permalink` only when it doesn't exist ([#4910]({{ site.repository }}/issues/4910)) +- Add `Configuration.from` to make it easier to build configs from just a hash +- Sorting `site.collections` in Liquid by label ([#4910]({{ site.repository }}/issues/4910)) +- Fix bug where `layout` in Liquid would inherit from previously-rendered layouts' metadatas ([#4909]({{ site.repository }}/issues/4909)) +- Fix bug where `layout` in Liquid would override in the wrong direction (more-specific layouts' data were overwritten by their parent layouts' data; this has now been reversed) ([#4909]({{ site.repository }}/issues/4909)) + + +## 3.1.3 / 2016-04-18 +{: #v3-1-3} + +- Fix defaults for Documents to lookup defaults based on `relative_path` instead of `url` ([#4807]({{ site.repository }}/issues/4807)) +- Use SSLEnable instead of EnableSSL and make URL HTTPS (WEBrick) ([#4693]({{ site.repository }}/issues/4693)) + + +## 3.1.2 / 2016-02-19 +{: #v3-1-2} + +### Minor Enhancements +{: #minor-enhancements-v3-1-2} + +- Include `.rubocop.yml` in Gem ([#4437]({{ site.repository }}/issues/4437)) +- `LiquidRenderer#parse`: parse with line numbers. ([#4452]({{ site.repository }}/issues/4452)) +- Add consistency to the no-subcommand deprecation message ([#4505]({{ site.repository }}/issues/4505)) + +### Bug Fixes +{: #bug-fixes-v3-1-2} + +- Fix syntax highlighting in kramdown by making `@config` accessible in the Markdown converter. ([#4428]({{ site.repository }}/issues/4428)) +- `Jekyll.sanitized_path`: sanitizing a questionable path should handle tildes ([#4492]({{ site.repository }}/issues/4492)) +- Fix `titleize` so already capitalized words are not dropped ([#4525]({{ site.repository }}/issues/4525)) +- Permalinks which end in a slash should always output HTML ([#4546]({{ site.repository }}/issues/4546)) + +### Development Fixes +{: #development-fixes-v3-1-2} + +- Require at least cucumber version 2.1.0 ([#4514]({{ site.repository }}/issues/4514)) + +### Site Enhancements +{: #site-enhancements-v3-1-2} + +- Add jekyll-toc plugin ([#4429]({{ site.repository }}/issues/4429)) +- Docs: Quickstart - added documentation about the `--force` option ([#4410]({{ site.repository }}/issues/4410)) +- Fix broken links to the Code of Conduct ([#4436]({{ site.repository }}/issues/4436)) +- Upgrade notes: mention trailing slash in permalink; fixes [#4440]({{ site.repository }}/issues/4440) ([#4455]({{ site.repository }}/issues/4455)) +- Add hooks to the plugin categories toc ([#4463]({{ site.repository }}/issues/4463)) +- Jekyll 3 requires newer version of Ruby. ([#4461]({{ site.repository }}/issues/4461)) +- Fix typo in upgrading docs ([#4473]({{ site.repository }}/issues/4473)) +- Add note about upgrading documentation on jekyllrb.com/help/ ([#4484]({{ site.repository }}/issues/4484)) +- Update Rake link ([#4496]({{ site.repository }}/issues/4496)) +- Update & prune the short list of example sites ([#4374]({{ site.repository }}/issues/4374)) +- Added amp-jekyll plugin to plugins docs ([#4517]({{ site.repository }}/issues/4517)) +- A few grammar fixes ([#4512]({{ site.repository }}/issues/4512)) +- Correct a couple mistakes in structure.md ([#4522]({{ site.repository }}/issues/4522)) + + +## 3.1.1 / 2016-01-29 +{: #v3-1-1} + +### Meta + +- Update the Code of Conduct to the latest version ([#4402]({{ site.repository }}/issues/4402)) + +### Bug Fixes +{: #bug-fixes-v3-1-1} + +- `Page#dir`: ensure it ends in a slash ([#4403]({{ site.repository }}/issues/4403)) +- Add `Utils.merged_file_read_opts` to unify reading & strip the BOM ([#4404]({{ site.repository }}/issues/4404)) +- `Renderer#output_ext`: honor folders when looking for ext ([#4401]({{ site.repository }}/issues/4401)) + +### Development Fixes +{: #development-fixes-v3-1-1} + +- Suppress stdout in liquid profiling test ([#4409]({{ site.repository }}/issues/4409)) + + +## 3.1.0 / 2016-01-23 +{: #v3-1-0} + +### Minor Enhancements +{: #minor-enhancements-v3-1-0} + +- Use `Liquid::Drop`s instead of `Hash`es in `#to_liquid` ([#4277]({{ site.repository }}/issues/4277)) +- Add 'sample' Liquid filter Equivalent to Array#sample functionality ([#4223]({{ site.repository }}/issues/4223)) +- Cache parsed include file to save liquid parsing time. ([#4120]({{ site.repository }}/issues/4120)) +- Slightly speed up url sanitization and handle multiples of ///. ([#4168]({{ site.repository }}/issues/4168)) +- Print debug message when a document is skipped from reading ([#4180]({{ site.repository }}/issues/4180)) +- Include tag should accept multiple variables in the include name ([#4183]({{ site.repository }}/issues/4183)) +- Add `-o` option to serve command which opens server URL ([#4144]({{ site.repository }}/issues/4144)) +- Add CodeClimate platform for better code quality. ([#4220]({{ site.repository }}/issues/4220)) +- General improvements for WEBrick via jekyll serve such as SSL & custom headers ([#4224]({{ site.repository }}/issues/4224), [#4228]({{ site.repository }}/issues/4228)) +- Add a default charset to content-type on webrick. ([#4231]({{ site.repository }}/issues/4231)) +- Switch `PluginManager` to use `require_with_graceful_fail` for better UX ([#4233]({{ site.repository }}/issues/4233)) +- Allow quoted date in front matter defaults ([#4184]({{ site.repository }}/issues/4184)) +- Add a Jekyll doctor warning for URLs that only differ by case ([#3171]({{ site.repository }}/issues/3171)) +- drops: create one base Drop class which can be set as mutable or not ([#4285]({{ site.repository }}/issues/4285)) +- drops: provide `#to_h` to allow for hash introspection ([#4281]({{ site.repository }}/issues/4281)) +- Shim subcommands with indication of gem possibly required so users know how to use them ([#4254]({{ site.repository }}/issues/4254)) +- Add smartify Liquid filter for SmartyPants ([#4323]({{ site.repository }}/issues/4323)) +- Raise error on empty permalink ([#4361]({{ site.repository }}/issues/4361)) +- Refactor Page#permalink method ([#4389]({{ site.repository }}/issues/4389)) + +### Bug Fixes +{: #bug-fixes-v3-1-0} + +- Pass build options into `clean` command ([#4177]({{ site.repository }}/issues/4177)) +- Allow users to use .htm and .xhtml (XHTML5.) ([#4160]({{ site.repository }}/issues/4160)) +- Prevent Shell Injection. ([#4200]({{ site.repository }}/issues/4200)) +- Convertible should make layout data accessible via `layout` instead of `page` ([#4205]({{ site.repository }}/issues/4205)) +- Avoid using `Dir.glob` with absolute path to allow special characters in the path ([#4150]({{ site.repository }}/issues/4150)) +- Handle empty config files ([#4052]({{ site.repository }}/issues/4052)) +- Rename `@options` so that it does not impact Liquid. ([#4173]({{ site.repository }}/issues/4173)) +- utils/drops: update Drop to support `Utils.deep_merge_hashes` ([#4289]({{ site.repository }}/issues/4289)) +- Make sure jekyll/drops/drop is loaded first. ([#4292]({{ site.repository }}/issues/4292)) +- Convertible/Page/Renderer: use payload hash accessor & setter syntax for backwards-compatibility ([#4311]({{ site.repository }}/issues/4311)) +- Drop: fix hash setter precedence ([#4312]({{ site.repository }}/issues/4312)) +- utils: `has_yaml_header?` should accept files with extraneous spaces ([#4290]({{ site.repository }}/issues/4290)) +- Escape html from site.title and page.title in site template ([#4307]({{ site.repository }}/issues/4307)) +- Allow custom file extensions if defined in `permalink` front matter ([#4314]({{ site.repository }}/issues/4314)) +- Fix deep_merge_hashes! handling of drops and hashes ([#4359]({{ site.repository }}/issues/4359)) +- Page should respect output extension of its permalink ([#4373]({{ site.repository }}/issues/4373)) +- Disable auto-regeneration when running server detached ([#4376]({{ site.repository }}/issues/4376)) +- Drop#: only use public_send for keys in the content_methods array ([#4388]({{ site.repository }}/issues/4388)) +- Extract title from filename successfully when no date. ([#4195]({{ site.repository }}/issues/4195)) + +### Development Fixes +{: #development-fixes-v3-1-0} + +- `jekyll-docs` should be easily release-able ([#4152]({{ site.repository }}/issues/4152)) +- Allow use of Cucumber 2.1 or greater ([#4181]({{ site.repository }}/issues/4181)) +- Modernize Kramdown for Markdown converter. ([#4109]({{ site.repository }}/issues/4109)) +- Change TestDoctorCommand to JekyllUnitTest... ([#4263]({{ site.repository }}/issues/4263)) +- Create namespaced rake tasks in separate `.rake` files under `lib/tasks` ([#4282]({{ site.repository }}/issues/4282)) +- markdown: refactor for greater readability & efficiency ([#3771]({{ site.repository }}/issues/3771)) +- Fix many Rubocop style errors ([#4301]({{ site.repository }}/issues/4301)) +- Fix spelling of "GitHub" in docs and history ([#4322]({{ site.repository }}/issues/4322)) +- Reorganize and cleanup the Gemfile, shorten required depends. ([#4318]({{ site.repository }}/issues/4318)) +- Remove script/rebund. ([#4341]({{ site.repository }}/issues/4341)) +- Implement codeclimate platform ([#4340]({{ site.repository }}/issues/4340)) +- Remove ObectSpace dumping and start using inherited, it's faster. ([#4342]({{ site.repository }}/issues/4342)) +- Add script/travis so all people can play with Travis-CI images. ([#4338]({{ site.repository }}/issues/4338)) +- Move Cucumber to using RSpec-Expections and furthering JRuby support. ([#4343]({{ site.repository }}/issues/4343)) +- Rearrange Cucumber and add some flair. ([#4347]({{ site.repository }}/issues/4347)) +- Remove old FIXME ([#4349]({{ site.repository }}/issues/4349)) +- Clean up the Gemfile (and keep all the necessary dependencies) ([#4350]({{ site.repository }}/issues/4350)) + +### Site Enhancements +{: #site-enhancements-v3-1-0} + +- Add three plugins to directory ([#4163]({{ site.repository }}/issues/4163)) +- Add upgrading docs from 2.x to 3.x ([#4157]({{ site.repository }}/issues/4157)) +- Add `protect_email` to the plugins index. ([#4169]({{ site.repository }}/issues/4169)) +- Add `jekyll-deploy` to list of third-party plugins ([#4179]({{ site.repository }}/issues/4179)) +- Clarify plugin docs ([#4154]({{ site.repository }}/issues/4154)) +- Add Kickster to deployment methods in documentation ([#4190]({{ site.repository }}/issues/4190)) +- Add DavidBurela's tutorial for Windows to Windows docs page ([#4210]({{ site.repository }}/issues/4210)) +- Change GitHub code block to highlight tag to avoid it overlaps parent div ([#4121]({{ site.repository }}/issues/4121)) +- Update FormKeep link to be something more specific to Jekyll ([#4243]({{ site.repository }}/issues/4243)) +- Remove example Roger Chapman site, as the domain doesn't exist ([#4249]({{ site.repository }}/issues/4249)) +- Added configuration options for `draft_posts` to configuration docs ([#4251]({{ site.repository }}/issues/4251)) +- Fix checklist in `_assets.md` ([#4259]({{ site.repository }}/issues/4259)) +- Add Markdown examples to Pages docs ([#4275]({{ site.repository }}/issues/4275)) +- Add jekyll-paginate-category to list of third-party plugins ([#4273]({{ site.repository }}/issues/4273)) +- Add `jekyll-responsive_image` to list of third-party plugins ([#4286]({{ site.repository }}/issues/4286)) +- Add `jekyll-commonmark` to list of third-party plugins ([#4299]({{ site.repository }}/issues/4299)) +- Add documentation for incremental regeneration ([#4293]({{ site.repository }}/issues/4293)) +- Add note about removal of relative permalink support in upgrading docs ([#4303]({{ site.repository }}/issues/4303)) +- Add Pro Tip to use front matter variable to create clean URLs ([#4296]({{ site.repository }}/issues/4296)) +- Fix grammar in the documentation for posts. ([#4330]({{ site.repository }}/issues/4330)) +- Add documentation for smartify Liquid filter ([#4333]({{ site.repository }}/issues/4333)) +- Fixed broken link to blog on using mathjax with jekyll ([#4344]({{ site.repository }}/issues/4344)) +- Documentation: correct reference in Precedence section of Configuration docs ([#4355]({{ site.repository }}/issues/4355)) +- Add @jmcglone's guide to github-pages doc page ([#4364]({{ site.repository }}/issues/4364)) +- Added the Wordpress2Jekyll Wordpress plugin ([#4377]({{ site.repository }}/issues/4377)) +- Add Contentful Extension to list of third-party plugins ([#4390]({{ site.repository }}/issues/4390)) +- Correct Minor spelling error ([#4394]({{ site.repository }}/issues/4394)) + + +## 3.0.5 / 2016-04-26 +{: #v3-0-5} + +- Remove call to `#backwards_compatibilize` in `Configuration.from` ([#4846]({{ site.repository }}/issues/4846)) + + +## 3.0.4 / 2016-04-18 +{: #v3-0-4} + +- Fix defaults for Documents to lookup defaults based on `relative_path` instead of `url` ([#4806]({{ site.repository }}/issues/4806)) +- Configuration: allow users to specify a `collections.posts.permalink` directly without `permalink` clobbering it ([#4753]({{ site.repository }}/issues/4753)) + + +## 3.0.3 / 2016-02-08 +{: #v3-0-3} + +### Bug Fixes +{: #bug-fixes-v3-0-3} + +- Fix extension weirdness with folders ([#4493]({{ site.repository }}/issues/4493)) +- EntryFilter: only include 'excluded' log on excluded files ([#4479]({{ site.repository }}/issues/4479)) +- `Jekyll.sanitized_path`: escape tildes before sanitizing a questionable path ([#4468]({{ site.repository }}/issues/4468)) +- `LiquidRenderer#parse`: parse with line numbers ([#4453]({{ site.repository }}/issues/4453)) +- `Document#<=>`: protect against nil comparison in dates. ([#4446]({{ site.repository }}/issues/4446)) + + +## 3.0.2 / 2016-01-20 +{: #v3-0-2} + +### Bug Fixes +{: #bug-fixes-v3-0-2} + +- Document: throw a useful error when an invalid date is given ([#4378]({{ site.repository }}/issues/4378)) + + +## 3.0.1 / 2015-11-17 +{: #v3-0-1} + +### Bug Fixes +{: #bug-fixes-v3-0-1} + +- Document: only superdirectories of the collection are categories ([#4110]({{ site.repository }}/issues/4110)) +- `Convertible#render_liquid` should use `render!` to cause failure on bad Liquid ([#4077]({{ site.repository }}/issues/4077)) +- Don't generate `.jekyll-metadata` in non-incremental build ([#4079]({{ site.repository }}/issues/4079)) +- Set `highlighter` config val to `kramdown.syntax_highlighter` ([#4090]({{ site.repository }}/issues/4090)) +- Align hooks implementation with documentation ([#4104]({{ site.repository }}/issues/4104)) +- Fix the deprecation warning in the doctor command ([#4114]({{ site.repository }}/issues/4114)) +- Fix case in `:title` and add `:slug` which is downcased ([#4100]({{ site.repository }}/issues/4100)) + +### Development Fixes +{: #development-fixes-v3-0-1} + +- Fix test warnings when doing rake {test,spec} or script/test ([#4078]({{ site.repository }}/issues/4078)) + +### Site Enhancements +{: #site-enhancements-v3-0-1} + +- Update normalize.css to v3.0.3. ([#4085]({{ site.repository }}/issues/4085)) +- Update Font Awesome to v4.4.0. ([#4086]({{ site.repository }}/issues/4086)) +- Adds a note about installing the jekyll-gist gem to make gist tag work ([#4101]({{ site.repository }}/issues/4101)) +- Align hooks documentation with implementation ([#4104]({{ site.repository }}/issues/4104)) +- Add Jekyll Flickr Plugin to the list of third party plugins ([#4111]({{ site.repository }}/issues/4111)) +- Remove link to now-deleted blog post ([#4125]({{ site.repository }}/issues/4125)) +- Update the liquid syntax in the pagination docs ([#4130]({{ site.repository }}/issues/4130)) +- Add jekyll-language-plugin to plugins.md ([#4134]({{ site.repository }}/issues/4134)) +- Updated to reflect feedback in [#4129]({{ site.repository }}/issues/4129) ([#4137]({{ site.repository }}/issues/4137)) +- Clarify assets.md based on feedback of [#4129]({{ site.repository }}/issues/4129) ([#4142]({{ site.repository }}/issues/4142)) +- Re-correct the liquid syntax in the pagination docs ([#4140]({{ site.repository }}/issues/4140)) + + +## 3.0.0 / 2015-10-26 +{: #v3-0-0} + +### Major Enhancements +{: #major-enhancements-v3-0-0} + +- Liquid profiler (i.e. know how fast or slow your templates render) ([#3762]({{ site.repository }}/issues/3762)) +- Incremental regeneration ([#3116]({{ site.repository }}/issues/3116)) +- Add Hooks: a new kind of plugin ([#3553]({{ site.repository }}/issues/3553)) +- Upgrade to Liquid 3.0.0 ([#3002]({{ site.repository }}/issues/3002)) +- `site.posts` is now a Collection instead of an Array ([#4055]({{ site.repository }}/issues/4055)) +- Add basic support for JRuby (commit: 0f4477) +- Drop support for Ruby 1.9.3. ([#3235]({{ site.repository }}/issues/3235)) +- Support Ruby v2.2 ([#3234]({{ site.repository }}/issues/3234)) +- Support RDiscount 2 ([#2767]({{ site.repository }}/issues/2767)) +- Remove most runtime deps ([#3323]({{ site.repository }}/issues/3323)) +- Move to Rouge as default highlighter ([#3323]({{ site.repository }}/issues/3323)) +- Mimic GitHub Pages `.html` extension stripping behavior in WEBrick ([#3452]({{ site.repository }}/issues/3452)) +- Always include file extension on output files ([#3490]({{ site.repository }}/issues/3490)) +- Improved permalinks for pages and collections ([#3538]({{ site.repository }}/issues/3538)) +- Sunset (i.e. remove) Maruku ([#3655]({{ site.repository }}/issues/3655)) +- Remove support for relative permalinks ([#3679]({{ site.repository }}/issues/3679)) +- Iterate over `site.collections` as an array instead of a hash. ([#3670]({{ site.repository }}/issues/3670)) +- Adapt StaticFile for collections, config defaults ([#3823]({{ site.repository }}/issues/3823)) +- Add a Code of Conduct for the Jekyll project ([#3925]({{ site.repository }}/issues/3925)) +- Added permalink time variables ([#3990]({{ site.repository }}/issues/3990)) +- Add `--incremental` flag to enable incremental regen (disabled by default) ([#4059]({{ site.repository }}/issues/4059)) + +### Minor Enhancements +{: #minor-enhancements-v3-0-0} + +- Deprecate access to Document#data properties and Collection#docs methods ([#4058]({{ site.repository }}/issues/4058)) +- Sort static files just once, and call `site_payload` once for all collections ([#3204]({{ site.repository }}/issues/3204)) +- Separate `jekyll docs` and optimize external gem handling ([#3241]({{ site.repository }}/issues/3241)) +- Improve `Site#getConverterImpl` and call it `Site#find_converter_instance` ([#3240]({{ site.repository }}/issues/3240)) +- Use relative path for `path` Liquid variable in Documents for consistency ([#2908]({{ site.repository }}/issues/2908)) +- Generalize `Utils#slugify` for any scripts ([#3047]({{ site.repository }}/issues/3047)) +- Added basic microdata to post template in site template ([#3189]({{ site.repository }}/issues/3189)) +- Store log messages in an array of messages. ([#3244]({{ site.repository }}/issues/3244)) +- Allow collection documents to override `output` property in front matter ([#3172]({{ site.repository }}/issues/3172)) +- Keep file modification times between builds for static files ([#3220]({{ site.repository }}/issues/3220)) +- Only downcase mixed-case categories for the URL ([#2571]({{ site.repository }}/issues/2571)) +- Added per post `excerpt_separator` functionality ([#3274]({{ site.repository }}/issues/3274)) +- Allow collections YAML to end with three dots ([#3134]({{ site.repository }}/issues/3134)) +- Add mode parameter to `slugify` Liquid filter ([#2918]({{ site.repository }}/issues/2918)) +- Perf: `Markdown#matches` should avoid regexp ([#3321]({{ site.repository }}/issues/3321)) +- Perf: Use frozen regular expressions for `Utils#slugify` ([#3321]({{ site.repository }}/issues/3321)) +- Split off Textile support into jekyll-textile-converter ([#3319]({{ site.repository }}/issues/3319)) +- Improve the navigation menu alignment in the site template on small screens ([#3331]({{ site.repository }}/issues/3331)) +- Show the regeneration time after the initial generation ([#3378]({{ site.repository }}/issues/3378)) +- Site template: Switch default font to Helvetica Neue ([#3376]({{ site.repository }}/issues/3376)) +- Make the `include` tag a teensy bit faster. ([#3391]({{ site.repository }}/issues/3391)) +- Add `pkill -f jekyll` to ways to kill. ([#3397]({{ site.repository }}/issues/3397)) +- Site template: collapsed, variable-driven font declaration ([#3360]({{ site.repository }}/issues/3360)) +- Site template: Don't always show the scrollbar in code blocks ([#3419]({{ site.repository }}/issues/3419)) +- Site template: Remove undefined `text` class from `p` element ([#3440]({{ site.repository }}/issues/3440)) +- Site template: Optimize text rendering for legibility ([#3382]({{ site.repository }}/issues/3382)) +- Add `draft?` method to identify if Post is a Draft & expose to Liquid ([#3456]({{ site.repository }}/issues/3456)) +- Write regeneration metadata even on full rebuild ([#3464]({{ site.repository }}/issues/3464)) +- Perf: Use `String#end_with?("/")` instead of regexp when checking paths ([#3516]({{ site.repository }}/issues/3516)) +- Docs: document 'ordinal' built-in permalink style ([#3532]({{ site.repository }}/issues/3532)) +- Upgrade liquid-c to 3.x ([#3531]({{ site.repository }}/issues/3531)) +- Use consistent syntax for deprecation warning ([#3535]({{ site.repository }}/issues/3535)) +- Added build --destination and --source flags ([#3418]({{ site.repository }}/issues/3418)) +- Site template: remove unused `page.meta` attribute ([#3537]({{ site.repository }}/issues/3537)) +- Improve the error message when sorting null objects ([#3520]({{ site.repository }}/issues/3520)) +- Added liquid-md5 plugin ([#3598]({{ site.repository }}/issues/3598)) +- Documentation: RR replaced with RSpec Mocks ([#3600]({{ site.repository }}/issues/3600)) +- Documentation: Fix subpath. ([#3599]({{ site.repository }}/issues/3599)) +- Create 'tmp' dir for test_tags if it doesn't exist ([#3609]({{ site.repository }}/issues/3609)) +- Extract reading of data from `Site` to reduce responsibilities. ([#3545]({{ site.repository }}/issues/3545)) +- Removed the word 'Jekyll' a few times from the comments ([#3617]({{ site.repository }}/issues/3617)) +- `bin/jekyll`: with no args, exit with exit code 1 ([#3619]({{ site.repository }}/issues/3619)) +- Incremental build if destination file missing ([#3614]({{ site.repository }}/issues/3614)) +- Static files `mtime` liquid should return a `Time` obj ([#3596]({{ site.repository }}/issues/3596)) +- Use `Jekyll::Post`s for both LSI indexing and lookup. ([#3629]({{ site.repository }}/issues/3629)) +- Add `charset=utf-8` for HTML and XML pages in WEBrick ([#3649]({{ site.repository }}/issues/3649)) +- Set log level to debug when verbose flag is set ([#3665]({{ site.repository }}/issues/3665)) +- Added a mention on the Gemfile to complete the instructions ([#3671]({{ site.repository }}/issues/3671)) +- Perf: Cache `Document#to_liquid` and invalidate where necessary ([#3693]({{ site.repository }}/issues/3693)) +- Perf: `Jekyll::Cleaner#existing_files`: Call `keep_file_regex` and `keep_dirs` only once, not once per iteration ([#3696]({{ site.repository }}/issues/3696)) +- Omit jekyll/jekyll-help from list of resources. ([#3698]({{ site.repository }}/issues/3698)) +- Add basic `jekyll doctor` test to detect fsnotify (OSX) anomalies. ([#3704]({{ site.repository }}/issues/3704)) +- Added talk.jekyllrb.com to "Have questions?" ([#3694]({{ site.repository }}/issues/3694)) +- Performance: Sort files only once ([#3707]({{ site.repository }}/issues/3707)) +- Performance: Marshal metadata ([#3706]({{ site.repository }}/issues/3706)) +- Upgrade highlight wrapper from `div` to `figure` ([#3779]({{ site.repository }}/issues/3779)) +- Upgrade mime-types to `~> 2.6` ([#3795]({{ site.repository }}/issues/3795)) +- Update windows.md with Ruby version info ([#3818]({{ site.repository }}/issues/3818)) +- Make the directory for includes configurable ([#3782]({{ site.repository }}/issues/3782)) +- Rename directory configurations to match `*_dir` convention for consistency ([#3782]({{ site.repository }}/issues/3782)) +- Internal: trigger hooks by owner symbol ([#3871]({{ site.repository }}/issues/3871)) +- Update MIME types from mime-db ([#3933]({{ site.repository }}/issues/3933)) +- Add header to site template `_config.yml` for clarity & direction ([#3997]({{ site.repository }}/issues/3997)) +- Site template: add timezone offset to post date front matter ([#4001]({{ site.repository }}/issues/4001)) +- Make a constant for the regex to find hidden files ([#4032]({{ site.repository }}/issues/4032)) +- Site template: refactor github & twitter icons into includes ([#4049]({{ site.repository }}/issues/4049)) +- Site template: add background to Kramdown Rouge-ified backtick code blocks ([#4053]({{ site.repository }}/issues/4053)) -## 1.4.2 / 2013-12-16 +### Bug Fixes +{: #bug-fixes-v3-0-0} + +- `post_url`: fix access deprecation warning & fix deprecation msg ([#4060]({{ site.repository }}/issues/4060)) +- Perform jekyll-paginate deprecation warning correctly. ([#3580]({{ site.repository }}/issues/3580)) +- Make permalink parsing consistent with pages ([#3014]({{ site.repository }}/issues/3014)) +- `time()`pre-filter method should accept a `Date` object ([#3299]({{ site.repository }}/issues/3299)) +- Remove unneeded end tag for `link` in site template ([#3236]({{ site.repository }}/issues/3236)) +- Kramdown: Use `enable_coderay` key instead of `use_coderay` ([#3237]({{ site.repository }}/issues/3237)) +- Unescape `Document` output path ([#2924]({{ site.repository }}/issues/2924)) +- Fix nav items alignment when on multiple rows ([#3264]({{ site.repository }}/issues/3264)) +- Highlight: Only Strip Newlines/Carriage Returns, not Spaces ([#3278]({{ site.repository }}/issues/3278)) +- Find variables in front matter defaults by searching with relative file path. ([#2774]({{ site.repository }}/issues/2774)) +- Allow variables (e.g `:categories`) in front matter permalinks ([#3320]({{ site.repository }}/issues/3320)) +- Handle nil URL placeholders in permalinks ([#3325]({{ site.repository }}/issues/3325)) +- Template: Fix nav items alignment when in "burger" mode ([#3329]({{ site.repository }}/issues/3329)) +- Template: Remove `!important` from nav SCSS introduced in [#3329]({{ site.repository }}/issues/3329) ([#3375]({{ site.repository }}/issues/3375)) +- The `:title` URL placeholder for collections should be the filename slug. ([#3383]({{ site.repository }}/issues/3383)) +- Trim the generate time diff to just 3 places past the decimal place ([#3415]({{ site.repository }}/issues/3415)) +- The highlight tag should only clip the newlines before and after the *entire* block, not in between ([#3401]({{ site.repository }}/issues/3401)) +- highlight: fix problem with linenos and rouge. ([#3436]({{ site.repository }}/issues/3436)) +- `Site#read_data_file`: read CSV's with proper file encoding ([#3455]({{ site.repository }}/issues/3455)) +- Ignore `.jekyll-metadata` in site template ([#3496]({{ site.repository }}/issues/3496)) +- Template: Point documentation link to the documentation pages ([#3502]({{ site.repository }}/issues/3502)) +- Removed the trailing slash from the example `/blog` baseurl comment ([#3485]({{ site.repository }}/issues/3485)) +- Clear the regenerator cache every time we process ([#3592]({{ site.repository }}/issues/3592)) +- Readd (bring back) minitest-profile ([#3628]({{ site.repository }}/issues/3628)) +- Add WOFF2 font MIME type to Jekyll server MIME types ([#3647]({{ site.repository }}/issues/3647)) +- Be smarter about extracting the extname in `StaticFile` ([#3632]({{ site.repository }}/issues/3632)) +- Process metadata for all dependencies ([#3608]({{ site.repository }}/issues/3608)) +- Show error message if the front matter on a page/post is invalid. ([#3643]({{ site.repository }}/issues/3643)) +- Upgrade redcarpet to 3.2 (Security fix: OSVDB-120415) ([#3652]({{ site.repository }}/issues/3652)) +- Create #mock_expects that goes directly to RSpec Mocks. ([#3658]({{ site.repository }}/issues/3658)) +- Open `.jekyll-metadata` in binary mode to read binary Marshal data ([#3713]({{ site.repository }}/issues/3713)) +- Incremental regeneration: handle deleted, renamed, and moved dependencies ([#3717]({{ site.repository }}/issues/3717)) +- Fix typo on line 19 of pagination.md ([#3760]({{ site.repository }}/issues/3760)) +- Fix it so that 'blog.html' matches 'blog.html' ([#3732]({{ site.repository }}/issues/3732)) +- Remove occasionally-problematic `ensure` in `LiquidRenderer` ([#3811]({{ site.repository }}/issues/3811)) +- Fixed an unclear code comment in site template SCSS ([#3837]({{ site.repository }}/issues/3837)) +- Fix reading of binary metadata file ([#3845]({{ site.repository }}/issues/3845)) +- Remove var collision with site template header menu iteration variable ([#3838]({{ site.repository }}/issues/3838)) +- Change non-existent `hl_linenos` to `hl_lines` to allow passthrough in safe mode ([#3787]({{ site.repository }}/issues/3787)) +- Add missing flag to disable the watcher ([#3820]({{ site.repository }}/issues/3820)) +- Update CI guide to include more direct explanations of the flow ([#3891]({{ site.repository }}/issues/3891)) +- Set `future` to `false` in the default config ([#3892]({{ site.repository }}/issues/3892)) +- filters: `where` should compare stringified versions of input & comparator ([#3935]({{ site.repository }}/issues/3935)) +- Read build options for `jekyll clean` command ([#3828]({{ site.repository }}/issues/3828)) +- Fix [#3970]({{ site.repository }}/issues/3970): Use Gem::Version to compare versions, not `>`. +- Abort if no subcommand. Fixes confusing message. ([#3992]({{ site.repository }}/issues/3992)) +- Whole-post excerpts should match the post content ([#4004]({{ site.repository }}/issues/4004)) +- Change default font weight to 400 to fix bold/strong text issues ([#4050]({{ site.repository }}/issues/4050)) +- Document: Only auto-generate the excerpt if it's not overridden ([#4062]({{ site.repository }}/issues/4062)) +- Utils: `deep_merge_hashes` should also merge `default_proc` (45f69bb) +- Defaults: compare paths in `applies_path?` as `String`s to avoid confusion (7b81f00) - +### Development Fixes +{: #development-fixes-v3-0-0} + +- Remove loader.rb and "modernize" `script/test`. ([#3574]({{ site.repository }}/issues/3574)) +- Improve the grammar in the documentation ([#3233]({{ site.repository }}/issues/3233)) +- Update the LICENSE text to match the MIT license exactly ([#3253]({{ site.repository }}/issues/3253)) +- Update rake task `site:publish` to fix minor bugs. ([#3254]({{ site.repository }}/issues/3254)) +- Switch to shields.io for the README badges. ([#3255]({{ site.repository }}/issues/3255)) +- Use `FileList` instead of `Dir.glob` in `site:publish` rake task ([#3261]({{ site.repository }}/issues/3261)) +- Fix test script to be platform-independent ([#3279]({{ site.repository }}/issues/3279)) +- Instead of symlinking `/tmp`, create and symlink a local `tmp` in the tests ([#3258]({{ site.repository }}/issues/3258)) +- Fix some spacing ([#3312]({{ site.repository }}/issues/3312)) +- Fix comment typo in `lib/jekyll/frontmatter_defaults.rb` ([#3322]({{ site.repository }}/issues/3322)) +- Move all `regenerate?` checking to `Regenerator` ([#3326]({{ site.repository }}/issues/3326)) +- Factor out a `read_data_file` call to keep things clean ([#3380]({{ site.repository }}/issues/3380)) +- Proof the site with CircleCI. ([#3427]({{ site.repository }}/issues/3427)) +- Update LICENSE to 2015. ([#3477]({{ site.repository }}/issues/3477)) +- Upgrade tests to use Minitest ([#3492]({{ site.repository }}/issues/3492)) +- Remove trailing whitespace ([#3497]({{ site.repository }}/issues/3497)) +- Use `fixture_site` for Document tests ([#3511]({{ site.repository }}/issues/3511)) +- Remove adapters deprecation warning ([#3529]({{ site.repository }}/issues/3529)) +- Minor fixes to `url.rb` to follow GitHub style guide ([#3544]({{ site.repository }}/issues/3544)) +- Minor changes to resolve deprecation warnings ([#3547]({{ site.repository }}/issues/3547)) +- Convert remaining textile test documents to markdown ([#3528]({{ site.repository }}/issues/3528)) +- Migrate the tests to use rspec-mocks ([#3552]({{ site.repository }}/issues/3552)) +- Remove `activesupport` ([#3612]({{ site.repository }}/issues/3612)) +- Added tests for `Jekyll:StaticFile` ([#3633]({{ site.repository }}/issues/3633)) +- Force minitest version to 5.5.1 ([#3657]({{ site.repository }}/issues/3657)) +- Update the way cucumber accesses Minitest assertions ([#3678]({{ site.repository }}/issues/3678)) +- Add `script/rubyprof` to generate cachegrind callgraphs ([#3692]({{ site.repository }}/issues/3692)) +- Upgrade cucumber to 2.x ([#3795]({{ site.repository }}/issues/3795)) +- Update Kramdown. ([#3853]({{ site.repository }}/issues/3853)) +- Updated the scripts shebang for portability ([#3858]({{ site.repository }}/issues/3858)) +- Update JRuby testing to 9K ([3ab386f](https://github.com/jekyll/jekyll/commit/3ab386f1b096be25a24fe038fc70fd0fb08d545d)) +- Organize dependencies into dev and test groups. ([#3852]({{ site.repository }}/issues/3852)) +- Contributing.md should refer to `script/cucumber` ([#3894]({{ site.repository }}/issues/3894)) +- Update contributing documentation to reflect workflow updates ([#3895]({{ site.repository }}/issues/3895)) +- Add script to vendor mime types ([#3933]({{ site.repository }}/issues/3933)) +- Ignore .bundle dir in SimpleCov ([#4033]({{ site.repository }}/issues/4033)) + +### Site Enhancements +{: #site-enhancements-v3-0-0} + +- Add 'info' labels to certain notes in collections docs ([#3601]({{ site.repository }}/issues/3601)) +- Remove extra spaces, make the last sentence less awkward in permalink docs ([#3603]({{ site.repository }}/issues/3603)) +- Update the permalinks documentation to reflect the updates for 3.0 ([#3556]({{ site.repository }}/issues/3556)) +- Add blog post announcing Jekyll Help ([#3523]({{ site.repository }}/issues/3523)) +- Add Jekyll Talk to Help page on site ([#3518]({{ site.repository }}/issues/3518)) +- Change Ajax pagination resource link to use HTTPS ([#3570]({{ site.repository }}/issues/3570)) +- Fixing the default host on docs ([#3229]({{ site.repository }}/issues/3229)) +- Add `jekyll-thumbnail-filter` to list of third-party plugins ([#2790]({{ site.repository }}/issues/2790)) +- Add link to 'Adding Ajax pagination to Jekyll' to Resources page ([#3186]({{ site.repository }}/issues/3186)) +- Add a Resources link to tutorial on building dynamic navbars ([#3185]({{ site.repository }}/issues/3185)) +- Semantic structure improvements to the post and page layouts ([#3251]({{ site.repository }}/issues/3251)) +- Add new AsciiDoc plugin to list of third-party plugins. ([#3277]({{ site.repository }}/issues/3277)) +- Specify that all transformable collection documents must contain front matter ([#3271]({{ site.repository }}/issues/3271)) +- Assorted accessibility fixes ([#3256]({{ site.repository }}/issues/3256)) +- Update configuration docs to mention `keep_files` for `destination` ([#3288]({{ site.repository }}/issues/3288), [#3296]({{ site.repository }}/issues/3296)) +- Break when we successfully generate nav link to save CPU cycles. ([#3291]({{ site.repository }}/issues/3291)) +- Update usage docs to mention `keep_files` and a warning about `destination` cleaning ([#3295]({{ site.repository }}/issues/3295)) +- Add logic to automatically generate the `next_section` and `prev_section` navigation items ([#3292]({{ site.repository }}/issues/3292)) +- Some small fixes for the Plugins TOC. ([#3306]({{ site.repository }}/issues/3306)) +- Added versioning comment to configuration file ([#3314]({{ site.repository }}/issues/3314)) +- Add `jekyll-minifier` to list of third-party plugins ([#3333]({{ site.repository }}/issues/3333)) +- Add blog post about the Jekyll meet-up ([#3332]({{ site.repository }}/issues/3332)) +- Use `highlight` Liquid tag instead of the four-space tabs for code ([#3336]({{ site.repository }}/issues/3336)) +- 3.0.0.beta1 release post ([#3346]({{ site.repository }}/issues/3346)) +- Add `twa` to the list of third-party plugins ([#3384]({{ site.repository }}/issues/3384)) +- Remove extra spaces ([#3388]({{ site.repository }}/issues/3388)) +- Fix small grammar errors on a couple pages ([#3396]({{ site.repository }}/issues/3396)) +- Fix typo on Templates docs page ([#3420]({{ site.repository }}/issues/3420)) +- s/three/four for plugin type list ([#3424]({{ site.repository }}/issues/3424)) +- Release jekyllrb.com as a locally-compiled site. ([#3426]({{ site.repository }}/issues/3426)) +- Add a jekyllrb.com/help page which elucidates places from which to get help ([#3428]({{ site.repository }}/issues/3428)) +- Remove extraneous dash on Plugins doc page which caused a formatting error ([#3431]({{ site.repository }}/issues/3431)) +- Fix broken link to Jordan Thornquest's website. ([#3438]({{ site.repository }}/issues/3438)) +- Change the link to an extension ([#3457]({{ site.repository }}/issues/3457)) +- Fix Twitter link on the help page ([#3466]({{ site.repository }}/issues/3466)) +- Fix wording in code snippet highlighting section ([#3475]({{ site.repository }}/issues/3475)) +- Add a `/` to `paginate_path` in the Pagination documentation ([#3479]({{ site.repository }}/issues/3479)) +- Add a link on all the docs pages to "Improve this page". ([#3510]({{ site.repository }}/issues/3510)) +- Add jekyll-auto-image generator to the list of third-party plugins ([#3489]({{ site.repository }}/issues/3489)) +- Replace link to the proposed `picture` element spec ([#3530]({{ site.repository }}/issues/3530)) +- Add front matter date formatting information ([#3469]({{ site.repository }}/issues/3469)) +- Improve consistency and clarity of plugins options note ([#3546]({{ site.repository }}/issues/3546)) +- Add permalink warning to pagination docs ([#3551]({{ site.repository }}/issues/3551)) +- Fix grammar in Collections docs API stability warning ([#3560]({{ site.repository }}/issues/3560)) +- Restructure `excerpt_separator` documentation for clarity ([#3550]({{ site.repository }}/issues/3550)) +- Fix accidental line break in collections docs ([#3585]({{ site.repository }}/issues/3585)) +- Add information about the `.jekyll-metadata` file ([#3597]({{ site.repository }}/issues/3597)) +- Document addition of variable parameters to an include ([#3581]({{ site.repository }}/issues/3581)) +- Add `jekyll-files` to the list of third-party plugins. ([#3586]({{ site.repository }}/issues/3586)) +- Define the `install` step in the CI example `.travis.yml` ([#3622]({{ site.repository }}/issues/3622)) +- Expand collections documentation. ([#3638]({{ site.repository }}/issues/3638)) +- Add the "warning" note label to excluding `vendor` in the CI docs page ([#3623]({{ site.repository }}/issues/3623)) +- Upgrade pieces of the Ugrading guide for Jekyll 3 ([#3607]({{ site.repository }}/issues/3607)) +- Showing how to access specific data items ([#3468]({{ site.repository }}/issues/3468)) +- Clarify pagination works from within HTML files ([#3467]({{ site.repository }}/issues/3467)) +- Add note to `excerpt_separator` documentation that it can be set globally ([#3667]({{ site.repository }}/issues/3667)) +- Fix some names on Troubleshooting page ([#3683]({{ site.repository }}/issues/3683)) +- Add `remote_file_content` tag plugin to list of third-party plugins ([#3691]({{ site.repository }}/issues/3691)) +- Update the Redcarpet version on the Configuration page. ([#3743]({{ site.repository }}/issues/3743)) +- Update the link in the welcome post to point to Jekyll Talk ([#3745]({{ site.repository }}/issues/3745)) +- Update link for navbars with data attributes tutorial ([#3728]({{ site.repository }}/issues/3728)) +- Add `jekyll-asciinema` to list of third-party plugins ([#3750]({{ site.repository }}/issues/3750)) +- Update pagination example to be agnostic to first pagination dir ([#3763]({{ site.repository }}/issues/3763)) +- Detailed instructions for rsync deployment method ([#3848]({{ site.repository }}/issues/3848)) +- Add Jekyll Portfolio Generator to list of plugins ([#3883]({{ site.repository }}/issues/3883)) +- Add `site.html_files` to variables docs ([#3880]({{ site.repository }}/issues/3880)) +- Add Static Publisher tool to list of deployment methods ([#3865]({{ site.repository }}/issues/3865)) +- Fix a few typos. ([#3897]({{ site.repository }}/issues/3897)) +- Add `jekyll-youtube` to the list of third-party plugins ([#3931]({{ site.repository }}/issues/3931)) +- Add Views Router plugin ([#3950]({{ site.repository }}/issues/3950)) +- Update install docs (Core dependencies, Windows reqs, etc) ([#3769]({{ site.repository }}/issues/3769)) +- Use Jekyll Feed for jekyllrb.com ([#3736]({{ site.repository }}/issues/3736)) +- Add jekyll-umlauts to plugins.md ($3966) +- Troubleshooting: fix broken link, add other mac-specific info ([#3968]({{ site.repository }}/issues/3968)) +- Add a new site for learning purposes ([#3917]({{ site.repository }}/issues/3917)) +- Added documentation for Jekyll environment variables ([#3989]({{ site.repository }}/issues/3989)) +- Fix broken configuration documentation page ([#3994]({{ site.repository }}/issues/3994)) +- Add troubleshooting docs for installing on El Capitan ([#3999]({{ site.repository }}/issues/3999)) +- Add Lazy Tweet Embedding to the list of third-party plugins ([#4015]({{ site.repository }}/issues/4015)) +- Add installation instructions for 2 of 3 options for plugins ([#4013]({{ site.repository }}/issues/4013)) +- Add alternative jekyll gem installation instructions ([#4018]({{ site.repository }}/issues/4018)) +- Fix a few typos and formatting problems. ([#4022]({{ site.repository }}/issues/4022)) +- Fix pretty permalink example ([#4029]({{ site.repository }}/issues/4029)) +- Note that `_config.yml` is not reloaded during regeneration ([#4034]({{ site.repository }}/issues/4034)) +- Apply code block figure syntax to blocks in CONTRIBUTING ([#4046]({{ site.repository }}/issues/4046)) +- Add jekyll-smartify to the list of third-party plugins ([#3572]({{ site.repository }}/issues/3572)) + + +## 2.5.3 / 2014-12-22 +{: #v2-5-3} ### Bug Fixes -- Turn on Maruku fenced code blocks by default ([#1830]({{ site.repository }}/issues/1830)) +{: #bug-fixes-v2-5-3} + +- When checking a Markdown extname, include position of the `.` ([#3147]({{ site.repository }}/issues/3147)) +- Fix `jsonify` Liquid filter handling of boolean values ([#3154]({{ site.repository }}/issues/3154)) +- Add comma to value of `viewport` meta tag ([#3170]({{ site.repository }}/issues/3170)) +- Set the link type for the RSS feed to `application/rss+xml` ([#3176]({{ site.repository }}/issues/3176)) +- Refactor `#as_liquid` ([#3158]({{ site.repository }}/issues/3158)) + +### Development Fixes +{: #development-fixes-v2-5-3} + +- Exclude built-in bundles from being added to coverage report ([#3180]({{ site.repository }}/issues/3180)) + +### Site Enhancements +{: #site-enhancements-v2-5-3} + +- Add @alfredxing to the @jekyll/core team. :tada: ([#3218]({{ site.repository }}/issues/3218)) +- Document the `-q` option for the `build` and `serve` commands ([#3149]({{ site.repository }}/issues/3149)) +- Fix some minor typos/flow fixes in documentation website content ([#3165]({{ site.repository }}/issues/3165)) +- Add `keep_files` to configuration documentation ([#3162]({{ site.repository }}/issues/3162)) +- Repeat warning about cleaning of the `destination` directory ([#3161]({{ site.repository }}/issues/3161)) +- Add jekyll-500px-embed to list of third-party plugins ([#3163]({{ site.repository }}/issues/3163)) +- Simplified platform detection in Gemfile example for Windows ([#3177]({{ site.repository }}/issues/3177)) +- Add the `jekyll-jalali` plugin added to the list of third-party plugins. ([#3198]({{ site.repository }}/issues/3198)) +- Add Table of Contents to Troubleshooting page ([#3196]({{ site.repository }}/issues/3196)) +- Add `inline_highlight` plugin to list of third-party plugins ([#3212]({{ site.repository }}/issues/3212)) +- Add `jekyll-mermaid` plugin to list of third-party plugins ([#3222]({{ site.repository }}/issues/3222)) + + +## 2.5.2 / 2014-11-17 +{: #v2-5-2} + +### Minor Enhancements +{: #minor-enhancements-v2-5-2} + +- `post_url` should match `post.name` instead of slugs and dates ([#3058]({{ site.repository }}/issues/3058)) - +{: #bug-fixes-v2-5-2} -## 1.4.1 / 2013-12-09 +- Fix bundle require for `:jekyll_plugins` ([#3119]({{ site.repository }}/issues/3119)) +- Remove duplicate regexp phrase: `^\A` ([#3089]({{ site.repository }}/issues/3089)) +- Remove duplicate `Conversion error:` message in `Convertible` ([#3088]({{ site.repository }}/issues/3088)) +- Print full conversion error message in `Renderer#convert` ([#3090]({{ site.repository }}/issues/3090)) - +### Site Enhancements +{: #site-enhancements-v2-5-2} + +- Change variable names in Google Analytics script ([#3093]({{ site.repository }}/issues/3093)) +- Mention CSV files in the docs for data files ([#3101]({{ site.repository }}/issues/3101)) +- Add trailing slash to `paginate_path` example. ([#3091]({{ site.repository }}/issues/3091)) +- Get rid of noifniof (`excerpt_separator`) ([#3094]({{ site.repository }}/issues/3094)) +- Sass improvements, around nesting mostly. ([#3123]({{ site.repository }}/issues/3123)) +- Add webmentions.io plugin to the list of third-party plugins ([#3127]({{ site.repository }}/issues/3127)) +- Add Sass mixins and use them. ([#2904]({{ site.repository }}/issues/2904)) +- Slightly compress jekyll-sticker.jpg. ([#3133]({{ site.repository }}/issues/3133)) +- Update gridism and separate out related but custom styles. ([#3132]({{ site.repository }}/issues/3132)) +- Add remote-include plugin to list of third-party plugins ([#3136]({{ site.repository }}/issues/3136)) + + +## 2.5.1 / 2014-11-09 +{: #v2-5-1} + +### Bug Fixes +{: #bug-fixes-v2-5-1} + +- Fix path sanitation bug related to Windows drive names ([#3077]({{ site.repository }}/issues/3077)) + +### Development Fixes +{: #development-fixes-v2-5-1} + +- Add development time dependencies on minitest and test-unit to gemspec for cygwin ([#3064]({{ site.repository }}/issues/3064)) +- Use Travis's built-in caching. ([#3075]({{ site.repository }}/issues/3075)) + + +## 2.5.0 / 2014-11-06 +{: #v2-5-0} + +### Minor Enhancements +{: #minor-enhancements-v2-5-0} + +- Require gems in `:jekyll_plugins` Gemfile group unless `JEKYLL_NO_BUNDLER_REQUIRE` is specified in the environment. ([#2865]({{ site.repository }}/issues/2865)) +- Centralize path sanitation in the `Site` object ([#2882]({{ site.repository }}/issues/2882)) +- Allow placeholders in permalinks ([#3031]({{ site.repository }}/issues/3031)) +- Allow users to specify the log level via `JEKYLL_LOG_LEVEL`. ([#3067]({{ site.repository }}/issues/3067)) +- Fancy Indexing with WEBrick ([#3018]({{ site.repository }}/issues/3018)) +- Allow Enumerables to be used with `where` filter. ([#2986]({{ site.repository }}/issues/2986)) +- Meta descriptions in the site template now use `page.excerpt` if it's available ([#2964]({{ site.repository }}/issues/2964)) +- Change indentation in `head.html` of site template to 2 spaces from 4 ([#2973]({{ site.repository }}/issues/2973)) +- Use a `$content-width` variable instead of a fixed value in the site template CSS ([#2972]({{ site.repository }}/issues/2972)) +- Strip newlines in site template `` description. ([#2982]({{ site.repository }}/issues/2982)) +- Add link to atom feed in `head` of site template files ([#2996]({{ site.repository }}/issues/2996)) +- Performance optimizations ([#2994]({{ site.repository }}/issues/2994)) +- Use `Hash#each_key` instead of `Hash#keys.each` to speed up iteration over hash keys. ([#3017]({{ site.repository }}/issues/3017)) +- Further minor performance enhancements. ([#3022]({{ site.repository }}/issues/3022)) +- Add 'b' and 's' aliases for build and serve, respectively ([#3065]({{ site.repository }}/issues/3065)) + +### Bug Fixes +{: #bug-fixes-v2-5-0} + +- Fix Rouge's RedCarpet plugin interface integration ([#2951]({{ site.repository }}/issues/2951)) +- Remove `--watch` from the site template blog post since it defaults to watching in in 2.4.0 ([#2922]({{ site.repository }}/issues/2922)) +- Fix code for media query mixin in site template ([#2946]({{ site.repository }}/issues/2946)) +- Allow post URLs to have `.htm` extensions ([#2925]({{ site.repository }}/issues/2925)) +- `Utils.slugify`: Don't create new objects when gsubbing ([#2997]({{ site.repository }}/issues/2997)) +- The jsonify filter should deep-convert to Liquid when given an Array. ([#3032]({{ site.repository }}/issues/3032)) +- Apply `jsonify` filter to Hashes deeply and effectively ([#3063]({{ site.repository }}/issues/3063)) +- Use `127.0.0.1` as default host instead of `0.0.0.0` ([#3053]({{ site.repository }}/issues/3053)) +- In the case that a Gemfile does not exist, ensure Jekyll doesn't fail on requiring the Gemfile group ([#3066]({{ site.repository }}/issues/3066)) + +### Development Fixes +{: #development-fixes-v2-5-0} + +- Fix a typo in the doc block for `Jekyll::URL.escape_path` ([#3052]({{ site.repository }}/issues/3052)) +- Add integration test for `jekyll new --blank` in TestUnit ([#2913]({{ site.repository }}/issues/2913)) +- Add unit test for `jekyll new --force` logic ([#2929]({{ site.repository }}/issues/2929)) +- Update outdated comment for `Convertible#transform` ([#2957]({{ site.repository }}/issues/2957)) +- Add Hakiri badge to README. ([#2953]({{ site.repository }}/issues/2953)) +- Add some simple benchmarking tools. ([#2993]({{ site.repository }}/issues/2993)) + +### Site Enhancements +{: #site-enhancements-v2-5-0} + +- `NOKOGIRI_USE_SYSTEM_LIBRARIES=true` **decreases** installation time. ([#3040]({{ site.repository }}/issues/3040)) +- Add FormKeep to resources as Jekyll form backend ([#3010]({{ site.repository }}/issues/3010)) +- Fixing a mistake in the name of the new Liquid tag ([#2969]({{ site.repository }}/issues/2969)) +- Update Font Awesome to v4.2.0. ([#2898]({{ site.repository }}/issues/2898)) +- Fix link to [#2895]({{ site.repository }}/issues/2895) in 2.4.0 release post. ([#2899]({{ site.repository }}/issues/2899)) +- Add Big Footnotes for Kramdown plugin to list of third-party plugins ([#2916]({{ site.repository }}/issues/2916)) +- Remove warning regarding GHP use of singular types for front matter defaults ([#2919]({{ site.repository }}/issues/2919)) +- Fix quote character typo in site documentation for templates ([#2917]({{ site.repository }}/issues/2917)) +- Point Liquid links to Liquid’s GitHub wiki ([#2887]({{ site.repository }}/issues/2887)) +- Add HTTP Basic Auth (.htaccess) plugin to list of third-party plugins ([#2931]({{ site.repository }}/issues/2931)) +- (Minor) Grammar & `_config.yml` filename fixes ([#2911]({{ site.repository }}/issues/2911)) +- Added `mathml.rb` to the list of third-party plugins. ([#2937]({{ site.repository }}/issues/2937)) +- Add `--force_polling` to the list of configuration options ([#2943]({{ site.repository }}/issues/2943)) +- Escape unicode characters in site CSS ([#2906]({{ site.repository }}/issues/2906)) +- Add note about using the github-pages gem via pages.github.com/versions.json ([#2939]({{ site.repository }}/issues/2939)) +- Update usage documentation to reflect 2.4 auto-enabling of `--watch`. ([#2954]({{ site.repository }}/issues/2954)) +- Add `--skip-initial-build` to configuration docs ([#2949]({{ site.repository }}/issues/2949)) +- Fix a minor typo in Templates docs page ([#2959]({{ site.repository }}/issues/2959)) +- Add a ditaa-ditaa plugin under Other section on the Plugins page ([#2967]({{ site.repository }}/issues/2967)) +- Add `build/serve -V` option to configuration documentation ([#2948]({{ site.repository }}/issues/2948)) +- Add 'Jekyll Twitter Plugin' to list of third-party plugins ([#2979]({{ site.repository }}/issues/2979)) +- Docs: Update normalize.css to v3.0.2. ([#2981]({{ site.repository }}/issues/2981)) +- Fix typo in Continuous Integration documentation ([#2984]({{ site.repository }}/issues/2984)) +- Clarify behavior of `:categories` in permalinks ([#3011]({{ site.repository }}/issues/3011)) + + +## 2.4.0 / 2014-09-09 +{: #v2-4-0} + +### Minor Enhancements +{: #minor-enhancements-v2-4-0} + +- Support a new `relative_include` tag ([#2870]({{ site.repository }}/issues/2870)) +- Auto-enable watch on 'serve' ([#2858]({{ site.repository }}/issues/2858)) +- Render Liquid in CoffeeScript files ([#2830]({{ site.repository }}/issues/2830)) +- Array Liquid filters: `push`, `pop`, `unshift`, `shift` ([#2895]({{ site.repository }}/issues/2895)) +- Add `:title` to collection URL template fillers ([#2864]({{ site.repository }}/issues/2864)) +- Add support for CSV files in the `_data` directory ([#2761]({{ site.repository }}/issues/2761)) +- Add the `name` variable to collection permalinks ([#2799]({{ site.repository }}/issues/2799)) +- Add `inspect` liquid filter. ([#2867]({{ site.repository }}/issues/2867)) +- Add a `slugify` Liquid filter ([#2880]({{ site.repository }}/issues/2880)) + +### Bug Fixes +{: #bug-fixes-v2-4-0} + +- Use `Jekyll.sanitized_path` when adding static files to Collections ([#2849]({{ site.repository }}/issues/2849)) +- Fix encoding of `main.scss` in site template ([#2771]({{ site.repository }}/issues/2771)) +- Fix orientation bugs in default site template ([#2862]({{ site.repository }}/issues/2862)) + +### Development Fixes +{: #development-fixes-v2-4-0} + +- Update simplecov gem to 0.9 ([#2748]({{ site.repository }}/issues/2748)) +- Remove `docs/` dir ([#2768]({{ site.repository }}/issues/2768)) +- add class `<< self` idiom to `New` command ([#2817]({{ site.repository }}/issues/2817)) +- Allow Travis to 'parallelize' our tests ([#2859]({{ site.repository }}/issues/2859)) +- Fix test for Liquid rendering in Sass ([#2856]({{ site.repository }}/issues/2856)) +- Fixing "vertycal" typo in site template's `_base.scss` ([#2889]({{ site.repository }}/issues/2889)) + +### Site Enhancements +{: #site-enhancements-v2-4-0} + +- Document the `name` variable for collection permalinks ([#2829]({{ site.repository }}/issues/2829)) +- Adds info about installing jekyll in current dir ([#2839]({{ site.repository }}/issues/2839)) +- Remove deprecated `jekyll-projectlist` plugin from list of third-party plugins ([#2742]({{ site.repository }}/issues/2742)) +- Remove tag plugins that are built in to Jekyll ([#2751]({{ site.repository }}/issues/2751)) +- Add `markdown-writer` package for Atom Editor to list of third-party plugins ([#2763]({{ site.repository }}/issues/2763)) +- Fix typo in site documentation for collections ([#2764]({{ site.repository }}/issues/2764)) +- Fix minor typo on plugins docs page ([#2765]({{ site.repository }}/issues/2765)) +- Replace markdown with HTML in `sass_dir` note on assets page ([#2791]({{ site.repository }}/issues/2791)) +- Fixed "bellow" typo in datafiles docs ([#2879]({{ site.repository }}/issues/2879)) +- Fix code/markdown issue in documentation for variables ([#2877]({{ site.repository }}/issues/2877)) +- Remove Good Include third-party plugin from plugins page ([#2881]({{ site.repository }}/issues/2881)) +- Add some more docs on `include_relative` ([#2884]({{ site.repository }}/issues/2884)) + + +## 2.3.0 / 2014-08-10 +{: #v2-3-0} + +### Minor Enhancements +{: #minor-enhancements-v2-3-0} + +- Allow Convertibles to be converted by >= 1 converters ([#2704]({{ site.repository }}/issues/2704)) +- Allow Sass files to be rendered in Liquid, but never place them in layouts. ([#2733]({{ site.repository }}/issues/2733)) +- Add `jekyll help` command ([#2707]({{ site.repository }}/issues/2707)) +- Use `.scss` for `site_template` styles. ([#2667]({{ site.repository }}/issues/2667)) +- Don't require the `scope` key in front matter defaults ([#2659]({{ site.repository }}/issues/2659)) +- No longer set `permalink: pretty` in the `_config.yml` for the site template ([#2680]({{ site.repository }}/issues/2680)) +- Rework site template to utilize Sass ([#2687]({{ site.repository }}/issues/2687)) +- Notify the user when auto-regeneration is disabled. ([#2696]({{ site.repository }}/issues/2696)) +- Allow partial variables in include tag filename argument ([#2693]({{ site.repository }}/issues/2693)) +- Move instances of `Time.parse` into a Utils method ([#2682]({{ site.repository }}/issues/2682)) +- Ignore subfolders in the `_posts` folder ([#2705]({{ site.repository }}/issues/2705)) REVERTS ([#2633]({{ site.repository }}/issues/2633)) +- Front Matter default types should always be pluralized ([#2732]({{ site.repository }}/issues/2732)) +- Read in static files into `collection.files` as `StaticFile`s ([#2737]({{ site.repository }}/issues/2737)) +- Add `sassify` and `scssify` Liquid filters ([#2739]({{ site.repository }}/issues/2739)) +- Replace `classifier` gem with `classifier-reborn` ([#2721]({{ site.repository }}/issues/2721)) + +### Bug Fixes +{: #bug-fixes-v2-3-0} + +- Use only the last extname when multiple converters exist ([#2722]({{ site.repository }}/issues/2722)) +- Call `#to_liquid` before calling `#to_json` in jsonify filter ([#2729]({{ site.repository }}/issues/2729)) +- Use non padded config in `strftime` to avoid parse string twice ([#2673]({{ site.repository }}/issues/2673)) +- Replace deprecated Ruby methods with undeprecated ones ([#2664]({{ site.repository }}/issues/2664)) +- Catch errors when parsing Post `date` front matter value & produce nice error message ([#2649]({{ site.repository }}/issues/2649)) +- Allow static files in Collections ([#2615]({{ site.repository }}/issues/2615)) +- Fixed typo in `Deprecator#gracefully_require` error message ([#2694]({{ site.repository }}/issues/2694)) +- Remove preemptive loading of the 'classifier' gem. ([#2697]({{ site.repository }}/issues/2697)) +- Use case-insensitive checking for the file extensions when loading config files ([#2718]({{ site.repository }}/issues/2718)) +- When Reading Documents, Respect `encoding` Option ([#2720]({{ site.repository }}/issues/2720)) +- Refactor based on jekyll-watch clean-up. ([#2716]({{ site.repository }}/issues/2716)) +- `Document#to_s` should produce just the content of the document ([#2731]({{ site.repository }}/issues/2731)) + +### Development Fixes +{: #development-fixes-v2-3-0} + +- Only include lib files in the gem ([#2671]({{ site.repository }}/issues/2671)) +- Fix `git diff` command in `proof` script ([#2672]({{ site.repository }}/issues/2672)) +- Make default rake task a multitask so tests run in parallel ([#2735]({{ site.repository }}/issues/2735)) + +### Site Enhancements +{: #site-enhancements-v2-3-0} + +- Use Sass and a Docs Collection ([#2651]({{ site.repository }}/issues/2651)) +- Add `latest_version.txt` file to the site ([#2740]({{ site.repository }}/issues/2740)) +- Be more ambiguous about `page.content`. But more transparent. ([#2522]({{ site.repository }}/issues/2522)) +- Streamlining front matter wording (instead of front-matter/frontmatter) ([#2674]({{ site.repository }}/issues/2674)) +- Add note that source directory cannot be modified in GitHub Pages ([#2669]({{ site.repository }}/issues/2669)) +- Fix links from [#2669]({{ site.repository }}/issues/2669) to be actual HTML. Whoops. ([#2679]({{ site.repository }}/issues/2679)) +- Add link to `jekyll-slim` in list of third-party plugins ([#2689]({{ site.repository }}/issues/2689)) +- Add Barry Clark's Smashing Magazine tutorial to resources page ([#2688]({{ site.repository }}/issues/2688)) +- Reorganize and update default configuration settings ([#2456]({{ site.repository }}/issues/2456)) +- Fixing indentation in the configuration docs about Redcarpet exts ([#2717]({{ site.repository }}/issues/2717)) +- Use `null` in YAML instead of `nil` in default config list ([#2719]({{ site.repository }}/issues/2719)) +- Fix typo in Continuous Integration docs ([#2708]({{ site.repository }}/issues/2708)) + + +## 2.2.0 / 2014-07-29 +{: #v2-2-0} + +### Minor Enhancements +{: #minor-enhancements-v2-2-0} + +- Throw a warning if the specified layout does not exist ([#2620]({{ site.repository }}/issues/2620)) +- Whitelist Pygments options in safe mode ([#2642]({{ site.repository }}/issues/2642)) + +### Bug Fixes +{: #bug-fixes-v2-2-0} + +- Remove unnecessary `Jekyll::Tags::IncludeTag#blank?` method ([#2625]({{ site.repository }}/issues/2625)) +- Categories in the path are ignored ([#2633]({{ site.repository }}/issues/2633)) + +### Development Fixes +{: #development-fixes-v2-2-0} + +- Refactoring Errors & Requires of Third-Party stuff ([#2591]({{ site.repository }}/issues/2591)) +- Add further tests for categories ([#2584]({{ site.repository }}/issues/2584)) +- Proof site with html-proofer on change ([#2605]({{ site.repository }}/issues/2605)) +- Fix up bug in [#2605]({{ site.repository }}/issues/2605) which caused proofing the site not to function ([#2608]({{ site.repository }}/issues/2608)) +- Use `bundle exec` in `script/proof` ([#2610]({{ site.repository }}/issues/2610)) + +### Site Enhancements +{: #site-enhancements-v2-2-0} + +- Update Kramdown urls ([#2588]({{ site.repository }}/issues/2588)) +- Add `Jekyll::AutolinkEmail` and `Jekyll::GitMetadata` to the list of third-party plugins ([#2596]({{ site.repository }}/issues/2596)) +- Fix a bunch of broken links in the site ([#2601]({{ site.repository }}/issues/2601)) +- Replace dead links with working links ([#2611]({{ site.repository }}/issues/2611)) +- Add jekyll-hook to deployment methods ([#2617]({{ site.repository }}/issues/2617)) +- Added kramdown-with-pygments plugin to the list of third-party plugins ([#2623]({{ site.repository }}/issues/2623)) +- Update outdated "Extras" page and remove duplicate documentation ([#2622]({{ site.repository }}/issues/2622)) +- Add co2 plugin to list of third-party plugins ([#2639]({{ site.repository }}/issues/2639)) +- Attempt to clarify the way Sass imports happen ([#2642]({{ site.repository }}/issues/2642)) + + +## 2.1.1 / 2014-07-01 +{: #v2-1-1} + +### Bug Fixes +{: #bug-fixes-v2-1-1} + +- Patch read vulnerabilities for data & confirm none for layouts ([#2563]({{ site.repository }}/issues/2563)) +- Update Maruku dependency to allow use of the latest version ([#2576]({{ site.repository }}/issues/2576)) +- Remove conditional assignment from document URL to prevent stale urls ([#2575]({{ site.repository }}/issues/2575)) + +### Site Enhancements +{: #site-enhancements-v2-1-1} + +- Add vertical margin to `highlight` to separate code blocks ([#2558]({{ site.repository }}/issues/2558)) +- Add `html_pages` to Variables docs ([#2567]({{ site.repository }}/issues/2567)) +- Fixed broken link to Permalinks page ([#2572]({{ site.repository }}/issues/2572)) +- Update link to Windows installation guide ([#2578]({{ site.repository }}/issues/2578)) + + +## 2.1.0 / 2014-06-28 +{: #v2-1-0} + +### Minor Enhancements +{: #minor-enhancements-v2-1-0} + +- Bump to the latest Liquid version, 2.6.1 ([#2495]({{ site.repository }}/issues/2495)) +- Add support for JSON files in the `_data` directory ([#2369]({{ site.repository }}/issues/2369)) +- Allow subclasses to override `EXCERPT_ATTRIBUTES_FOR_LIQUID` ([#2408]({{ site.repository }}/issues/2408)) +- Add `Jekyll.env` and `jekyll.environment` (the Liquid var) ([#2417]({{ site.repository }}/issues/2417)) +- Use `_config.yaml` or `_config.yml` (`.yml` takes precedence) ([#2406]({{ site.repository }}/issues/2406)) +- Override collection url template ([#2418]({{ site.repository }}/issues/2418)) +- Allow subdirectories in `_data` ([#2395]({{ site.repository }}/issues/2395)) +- Extract Pagination Generator into gem: `jekyll-paginate` ([#2455]({{ site.repository }}/issues/2455)) +- Utilize `date_to_rfc822` filter in site template ([#2437]({{ site.repository }}/issues/2437)) +- Add categories, last build datetime, and generator to site template feed ([#2438]({{ site.repository }}/issues/2438)) +- Configurable, replaceable Logger-compliant logger ([#2444]({{ site.repository }}/issues/2444)) +- Extract `gist` tag into a separate gem ([#2469]({{ site.repository }}/issues/2469)) +- Add `collection` attribute to `Document#to_liquid` to access the document's collection label. ([#2436]({{ site.repository }}/issues/2436)) +- Upgrade listen to `2.7.6 <= x < 3.0.0` ([#2492]({{ site.repository }}/issues/2492)) +- Allow configuration of different Twitter and GitHub usernames in site template ([#2485]({{ site.repository }}/issues/2485)) +- Bump Pygments to v0.6.0 ([#2504]({{ site.repository }}/issues/2504)) +- Front matter defaults for documents in collections ([#2419]({{ site.repository }}/issues/2419)) +- Include files with a url which ends in `/` in the `site.html_pages` list ([#2524]({{ site.repository }}/issues/2524)) +- Make `highlight` tag use `language-` prefix in CSS class ([#2511]({{ site.repository }}/issues/2511)) +- Lookup item property via `item#to_liquid` before `#data` or `#[]` in filters ([#2493]({{ site.repository }}/issues/2493)) +- Skip initial build of site on serve with flag ([#2477]({{ site.repository }}/issues/2477)) +- Add support for `hl_lines` in `highlight` tag ([#2532]({{ site.repository }}/issues/2532)) +- Spike out `--watch` flag into a separate gem ([#2550]({{ site.repository }}/issues/2550)) + +### Bug Fixes +{: #bug-fixes-v2-1-0} + +- Liquid `sort` filter should sort even if one of the values is `nil` ([#2345]({{ site.repository }}/issues/2345)) +- Remove padding on `pre code` in the site template CSS ([#2383]({{ site.repository }}/issues/2383)) +- Set `log_level` earlier to silence info level configuration output ([#2393]({{ site.repository }}/issues/2393)) +- Only list pages which have `title` in site template ([#2411]({{ site.repository }}/issues/2411)) +- Accept `Numeric` values for dates, not `Number` values ([#2377]({{ site.repository }}/issues/2377)) +- Prevent code from overflowing container in site template ([#2429]({{ site.repository }}/issues/2429)) +- Encode URLs in UTF-8 when escaping and unescaping ([#2420]({{ site.repository }}/issues/2420)) +- No Layouts or Liquid for Asset Files ([#2431]({{ site.repository }}/issues/2431)) +- Allow front matter defaults to set post categories ([#2373]({{ site.repository }}/issues/2373)) +- Fix command in subcommand deprecation warning ([#2457]({{ site.repository }}/issues/2457)) +- Keep all parent directories of files/dirs in `keep_files` ([#2458]({{ site.repository }}/issues/2458)) +- When using RedCarpet and Rouge without Rouge installed, fixed erroneous error which stated that redcarpet was missing, not rouge. ([#2464]({{ site.repository }}/issues/2464)) +- Ignore *all* directories and files that merit it on auto-generation ([#2459]({{ site.repository }}/issues/2459)) +- Before copying file, explicitly remove the old one ([#2535]({{ site.repository }}/issues/2535)) +- Merge file system categories with categories from YAML. ([#2531]({{ site.repository }}/issues/2531)) +- Deep merge front matter defaults ([#2490]({{ site.repository }}/issues/2490)) +- Ensure exclude and include arrays are arrays of strings ([#2542]({{ site.repository }}/issues/2542)) +- Allow collections to have dots in their filenames ([#2552]({{ site.repository }}/issues/2552)) +- Collections shouldn't try to read in directories as files ([#2552]({{ site.repository }}/issues/2552)) +- Be quiet very quickly. ([#2520]({{ site.repository }}/issues/2520)) + +### Development Fixes +{: #development-fixes-v2-1-0} + +- Test Ruby 2.1.2 instead of 2.1.1 ([#2374]({{ site.repository }}/issues/2374)) +- Add test for sorting UTF-8 characters ([#2384]({{ site.repository }}/issues/2384)) +- Use `https` for GitHub links in documentation ([#2470]({{ site.repository }}/issues/2470)) +- Remove coverage reporting with Coveralls ([#2494]({{ site.repository }}/issues/2494)) +- Fix a bit of missing TomDoc to `Jekyll::Commands::Build#build` ([#2554]({{ site.repository }}/issues/2554)) + +### Site Enhancements +{: #site-enhancements-v2-1-0} + +- Set `timezone` to `America/Los_Angeles` ([#2394]({{ site.repository }}/issues/2394)) +- Improve JavaScript in `anchor_links.html` ([#2368]({{ site.repository }}/issues/2368)) +- Remove note on Quickstart page about default markdown converter ([#2387]({{ site.repository }}/issues/2387)) +- Remove broken link in extras.md to a Maruku fork ([#2401]({{ site.repository }}/issues/2401)) +- Update Font Awesome to v4.1.0. ([#2410]({{ site.repository }}/issues/2410)) +- Fix broken link on Installation page to Templates page ([#2421]({{ site.repository }}/issues/2421)) +- Prevent table from extending parent width in permalink style table ([#2424]({{ site.repository }}/issues/2424)) +- Add collections to info about pagination support ([#2389]({{ site.repository }}/issues/2389)) +- Add `jekyll_github_sample` plugin to list of third-party plugins ([#2463]({{ site.repository }}/issues/2463)) +- Clarify documentation around front matter defaults and add details about defaults for collections. ([#2439]({{ site.repository }}/issues/2439)) +- Add Jekyll Project Version Tag to list of third-party plugins ([#2468]({{ site.repository }}/issues/2468)) +- Use `https` for GitHub links across whole site ([#2470]({{ site.repository }}/issues/2470)) +- Add StickerMule + Jekyll post ([#2476]({{ site.repository }}/issues/2476)) +- Add Jekyll Asset Pipeline Reborn to list of third-party plugins ([#2479]({{ site.repository }}/issues/2479)) +- Add link to jekyll-compress-html to list of third-party plugins ([#2514]({{ site.repository }}/issues/2514)) +- Add Piwigo Gallery to list of third-party plugins ([#2526]({{ site.repository }}/issues/2526)) +- Set `show_drafts` to `false` in default configuration listing ([#2536]({{ site.repository }}/issues/2536)) +- Provide an updated link for Windows installation instructions ([#2544]({{ site.repository }}/issues/2544)) +- Remove `url` from configuration docs ([#2547]({{ site.repository }}/issues/2547)) +- Documentation for Continuous Integration for your Jekyll Site ([#2432]({{ site.repository }}/issues/2432)) + + +## 2.0.3 / 2014-05-08 +{: #v2-0-3} + +### Bug Fixes +{: #bug-fixes-v2-0-3} + +- Properly prefix links in site template with URL or baseurl depending upon need. ([#2319]({{ site.repository }}/issues/2319)) +- Update gist tag comments and error message to require username ([#2326]({{ site.repository }}/issues/2326)) +- Fix `permalink` setting in site template ([#2331]({{ site.repository }}/issues/2331)) +- Don't fail if any of the path objects are nil ([#2325]({{ site.repository }}/issues/2325)) +- Instantiate all descendants for converters and generators, not just direct subclasses ([#2334]({{ site.repository }}/issues/2334)) +- Replace all instances of `site.name` with `site.title` in site template ([#2324]({{ site.repository }}/issues/2324)) +- `Jekyll::Filters#time` now accepts UNIX timestamps in string or number form ([#2339]({{ site.repository }}/issues/2339)) +- Use `item_property` for `where` filter so it doesn't break on collections ([#2359]({{ site.repository }}/issues/2359)) +- Rescue errors thrown so `--watch` doesn't fail ([#2364]({{ site.repository }}/issues/2364)) + +### Site Enhancements +{: #site-enhancements-v2-0-3} + +- Add missing "as" to assets docs page ([#2337]({{ site.repository }}/issues/2337)) +- Update docs to reflect new `baseurl` default ([#2341]({{ site.repository }}/issues/2341)) +- Add links to headers who have an ID. ([#2342]({{ site.repository }}/issues/2342)) +- Use symbol instead of HTML number in `upgrading.md` ([#2351]({{ site.repository }}/issues/2351)) +- Fix link to front matter defaults docs ([#2353]({{ site.repository }}/issues/2353)) +- Fix for `History.markdown` in order to fix history page in docs ([#2363]({{ site.repository }}/issues/2363)) + + +## 2.0.2 / 2014-05-07 +{: #v2-0-2} + +### Bug Fixes +{: #bug-fixes-v2-0-2} + +- Correct use of `url` and `baseurl` in the site template. ([#2317]({{ site.repository }}/issues/2317)) +- Default `baseurl` to `""` ([#2317]({{ site.repository }}/issues/2317)) + +### Site Enhancements +{: #site-enhancements-v2-0-2} + +- Correct docs for the `gist` plugin so it always includes the username. ([#2314]({{ site.repository }}/issues/2314)) +- Clarify new (defaults, `where` filter) features in docs ([#2316]({{ site.repository }}/issues/2316)) + + +## 2.0.1 / 2014-05-06 +{: #v2-0-1} + +### Bug Fixes +{: #bug-fixes-v2-0-1} + +- Require `kramdown` gem instead of `maruku` gem + + +## 2.0.0 / 2014-05-06 +{: #v2-0-0} + +### Major Enhancements +{: #major-enhancements-v2-0-0} + +- Add "Collections" feature ([#2199]({{ site.repository }}/issues/2199)) +- Add gem-based plugin whitelist to safe mode ([#1657]({{ site.repository }}/issues/1657)) +- Replace the commander command line parser with a more robust solution for our needs called `mercenary` ([#1706]({{ site.repository }}/issues/1706)) +- Remove support for Ruby 1.8.x ([#1780]({{ site.repository }}/issues/1780)) +- Move to jekyll/jekyll from mojombo/jekyll ([#1817]({{ site.repository }}/issues/1817)) +- Allow custom markdown processors ([#1872]({{ site.repository }}/issues/1872)) +- Provide support for the Rouge syntax highlighter ([#1859]({{ site.repository }}/issues/1859)) +- Provide support for Sass ([#1932]({{ site.repository }}/issues/1932)) +- Provide a 300% improvement when generating sites that use `Post#next` or `Post#previous` ([#1983]({{ site.repository }}/issues/1983)) +- Provide support for CoffeeScript ([#1991]({{ site.repository }}/issues/1991)) +- Replace Maruku with Kramdown as Default Markdown Processor ([#1988]({{ site.repository }}/issues/1988)) +- Expose `site.static_files` to Liquid ([#2075]({{ site.repository }}/issues/2075)) +- Complete redesign of the template site generated by `jekyll new` ([#2050]({{ site.repository }}/issues/2050)) +- Update Listen from 1.x to 2.x ([#2097]({{ site.repository }}/issues/2097)) +- Front matter defaults ([#2205]({{ site.repository }}/issues/2205)) +- Deprecate `relative_permalinks` configuration option (default to `false`) ([#2307]({{ site.repository }}/issues/2307)) +- Exclude files based on prefix as well as `fnmatch?` ([#2303]({{ site.repository }}/issues/2303)) + +### Minor Enhancements +{: #minor-enhancements-v2-0-0} + +- Move the EntryFilter class into the Jekyll module to avoid polluting the global namespace ([#1800]({{ site.repository }}/issues/1800)) +- Add `group_by` Liquid filter create lists of items grouped by a common property's value ([#1788]({{ site.repository }}/issues/1788)) +- Add support for Maruku's `fenced_code_blocks` option ([#1799]({{ site.repository }}/issues/1799)) +- Update Redcarpet dependency to ~> 3.0 ([#1815]({{ site.repository }}/issues/1815)) +- Automatically sort all pages by name ([#1848]({{ site.repository }}/issues/1848)) +- Better error message when time is not parseable ([#1847]({{ site.repository }}/issues/1847)) +- Allow `include` tag variable arguments to use filters ([#1841]({{ site.repository }}/issues/1841)) +- `post_url` tag should raise `ArgumentError` for invalid name ([#1825]({{ site.repository }}/issues/1825)) +- Bump dependency `mercenary` to `~> 0.2.0` ([#1879]({{ site.repository }}/issues/1879)) +- Bump dependency `safe_yaml` to `~> 1.0` ([#1886]({{ site.repository }}/issues/1886)) +- Allow sorting of content by custom properties ([#1849]({{ site.repository }}/issues/1849)) +- Add `--quiet` flag to silence output during build and serve ([#1898]({{ site.repository }}/issues/1898)) +- Add a `where` filter to filter arrays based on a key/value pair ([#1875]({{ site.repository }}/issues/1875)) +- Route 404 errors to a custom 404 page in development ([#1899]({{ site.repository }}/issues/1899)) +- Excludes are now relative to the site source ([#1916]({{ site.repository }}/issues/1916)) +- Bring MIME Types file for `jekyll serve` to complete parity with GH Pages servers ([#1993]({{ site.repository }}/issues/1993)) +- Adding Breakpoint to make new site template more responsive ([#2038]({{ site.repository }}/issues/2038)) +- Default to using the UTF-8 encoding when reading files. ([#2031]({{ site.repository }}/issues/2031)) +- Update Redcarpet dependency to ~> 3.1 ([#2044]({{ site.repository }}/issues/2044)) +- Remove support for Ruby 1.9.2 ([#2045]({{ site.repository }}/issues/2045)) +- Add `.mkdown` as valid Markdown extension ([#2048]({{ site.repository }}/issues/2048)) +- Add `index.xml` to the list of WEBrick directory index files ([#2041]({{ site.repository }}/issues/2041)) +- Make the `layouts` config key relative to CWD or to source ([#2058]({{ site.repository }}/issues/2058)) +- Update Kramdown to `~> 1.3` ([#1894]({{ site.repository }}/issues/1894)) +- Remove unnecessary references to `self` ([#2090]({{ site.repository }}/issues/2090)) +- Update to Mercenary v0.3.x ([#2085]({{ site.repository }}/issues/2085)) +- Ship Sass support as a separate gem ([#2098]({{ site.repository }}/issues/2098)) +- Extract core extensions into a Utils module ([#2112]({{ site.repository }}/issues/2112)) +- Refactor CLI & Commands For Greater Happiness ([#2143]({{ site.repository }}/issues/2143)) +- Provide useful error when Pygments returns `nil` and error out ([#2148]({{ site.repository }}/issues/2148)) +- Add support for unpublished drafts ([#2164]({{ site.repository }}/issues/2164)) +- Add `force_polling` option to the `serve` command ([#2165]({{ site.repository }}/issues/2165)) +- Clean up the `` in the site template ([#2186]({{ site.repository }}/issues/2186)) +- Permit YAML blocks to end with three dots to better conform with the YAML spec ([#2110]({{ site.repository }}/issues/2110)) +- Use `File.exist?` instead of deprecated `File.exists?` ([#2214]({{ site.repository }}/issues/2214)) +- Require newline after start of front matter header ([#2211]({{ site.repository }}/issues/2211)) +- Add the ability for pages to be marked as `published: false` ([#1492]({{ site.repository }}/issues/1492)) +- Add `Jekyll::LiquidExtensions` with `.lookup_variable` method for easy looking up of variable values in a Liquid context. ([#2253]({{ site.repository }}/issues/2253)) +- Remove literal lang name from class ([#2292]({{ site.repository }}/issues/2292)) +- Return `utf-8` encoding in header for webrick error page response ([#2289]({{ site.repository }}/issues/2289)) +- Make template site easier to customize ([#2268]({{ site.repository }}/issues/2268)) +- Add two-digit year to permalink template option ([#2301]({{ site.repository }}/issues/2301)) +- Add `site.documents` to Liquid payload (list of all docs) ([#2295]({{ site.repository }}/issues/2295)) +- Take into account missing values in the Liquid sort filter ([#2299]({{ site.repository }}/issues/2299)) ### Bug Fixes +{: #bug-fixes-v2-0-0} + - Don't allow nil entries when loading posts ([#1796]({{ site.repository }}/issues/1796)) +- Remove the scrollbar that's always displayed in new sites generated from the site template ([#1805]({{ site.repository }}/issues/1805)) +- Add `#path` to required methods in `Jekyll::Convertible` ([#1866]({{ site.repository }}/issues/1866)) +- Default Maruku fenced code blocks to ON for 2.0.0-dev ([#1831]({{ site.repository }}/issues/1831)) +- Change short opts for host and port for `jekyll docs` to be consistent with other subcommands ([#1877]({{ site.repository }}/issues/1877)) +- Fix typos ([#1910]({{ site.repository }}/issues/1910)) +- Lock Maruku at 0.7.0 to prevent bugs caused by Maruku 0.7.1 ([#1958]({{ site.repository }}/issues/1958)) +- Fixes full path leak to source directory when using include tag ([#1951]({{ site.repository }}/issues/1951)) +- Don't generate pages that aren't being published ([#1931]({{ site.repository }}/issues/1931)) +- Use `SafeYAML.load` to avoid conflicts with other projects ([#1982]({{ site.repository }}/issues/1982)) +- Relative posts should never fail to build ([#1976]({{ site.repository }}/issues/1976)) +- Remove executable bits of non executable files ([#2056]({{ site.repository }}/issues/2056)) +- `#path` for a draft is now `_drafts` instead of `_posts` ([#2042]({{ site.repository }}/issues/2042)) +- Patch a couple show-stopping security vulnerabilities ([#1946]({{ site.repository }}/issues/1946)) +- Sanitize paths uniformly, in a Windows-friendly way ([#2065]({{ site.repository }}/issues/2065), [#2109]({{ site.repository }}/issues/2109)) +- Update gem build steps to work correctly on Windows ([#2118]({{ site.repository }}/issues/2118)) +- Remove obsolete `normalize_options` method call from `bin/jekyll` ([#2121]({{ site.repository }}/issues/2121)) +- Remove `+` characters from Pygments lexer names when adding as a CSS class ([#994]({{ site.repository }}/issues/994)) +- Remove some code that caused Ruby interpreter warnings ([#2178]({{ site.repository }}/issues/2178)) +- Only strip the drive name if it begins the string ([#2175]({{ site.repository }}/issues/2175)) +- Remove default post with invalid date from site template ([#2200]({{ site.repository }}/issues/2200)) +- Fix `Post#url` and `Page#url` escape ([#1568]({{ site.repository }}/issues/1568)) +- Strip newlines from the {% raw %}`{% highlight %}`{% endraw %} block content ([#1823]({{ site.repository }}/issues/1823)) +- Load in `rouge` only when it's been requested as the highlighter ([#2189]({{ site.repository }}/issues/2189)) +- Convert input to string before XML escaping (`xml_escape` liquid filter) ([#2244]({{ site.repository }}/issues/2244)) +- Modify configuration key for Collections and reset properly. ([#2238]({{ site.repository }}/issues/2238)) +- Avoid duplicated output using `highlight` tag ([#2264]({{ site.repository }}/issues/2264)) +- Only use Jekyll.logger for output ([#2307]({{ site.repository }}/issues/2307)) +- Close the file descriptor in `has_yaml_header?` ([#2310]({{ site.repository }}/issues/2310)) +- Add `output` to `Document` liquid output hash ([#2309]({{ site.repository }}/issues/2309)) + +### Development Fixes +{: #development-fixes-v2-0-0} + +- Add a link to the site in the README.md file ([#1795]({{ site.repository }}/issues/1795)) +- Add in History and site changes from `v1-stable` branch ([#1836]({{ site.repository }}/issues/1836)) +- Testing additions on the Excerpt class ([#1893]({{ site.repository }}/issues/1893)) +- Fix the `highlight` tag feature ([#1859]({{ site.repository }}/issues/1859)) +- Test Jekyll under Ruby 2.1.0 ([#1900]({{ site.repository }}/issues/1900)) +- Add script/cibuild for fun and profit ([#1912]({{ site.repository }}/issues/1912)) +- Use `Forwardable` for delegation between `Excerpt` and `Post` ([#1927]({{ site.repository }}/issues/1927)) +- Rename `read_things` to `read_content` ([#1928]({{ site.repository }}/issues/1928)) +- Add `script/branding` script for ASCII art lovin' ([#1936]({{ site.repository }}/issues/1936)) +- Update the README to reflect the repo move ([#1943]({{ site.repository }}/issues/1943)) +- Add the project vision to the README ([#1935]({{ site.repository }}/issues/1935)) +- Speed up Travis CI builds by using Rebund ([#1985]({{ site.repository }}/issues/1985)) +- Use Yarp as a Gem proxy for Travis CI ([#1984]({{ site.repository }}/issues/1984)) +- Remove Yarp as a Gem proxy for Travis CI ([#2004]({{ site.repository }}/issues/2004)) +- Move the reading of layouts into its own class ([#2020]({{ site.repository }}/issues/2020)) +- Test Sass import ([#2009]({{ site.repository }}/issues/2009)) +- Switch Maruku and Kramdown in lists of Runtime vs. Development dependencies ([#2049]({{ site.repository }}/issues/2049)) +- Clean up the gemspec for the project ([#2095]({{ site.repository }}/issues/2095)) +- Add Japanese translation of README and CONTRIBUTING docs. ([#2081]({{ site.repository }}/issues/2081)) +- Re-align the tables in Cucumber ([#2108]({{ site.repository }}/issues/2108)) +- Trim trailing spaces and convert tabs to spaces ([#2122]({{ site.repository }}/issues/2122)) +- Fix the failing Travis scenarios due to Cucumber issues ([#2155]({{ site.repository }}/issues/2155)) +- Wrap `bundle install` in `travis_retry` to retry when RubyGems fails ([#2160]({{ site.repository }}/issues/2160)) +- Refactor tags and categories ([#1639]({{ site.repository }}/issues/1639)) +- Extract plugin management into its own class ([#2197]({{ site.repository }}/issues/2197)) +- Add missing tests for `Command` ([#2216]({{ site.repository }}/issues/2216)) +- Update `rr` link in CONTRIBUTING doc ([#2247]({{ site.repository }}/issues/2247)) +- Streamline Cucumber execution of `jekyll` subcommands ([#2258]({{ site.repository }}/issues/2258)) +- Refactor `Commands::Serve`. ([#2269]({{ site.repository }}/issues/2269)) +- Refactor `highlight` tag ([#2154]({{ site.repository }}/issues/2154)) +- Update `Util` hash functions with latest from Rails ([#2273]({{ site.repository }}/issues/2273)) +- Workaround for Travis bug ([#2290]({{ site.repository }}/issues/2290)) + +### Site Enhancements +{: #site-enhancements-v2-0-0} + +- Document Kramdown's GFM parser option ([#1791]({{ site.repository }}/issues/1791)) +- Move CSS to includes & update normalize.css to v2.1.3 ([#1787]({{ site.repository }}/issues/1787)) +- Minify CSS only in production ([#1803]({{ site.repository }}/issues/1803)) +- Fix broken link to installation of Ruby on Mountain Lion blog post on Troubleshooting docs page ([#1797]({{ site.repository }}/issues/1797)) +- Fix issues with 1.4.1 release blog post ([#1804]({{ site.repository }}/issues/1804)) +- Add note about deploying to OpenShift ([#1812]({{ site.repository }}/issues/1812)) +- Collect all Windows-related docs onto one page ([#1818]({{ site.repository }}/issues/1818)) +- Fixed typo in datafiles doc page ([#1854]({{ site.repository }}/issues/1854)) +- Clarify how to access `site` in docs ([#1864]({{ site.repository }}/issues/1864)) +- Add closing `` tag to `context.registers[:site]` note ([#1867]({{ site.repository }}/issues/1867)) +- Fix link to @mojombo's site source ([#1897]({{ site.repository }}/issues/1897)) +- Add `paginate: nil` to default configuration in docs ([#1896]({{ site.repository }}/issues/1896)) +- Add link to our License in the site footer ([#1889]({{ site.repository }}/issues/1889)) +- Add a charset note in "Writing Posts" doc page ([#1902]({{ site.repository }}/issues/1902)) +- Disallow selection of path and prompt in bash examples +- Add jekyll-compass to the plugin list ([#1923]({{ site.repository }}/issues/1923)) +- Add note in Posts docs about stripping `

    ` tags from excerpt ([#1933]({{ site.repository }}/issues/1933)) +- Add additional info about the new exclude behavior ([#1938]({{ site.repository }}/issues/1938)) +- Linkify 'awesome contributors' to point to the contributors graph on GitHub ([#1940]({{ site.repository }}/issues/1940)) +- Update `docs/sites.md` link to GitHub Training materials ([#1949]({{ site.repository }}/issues/1949)) +- Update `master` with the release info from 1.4.3 ([#1947]({{ site.repository }}/issues/1947)) +- Define docs nav in datafile ([#1953]({{ site.repository }}/issues/1953)) +- Clarify the docs around the naming convention for posts ([#1971]({{ site.repository }}/issues/1971)) +- Add missing `next` and `previous` docs for post layouts and templates ([#1970]({{ site.repository }}/issues/1970)) +- Add note to `Writing posts` page about how to strip html from excerpt ([#1962]({{ site.repository }}/issues/1962)) +- Add `jekyll-humanize` plugin to plugin list ([#1998]({{ site.repository }}/issues/1998)) +- Add `jekyll-font-awesome` plugin to plugin list ([#1999]({{ site.repository }}/issues/1999)) +- Add `sublime-jekyll` to list of Editor plugins ([#2001]({{ site.repository }}/issues/2001)) +- Add `vim-jekyll` to the list of Editor plugins ([#2005]({{ site.repository }}/issues/2005)) +- Fix non-semantic nesting of `p` tags in `news_item` layout ([#2013]({{ site.repository }}/issues/2013)) +- Document destination folder cleaning ([#2016]({{ site.repository }}/issues/2016)) +- Updated instructions for NearlyFreeSpeech.NET installation ([#2015]({{ site.repository }}/issues/2015)) +- Update link to rack-jekyll on "Deployment Methods" page ([#2047]({{ site.repository }}/issues/2047)) +- Fix typo in /docs/configuration ([#2073]({{ site.repository }}/issues/2073)) +- Fix count in docs for `site.static_files` ([#2077]({{ site.repository }}/issues/2077)) +- Update configuration docs to indicate utf-8 is the default for 2.0.0 and ASCII for 1.9.3 ([#2074]({{ site.repository }}/issues/2074)) +- Add info about unreleased feature to the site ([#2061]({{ site.repository }}/issues/2061)) +- Add whitespace to liquid example in GitHub Pages docs ([#2084]({{ site.repository }}/issues/2084)) +- Clarify the way Sass and CoffeeScript files are read in and output ([#2067]({{ site.repository }}/issues/2067)) +- Add lyche gallery tag plugin link to list of plugins ([#2094]({{ site.repository }}/issues/2094)) +- Add Jekyll Pages Directory plugin to list of plugins ([#2096]({{ site.repository }}/issues/2096)) +- Update Configuration docs page with new markdown extension ([#2102]({{ site.repository }}/issues/2102)) +- Add `jekyll-image-set` to the list of third-party plugins ([#2105]({{ site.repository }}/issues/2105)) +- Losslessly compress images ([#2128]({{ site.repository }}/issues/2128)) +- Update normalize.css to 3.0.0 ([#2126]({{ site.repository }}/issues/2126)) +- Update modernizr to v2.7.1 ([#2129]({{ site.repository }}/issues/2129)) +- Add `jekyll-ordinal` to list of third-party plugins ([#2150]({{ site.repository }}/issues/2150)) +- Add `jekyll_figure` to list of third-party plugins ([#2158]({{ site.repository }}/issues/2158)) +- Clarify the documentation for safe mode ([#2163]({{ site.repository }}/issues/2163)) +- Some HTML tidying ([#2130]({{ site.repository }}/issues/2130)) +- Remove modernizr and use html5shiv.js directly for IE less than v9 ([#2131]({{ site.repository }}/issues/2131)) +- Remove unused images ([#2187]({{ site.repository }}/issues/2187)) +- Use `array_to_sentence_string` filter when outputting news item categories ([#2191]({{ site.repository }}/issues/2191)) +- Add link to Help repo in primary navigation bar ([#2177]({{ site.repository }}/issues/2177)) +- Switch to using an ico file for the shortcut icon ([#2193]({{ site.repository }}/issues/2193)) +- Use numbers to specify font weights and only bring in font weights used ([#2185]({{ site.repository }}/issues/2185)) +- Add a link to the list of all tz database time zones ([#1824]({{ site.repository }}/issues/1824)) +- Clean-up and improve documentation `feed.xml` ([#2192]({{ site.repository }}/issues/2192)) +- Remove duplicate entry in list of third-party plugins ([#2206]({{ site.repository }}/issues/2206)) +- Reduce the whitespace in the favicon. ([#2213]({{ site.repository }}/issues/2213)) +- Add `jekyll-page-collections` to list of third-party plugins ([#2215]({{ site.repository }}/issues/2215)) +- Add a cross-reference about `post_url` ([#2243]({{ site.repository }}/issues/2243)) +- Add `jekyll-live-tiles` to list of third-party plugins ([#2250]({{ site.repository }}/issues/2250)) +- Fixed broken link to GitHub training material site source ([#2257]({{ site.repository }}/issues/2257)) +- Update link to help repo, now called `jekyll-help` ([#2277]({{ site.repository }}/issues/2277)) +- Fix capitalization of 'Jekyll' on Deployment Methods page ([#2291]({{ site.repository }}/issues/2291)) +- Include plugins by sonnym in list of third-party plugins ([#2297]({{ site.repository }}/issues/2297)) +- Add deprecated articles keeper filter to list of third-party plugins ([#2300]({{ site.repository }}/issues/2300)) +- Simplify and improve our CSS. ([#2127]({{ site.repository }}/issues/2127)) +- Use black text color for the mobile navbar ([#2306]({{ site.repository }}/issues/2306)) +- Use the built in date filter and `site.time` for the copyright year. ([#2305]({{ site.repository }}/issues/2305)) +- Update html5shiv to v3.7.2 ([#2304]({{ site.repository }}/issues/2304)) +- Add 2.0.0 release post ([#2298]({{ site.repository }}/issues/2298)) +- Add docs for custom markdown processors ([#2298]({{ site.repository }}/issues/2298)) +- Add docs for `where` and `group_by` Liquid filters ([#2298]({{ site.repository }}/issues/2298)) +- Remove notes in docs for unreleased features ([#2309]({{ site.repository }}/issues/2309)) + + +## 1.5.1 / 2014-03-27 +{: #v1-5-1} + +### Bug Fixes +{: #bug-fixes-v1-5-1} + +- Only strip the drive name if it begins the string ([#2176]({{ site.repository }}/issues/2176)) + + +## 1.5.0 / 2014-03-24 +{: #v1-5-0} + +### Minor Enhancements +{: #minor-enhancements-v1-5-0} + +- Loosen `safe_yaml` dependency to `~> 1.0` ([#2167]({{ site.repository }}/issues/2167)) +- Bump `safe_yaml` dependency to `~> 1.0.0` ([#1942]({{ site.repository }}/issues/1942)) + +### Bug Fixes +{: #bug-fixes-v1-5-0} + +- Fix issue where filesystem traversal restriction broke Windows ([#2167]({{ site.repository }}/issues/2167)) +- Lock `maruku` at `0.7.0` ([#2167]({{ site.repository }}/issues/2167)) + +### Development Fixes +{: #development-fixes-v1-5-0} + +- Lock `cucumber` at `1.3.11` ([#2167]({{ site.repository }}/issues/2167)) + + +## 1.4.3 / 2014-01-13 +{: #v1-4-3} + +### Bug Fixes +{: #bug-fixes-v1-4-3} + +- Patch show-stopping security vulnerabilities ([#1944]({{ site.repository }}/issues/1944)) + + +## 1.4.2 / 2013-12-16 +{: #v1-4-2} + +### Bug Fixes +{: #bug-fixes-v1-4-2} + +- Turn on Maruku fenced code blocks by default ([#1830]({{ site.repository }}/issues/1830)) + + +## 1.4.1 / 2013-12-09 +{: #v1-4-1} - -## 1.4.0 / 2013-12-07 - +{: #v1-4-0} ### Major Enhancements -- Add support for TOML config files ([#1765]({{ site.repository }}/issues/1765)) +{: #major-enhancements-v1-4-0} - ### Minor Enhancements -- Sort plugins as a way to establish a load order ([#1682]({{ site.repository }}/issues/1682)) -- Update Maruku to 0.7.0 ([#1775]({{ site.repository }}/issues/1775)) +{: #minor-enhancements-v1-4-0} - ### Bug Fixes -- Add a space between two words in a Pagination warning message ([#1769]({{ site.repository }}/issues/1769)) -- Upgrade `toml` gem to `v0.1.0` to maintain compat with Ruby 1.8.7 ([#1778]({{ site.repository }}/issues/1778)) +{: #bug-fixes-v1-4-0} - ### Development Fixes -- Remove some whitespace in the code ([#1755]({{ site.repository }}/issues/1755)) -- Remove some duplication in the reading of posts and drafts ([#1779]({{ site.repository }}/issues/1779)) +{: #development-fixes-v1-4-0} - ### Site Enhancements -- Fixed case of a word in the Jekyll v1.3.0 release post ([#1762]({{ site.repository }}/issues/1762)) -- Fixed the mime type for the favicon ([#1772]({{ site.repository }}/issues/1772)) +{: #site-enhancements-v1-4-0} - -## 1.3.1 / 2013-11-26 - +{: #v1-3-1} ### Minor Enhancements -- Add a `--prefix` option to passthrough for the importers ([#1669]({{ site.repository }}/issues/1669)) -- Push the paginator plugin lower in the plugin priority order so - other plugins run before it ([#1759]({{ site.repository }}/issues/1759)) +{: #minor-enhancements-v1-3-1} - +- Push the paginator plugin lower in the plugin priority order so other plugins run before it ([#1759]({{ site.repository }}/issues/1759)) ### Bug Fixes -- Fix the include tag when ran in a loop ([#1726]({{ site.repository }}/issues/1726)) -- Fix errors when using `--watch` on 1.8.7 ([#1730]({{ site.repository }}/issues/1730)) -- Specify where the include is called from if an included file is - missing ([#1746]({{ site.repository }}/issues/1746)) +{: #bug-fixes-v1-3-1} - +- Specify where the include is called from if an included file is missing ([#1746]({{ site.repository }}/issues/1746)) ### Development Fixes -- Extract `Site#filter_entries` into its own object ([#1697]({{ site.repository }}/issues/1697)) -- Enable Travis' bundle caching ([#1734]({{ site.repository }}/issues/1734)) -- Remove trailing whitespace in some files ([#1736]({{ site.repository }}/issues/1736)) -- Fix a duplicate test name ([#1754]({{ site.repository }}/issues/1754)) +{: #development-fixes-v1-3-1} - ### Site Enhancements -- Update link to example Rakefile to point to specific commit ([#1741]({{ site.repository }}/issues/1741)) -- Fix drafts docs to indicate that draft time is based on file modification - time, not `Time.now` ([#1695]({{ site.repository }}/issues/1695)) -- Add `jekyll-monthly-archive-plugin` and `jekyll-category-archive-plugin` to - list of third-party plugins ([#1693]({{ site.repository }}/issues/1693)) -- Add `jekyll-asset-path-plugin` to list of third-party plugins ([#1670]({{ site.repository }}/issues/1670)) -- Add `emoji-for-jekyll` to list of third-part plugins ([#1708]({{ site.repository }}/issues/1708)) -- Fix previous section link on plugins page to point to pagination page ([#1707]({{ site.repository }}/issues/1707)) -- Add `org-mode` converter plugin to third-party plugins ([#1711]({{ site.repository }}/issues/1711)) -- Point "Blog migrations" page to http://import.jekyllrb.com ([#1732]({{ site.repository }}/issues/1732)) -- Add docs for `post_url` when posts are in subdirectories ([#1718]({{ site.repository }}/issues/1718)) -- Update the docs to point to `example.com` ([#1448]({{ site.repository }}/issues/1448)) +{: #site-enhancements-v1-3-1} - -## 1.3.0 / 2013-11-04 - +{: #v1-3-0} ### Major Enhancements -- Add support for adding data as YAML files under a site's `_data` - directory ([#1003]({{ site.repository }}/issues/1003)) -- Allow variables to be used with `include` tags ([#1495]({{ site.repository }}/issues/1495)) -- Allow using gems for plugin management ([#1557]({{ site.repository }}/issues/1557)) +{: #major-enhancements-v1-3-0} - ### Minor Enhancements -- Decrease the specificity in the site template CSS ([#1574]({{ site.repository }}/issues/1574)) -- Add `encoding` configuration option ([#1449]({{ site.repository }}/issues/1449)) -- Provide better error handling for Jekyll's custom Liquid tags - ([#1514]({{ site.repository }}/issues/1514)) -- If an included file causes a Liquid error, add the path to the - include file that caused the error to the error message ([#1596]({{ site.repository }}/issues/1596)) -- If a layout causes a Liquid error, change the error message so that - we know it comes from the layout ([#1601]({{ site.repository }}/issues/1601)) -- Update Kramdown dependency to `~> 1.2` ([#1610]({{ site.repository }}/issues/1610)) -- Update `safe_yaml` dependency to `~> 0.9.7` ([#1602]({{ site.repository }}/issues/1602)) -- Allow layouts to be in subfolders like includes ([#1622]({{ site.repository }}/issues/1622)) -- Switch to listen for site watching while serving ([#1589]({{ site.repository }}/issues/1589)) -- Add a `json` liquid filter to be used in sites ([#1651]({{ site.repository }}/issues/1651)) -- Point people to the migration docs when the `jekyll-import` gem is - missing ([#1662]({{ site.repository }}/issues/1662)) +{: #minor-enhancements-v1-3-0} - +- Point people to the migration docs when the `jekyll-import` gem is missing ([#1662]({{ site.repository }}/issues/1662)) ### Bug Fixes -- Fix up matching against source and destination when the two - locations are similar ([#1556]({{ site.repository }}/issues/1556)) -- Fix the missing `pathname` require in certain cases ([#1255]({{ site.repository }}/issues/1255)) -- Use `+` instead of `Array#concat` when building `Post` attribute list ([#1571]({{ site.repository }}/issues/1571)) -- Print server address when launching a server ([#1586]({{ site.repository }}/issues/1586)) -- Downgrade to Maruku `~> 0.6.0` in order to avoid changes in rendering ([#1598]({{ site.repository }}/issues/1598)) -- Fix error with failing include tag when variable was file name ([#1613]({{ site.repository }}/issues/1613)) -- Downcase lexers before passing them to pygments ([#1615]({{ site.repository }}/issues/1615)) -- Capitalize the short verbose switch because it conflicts with the - built-in Commander switch ([#1660]({{ site.repository }}/issues/1660)) -- Fix compatibility with 1.8.x ([#1665]({{ site.repository }}/issues/1665)) -- Fix an error with the new file watching code due to library version - incompatibilities ([#1687]({{ site.repository }}/issues/1687)) +{: #bug-fixes-v1-3-0} - +- Fix an error with the new file watching code due to library version incompatibilities ([#1687]({{ site.repository }}/issues/1687)) ### Development Fixes -- Add coverage reporting with Coveralls ([#1539]({{ site.repository }}/issues/1539)) -- Refactor the Liquid `include` tag ([#1490]({{ site.repository }}/issues/1490)) -- Update launchy dependency to `~> 2.3` ([#1608]({{ site.repository }}/issues/1608)) -- Update rr dependency to `~> 1.1` ([#1604]({{ site.repository }}/issues/1604)) -- Update cucumber dependency to `~> 1.3` ([#1607]({{ site.repository }}/issues/1607)) -- Update coveralls dependency to `~> 0.7.0` ([#1606]({{ site.repository }}/issues/1606)) -- Update rake dependency to `~> 10.1` ([#1603]({{ site.repository }}/issues/1603)) -- Clean up `site.rb` comments to be more concise/uniform ([#1616]({{ site.repository }}/issues/1616)) -- Use the master branch for the build badge in the readme ([#1636]({{ site.repository }}/issues/1636)) -- Refactor Site#render ([#1638]({{ site.repository }}/issues/1638)) -- Remove duplication in command line options ([#1637]({{ site.repository }}/issues/1637)) -- Add tests for all the coderay options ([#1543]({{ site.repository }}/issues/1543)) -- Improve some of the cucumber test code ([#1493]({{ site.repository }}/issues/1493)) -- Improve comparisons of timestamps by ignoring the seconds ([#1582]({{ site.repository }}/issues/1582)) +{: #development-fixes-v1-3-0} - ### Site Enhancements -- Fix params for `JekyllImport::WordPress.process` arguments ([#1554]({{ site.repository }}/issues/1554)) -- Add `jekyll-suggested-tweet` to list of third-party plugins ([#1555]({{ site.repository }}/issues/1555)) -- Link to Liquid's docs for tags and filters ([#1553]({{ site.repository }}/issues/1553)) -- Add note about installing Xcode on the Mac in the Installation docs ([#1561]({{ site.repository }}/issues/1561)) -- Simplify/generalize pagination docs ([#1577]({{ site.repository }}/issues/1577)) -- Add documentation for the new data sources feature ([#1503]({{ site.repository }}/issues/1503)) -- Add more information on how to create generators ([#1590]({{ site.repository }}/issues/1590), [#1592]({{ site.repository }}/issues/1592)) -- Improve the instructions for mimicking GitHub Flavored Markdown - ([#1614]({{ site.repository }}/issues/1614)) -- Add `jekyll-import` warning note of missing dependencies ([#1626]({{ site.repository }}/issues/1626)) -- Fix grammar in the Usage section ([#1635]({{ site.repository }}/issues/1635)) -- Add documentation for the use of gems as plugins ([#1656]({{ site.repository }}/issues/1656)) -- Document the existence of a few additional plugins ([#1405]({{ site.repository }}/issues/1405)) -- Document that the `date_to_string` always returns a two digit day ([#1663]({{ site.repository }}/issues/1663)) -- Fix navigation in the "Working with Drafts" page ([#1667]({{ site.repository }}/issues/1667)) -- Fix an error with the data documentation ([#1691]({{ site.repository }}/issues/1691)) +{: #site-enhancements-v1-3-0} - -## 1.2.1 / 2013-09-14 - +{: #v1-2-1} ### Minor Enhancements -- Print better messages for detached server. Mute output on detach. ([#1518]({{ site.repository }}/issues/1518)) -- Disable reverse lookup when running `jekyll serve` ([#1363]({{ site.repository }}/issues/1363)) -- Upgrade RedCarpet dependency to `~> 2.3.0` ([#1515]({{ site.repository }}/issues/1515)) -- Upgrade to Liquid `>= 2.5.2, < 2.6` ([#1536]({{ site.repository }}/issues/1536)) +{: #minor-enhancements-v1-2-1} - ### Bug Fixes -- Fix file discrepancy in gemspec ([#1522]({{ site.repository }}/issues/1522)) -- Force rendering of Include tag ([#1525]({{ site.repository }}/issues/1525)) +{: #bug-fixes-v1-2-1} - ### Development Fixes -- Add a rake task to generate a new release post ([#1404]({{ site.repository }}/issues/1404)) -- Mute LSI output in tests ([#1531]({{ site.repository }}/issues/1531)) -- Update contributor documentation ([#1537]({{ site.repository }}/issues/1537)) +{: #development-fixes-v1-2-1} - ### Site Enhancements -- Fix a couple of validation errors on the site ([#1511]({{ site.repository }}/issues/1511)) -- Make navigation menus reusable ([#1507]({{ site.repository }}/issues/1507)) -- Fix link to History page from Release v1.2.0 notes post. -- Fix markup in History file for command line options ([#1512]({{ site.repository }}/issues/1512)) -- Expand 1.2 release post title to 1.2.0 ([#1516]({{ site.repository }}/issues/1516)) +{: #site-enhancements-v1-2-1} - -## 1.2.0 / 2013-09-06 - +{: #v1-2-0} ### Major Enhancements -- Disable automatically-generated excerpts when `excerpt_separator` is `""`. ([#1386]({{ site.repository }}/issues/1386)) -- Add checking for URL conflicts when running `jekyll doctor` ([#1389]({{ site.repository }}/issues/1389)) +{: #major-enhancements-v1-2-0} - ### Minor Enhancements -- Catch and fix invalid `paginate` values ([#1390]({{ site.repository }}/issues/1390)) -- Remove superfluous `div.container` from the default html template for - `jekyll new` ([#1315]({{ site.repository }}/issues/1315)) -- Add `-D` short-form switch for the drafts option ([#1394]({{ site.repository }}/issues/1394)) -- Update the links in the site template for Twitter and GitHub ([#1400]({{ site.repository }}/issues/1400)) -- Update dummy email address to example.com domain ([#1408]({{ site.repository }}/issues/1408)) -- Update normalize.css to v2.1.2 and minify; add rake task to update - normalize.css with greater ease. ([#1430]({{ site.repository }}/issues/1430)) -- Add the ability to detach the server ran by `jekyll serve` from it's - controlling terminal ([#1443]({{ site.repository }}/issues/1443)) -- Improve permalink generation for URLs with special characters ([#944]({{ site.repository }}/issues/944)) -- Expose the current Jekyll version to posts and pages via a new - `jekyll.version` variable ([#1481]({{ site.repository }}/issues/1481)) +{: #minor-enhancements-v1-2-0} - +- Expose the current Jekyll version to posts and pages via a new `jekyll.version` variable ([#1481]({{ site.repository }}/issues/1481)) ### Bug Fixes -- Markdown extension matching matches only exact matches ([#1382]({{ site.repository }}/issues/1382)) -- Fixed NoMethodError when message passed to `Stevenson#message` is nil ([#1388]({{ site.repository }}/issues/1388)) -- Use binary mode when writing file ([#1364]({{ site.repository }}/issues/1364)) -- Fix 'undefined method `encoding` for "mailto"' errors w/ Ruby 1.8 and - Kramdown > 0.14.0 ([#1397]({{ site.repository }}/issues/1397)) -- Do not force the permalink to be a dir if it ends on .html ([#963]({{ site.repository }}/issues/963)) -- When a Liquid Exception is caught, show the full path rel. to site source ([#1415]({{ site.repository }}/issues/1415)) -- Properly read in the config options when serving the docs locally - ([#1444]({{ site.repository }}/issues/1444)) -- Fixed `--layouts` option for `build` and `serve` commands ([#1458]({{ site.repository }}/issues/1458)) -- Remove kramdown as a runtime dependency since it's optional ([#1498]({{ site.repository }}/issues/1498)) -- Provide proper error handling for invalid file names in the include - tag ([#1494]({{ site.repository }}/issues/1494)) +{: #bug-fixes-v1-2-0} - +- Provide proper error handling for invalid file names in the include tag ([#1494]({{ site.repository }}/issues/1494)) ### Development Fixes -- Remove redundant argument to - Jekyll::Commands::New#scaffold_post_content ([#1356]({{ site.repository }}/issues/1356)) -- Add new dependencies to the README ([#1360]({{ site.repository }}/issues/1360)) -- Fix link to contributing page in README ([#1424]({{ site.repository }}/issues/1424)) -- Update TomDoc in Pager#initialize to match params ([#1441]({{ site.repository }}/issues/1441)) -- Refactor `Site#cleanup` into `Jekyll::Site::Cleaner` class ([#1429]({{ site.repository }}/issues/1429)) -- Several other small minor refactorings ([#1341]({{ site.repository }}/issues/1341)) -- Ignore `_site` in jekyllrb.com deploy ([#1480]({{ site.repository }}/issues/1480)) -- Add Gem version and dependency badge to README ([#1497]({{ site.repository }}/issues/1497)) +{: #development-fixes-v1-2-0} - ### Site Enhancements -- Add info about new releases ([#1353]({{ site.repository }}/issues/1353)) -- Update plugin list with jekyll-rss plugin ([#1354]({{ site.repository }}/issues/1354)) -- Update the site list page with Ruby's official site ([#1358]({{ site.repository }}/issues/1358)) -- Add `jekyll-ditaa` to list of third-party plugins ([#1370]({{ site.repository }}/issues/1370)) -- Add `postfiles` to list of third-party plugins ([#1373]({{ site.repository }}/issues/1373)) -- For internal links, use full path including trailing `/` ([#1411]({{ site.repository }}/issues/1411)) -- Use curly apostrophes in the docs ([#1419]({{ site.repository }}/issues/1419)) -- Update the docs for Redcarpet in Jekyll ([#1418]({{ site.repository }}/issues/1418)) -- Add `pluralize` and `reading_time` filters to docs ([#1439]({{ site.repository }}/issues/1439)) -- Fix markup for the Kramdown options ([#1445]({{ site.repository }}/issues/1445)) -- Fix typos in the History file ([#1454]({{ site.repository }}/issues/1454)) -- Add trailing slash to site's post URL ([#1462]({{ site.repository }}/issues/1462)) -- Clarify that `--config` will take multiple files ([#1474]({{ site.repository }}/issues/1474)) -- Fix docs/templates.md private gist example ([#1477]({{ site.repository }}/issues/1477)) -- Use `site.repository` for Jekyll's GitHub URL ([#1463]({{ site.repository }}/issues/1463)) -- Add `jekyll-pageless-redirects` to list of third-party plugins ([#1486]({{ site.repository }}/issues/1486)) -- Clarify that `date_to_xmlschema` returns an ISO 8601 string ([#1488]({{ site.repository }}/issues/1488)) -- Add `jekyll-good-include` to list of third-party plugins ([#1491]({{ site.repository }}/issues/1491)) -- XML escape the blog post title in our feed ([#1501]({{ site.repository }}/issues/1501)) -- Add `jekyll-toc-generator` to list of third-party plugins ([#1506]({{ site.repository }}/issues/1506)) +{: #site-enhancements-v1-2-0} - -## 1.1.2 / 2013-07-25 - +{: #v1-1-2} ### Bug Fixes -- Require Liquid 2.5.1 ([#1349]({{ site.repository }}/issues/1349)) +{: #bug-fixes-v1-1-2} - -## 1.1.1 / 2013-07-24 - +{: #v1-1-1} ### Minor Enhancements -- Remove superfluous `table` selector from main.css in `jekyll new` template ([#1328]({{ site.repository }}/issues/1328)) -- Abort with non-zero exit codes ([#1338]({{ site.repository }}/issues/1338)) +{: #minor-enhancements-v1-1-1} - ### Bug Fixes -- Fix up the rendering of excerpts ([#1339]({{ site.repository }}/issues/1339)) +{: #bug-fixes-v1-1-1} - ### Site Enhancements -- Add Jekyll Image Tag to the plugins list ([#1306]({{ site.repository }}/issues/1306)) -- Remove erroneous statement that `site.pages` are sorted alphabetically. -- Add info about the `_drafts` directory to the directory structure - docs ([#1320]({{ site.repository }}/issues/1320)) -- Improve the layout of the plugin listing by organizing it into - categories ([#1310]({{ site.repository }}/issues/1310)) -- Add generator-jekyllrb and grunt-jekyll to plugins page ([#1330]({{ site.repository }}/issues/1330)) -- Mention Kramdown as option for markdown parser on Extras page ([#1318]({{ site.repository }}/issues/1318)) -- Update Quick-Start page to include reminder that all requirements must be installed ([#1327]({{ site.repository }}/issues/1327)) -- Change filename in `include` example to an HTML file so as not to indicate that Jekyll - will automatically convert them. ([#1303]({{ site.repository }}/issues/1303)) -- Add an RSS feed for commits to Jekyll ([#1343]({{ site.repository }}/issues/1343)) +{: #site-enhancements-v1-1-1} - -## 1.1.0 / 2013-07-14 - +{: #v1-1-0} ### Major Enhancements -- Add `docs` subcommand to read Jekyll's docs when offline. ([#1046]({{ site.repository }}/issues/1046)) -- Support passing parameters to templates in `include` tag ([#1204]({{ site.repository }}/issues/1204)) -- Add support for Liquid tags to post excerpts ([#1302]({{ site.repository }}/issues/1302)) +{: #major-enhancements-v1-1-0} - ### Minor Enhancements -- Search the hierarchy of pagination path up to site root to determine template page for - pagination. ([#1198]({{ site.repository }}/issues/1198)) -- Add the ability to generate a new Jekyll site without a template ([#1171]({{ site.repository }}/issues/1171)) -- Use redcarpet as the default markdown engine in newly generated - sites ([#1245]({{ site.repository }}/issues/1245), [#1247]({{ site.repository }}/issues/1247)) -- Add `redcarpet` as a runtime dependency so `jekyll build` works out-of-the-box for new - sites. ([#1247]({{ site.repository }}/issues/1247)) -- In the generated site, remove files that will be replaced by a - directory ([#1118]({{ site.repository }}/issues/1118)) -- Fail loudly if a user-specified configuration file doesn't exist ([#1098]({{ site.repository }}/issues/1098)) -- Allow for all options for Kramdown HTML Converter ([#1201]({{ site.repository }}/issues/1201)) +{: #minor-enhancements-v1-1-0} - ### Bug Fixes -- Fix pagination in subdirectories. ([#1198]({{ site.repository }}/issues/1198)) -- Fix an issue with directories and permalinks that have a plus sign - (+) in them ([#1215]({{ site.repository }}/issues/1215)) -- Provide better error reporting when generating sites ([#1253]({{ site.repository }}/issues/1253)) -- Latest posts first in non-LSI `related_posts` ([#1271]({{ site.repository }}/issues/1271)) +{: #bug-fixes-v1-1-0} - ### Development Fixes -- Merge the theme and layout cucumber steps into one step ([#1151]({{ site.repository }}/issues/1151)) -- Restrict activesupport dependency to pre-4.0.0 to maintain compatibility with `<= 1.9.2` -- Include/exclude deprecation handling simplification ([#1284]({{ site.repository }}/issues/1284)) -- Convert README to Markdown. ([#1267]({{ site.repository }}/issues/1267)) -- Refactor Jekyll::Site ([#1144]({{ site.repository }}/issues/1144)) +{: #development-fixes-v1-1-0} - ### Site Enhancements -- Add "News" section for release notes, along with an RSS feed ([#1093]({{ site.repository }}/issues/1093), [#1285]({{ site.repository }}/issues/1285), [#1286]({{ site.repository }}/issues/1286)) -- Add "History" page. -- Restructured docs sections to include "Meta" section. -- Add message to "Templates" page that specifies that Python must be installed in order - to use Pygments. ([#1182]({{ site.repository }}/issues/1182)) -- Update link to the official Maruku repo ([#1175]({{ site.repository }}/issues/1175)) -- Add documentation about `paginate_path` to "Templates" page in docs ([#1129]({{ site.repository }}/issues/1129)) -- Give the quick-start guide its own page ([#1191]({{ site.repository }}/issues/1191)) -- Update ProTip on Installation page in docs to point to all the info about Pygments and - the 'highlight' tag. ([#1196]({{ site.repository }}/issues/1196)) -- Run `site/img` through ImageOptim (thanks [@qrush](https://github.com/qrush)!) ([#1208]({{ site.repository }}/issues/1208)) -- Added Jade Converter to `site/docs/plugins` ([#1210]({{ site.repository }}/issues/1210)) -- Fix location of docs pages in Contributing pages ([#1214]({{ site.repository }}/issues/1214)) -- Add ReadInXMinutes plugin to the plugin list ([#1222]({{ site.repository }}/issues/1222)) -- Remove plugins from the plugin list that have equivalents in Jekyll - proper ([#1223]({{ site.repository }}/issues/1223)) -- Add jekyll-assets to the plugin list ([#1225]({{ site.repository }}/issues/1225)) -- Add jekyll-pandoc-mulitple-formats to the plugin list ([#1229]({{ site.repository }}/issues/1229)) -- Remove dead link to "Using Git to maintain your blog" ([#1227]({{ site.repository }}/issues/1227)) -- Tidy up the third-party plugins listing ([#1228]({{ site.repository }}/issues/1228)) -- Update contributor information ([#1192]({{ site.repository }}/issues/1192)) -- Update URL of article about Blogger migration ([#1242]({{ site.repository }}/issues/1242)) -- Specify that RedCarpet is the default for new Jekyll sites on Quickstart page ([#1247]({{ site.repository }}/issues/1247)) -- Added site.pages to Variables page in docs ([#1251]({{ site.repository }}/issues/1251)) -- Add Youku and Tudou Embed link on Plugins page. ([#1250]({{ site.repository }}/issues/1250)) -- Add note that `gist` tag supports private gists. ([#1248]({{ site.repository }}/issues/1248)) -- Add `jekyll-timeago` to list of third-party plugins. ([#1260]({{ site.repository }}/issues/1260)) -- Add `jekyll-swfobject` to list of third-party plugins. ([#1263]({{ site.repository }}/issues/1263)) -- Add `jekyll-picture-tag` to list of third-party plugins. ([#1280]({{ site.repository }}/issues/1280)) -- Update the GitHub Pages documentation regarding relative URLs - ([#1291]({{ site.repository }}/issues/1291)) -- Update the S3 deployment documentation ([#1294]({{ site.repository }}/issues/1294)) -- Add suggestion for Xcode CLT install to troubleshooting page in docs ([#1296]({{ site.repository }}/issues/1296)) -- Add 'Working with drafts' page to docs ([#1289]({{ site.repository }}/issues/1289)) -- Add information about time zones to the documentation for a page's - date ([#1304]({{ site.repository }}/issues/1304)) +{: #site-enhancements-v1-1-0} - +- Add information about time zones to the documentation for a page's date ([#1304]({{ site.repository }}/issues/1304)) -## 1.0.3 / 2013-06-07 - +{: #v1-0-3} ### Minor Enhancements -- Add support to gist tag for private gists. ([#1189]({{ site.repository }}/issues/1189)) -- Fail loudly when MaRuKu errors out ([#1190]({{ site.repository }}/issues/1190)) -- Move the building of related posts into their own class ([#1057]({{ site.repository }}/issues/1057)) -- Removed trailing spaces in several places throughout the code ([#1116]({{ site.repository }}/issues/1116)) -- Add a `--force` option to `jekyll new` ([#1115]({{ site.repository }}/issues/1115)) -- Convert IDs in the site template to classes ([#1170]({{ site.repository }}/issues/1170)) +{: #minor-enhancements-v1-0-3} - ### Bug Fixes -- Fix typo in Stevenson constant "ERROR". ([#1166]({{ site.repository }}/issues/1166)) -- Rename Jekyll::Logger to Jekyll::Stevenson to fix inheritance issue ([#1106]({{ site.repository }}/issues/1106)) -- Exit with a non-zero exit code when dealing with a Liquid error ([#1121]({{ site.repository }}/issues/1121)) -- Make the `exclude` and `include` options backwards compatible with - versions of Jekyll prior to 1.0 ([#1114]({{ site.repository }}/issues/1114)) -- Fix pagination on Windows ([#1063]({{ site.repository }}/issues/1063)) -- Fix the application of Pygments' Generic Output style to Go code - ([#1156]({{ site.repository }}/issues/1156)) +{: #bug-fixes-v1-0-3} - +- Fix the application of Pygments' Generic Output style to Go code ([#1156]({{ site.repository }}/issues/1156)) ### Site Enhancements -- Add a Pro Tip to docs about front matter variables being optional ([#1147]({{ site.repository }}/issues/1147)) -- Add changelog to site as History page in /docs/ ([#1065]({{ site.repository }}/issues/1065)) -- Add note to Upgrading page about new config options in 1.0.x ([#1146]({{ site.repository }}/issues/1146)) -- Documentation for `date_to_rfc822` and `uri_escape` ([#1142]({{ site.repository }}/issues/1142)) -- Documentation highlight boxes shouldn't show scrollbars if not necessary ([#1123]({{ site.repository }}/issues/1123)) -- Add link to jekyll-minibundle in the doc's plugins list ([#1035]({{ site.repository }}/issues/1035)) -- Quick patch for importers documentation -- Fix prefix for WordpressDotCom importer in docs ([#1107]({{ site.repository }}/issues/1107)) -- Add jekyll-contentblocks plugin to docs ([#1068]({{ site.repository }}/issues/1068)) -- Make code bits in notes look more natural, more readable ([#1089]({{ site.repository }}/issues/1089)) -- Fix logic for `relative_permalinks` instructions on Upgrading page ([#1101]({{ site.repository }}/issues/1101)) -- Add docs for post excerpt ([#1072]({{ site.repository }}/issues/1072)) -- Add docs for gist tag ([#1072]({{ site.repository }}/issues/1072)) -- Add docs indicating that Pygments does not need to be installed - separately ([#1099]({{ site.repository }}/issues/1099), [#1119]({{ site.repository }}/issues/1119)) -- Update the migrator docs to be current ([#1136]({{ site.repository }}/issues/1136)) -- Add the Jekyll Gallery Plugin to the plugin list ([#1143]({{ site.repository }}/issues/1143)) +{: #site-enhancements-v1-0-3} - ### Development Fixes -- Use Jekyll.logger instead of Jekyll::Stevenson to log things ([#1149]({{ site.repository }}/issues/1149)) -- Fix pesky Cucumber infinite loop ([#1139]({{ site.repository }}/issues/1139)) -- Do not write posts with timezones in Cucumber tests ([#1124]({{ site.repository }}/issues/1124)) -- Use ISO formatted dates in Cucumber features ([#1150]({{ site.repository }}/issues/1150)) +{: #development-fixes-v1-0-3} - -## 1.0.2 / 2013-05-12 - +{: #v1-0-2} ### Major Enhancements -- Add `jekyll doctor` command to check site for any known compatibility problems ([#1081]({{ site.repository }}/issues/1081)) -- Backwards-compatibilize relative permalinks ([#1081]({{ site.repository }}/issues/1081)) +{: #major-enhancements-v1-0-2} - ### Minor Enhancements -- Add a `data-lang=""` attribute to Redcarpet code blocks ([#1066]({{ site.repository }}/issues/1066)) -- Deprecate old config `server_port`, match to `port` if `port` isn't set ([#1084]({{ site.repository }}/issues/1084)) -- Update pygments.rb version to 0.5.0 ([#1061]({{ site.repository }}/issues/1061)) -- Update Kramdown version to 1.0.2 ([#1067]({{ site.repository }}/issues/1067)) +{: #minor-enhancements-v1-0-2} - ### Bug Fixes -- Fix issue when categories are numbers ([#1078]({{ site.repository }}/issues/1078)) -- Catching that Redcarpet gem isn't installed ([#1059]({{ site.repository }}/issues/1059)) +{: #bug-fixes-v1-0-2} - ### Site Enhancements -- Add documentation about `relative_permalinks` ([#1081]({{ site.repository }}/issues/1081)) -- Remove pygments-installation instructions, as pygments.rb is bundled with it ([#1079]({{ site.repository }}/issues/1079)) -- Move pages to be Pages for realz ([#985]({{ site.repository }}/issues/985)) -- Updated links to Liquid documentation ([#1073]({{ site.repository }}/issues/1073)) +{: #site-enhancements-v1-0-2} - -## 1.0.1 / 2013-05-08 - +{: #v1-0-1} ### Minor Enhancements -- Do not force use of toc_token when using generate_tok in RDiscount ([#1048]({{ site.repository }}/issues/1048)) -- Add newer `language-` class name prefix to code blocks ([#1037]({{ site.repository }}/issues/1037)) -- Commander error message now preferred over process abort with incorrect args ([#1040]({{ site.repository }}/issues/1040)) +{: #minor-enhancements-v1-0-1} - ### Bug Fixes -- Make Redcarpet respect the pygments configuration option ([#1053]({{ site.repository }}/issues/1053)) -- Fix the index build with LSI ([#1045]({{ site.repository }}/issues/1045)) -- Don't print deprecation warning when no arguments are specified. ([#1041]({{ site.repository }}/issues/1041)) -- Add missing `

    ` to site template used by `new` subcommand, fixed typos in code ([#1032]({{ site.repository }}/issues/1032)) +{: #bug-fixes-v1-0-1} - ### Site Enhancements -- Changed https to http in the GitHub Pages link ([#1051]({{ site.repository }}/issues/1051)) -- Remove CSS cruft, fix typos, fix HTML errors ([#1028]({{ site.repository }}/issues/1028)) -- Removing manual install of Pip and Distribute ([#1025]({{ site.repository }}/issues/1025)) -- Updated URL for Markdown references plugin ([#1022]({{ site.repository }}/issues/1022)) +{: #site-enhancements-v1-0-1} - ### Development Fixes -- Markdownify history file ([#1027]({{ site.repository }}/issues/1027)) -- Update links on README to point to new jekyllrb.com ([#1018]({{ site.repository }}/issues/1018)) +{: #development-fixes-v1-0-1} - - -## 1.0.0 / 2013-05-06 - - - -### Major Enhancements -- Add `jekyll new` subcommand: generate a jekyll scaffold ([#764]({{ site.repository }}/issues/764)) -- Refactored jekyll commands into subcommands: build, serve, and migrate. ([#690]({{ site.repository }}/issues/690)) -- Removed importers/migrators from main project, migrated to jekyll-import sub-gem ([#793]({{ site.repository }}/issues/793)) -- Added ability to render drafts in `_drafts` folder via command line ([#833]({{ site.repository }}/issues/833)) -- Add ordinal date permalink style (/:categories/:year/:y_day/:title.html) ([#928]({{ site.repository }}/issues/928)) - - - -### Minor Enhancements -- Site template HTML5-ified ([#964]({{ site.repository }}/issues/964)) -- Use post's directory path when matching for the post_url tag ([#998]({{ site.repository }}/issues/998)) -- Loosen dependency on Pygments so it's only required when it's needed ([#1015]({{ site.repository }}/issues/1015)) -- Parse strings into Time objects for date-related Liquid filters ([#1014]({{ site.repository }}/issues/1014)) -- Tell the user if there is no subcommand specified ([#1008]({{ site.repository }}/issues/1008)) -- Freak out if the destination of `jekyll new` exists and is non-empty ([#981]({{ site.repository }}/issues/981)) -- Add `timezone` configuration option for compilation ([#957]({{ site.repository }}/issues/957)) -- Add deprecation messages for pre-1.0 CLI options ([#959]({{ site.repository }}/issues/959)) -- Refactor and colorize logging ([#959]({{ site.repository }}/issues/959)) -- Refactor Markdown parsing ([#955]({{ site.repository }}/issues/955)) -- Added application/vnd.apple.pkpass to mime.types served by WEBrick ([#907]({{ site.repository }}/issues/907)) -- Move template site to default markdown renderer ([#961]({{ site.repository }}/issues/961)) -- Expose new attribute to Liquid via `page`: `page.path` ([#951]({{ site.repository }}/issues/951)) -- Accept multiple config files from command line ([#945]({{ site.repository }}/issues/945)) -- Add page variable to liquid custom tags and blocks ([#413]({{ site.repository }}/issues/413)) -- Add paginator.previous_page_path and paginator.next_page_path ([#942]({{ site.repository }}/issues/942)) -- Backwards compatibility for 'auto' ([#821]({{ site.repository }}/issues/821), [#934]({{ site.repository }}/issues/934)) -- Added date_to_rfc822 used on RSS feeds ([#892]({{ site.repository }}/issues/892)) -- Upgrade version of pygments.rb to 0.4.2 ([#927]({{ site.repository }}/issues/927)) -- Added short month (e.g. "Sep") to permalink style options for posts ([#890]({{ site.repository }}/issues/890)) -- Expose site.baseurl to Liquid templates ([#869]({{ site.repository }}/issues/869)) -- Adds excerpt attribute to posts which contains first paragraph of content ([#837]({{ site.repository }}/issues/837)) -- Accept custom configuration file via CLI ([#863]({{ site.repository }}/issues/863)) -- Load in GitHub Pages MIME Types on `jekyll serve` ([#847]({{ site.repository }}/issues/847), [#871]({{ site.repository }}/issues/871)) -- Improve debugability of error message for a malformed highlight tag ([#785]({{ site.repository }}/issues/785)) -- Allow symlinked files in unsafe mode ([#824]({{ site.repository }}/issues/824)) -- Add 'gist' Liquid tag to core ([#822]({{ site.repository }}/issues/822), [#861]({{ site.repository }}/issues/861)) -- New format of Jekyll output ([#795]({{ site.repository }}/issues/795)) -- Reinstate `--limit_posts` and `--future` switches ([#788]({{ site.repository }}/issues/788)) -- Remove ambiguity from command descriptions ([#815]({{ site.repository }}/issues/815)) -- Fix SafeYAML Warnings ([#807]({{ site.repository }}/issues/807)) -- Relaxed Kramdown version to 0.14 ([#808]({{ site.repository }}/issues/808)) -- Aliased `jekyll server` to `jekyll serve`. ([#792]({{ site.repository }}/issues/792)) -- Updated gem versions for Kramdown, Rake, Shoulda, Cucumber, and RedCarpet. ([#744]({{ site.repository }}/issues/744)) -- Refactored jekyll subcommands into Jekyll::Commands submodule, which now contains them ([#768]({{ site.repository }}/issues/768)) -- Rescue from import errors in Wordpress.com migrator ([#671]({{ site.repository }}/issues/671)) -- Massively accelerate LSI performance ([#664]({{ site.repository }}/issues/664)) -- Truncate post slugs when importing from Tumblr ([#496]({{ site.repository }}/issues/496)) -- Add glob support to include, exclude option ([#743]({{ site.repository }}/issues/743)) -- Layout of Page or Post defaults to 'page' or 'post', respectively ([#580]({{ site.repository }}/issues/580)) - REPEALED by ([#977]({{ site.repository }}/issues/977)) -- "Keep files" feature ([#685]({{ site.repository }}/issues/685)) -- Output full path & name for files that don't parse ([#745]({{ site.repository }}/issues/745)) -- Add source and destination directory protection ([#535]({{ site.repository }}/issues/535)) -- Better YAML error message ([#718]({{ site.repository }}/issues/718)) -- Bug Fixes -- Paginate in subdirectories properly ([#1016]({{ site.repository }}/issues/1016)) -- Ensure post and page URLs have a leading slash ([#992]({{ site.repository }}/issues/992)) -- Catch all exceptions, not just StandardError descendents ([#1007]({{ site.repository }}/issues/1007)) -- Bullet-proof limit_posts option ([#1004]({{ site.repository }}/issues/1004)) -- Read in YAML as UTF-8 to accept non-ASCII chars ([#836]({{ site.repository }}/issues/836)) -- Fix the CLI option `--plugins` to actually accept dirs and files ([#993]({{ site.repository }}/issues/993)) -- Allow 'excerpt' in YAML Front-Matter to override the extracted excerpt ([#946]({{ site.repository }}/issues/946)) -- Fix cascade problem with site.baseurl, site.port and site.host. ([#935]({{ site.repository }}/issues/935)) -- Filter out directories with valid post names ([#875]({{ site.repository }}/issues/875)) -- Fix symlinked static files not being correctly built in unsafe mode ([#909]({{ site.repository }}/issues/909)) -- Fix integration with directory_watcher 1.4.x ([#916]({{ site.repository }}/issues/916)) -- Accepting strings as arguments to jekyll-import command ([#910]({{ site.repository }}/issues/910)) -- Force usage of older directory_watcher gem as 1.5 is broken ([#883]({{ site.repository }}/issues/883)) -- Ensure all Post categories are downcase ([#842]({{ site.repository }}/issues/842), [#872]({{ site.repository }}/issues/872)) -- Force encoding of the rdiscount TOC to UTF8 to avoid conversion errors ([#555]({{ site.repository }}/issues/555)) -- Patch for multibyte URI problem with jekyll serve ([#723]({{ site.repository }}/issues/723)) -- Order plugin execution by priority ([#864]({{ site.repository }}/issues/864)) -- Fixed Page#dir and Page#url for edge cases ([#536]({{ site.repository }}/issues/536)) -- Fix broken post_url with posts with a time in their YAML Front-Matter ([#831]({{ site.repository }}/issues/831)) -- Look for plugins under the source directory ([#654]({{ site.repository }}/issues/654)) -- Tumblr Migrator: finds `_posts` dir correctly, fixes truncation of long - post names ([#775]({{ site.repository }}/issues/775)) -- Force Categories to be Strings ([#767]({{ site.repository }}/issues/767)) -- Safe YAML plugin to prevent vulnerability ([#777]({{ site.repository }}/issues/777)) -- Add SVG support to Jekyll/WEBrick. ([#407]({{ site.repository }}/issues/407), [#406]({{ site.repository }}/issues/406)) -- Prevent custom destination from causing continuous regen on watch ([#528]({{ site.repository }}/issues/528), [#820]({{ site.repository }}/issues/820), [#862]({{ site.repository }}/issues/862)) - ### Site Enhancements -- Responsify ([#860]({{ site.repository }}/issues/860)) -- Fix spelling, punctuation and phrasal errors ([#989]({{ site.repository }}/issues/989)) -- Update quickstart instructions with `new` command ([#966]({{ site.repository }}/issues/966)) -- Add docs for page.excerpt ([#956]({{ site.repository }}/issues/956)) -- Add docs for page.path ([#951]({{ site.repository }}/issues/951)) -- Clean up site docs to prepare for 1.0 release ([#918]({{ site.repository }}/issues/918)) -- Bring site into master branch with better preview/deploy ([#709]({{ site.repository }}/issues/709)) -- Redesigned site ([#583]({{ site.repository }}/issues/583)) +{: #site-enhancements-v1-0-0} - ### Development Fixes -- Exclude Cucumber 1.2.4, which causes tests to fail in 1.9.2 ([#938]({{ site.repository }}/issues/938)) -- Added "features:html" rake task for debugging purposes, cleaned up - cucumber profiles ([#832]({{ site.repository }}/issues/832)) -- Explicitly require HTTPS rubygems source in Gemfile ([#826]({{ site.repository }}/issues/826)) -- Changed Ruby version for development to 1.9.3-p374 from p362 ([#801]({{ site.repository }}/issues/801)) -- Including a link to the GitHub Ruby style guide in CONTRIBUTING.md ([#806]({{ site.repository }}/issues/806)) -- Added script/bootstrap ([#776]({{ site.repository }}/issues/776)) -- Running Simplecov under 2 conditions: ENV(COVERAGE)=true and with Ruby version - of greater than 1.9 ([#771]({{ site.repository }}/issues/771)) -- Switch to Simplecov for coverage report ([#765]({{ site.repository }}/issues/765)) +{: #development-fixes-v1-0-0} - -## 0.12.1 / 2013-02-19 -### Minor Enhancements -- Update Kramdown version to 0.14.1 ([#744]({{ site.repository }}/issues/744)) -- Test Enhancements -- Update Rake version to 10.0.3 ([#744]({{ site.repository }}/issues/744)) -- Update Shoulda version to 3.3.2 ([#744]({{ site.repository }}/issues/744)) -- Update Redcarpet version to 2.2.2 ([#744]({{ site.repository }}/issues/744)) - -## 0.12.0 / 2012-12-22 -### Minor Enhancements -- Add ability to explicitly specify included files ([#261]({{ site.repository }}/issues/261)) -- Add --default-mimetype option ([#279]({{ site.repository }}/issues/279)) -- Allow setting of RedCloth options ([#284]({{ site.repository }}/issues/284)) -- Add post_url Liquid tag for internal post linking ([#369]({{ site.repository }}/issues/369)) -- Allow multiple plugin dirs to be specified ([#438]({{ site.repository }}/issues/438)) -- Inline TOC token support for RDiscount ([#333]({{ site.repository }}/issues/333)) -- Add the option to specify the paginated url format ([#342]({{ site.repository }}/issues/342)) -- Swap out albino for pygments.rb ([#569]({{ site.repository }}/issues/569)) -- Support Redcarpet 2 and fenced code blocks ([#619]({{ site.repository }}/issues/619)) -- Better reporting of Liquid errors ([#624]({{ site.repository }}/issues/624)) -- Bug Fixes -- Allow some special characters in highlight names -- URL escape category names in URL generation ([#360]({{ site.repository }}/issues/360)) -- Fix error with limit_posts ([#442]({{ site.repository }}/issues/442)) -- Properly select dotfile during directory scan ([#363]({{ site.repository }}/issues/363), [#431]({{ site.repository }}/issues/431), [#377]({{ site.repository }}/issues/377)) -- Allow setting of Kramdown smart_quotes ([#482]({{ site.repository }}/issues/482)) -- Ensure front-matter is at start of file ([#562]({{ site.repository }}/issues/562)) - +- Allow setting of Kramdown `smart_quotes` ([#482]({{ site.repository }}/issues/482)) +- Ensure front matter is at start of file ([#562]({{ site.repository }}/issues/562)) -## 0.11.2 / 2011-12-27 -- Bug Fixes -- Fix gemspec - -## 0.11.1 / 2011-12-27 -- Bug Fixes -- Fix extra blank line in highlight blocks ([#409]({{ site.repository }}/issues/409)) -- Update dependencies - -## 0.11.0 / 2011-07-10 -### Major Enhancements -- Add command line importer functionality ([#253]({{ site.repository }}/issues/253)) -- Add Redcarpet Markdown support ([#318]({{ site.repository }}/issues/318)) -- Make markdown/textile extensions configurable ([#312]({{ site.repository }}/issues/312)) -- Add `markdownify` filter - ### Minor Enhancements -- Switch to Albino gem -- Bundler support -- Use English library to avoid hoops ([#292]({{ site.repository }}/issues/292)) -- Add Posterous importer ([#254]({{ site.repository }}/issues/254)) -- Fixes for Wordpress importer ([#274]({{ site.repository }}/issues/274), [#252]({{ site.repository }}/issues/252), [#271]({{ site.repository }}/issues/271)) -- Better error message for invalid post date ([#291]({{ site.repository }}/issues/291)) -- Print formatted fatal exceptions to stdout on build failure -- Add Tumblr importer ([#323]({{ site.repository }}/issues/323)) -- Add Enki importer ([#320]({{ site.repository }}/issues/320)) -- Bug Fixes -- Secure additional path exploits +{: #minor-enhancements-v0-11-0} - -## 0.10.0 / 2010-12-16 -- Bug Fixes -- Add --no-server option. - +- Add `--no-server` option. -## 0.9.0 / 2010-12-15 -### Minor Enhancements -- Use OptionParser's `[no-]` functionality for better boolean parsing. -- Add Drupal migrator ([#245]({{ site.repository }}/issues/245)) -- Complain about YAML and Liquid errors ([#249]({{ site.repository }}/issues/249)) -- Remove orphaned files during regeneration ([#247]({{ site.repository }}/issues/247)) -- Add Marley migrator ([#28]({{ site.repository }}/issues/28)) - -## 0.8.0 / 2010-11-22 -### Minor Enhancements -- Add wordpress.com importer ([#207]({{ site.repository }}/issues/207)) -- Add --limit-posts cli option ([#212]({{ site.repository }}/issues/212)) -- Add uri_escape filter ([#234]({{ site.repository }}/issues/234)) -- Add --base-url cli option ([#235]({{ site.repository }}/issues/235)) -- Improve MT migrator ([#238]({{ site.repository }}/issues/238)) -- Add kramdown support ([#239]({{ site.repository }}/issues/239)) -- Bug Fixes -- Fixed filename basename generation ([#208]({{ site.repository }}/issues/208)) -- Set mode to UTF8 on Sequel connections ([#237]({{ site.repository }}/issues/237)) -- Prevent `_includes` dir from being a symlink - -## 0.7.0 / 2010-08-24 -### Minor Enhancements -- Add support for rdiscount extensions ([#173]({{ site.repository }}/issues/173)) -- Bug Fixes -- Highlight should not be able to render local files -- The site configuration may not always provide a 'time' setting ([#184]({{ site.repository }}/issues/184)) - -## 0.6.2 / 2010-06-25 -- Bug Fixes -- Fix Rakefile 'release' task (tag pushing was missing origin) -- Ensure that RedCloth is loaded when textilize filter is used ([#183]({{ site.repository }}/issues/183)) -- Expand source, destination, and plugin paths ([#180]({{ site.repository }}/issues/180)) -- Fix page.url to include full relative path ([#181]({{ site.repository }}/issues/181)) - +- Fix `page.url` to include full relative path ([#181]({{ site.repository }}/issues/181)) -## 0.6.1 / 2010-06-24 -- Bug Fixes -- Fix Markdown Pygments prefix and suffix ([#178]({{ site.repository }}/issues/178)) - -## 0.6.0 / 2010-06-23 -### Major Enhancements -- Proper plugin system ([#19]({{ site.repository }}/issues/19), [#100]({{ site.repository }}/issues/100)) -- Add safe mode so unsafe converters/generators can be added -- Maruku is now the only processor dependency installed by default. - Other processors will be lazy-loaded when necessary (and prompt the - user to install them when necessary) ([#57]({{ site.repository }}/issues/57)) - +- Maruku is now the only processor dependency installed by default. Other processors will be lazy-loaded when necessary (and prompt the user to install them when necessary) ([#57]({{ site.repository }}/issues/57)) ### Minor Enhancements -- Inclusion/exclusion of future dated posts ([#59]({{ site.repository }}/issues/59)) -- Generation for a specific time ([#59]({{ site.repository }}/issues/59)) -- Allocate site.time on render not per site_payload invocation ([#59]({{ site.repository }}/issues/59)) -- Pages now present in the site payload and can be used through the - site.pages and site.html_pages variables -- Generate phase added to site#process and pagination is now a generator -- Switch to RakeGem for build/test process -- Only regenerate static files when they have changed ([#142]({{ site.repository }}/issues/142)) -- Allow arbitrary options to Pygments ([#31]({{ site.repository }}/issues/31)) -- Allow URL to be set via command line option ([#147]({{ site.repository }}/issues/147)) -- Bug Fixes -- Render highlighted code for non markdown/textile pages ([#116]({{ site.repository }}/issues/116)) -- Fix highlighting on Ruby 1.9 ([#65]({{ site.repository }}/issues/65)) -- Fix extension munging when pretty permalinks are enabled ([#64]({{ site.repository }}/issues/64)) -- Stop sorting categories ([#33]({{ site.repository }}/issues/33)) -- Preserve generated attributes over front matter ([#119]({{ site.repository }}/issues/119)) -- Fix source directory binding using Dir.pwd ([#75]({{ site.repository }}/issues/75)) +{: #minor-enhancements-v0-6-0} - +- Fix source directory binding using `Dir.pwd` ([#75]({{ site.repository }}/issues/75)) -## 0.5.7 / 2010-01-12 -### Minor Enhancements -- Allow overriding of post date in the front matter ([#62]({{ site.repository }}/issues/62), [#38]({{ site.repository }}/issues/38)) -- Bug Fixes -- Categories isn't always an array ([#73]({{ site.repository }}/issues/73)) -- Empty tags causes error in read_posts ([#84]({{ site.repository }}/issues/84)) -- Fix pagination to adhere to read/render/write paradigm -- Test Enhancement -- cucumber features no longer use site.posts.first where a better - alternative is available - +- Cucumber features no longer use site.posts.first where a better alternative is available -## 0.5.6 / 2010-01-08 -- Bug Fixes -- Require redcloth >= 4.2.1 in tests ([#92]({{ site.repository }}/issues/92)) -- Don't break on triple dashes in yaml frontmatter ([#93]({{ site.repository }}/issues/93)) - +- Don't break on triple dashes in front matter ([#93]({{ site.repository }}/issues/93)) ### Minor Enhancements -- Allow .mkd as markdown extension -- Use $stdout/err instead of constants ([#99]({{ site.repository }}/issues/99)) -- Properly wrap code blocks ([#91]({{ site.repository }}/issues/91)) -- Add javascript mime type for webrick ([#98]({{ site.repository }}/issues/98)) +{: #minor-enhancements-v0-5-6} - -## 0.5.5 / 2010-01-08 -- Bug Fixes -- Fix pagination % 0 bug ([#78]({{ site.repository }}/issues/78)) -- Ensure all posts are processed first ([#71]({{ site.repository }}/issues/71)) - - -## NOTE -- After this point I will no longer be giving credit in the history; - that is what the commit log is for. +- After this point I will no longer be giving credit in the history; that is what the commit log is for. - ## 0.5.4 / 2009-08-23 -- Bug Fixes -- Do not allow symlinks (security vulnerability) +{: #v0-5-4} - -## 0.5.3 / 2009-07-14 -- Bug Fixes -- Solving the permalink bug where non-html files wouldn't work - ([@jeffrydegrande](https://github.com/jeffrydegrande)) - +{: #v0-5-3} -## 0.5.2 / 2009-06-24 -- Enhancements -- Added --paginate option to the executable along with a paginator object - for the payload ([@calavera](https://github.com/calavera)) -- Upgraded RedCloth to 4.2.1, which makes `` tags work once - again. -- Configuration options set in config.yml are now available through the - site payload ([@vilcans](https://github.com/vilcans)) -- Posts can now have an empty YAML front matter or none at all - ([@bahuvrihi](https://github.com/bahuvrihi)) - Bug Fixes -- Fixing Ruby 1.9 issue that requires to_s on the err object - ([@Chrononaut](https://github.com/Chrononaut)) -- Fixes for pagination and ordering posts on the same day ([@ujh](https://github.com/ujh)) -- Made pages respect permalinks style and permalinks in yml front matter - ([@eugenebolshakov](https://github.com/eugenebolshakov)) -- Index.html file should always have index.html permalink - ([@eugenebolshakov](https://github.com/eugenebolshakov)) -- Added trailing slash to pretty permalink style so Apache is happy - ([@eugenebolshakov](https://github.com/eugenebolshakov)) -- Bad markdown processor in config fails sooner and with better message - ([@gcnovus](https://github.com/gcnovus)) -- Allow CRLFs in yaml frontmatter ([@juretta](https://github.com/juretta)) -- Added Date#xmlschema for Ruby versions < 1.9 +- Solving the permalink bug where non-html files wouldn't work (@jeffrydegrande) + - - -## 0.5.1 / 2009-05-06 -### Major Enhancements -- Next/previous posts in site payload ([@pantulis](https://github.com/pantulis), [@tomo](https://github.com/tomo)) -- Permalink templating system -- Moved most of the README out to the GitHub wiki -- Exclude option in configuration so specified files won't be brought over - with generated site ([@duritong](https://github.com/duritong)) -- Bug Fixes -- Making sure config.yaml references are all gone, using only config.yml -- Fixed syntax highlighting breaking for UTF-8 code ([@henrik](https://github.com/henrik)) -- Worked around RDiscount bug that prevents Markdown from getting parsed - after highlight ([@henrik](https://github.com/henrik)) -- CGI escaped post titles ([@Chrononaut](https://github.com/Chrononaut)) - +- Fixed syntax highlighting breaking for UTF-8 code (@henrik) +- Worked around RDiscount bug that prevents Markdown from getting parsed after highlight (@henrik) +- CGI escaped post titles (@Chrononaut) -## 0.5.0 / 2009-04-07 -### Minor Enhancements -- Ability to set post categories via YAML ([@qrush](https://github.com/qrush)) -- Ability to set prevent a post from publishing via YAML ([@qrush](https://github.com/qrush)) -- Add textilize filter ([@willcodeforfoo](https://github.com/willcodeforfoo)) -- Add 'pretty' permalink style for wordpress-like urls ([@dysinger](https://github.com/dysinger)) -- Made it possible to enter categories from YAML as an array ([@Chrononaut](https://github.com/Chrononaut)) -- Ignore Emacs autosave files ([@Chrononaut](https://github.com/Chrononaut)) -- Bug Fixes -- Use block syntax of popen4 to ensure that subprocesses are properly disposed ([@jqr](https://github.com/jqr)) -- Close open4 streams to prevent zombies ([@rtomayko](https://github.com/rtomayko)) -- Only query required fields from the WP Database ([@ariejan](https://github.com/ariejan)) -- Prevent `_posts` from being copied to the destination directory ([@bdimcheff](https://github.com/bdimcheff)) -- Refactors -- Factored the filtering code into a method ([@Chrononaut](https://github.com/Chrononaut)) -- Fix tests and convert to Shoulda ([@qrush](https://github.com/qrush), [@technicalpickles](https://github.com/technicalpickles)) -- Add Cucumber acceptance test suite ([@qrush](https://github.com/qrush), [@technicalpickles](https://github.com/technicalpickles)) - +- Factored the filtering code into a method (@Chrononaut) +- Fix tests and convert to Shoulda (@qrush, @technicalpickles) +- Add Cucumber acceptance test suite (@qrush, @technicalpickles) -## 0.4.1 -### Minor Enhancements -- Changed date format on wordpress converter (zeropadding) ([@dysinger](https://github.com/dysinger)) -- Bug Fixes -- Add jekyll binary as executable to gemspec ([@dysinger](https://github.com/dysinger)) - +- Add Jekyll binary as executable to gemspec (@dysinger) -## 0.4.0 / 2009-02-03 -### Major Enhancements -- Switch to Jeweler for packaging tasks - ### Minor Enhancements -- Type importer ([@codeslinger](https://github.com/codeslinger)) -- site.topics accessor ([@baz](https://github.com/baz)) -- Add `array_to_sentence_string` filter ([@mchung](https://github.com/mchung)) -- Add a converter for textpattern ([@PerfectlyNormal](https://github.com/PerfectlyNormal)) -- Add a working Mephisto / MySQL converter ([@ivey](https://github.com/ivey)) -- Allowing .htaccess files to be copied over into the generated site ([@briandoll](https://github.com/briandoll)) -- Add option to not put file date in permalink URL ([@mreid](https://github.com/mreid)) -- Add line number capabilities to highlight blocks ([@jcon](https://github.com/jcon)) +{: #minor-enhancements-v0-4-0} + +- Type importer (@codeslinger) +- `site.topics` accessor (@baz) +- Add `array_to_sentence_string` filter (@mchung) +- Add a converter for textpattern (@PerfectlyNormal) +- Add a working Mephisto / MySQL converter (@ivey) +- Allowing .htaccess files to be copied over into the generated site (@briandoll) +- Add option to not put file date in permalink URL (@mreid) +- Add line number capabilities to highlight blocks (@jcon) - Bug Fixes -- Fix permalink behavior ([@cavalle](https://github.com/cavalle)) -- Fixed an issue with pygments, markdown, and newlines ([@zpinter](https://github.com/zpinter)) -- Ampersands need to be escaped ([@pufuwozu](https://github.com/pufuwozu), [@ap](https://github.com/ap)) -- Test and fix the site.categories hash ([@zzot](https://github.com/zzot)) -- Fix site payload available to files ([@matrix9180](https://github.com/matrix9180)) +- Fix permalink behavior (@cavalle) +- Fixed an issue with pygments, markdown, and newlines (@zpinter) +- Ampersands need to be escaped (@pufuwozu, @ap) +- Test and fix the site.categories hash (@zzot) +- Fix site payload available to files (@matrix9180) - ## 0.3.0 / 2008-12-24 -### Major Enhancements -- Added --server option to start a simple WEBrick server on destination - directory ([@johnreilly](https://github.com/johnreilly) and [@mchung](https://github.com/mchung)) +{: #v0-3-0} - +{: #major-enhancements-v0-3-0} -### Minor Enhancements -- Added post categories based on directories containing `_posts` ([@mreid](https://github.com/mreid)) -- Added post topics based on directories underneath `_posts` -- Added new date filter that shows the full month name ([@mreid](https://github.com/mreid)) -- Merge Post's YAML front matter into its to_liquid payload ([@remi](https://github.com/remi)) -- Restrict includes to regular files underneath `_includes` -- Bug Fixes -- Change YAML delimiter matcher so as to not chew up 2nd level markdown - headers ([@mreid](https://github.com/mreid)) -- Fix bug that meant page data (such as the date) was not available in - templates ([@mreid](https://github.com/mreid)) -- Properly reject directories in `_layouts` +- Added `--server` option to start a simple WEBrick server on destination directory (@johnreilly and @mchung) - -## 0.2.1 / 2008-12-15 -- Major Changes -- Use Maruku (pure Ruby) for Markdown by default ([@mreid](https://github.com/mreid)) -- Allow use of RDiscount with --rdiscount flag - +- Use Maruku (pure Ruby) for Markdown by default (@mreid) +- Allow use of RDiscount with `--rdiscount` flag ### Minor Enhancements -- Don't load directory_watcher unless it's needed ([@pjhyett](https://github.com/pjhyett)) +{: #minor-enhancements-v0-2-1} - +- Don't load directory_watcher unless it's needed (@pjhyett) -## 0.2.0 / 2008-12-14 -- Major Changes -- related_posts is now found in site.related_posts - +- related_posts is now found in `site.related_posts` -## 0.1.6 / 2008-12-13 -- Major Features -- Include files in `_includes` with {% raw %}`{% include x.textile %}`{% endraw %} - -## 0.1.5 / 2008-12-12 -### Major Enhancements -- Code highlighting with Pygments if --pygments is specified -- Disable true LSI by default, enable with --lsi - +{: #major-enhancements-v0-1-5} -### Minor Enhancements -- Output informative message if RDiscount is not available ([@JackDanger](https://github.com/JackDanger)) -- Bug Fixes -- Prevent Jekyll from picking up the output directory as a source ([@JackDanger](https://github.com/JackDanger)) -- Skip `related_posts` when there is only one post ([@JackDanger](https://github.com/JackDanger)) +- Code highlighting with Pygments if `--pygments` is specified +- Disable true LSI by default, enable with `--lsi` - +{: #minor-enhancements-v0-1-5} -## 0.1.4 / 2008-12-08 +- Output informative message if RDiscount is not available (@JackDanger) - Bug Fixes -- DATA does not work properly with rubygems +- Prevent Jekyll from picking up the output directory as a source (@JackDanger) +- Skip `related_posts` when there is only one post (@JackDanger) + - -## 0.1.3 / 2008-12-06 -- Major Features -- Markdown support ([@vanpelt](https://github.com/vanpelt)) -- Mephisto and CSV converters ([@vanpelt](https://github.com/vanpelt)) -- Code hilighting ([@vanpelt](https://github.com/vanpelt)) -- Autobuild -- Bug Fixes -- Accept both \r\n and \n in YAML header ([@vanpelt](https://github.com/vanpelt)) - +- Accept both `\r\n` and `\n` in YAML header (@vanpelt) -## 0.1.2 / 2008-11-22 -- Major Features -- Add a real "related posts" implementation using Classifier -- Command Line Changes -- Allow cli to be called with 0, 1, or 2 args intuiting dir paths - if they are omitted - +- Allow cli to be called with 0, 1, or 2 args intuiting dir paths if they are omitted -## 0.1.1 / 2008-11-22 -- Minor Additions -- Posts now support introspectional data e.g. {% raw %}`{{ page.url }}`{% endraw %} - -## 0.1.0 / 2008-11-05 -- First release -- Converts posts written in Textile -- Converts regular site pages -- Simple copy of binary files - -## 0.0.0 / 2008-10-19 -- Birthday! - +{: #v0-0-0} +- Birthday! diff --git a/_docs/includes.md b/_docs/includes.md new file mode 100644 index 0000000..05175cd --- /dev/null +++ b/_docs/includes.md @@ -0,0 +1,212 @@ +--- +title: Includes(インクルード) +permalink: /docs/includes/ +--- + + +`include`タグは、`_includes`フォルダの他のファイルを入れ込む事を可能にします。 + + + +{% raw %} +```liquid +{% include footer.html %} +``` +{% endraw %} + +Jekyllはソースディレクトリのrootにある`_includes`ディレクトリのファイル(この場合は`footer.html`)を探し、コンテンツに挿入します。 + + + +### 相対的な他のファイルをインクルードする + + +`include_relative`タグを使用することで、現在のファイルから相対的な位置のファイルを挿入することもできます。 + + + +{% raw %} +```liquid +{% include_relative somedir/footer.html %} +``` +{% endraw %} + +`_includes`ディレクトリに挿入するコンテンツを置いておく必要はありません。タグを使用するファイルから、挿入したいファイルを相対パスで指定します。例えば、`_posts/2014-09-03-my-file.markdown`で`include_relative`を使用すると、`_posts`ディレクトリのファイルやそのサブディレクトリのファイルを挿入できます。 + + + +`../`は使用できませんので、上位のディレクトリのファイルは挿入できないことに注意してください。 + + + +`include`タグの変数など全ての機能は、`include_relative`でも使用できます。 + + + +### インクルードファイルを変数で指定する + + +埋め込むファイルの名前は、実際のファイル名の代わりに変数として指定できます。例えば、ページのfront matterに次のように変数を定義したとします。 + + + +```yaml +--- +title: My page +my_variable: footer_company_a.html +--- +``` + +そうすれば、その変数をincludeで参照できます。 + + + +{% raw %} +```liquid +{% if page.my_variable %} + {% include {{ page.my_variable }} %} +{% endif %} +``` +{% endraw %} + +この例では、`_includes`ディレクトリの`footer_company_a.html`ファイルが挿入されます。 + + + +### インクルードにパラメータを渡す + + +インクルードにパラメータを渡すこともできます。例えば、`_includes`フォルダの`note.html`ファイルに次の記載があるとします。 + + + +{% raw %} +```liquid + +``` +{% endraw %} + +`{% raw %}{{ include.content }}{% endraw %}`はincludeでそのパラメータの値を指定した時に入力される変数です。指定は次のように行います。 + + + +{% raw %} +```liquid +{% include note.html content="This is my sample note." %} +``` +{% endraw %} + +`content`の値(今回は`This is my sample note`)が{% raw %}`{{ include.content }}`{% endraw %}に挿入されます。 + + + +インクルードにパラメータを渡すのは、Markdownコンテンツから複雑な部分を隠したいときに役立ちます。 + + + +例えば、画像を特別なフォーマットで使用しようと思っていて、著者にこの複雑なフォーマットを覚えさせたくない場合です。一つの方法として、includeとパラメータを使用して、シンプルにします。以下にincludeを使用したいと思うようなフォーマットの例を示します。 + + + +```html +
    + + Jekyll logo + +
    This is the Jekyll logo
    +
    +``` + +これを、インクルードとパラメータを使用して、次のようにテンプレート化することができます。 + + + +{% raw %} +```liquid +
    + + {{ include.alt }} + +
    {{ include.caption }}
    +
    +``` +{% endraw %} + +このインクルードの内容には5つのパラメータがあります。 + + + +* `url` +* `max-width` +* `file` +* `alt` +* `caption` + +このinclude(ファイル名は`image.html`とします)に全てのパラメータを渡す例です。 + + + +{% raw %} +```liquid +{% include image.html url="http://jekyllrb.com" +max-width="200px" file="logo.png" alt="Jekyll logo" +caption="This is the Jekyll logo." %} +``` +{% endraw %} + +これで、出力されるHTMLは最初に示したものになります。 + + + +ユーザーがパラメータを指定しない状況への対策として、[Liquid's default filter](https://shopify.github.io/liquid/filters/default/){:target="_blank"}を使用できます。 + + + +全体として、オーディオクリップやビデオクリップの挿入、アラート、特別なフォーマットなど、さまざまな用途のテンプレートとして機能するインクルードを作成できます。あまりにも多くのインクルードを使うことは避けるようにしてください。サイトの構築時間が遅くなります。例えば、画像を挿入する度にインクルードを使うのは避けるべきです。(上記のテクニックは特別な画像のための例です。) + + + +### インクルードにパラメータ変数を渡す + + +インクルードに渡したいパラメータが、文字列ではなく変数である場合もあるでしょう。例えば実際の製品の名前ではなく、{% raw %}`{{ site.product_name }}`{% endraw %}を使用して製品の全てのインスタンスを参照している場合です。(この場合、`_config.yml`ファイルで`product_name`キーに製品名が設定されています) + + + +インクルードに渡すパラメータの値に中括弧は使用できません。例えば、{% raw %}`"The latest version of {{ site.product_name }} is now available."`{% endraw %}の値のパラメータは渡せません。 + + + +インクルードに渡す値に変数を含める場合は、その前に全体を変数として格納する必要があります。`capture`タグを使用して変数を作成します。 + + + +{% raw %} +```liquid +{% capture download_note %} +The latest version of {{ site.product_name }} is now available. +{% endcapture %} +``` +{% endraw %} + +captureした変数をインクルードのパラメータとして渡します。文字列ではなくなったので、変数名を引用符で囲まないでください。 + + + +{% raw %} +```liquid +{% include note.html content=download_note %} +``` +{% endraw %} diff --git a/_docs/index.md b/_docs/index.md index 2e651f0..e45dce7 100644 --- a/_docs/index.md +++ b/_docs/index.md @@ -1,136 +1,59 @@ --- -layout: docs -title: ようこそ -next_section: quickstart -permalink: /docs/home/ -base_revision: 0fbdc6944041147c2d21b306751b078860b6603b[refs/heads/master] +title: クイックスタート +permalink: /docs/ +redirect_from: + - /docs/home/ + - /docs/quickstart/ + - /docs/extras/ --- - - -このサイトは Jekyll の包括的なガイドを目指しています。 -私たちはあなたのサイトの起動と動作、コンテンツの作成と管理、 -サイトの動作や見た目のカスタマイズ、様々な環境へのデプロイのようなトピックをカバーし、 -Jekyll 自体の将来の開発への参加について、いくつかアドバイスします。 - - - -## Jekyll とは一体何ですか? - - - -Jekyll はシンプルな、ブログを意識した静的サイトジェネレータです。 -それは様々なフォーマットの生テキストファイルを含むテンプレートディレクトリをとり、 -[Markdown](http://daringfireball.net/projects/markdown/) (または -[Textile](http://redcloth.org/textile)) や -[Liquid](http://wiki.shopify.com/Liquid) -コンバータを通して実行し、あなたの好みの Web サーバとサービス提供に適した、 -完全かつすぐに公開できる静的 Web サイトを吐き出します。 -Jekyll は GitHub Pages の背後で動いているエンジンでもあります。このことは、 -プロジェクトのページ、ブログまたは Web サイトをGitHub のサーバから**無料で**ホストするために -Jekyll を使用できることを意味します。 - - - -## 役に立つヒント集 - - - -このガイドには Jekyll の利用をより簡単に、より楽しく、より危険が少なく -できる、ささやかだけれども役に立つ多くの情報があります。 -以下に、注意すべき点を示します。 - - - -
    -
    ProTips™ はあなたが Jekyll からより多くのことを得る助けになります
    -

    Jekyll の達人になるのを助ける tips や仕掛けがあります!

    -
    - - - -
    -
    Notes は役に立つ情報です
    -

    Jekyll を理解するために時々必要となる追加情報です。

    -
    - - - -
    -
    Warnings は、あなたがものを破壊してしまわないよう手助けします
    -

    もし、あなたが絶体絶命の事態を回避したいなら、これらのメッセージに注意してください。

    -
    - - - -
    -
    この注釈付きの機能はリリースされていません
    -

    このウェブサイトの中には、まだリリースされていない将来のバージョンのJekyllのための情報が含まれています。

    -
    - - - -もし、あなたが私たちがカバーしていない何かに途中で出くわしたり、 -他の人が便利だと思う tips を知っているならば、[issueに報告(英語)]({{ site.repository }}/issues/new) をお願いします。 -そうすれば、私たちはこのガイドに含めることを検討します。 - - + + +Jekyllはシンプルで、拡張できる、静的サイトジェネレータです。 +好きなマークアップ言語で書かれたテキストを用意すれば、Jekyllはレイアウトを合成して静的サイトを作成します。 +このプロセスを通じ、サイトのURLの見た目をどうするか、レイアウトでどのデータを表示するかなどを調整することができます。 + + +## 説明 + + +1. [Ruby開発環境]({{ "/docs/installation/" | relative_url }})をフルでインストールします + +2. Jekyllと[bundler]({{ "/docs/ruby-101/#bundler" | relative_url }}) [gems]({{ "/docs/ruby-101/#gems" | relative_url }})をインストールします。 + +``` +gem install jekyll bundler +``` +3. `./myblog`に新しいJkyllサイトを作ります + +``` +jekyll new myblog +``` +4. 新しいディレクトリに移動します + +``` +cd myblog +``` +5. サイトを構築し、ローカルサーバ上に出現させます + +``` +bundle exec jekyll serve +``` +6. さあ[http://localhost:4000](http://localhost:4000){:target="_blank"}をブラウザで見てみましょう + + +上記の作業中に予期しないエラーが発生した場合は、[トラブルシューティング]({{ "/docs/troubleshooting/#configuration-problems" | relative_url }})ページや既に紹介した[必要条件]({{ "/docs/installation/#requirements" | relative_url }})ページを参照してください。development headersや他の前提条件が整っていない可能性があります。 + diff --git a/_docs/installation.md b/_docs/installation.md index 0cd7f36..3bf8d1e 100644 --- a/_docs/installation.md +++ b/_docs/installation.md @@ -1,256 +1,41 @@ --- -layout: docs title: インストール -prev_section: quickstart -next_section: usage +description: macOS、GNU/Linux、WindowsへのJikyllインストールガイド permalink: /docs/installation/ -base_revision: 0fbdc6944041147c2d21b306751b078860b6603b[refs/heads/master] --- - - - -Jekyll は数分でインストールと運用準備ができます。 -もし、それが悩みの種となっていたら、[issue(英語)]({{ site.repository }}/issues/new)に -あなたが遭遇した問題を報告することで(または、プルリクエスト送信で)、我々がプロセスを -より簡単に変更するかもしれません。 - - - -### 必要条件 - - - -Jekyll のインストールは簡単で単純明快です。 -しかし、いくつかの必要条件があり、 -インストールを始める前にあなたのシステムで -使用されていることを確かめる必要があります。 - - - -- [Ruby](http://www.ruby-lang.org/en/downloads/) -- [RubyGems](http://rubygems.org/pages/download) -- Linux, Unix または Mac OS X -- [NodeJS](http://nodejs.org)か、あるいは別のJavaScriptランタイム(CoffeeScriptをサポートするため) - - - -
    -
    Jekyll を Windows で実行する
    -

    - Windowsは公式にはサポートしていませんが、Windows上でJekyllを実行できるかもしれません。 - Windows向けのドキュメントページに、説明があります。 -

    -
    - - - -## Rubygems を使ったインストール - - - -Jekyll をインストールする最もよい方法は -[RubyGems](http://rubygems.org/pages/download) を経由する事です。 -ターミナルプロンプトで、単純に Jekyll をインストールするには -以下のコマンドを実行します。 - - - -{% highlight bash %} -$ gem install jekyll -{% endhighlight %} - - - -Jekyll の gem の全ての依存関係は、上記のコマンドで自動的にインストールされるため、 -あなたはそれらについて心配する必要はありません。 -もし Jekyll のインストールに問題が発生した場合、 -Jekyll コミュニティは、皆のための体験を向上できるので -[トラブルシューティング](../troubleshooting/) ページをチェックするか、 -[その問題を報告(英語)]({{ site.repository }}/issues/new) してください。 - - - -
    -
    Xcode コマンドラインツールをインストール
    -

    - ネイティブ拡張を利用したJekyllの依存関係をインストールする際に問題が生じた場合、 - あなたがMax OS Xを使っているなら、Xcodeと、 - 付属のコマンドラインツールをインストールする必要があるでしょう。 - ダウンロードは、 - Preferences → Downloads → Components. -

    -
    - - - -## Pre-releases - - - -pre-release をインストールするためには、必要なものをインストールした状態で、以下を実行してください。 - - - -{% highlight bash %} -gem install jekyll --pre -{% endhighlight %} - - - -このコマンドで、最新の pre-release がインストールできます。もし、特定のバージョンの pre-release を使いたい場合は `-v` オプションを使い、インストールしたいバージョンを指定してください。 - - - -{% highlight bash %} -gem install jekyll -v '2.0.0.alpha.1' -{% endhighlight %} - - - -もし、開発バージョンの Jekyll をインストールしたい場合、少し手順が複雑です。 -開発バージョンでは最新の素晴らしい利点を得ることができますが、安定性に欠ける恐れがあります。 - - - -{% highlight bash %} -$ git clone git://github.com/jekyll/jekyll.git -$ cd jekyll -$ script/bootstrap -$ bundle exec rake build -$ ls pkg/*.gem | head -n 1 | xargs gem install -l -{% endhighlight %} +--- --> - +Jekyllは多くのシステムにインストールできる[Ruby Gem]({{ "/docs/ruby-101/#gems" | relative_url }})です。 + -## その他の追加機能 +## 必要条件 + - +* [Ruby](https://www.ruby-lang.org/en/downloads/){:target="_blank"}バージョン{{ site.min_ruby_version }}以上、全てのdevelopment headersを含む。(Rubyのバージョンは、`ruby -v`の実行で確認できます) +* [RubyGems](https://rubygems.org/pages/download){:target="_blank"}(`gem -v`の実行で確認できます) +* [GCC](https://gcc.gnu.org/install/){:target="_blank"}と[Make](https://www.gnu.org/software/make/){:target="_blank"}(あなたのシステムにこれらがインストールされていない場合は、システムのコマンドラインから`gcc -v`、`g++ -v`や`make -v`を実行することで確認できます) -Jekyll には、インストールした方がよい、 Jekyll の使用プランに応じてサポートする -いくつかの(オプションの)追加機能があります。 -これらの追加は LaTeX サポートやコンテンツレンダリングエンジンの選択を含みます。 -詳細については [the extras page](../extras/) をチェックしてください。 + - +## ガイド + -
    -
    ProTip™: シンタックスハイライト有効化
    -

    - Jekyll を使用している人ならば、 Pygments を使用して - シンタックスハイライトを有効化したほうがよいでしょう。 - これ以上進む前にやり方を調べるべきです。 -

    -
    +詳しいインストールの手順は、お使いのOSのガイドをご覧ください。 - + -今やあなたは全てをインストールしたに違いないのだから、さあ取り掛かろう! +* [macOS]({{ "/docs/installation/macos/" | relative_url }}) +* [Ubuntu Linux]({{ "/docs/installation/ubuntu/" | relative_url }}) +* [Other Linux distros]({{ "/docs/installation/other-linux" | relative_url }}) +* [Windows]({{ "/docs/installation/windows/" | relative_url }}) - + diff --git a/_docs/installation/macos.md b/_docs/installation/macos.md new file mode 100644 index 0000000..9b6c51b --- /dev/null +++ b/_docs/installation/macos.md @@ -0,0 +1,186 @@ +--- +title: Jekyll on macOS +permalink: /docs/installation/macos/ +--- + +## コマンドラインツールのインストール + + +最初に、ネイティブエクステンションをコンパイルできるようにするために、コマンドラインツールをインストールします。ターミナルを開いて、実行します。 + + + +```sh +xcode-select --install +``` + +## Rubyのインストール +## Install Ruby + +JekyllはRuby > {{ site.min_ruby_version }}が必須です。 +macOS Mojave 10.14には、ruby 2.3.xのみ付属していますので、新しいバージョンのRubyをインストールする必要があります。 + + + +### With Homebrew {#brew} + +最新のRubyバージョンを実行するには、[Homebrew](https://brew.sh){:target="_blank"}を通じてインストールする必要があります。 + + + +```sh +# Install Homebrew +/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" + +brew install ruby +``` + +brew Rubyパスをshell configに追加するのを忘れないでください。 + + + +``` +export PATH=/usr/local/opt/ruby/bin:$PATH +``` + +ターミナルを再起動し、Rubyのセットアップの更新を確認します。 + + + +```sh +which ruby +# /usr/local/opt/ruby/bin/ruby + +ruby -v +# ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-darwin18] +``` + +現在の安定版Rubyを実行できるようになりました。 + + + +### With rbenv {#rbenv} + +複数のRubyバージョンを管理するために、[rbenv](https://github.com/rbenv/rbenv){:target="_blank"}を使用することもあります。これは、プロジェクトで特定のRubyバージョンを実行する必要がある場合には、とても便利です。 + + + +```sh +# Install Homebrew +/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" + +# Install rbenv and ruby-build +brew install rbenv + +# Setup rbenv integration to your shell +rbenv init + +# Check your install +curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash +``` + +変更を有効にするために、ターミナルを再起動します。これで、選択したRubyバージョンをインストールできます。最新の安定版Rubyを使ってみましょう。 + + + +```sh +rbenv install 2.6.2 +rbenv global 2.6.2 +ruby -v +# ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-darwin18] +``` + +以上です。[rbenv command references](https://github.com/rbenv/rbenv#command-reference){:target="_blank"}を読んで、プロジェクトでの異なるRubyバージョンの使い方を学んでください。 + + + +## Jekyllのインストール + + +後は、[Bundler]({{ "/docs/ruby-101/#bundler" | relative_url }})とJekyllをインストールするだけです。 + + + +### ローカルインストール + + +```sh +gem install --user-install bundler jekyll +``` + +それからRubyのバージョンを取得します。 + + + +```sh +ruby -v +# ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-darwin18] +``` + +それから、パスファイルに以下を追加します。`X.X`には、あなたのRubyバージョンの最初の2桁を入れてください。 + + + +``` +export PATH=$HOME/.gem/ruby/X.X.0/bin:$PATH +``` + +gemパスがホームディレクトリを指していることを確認するには、次のコマンドを実行します。 + + + +```sh +gem env +``` + +`GEM PATHS:`がホームディレクトリを指していることを確認してください。 + + + +{: .note } +最初の2桁が異なるRubyバージョンに更新する度に、パスもあわせて更新する必要があります。 + + + +### グローバルインストール + + +{: .note .warning} +ファイルのパーミッションの問題を解決し、`sudo`を使用するためにRuby Gemsをグローバル環境にインストールすることを、強く推奨します。 + + + +#### Mojave(10.14)の場合 + + +MojaveのSIPプロテクションのため、以下を実行しなければなりません。 + + + +```sh +sudo gem install bundler +sudo gem install -n /usr/local/bin/ jekyll +``` + +#### Mojave以前(<10.14) + + +次を実行するだけです。 + + + +```sh +sudo gem install bundler jekyll +``` + +## 問題が発生しましたか? + + +[トラブルシューティング]({{ "/docs/troubleshooting/" | relative_url }})ページを確認したり、[フォーラムで助けを求めて](https://talk.jekyllrb.com){:target="_blank"}ください。 + + diff --git a/_docs/installation/other-linux.md b/_docs/installation/other-linux.md new file mode 100644 index 0000000..549cb5a --- /dev/null +++ b/_docs/installation/other-linux.md @@ -0,0 +1,27 @@ +--- +title: Jekyll on Linux +permalink: /docs/installation/other-linux/ +--- +他のLinuxディストリビューションへのインストールは、[Ubuntu](../ubuntu/)の場合とよく似ています。 + + + +Fedoraでは、dependenciesを以下でインストールできます。 + + + + ```sh +sudo dnf install ruby ruby-devel @development-tools +``` + +Debianの場合。 + + + +```sh +sudo apt-get install ruby-full build-essential +``` + +後は[Ubuntu](../ubuntu/)と同じです。 + + diff --git a/_docs/installation/ubuntu.md b/_docs/installation/ubuntu.md new file mode 100644 index 0000000..c9714f2 --- /dev/null +++ b/_docs/installation/ubuntu.md @@ -0,0 +1,38 @@ +--- +title: Jekyll on Ubuntu +permalink: /docs/installation/ubuntu/ +--- +Jekyllをインストールする前に、必須のrequiredを全て揃っていることを確認する必要があります。 + + + +```sh +sudo apt-get install ruby-full build-essential zlib1g-dev +``` + +rootユーザーとして、Ruby Gemsをインストールしないのがいいです。ですので、ユーザーアカウントをgemのインストールディレクトリとして設定する必要があります。以下のコマンドは、gemのインストールパスを設定するために、`~/.bashrc`に環境変数を追加します。 + + + +```sh +echo '# Install Ruby Gems to ~/gems' >> ~/.bashrc +echo 'export GEM_HOME="$HOME/gems"' >> ~/.bashrc +echo 'export PATH="$HOME/gems/bin:$PATH"' >> ~/.bashrc +source ~/.bashrc +``` + +最後に、Jekyllをインストールします。 + + + +```sh +gem install jekyll bundler +``` + +以上です。Jekyllを使い始める準備ができました。 + + diff --git a/_docs/installation/windows.md b/_docs/installation/windows.md new file mode 100644 index 0000000..0511ded --- /dev/null +++ b/_docs/installation/windows.md @@ -0,0 +1,219 @@ +--- +title: Jekyll on Windows +permalink: /docs/installation/windows/ +redirect_from: + - /docs/windows/ +--- + +Windowsはまだ公式にサポートされたプラットフォームではありません。ですが、適切な調整を行ってJekyllを使用することができます。このページには、Windowsユーザーから掘り起こされた知識や教訓を集めています。 + + + + +## Jekyllのインストール + + +### Rubyインストーラでインストール + + +JekyllをWindowsで実行する最も簡単な方法は、[Rubyインストーラ](https://rubyinstaller.org/){:target="_blank"}を使用することです。 + + + +RubyインストーラはRuby言語、実行環境、重要なドキュメンテーションなどを含むWindowsベースの自己完結型インストーラです。RubyInstaller-2.4以上のみをカバーしています。古いバージョンは手動で[Devkitをインストール](https://github.com/oneclick/rubyinstaller/wiki/Development-Kit){:target="_blank"}する必要があります。 + + + +1. [RubyInstaller Downloads](https://rubyinstaller.org/downloads/){:target="_blank"}から**Ruby+Devkit**バージョンをダウンロードして、インストールしてください。インストールはデフォルトのオプションを使用してください。 +2. インストールウィザードの最後の段階で、`ridk install`ステップを実行してください。これはネイティブ環境でgemsをインストールするためです。詳しくは[RubyInstaller Documentation](https://github.com/oneclick/rubyinstaller2#using-the-installer-on-a-target-system){:target="_blank"}を読んでください。 +3. `PATH`環境変数への変更を有効にするため、スタートメニューから新しいコマンドプロンプトを開きます。`gem install jekyll bundler`でJekyllとBundlerをインストールします。 +4. Jekyllがインストールされたか、`jekyll -v`で確認します。 + + + +以上で、Jekyllを使用する準備ができました! + + + +### Windows 10でのBashによるインストール + + +Windows10の1607以降を使用している場合、Linux用のWindowsサブシステムでJekyllを[インストール](https://msdn.microsoft.com/en-us/commandline/wsl/install_guide){:target="_blank"}するオプションがあります。 + + + +*注:*[Windows Subsystem for Linux](https://msdn.microsoft.com/en-us/commandline/wsl/about){:target="_blank"}を有効にする必要があります。 + + + +まず、全てのパッケージとリポジトリを最新にします。新しいコマンドプロンプトを開き、以下の入力します。 + + + +```sh +bash +``` + +コマンドプロンプトインスタンスはBashインスタンスになります。今度はリポジトリリストとパッケージを更新しなければなりません + + + +```sh +sudo apt-get update -y && sudo apt-get upgrade -y +``` + +Rubyがインストールできます。それを行うために、Ruby for Ubuntuの最適化バージョンをホストする[BrightBox](https://www.brightbox.com/docs/ruby/ubuntu/){:target="_blank"}のリポジトリを使用します。 + + + +```sh +sudo apt-add-repository ppa:brightbox/ruby-ng +sudo apt-get update +sudo apt-get install ruby2.5 ruby2.5-dev build-essential dh-autoreconf +``` + +次はRuby gemsをアップデートしましょう。 + + + +```sh +gem update +``` + +後はJekyllのインストールを残すのみです。 + + + +```sh +gem install jekyll bundler +``` + +(*注:ここでは`sudo`を使いません。*) + + + +次を実行して、Jekyllが正しくインストールされているかを確認します。 + + + +```sh +jekyll -v +``` + +**以上です!** + + + +`_posts`フォルダを調べることで、時間管理がきちんとできているかを確認することができます。現在の日付けがファイル名のmarkdownファイルがあるはずです。 + + + +
    +
    superuserでないアカウントの問題
    + +

    `jekyll new`コマンドで"Your user account isn't allowed to install to the system RubyGems"のエラーが表示されたら、 トラブルシューティングの"SuperuserでなくJekyllを実行する"の項を見てください。

    + +
    + +**注:** Bash on Ubuntu on Windowsは、まだ開発中です。実行で問題が発生するかもしれません。 + + + + +## エンコード + + +UTF-8を使用している場合、必ず`BOM`はつけないでください。Jekyllに非常に悪いことが起こります。これは、WindowsでJekyllを実行する場合に顕著です。 + + + +さらに、サイト生成プロセス中に`Liquid Exception: Incompatible character encoding`エラーが発生した場合は、コンソールウィンドウのコードページをUTF-8に変更する必要があります。これは次のコマンドで実行できます。 + + + +```sh +chcp 65001 +``` + +## タイムゾーンの管理 + + +Windowsはゾーン情報データのネイティブソースを持っていないので、RubyインタプリタはIANAタイムゾーンを理解しないでしょう。ですので、`TZ`環境変数ではデフォルトのUTC/GMT 00:00を使用します。 + + + +Windowsユーザーは、タイムゾーンを定義するPOSIX形式を使用するようにキーを設定してブログのタイムゾーンを定義することもできます。ですが、DSTルールの変更に合わせて時計を変更することになると、それほどユーザーフレンドリーではありませんでした。 + + + +Jekyllは現在、確立された[IANAタイムゾーンデータベース](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones){:target="_blank"}に基づいてタイムゾーンを内部で設定するために、Rubygemを使用しています。 Jekyll v3.4以降で作成された「新しい」ブログでは、デフォルトで以下のものが`Gemfile`に追加されますが、既存のサイトではWindowsで開発できるように`Gemfile`を更新(およびインストール)する必要があります。 + + + +```ruby +# Windows does not include zoneinfo files, so bundle the tzinfo-data gem +gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] +``` + +
    +
    TZInfo 2.0 不適合
    + +

    + TZ情報ライブラリv2.0はタイムゾーンオフセットの計算方法に変更を加えました。サイトがWindows上でJekyll 3.xでビルドされている場合、このことは投稿の日時を不正確にするでしょう。 +

    + +

    + ですので、Gemfilegem 'tzinfo', '~> 1.2'をリストして、タイムゾーンライブラリをv1.2以上にロックすることをお勧めします。 +

    + +
    + +## 自動再作成 + + +Jekyllは構築またはサーブ中に`--watch`スイッチが指定された場合、`listen` gemを使用して変更を監視します。 `listen`はUNIXシステムを組み込みでサポートしていますが、Windowsとの互換性のために追加のgemが必要になるかもしれません。 + + + +Windows上で自動再生成に問題があった場合は、サイトの`Gemfile`に以下を追加してください。 + + + +```ruby +gem 'wdm', '~> 0.1.1', :install_if => Gem.win_platform? +``` + +Rubyインストーラのバージョンの[Ruby+Devkit](https://rubyinstaller.org/downloads/){:target="_blank"}を使用しなければなりませんし、`wdm`gemのインストールを成功させるためにMSYS2ビルドツールのインストールが必要です。 + + diff --git a/_docs/layouts.md b/_docs/layouts.md new file mode 100644 index 0000000..6498507 --- /dev/null +++ b/_docs/layouts.md @@ -0,0 +1,181 @@ +--- +title: レイアウト +description: placeholder +permalink: /docs/layouts/ +--- + + +レイアウトはコンテンツを包み込むテンプレートです。テンプレートでソースコードを一カ所にまとめることができますので、フッターやナビゲーションをページ毎に繰り返す必要がありません。 + + + +レイアウトは`_layouts`ディレクトリに入れます。慣例として、`default.html`という基本テンプレートを用意し、必要に応じて他のレイアウトがこれを[継承](#inheritance)するようにします。 + + + +
    +
    レイアウトディレクトリ
    + +

    + Jekyllはサイトのsourceのrootかテーマのrootのどちらかで_layoutsディレクトリを探します。 +

    + +

    + 設定ファイルのlayouts_dirキーでレイアウトを入れるディレクトリの名前を変更できますが、そのディレクトリはサイトのsourceのrootにある必要があります。 +

    + +
    + + +## 使い方 + + +まず始めに、`default.html`にテンプレートのソースコードを書きます。`content`は特別な変数で、ポストやページのコンテンツをレンダリングして、入れ込みます。 + + + + + +{% raw %} +``` + + + + + {{ page.title }} + + + + +

    {{ page.title }}

    +
    + {{ content }} +
    +
    + © to me +
    + + +``` +{% endraw %} + +元のファイルの全front matterにアクセスできます。上記の例では、`page.title`がページのfront matterから読み込まれます。 + + + +次にページのfront matterで使用するレイアウトを指定する必要があります。[front matterのデフォルト](/docs/configuration/front-matter-defaults/)を使用して、全ページに設定するのを省くことができます。 + + + +``` +--- +title: My First Page +layout: default +--- + +This is the content of my page +``` + +このページは次のように出力します。 + + + +``` + + + + + My First Page + + + + +

    My First Page

    +
    + This is the content of my page +
    +
    + © to me +
    + + +``` + + +## 継承 + + +レイアウトの継承は、サイトの一部のドキュメントには、既存のレイアウトに何かを追加したい場合に便利です。例としては、ブログのポストには日付と著者を表示したいけれど、他ではベースのレイアウトを使用する場合です。 + + + +その様な場合は、違うレイアウトを作成して、元にするレイアウトをfront matterで指定します。例えば、次のような`_layouts/post.html`を作ります。 + + + +{% raw %} +``` +--- +layout: default +--- +

    {{ page.date }} - Written by {{ page.author }}

    + +{{ content }} +``` +{% endraw %} + +これで、ポストはこのレイアウトを使用して、ページではデフォルトを使用することができます。 + + + +## 変数 + + +レイアウトにもfront matterを設定することができます。Liquidを使用する場合のみ違いがあり、`page`変数ではなく、`layout`変数を使用します。例えば: + + + +{% raw %} +``` +--- +city: San Francisco +--- +

    {{ layout.city }}

    + +{{ content }} +``` +{% endraw %} diff --git a/_docs/liquid.md b/_docs/liquid.md new file mode 100644 index 0000000..58a3620 --- /dev/null +++ b/_docs/liquid.md @@ -0,0 +1,26 @@ +--- +title: Liquid +permalink: /docs/liquid/ +redirect_from: "/docs/templates/" +--- + +Jekyllでは、テンプレートのためにテンプレート用言語のLiquidを使用しています。 + + +一般的に、Liquidで内容を出力するのに2つの中括弧を使用します(例えば、{% raw %}`{{ variable }}`{% endraw %})。また、論理文の実行には、中括弧とパーセントで囲みます(例えば、{% raw %}`{% if statement %}`{% endraw %})。 +Liquidについて更に学びたい場合は、official Liquid Documentationをチェックしてください。 + + +Jekyllではサイトの構築を助けるため、多くの便利なLiquidの追加機能を提供しています。 + + +* [フィルタ]({{ "/docs/liquid/filters/" | relative_url }}) +* [タグ]({{ "/docs/liquid/tags/" | relative_url }}) + + diff --git a/_docs/liquid/filters.md b/_docs/liquid/filters.md new file mode 100644 index 0000000..8e52696 --- /dev/null +++ b/_docs/liquid/filters.md @@ -0,0 +1,159 @@ +--- +title: #Liquid Filters + Liquidフィルタ +permalink: "/docs/liquid/filters/" +shopify_filter_url: https://shopify.github.io/liquid/filters/ +shopify_filters: +- abs +- append +- at_least +- at_most +- capitalize +- ceil +- compact +- concat +- date +- default +- divided_by +- downcase +- escape +- escape_once +- first +- floor +- join +- last +- lstrip +- map +- minus +- modulo +- newline_to_br +- plus +- prepend +- remove +- remove_first +- replace +- replace_first +- reverse +- round +- rstrip +- size +- slice +- sort +- sort_natural +- split +- strip +- strip_html +- strip_newlines +- times +- truncate +- truncatewords +- uniq +- upcase +- url_decode +- url_encode +--- + +全ての標準Liquid[フィルタ](#standard-liquid-filters)はサポートされています(以下をご覧ください)。 + + + +共通のタスクを簡単にするため、Jekyllはいくらかのフィルタを追加していて、それはこのページに全て掲載しています。また、[プラグイン]({{ "/docs/plugins/" | relative_url }})であなた自身のフィルタを作ることもできます。 + + + +
    + + + + + + + + + {% for filter in site.data.jekyll_filters %} + + + + + {% endfor %} + +
    説明フィルタ出力
    +

    {{ filter.name }}

    +

    + {{- filter.description -}} + {%- if filter.version_badge %} + + {{- filter.version_badge -}} + + {% endif -%} +

    +
    + {%- for example in filter.examples %} +

    {{ example.input }}

    + {% if example.output %}

    {{ example.output }}

    {% endif %} + {% endfor -%} +
    +
    + +### `slugify`フィルタのオプション + + +`slugify`フィルタはオプションを受け入れ、それぞれがフィルタが何をするのかを指定します。デフォルトは`default`です。以下に(何をフィルタするのかと共に)示します。 + + + +- `none`: 文字無し +- `raw`: スペース +- `default`: スペースと、英数字以外の文字 +- `pretty`: スペースと、`._~!$&'()+,;=@`を除く英数字以外の文字 +- `ascii`: スペース、英数字以外の文字、ASCII以外の文字 +- `latin`: `default`に似ている。ラテン文字以外は最初に音訳される(例えば、`àèïòü`は `aeiou`に) {%- include docs_version_badge.html version="3.7.0" -%}。 + + + +### `where`フィルタでの`nil`値の検出 {%- include docs_version_badge.html version="4.0.0" -%} + + +プロパティが`nil`や`""`のドキュメントやページの検出に`where`フィルタを使用できます。例えば、 + + + +```liquid +// `my_prop`が設定されていないか、明示的に`nil`が設定されているポストを選択するために`nil`を使う。 +{% raw %}{% assign filtered_posts = site.posts | where: 'my_prop', nil %}{% endraw %} +``` + + + +```liquid +// `my_prop`に空文字が設定されているポストを選択するために、Liquidの特別なリテラル`empty`や`blank`を使う。 +{% raw %}{% assign filtered_posts = site.posts | where: 'my_prop', empty %}{% endraw %} +``` + + + +{: #standard-liquid-filters} +### 標準のLiquidフィルタ + + +利便性のため、こちらに全ての[Liquidフィルタ]({{ page.shopify_filter_url }})のリストを、公式Liquidドキュメンテーション内の使用例へのリンクと共に掲載しています。 + + + +{% for filter in page.shopify_filters %} +- [{{ filter }}]({{ filter | prepend: page.shopify_filter_url | append: '/' }}){: target="_blank"} +{% endfor %} diff --git a/_docs/liquid/tags.md b/_docs/liquid/tags.md new file mode 100644 index 0000000..5e4e4f3 --- /dev/null +++ b/_docs/liquid/tags.md @@ -0,0 +1,209 @@ +--- +title: タグフィルタ +permalink: "/docs/liquid/tags/" +--- + + +標準のLiquid[タグ](https://shopify.github.io/liquid/tags/control-flow/){:target="_blank"}は全てサポートされています。Jekyllはサイト構築のためにいくつかの組み込みタグを用意しています。また、あなた自身のタグを[プラグイン]({{ "/docs/plugins/" | relative_url }})を使用して作成することもできます。 + + + +## Includes + +サイトに渡り、繰り返すページ構文がある場合は、[include]({{ "/docs/includes/" | relative_url }})は管理面からもよい方法です。 + + + +## コードの構文ハイライト + + +Jekyllは[Rouge](http://rouge.jneen.net){:target="_blank"}のおかげで100言語以上のシンタックスハイライトを組み込みサポートしています。RougeはJekyll 3以上のデフォルトのハイライターです。Jekyll 2でこれを使用するには、`highlighter`を`rouge`に指定し、`rouge`gemが正しくインストールされていることを確認します。 + + + +もしくは、Jekyll 3.x以下ではコードのハイライトに[Pygments](http://pygments.org){:target="_blank"}を使用することもできます。使用するには、システムにPythonをインストールし、`pygments.rb` gemをインストールし、サイトの設定ファイルで`highlighter`を`pygments`に指定しなければなりません。Pygmentsは[100以上の言語](http://pygments.org/languages/){:target="_blank"}をサポートしています。 + + + +
    +

    Pygmentsの使用は推奨されず、Jekyll 4では公式サポートが無くなります。つまり、highlighter: pygmentsの設定は、Pygmentsのスタイルシートと100%互換のRubyで書かれたRougeの使用に、自動的に変更されます。 +

    + +
    + +コードブロックのシンタックスハイライトのレンダリングは、以下のようにコードを囲みます。 + + + +{% raw %} +```liquid +{% highlight ruby %} +def foo + puts 'foo' +end +{% endhighlight %} +``` +{% endraw %} + +`highlight`タグの引数(上記の例では`ruby`)は言語の識別子です。ハイライトしたい言語の適切な識別子は[Rouge +wiki](https://github.com/jayferd/rouge/wiki/List-of-supported-languages-and-lexers){:target="_blank"}や[Pygments' Lexers page](http://pygments.org/docs/lexers/){:target="_blank"}から“short name”を探してください。 + + + +
    +
    Jekyllはコードブロックに全てのLiquidフィルタを適用します
    + +

    使用する言語に中括弧がある場合、{% raw %}{% endraw %}でコードを囲む必要があります。

    + +
    + +### 行番号 + + +`linenos`という`highlight`の2番目の引数はオプションです。`linenos`引数を含む場合、ハイライトコードは強制的に行番号を含みます。例えば、以下のコードブロックは各行に行番号が振られます。 + + + +{% raw %} +```liquid +{% highlight ruby linenos %} +def foo + puts 'foo' +end +{% endhighlight %} +``` +{% endraw %} + +### シンタックスハイライトのスタイルシート + + +ハイライトを表示するために、ハイライトのスタイルシートを含める必要があります。PygmentsやRougeには、Pygmentsのスタイルシートを使用でき、[こちら](http://help.farbox.com/pygments.html){:target="_blank"}のギャラリーで見つけることができます。 + + + +## リンク + + +### ページのリンク {#link} + + +ポストやページ、コレクションアイテム、ファイルへのリンクは`link`タグで指定したパスへのパーマリンクURLを取得生成します。例えば、`mypage.html`へのリンクに`link`タグを使用した場合、パーマリンクのスタイルを拡張子を含むよう・含まないよう変更したとしても、`link`タグで作成したURLは常に有効です。 + + + +`link`タグを使用するときは、ファイルの元々の拡張子を含めなければなりません。以下にいくつか例を示します。 + + + +{% raw %} +```liquid +{% link _collection/name-of-document.md %} +{% link _posts/2016-07-26-name-of-post.md %} +{% link news/index.html %} +{% link /assets/files/doc.pdf %} +``` +{% endraw %} + +以下のように、Markdownのリンク作成にも`link`タグを使用できます。 + + + +{% raw %} +```liquid +[Link to a document]({% link _collection/name-of-document.md %}) +[Link to a post]({% link _posts/2016-07-26-name-of-post.md %}) +[Link to a page]({% link news/index.html %}) +[Link to a file]({% link /assets/files/doc.pdf %}) +``` +{% endraw %} + +{: .note } +{% include docs_version_badge.html version="v4.0"%}以降、`link`タグの前に`site.baseurl`を追加する必要はありません。 + + + +ポストやページ、コレクションへのパスは、(設定ファイルのある)rootディレクトリからの相対パスで定義されます。既存のページから他のページへのパスではありません。 + + + +例えば、(`pages/folder1/folder2`にある)`page_a.md`で、(`pages/folder1`にある)`page_b.md`へのリンクを作成しているとします。パスは`../page_b.html`ではありません。代わりに、`/pages/folder1/page_b.md`を使用します。 + + + +パスが分からない場合、ページに`{% raw %}{{ page.path }}{% endraw %}`を追加し、パスを表示します。 + + + +`link`または` post_url`タグを使用することの一つの大きな利点はリンク検証です。リンクが存在しない場合、Jekyllはあなたのサイトを構築しません。リンクが壊れていることを警告するので、(リンクが壊れたサイトを構築し公開するのではなく)修正することができます。 + + + +`link`タグにフィルタは追加できませんので注意してください。例えば、`{% raw %}{% link mypage.html | append: "#section1" %} {% endraw %}`のようにLiquidフィルタで文字列を追加することはできません。ページのセクションへのリンクは、通常のHTMlやMarkdownのリンク方法を使用する必要があります。 + + + +### ポストへのリンク + + +サイトのポストへのリンクを行いたい場合、`post_url`タグで指定したポストへのリンクを取得生成できます。 + + + +{% raw %} +```liquid +{{ site.baseurl }}{% post_url 2010-07-21-name-of-post %} +``` +{% endraw %} + +ポストをサブディレクトリに整理している場合は、ポストへのパスにサブディレクトリを含めます。 + + + +{% raw %} +```liquid +{{ site.baseurl }}{% post_url /subdir/2010-07-21-name-of-post %} +``` +{% endraw %} + +`post_url`タグを使用するときは、ファイルの拡張子を含める必要はありません。 + + + +以下のようにMarkdownでのポストへのリンク作成でも、このタグを使用できます。 + + + +{% raw %} +```liquid +[Name of Link]({{ site.baseurl }}{% post_url 2010-07-21-name-of-post %}) +``` +{% endraw %} diff --git a/_docs/maintaining/affinity-team-captain.md b/_docs/maintaining/affinity-team-captain.md new file mode 100644 index 0000000..70d0e10 --- /dev/null +++ b/_docs/maintaining/affinity-team-captain.md @@ -0,0 +1,28 @@ +--- +title: Affinity Team Captains +--- + +**This guide is for affinity team captains.** These special people are **team maintainers** of one of our [affinity teams][] and help triage and evaluate the issues and contributions of others. You may find what is written here interesting, but it’s definitely not for everyone. +{: .note .info } + +## Affinity teams & their captains + +The Jekyll project uses [affinity teams][] to help break up the work of incoming issues and pull requests from community members. We receive a sizeable number of issues and pull requests each week; the use of affinity teams helps distribute this load across a number of specialized groups instead of pushing it all onto @jekyll/core. + +## Responsibilities of Team Captains + +Each affinity team has a few captains who manage the issues and pull requests for that team. When an issue or PR is opened with a `/cc` for a given affinity team, @jekyllbot automatically assigns a random affinity team captain to the issue to triage it. They have access to add labels, reassign the issue, give LGTM's, and so forth. While they do not merge PR's today, they are still asked to review PR's for parts of the codebase under their purview. + +## How do I become a team captain? + +Just ask! Feel free to open an issue on `jekyll/jekyll` and add `/cc @jekyll/core`. We can add you. :smile: + +Alternatively, you can email or otherwise reach out to [@oe](https://github.com/oe) directly if you prefer the more private route. + +## Ugh, I'm tired and don't have time to be a captain anymore. What now? + +No sweat at all! Email [@oe](https://github.com/oe) and ask to be removed. Alternatively, you should be able to go to your team's page on GitHub.com (go to https://github.com/jekyll, click "Teams", click the link to your team) and change your status to either "member" or leave the team. + +We realize that being a captain is no easy feat so we want to make it a great experience. As always, communicate as much as you can with us about what is working, and what isn't. Thanks for dedicating some time to Jekyll! :sparkles: + +[affinity teams]: https://teams.jekyllrb.com/ diff --git a/_docs/maintaining/avoiding-burnout.md b/_docs/maintaining/avoiding-burnout.md new file mode 100644 index 0000000..ea9f88a --- /dev/null +++ b/_docs/maintaining/avoiding-burnout.md @@ -0,0 +1,30 @@ +--- +title: "Avoiding Burnout" +--- + +**This guide is for maintainers.** These special people have **write access** to one or more of Jekyll's repositories and help merge the contributions of others. You may find what is written here interesting, but it’s definitely not for everyone. +{: .note .info } + +# 1. Use Jekyll + +Maintainers of Jekyll should be using it regularly. This is partly because you won't be a good maintainer unless you can put yourself in the shoes of our users, but also because you may at some point decide to stop using Jekyll, and at that point you should also decide to stop being a maintainer and find other things to work on. + +# 2. No Guilt About Leaving + +All maintainers can stop working on Jekyll at any time without any guilt or explanation (like at a job). We may still ask for your help with questions after you leave but you are under no obligation to answer them. If you create a big mess and then leave you still have no obligations but we may think less of you (or, realistically, probably just revert the problematic work). Also, you should probably take a break from Jekyll at least a few times a year. + +This also means contributors should be consumers. If a maintainer finds they are not using a project in the real-world, they should reconsider their involvement with the project. + +# 3. Prioritise Maintainers Over Users + +It's important to be user-focused but ultimately, as long as you follow #1 above, Jekyll's minimum number of users will be the number of maintainers. However, if Jekyll has no maintainers it will quickly become useless to all users and the project will die. As a result, no user complaint, behaviour or need takes priority over the burnout of maintainers. If users do not like the direction of the project, the easiest way to influence it is to make significant, high-quality code contributions and become a maintainer. + +# 4. Learn To Say No + +Jekyll gets a lot of feature requests, non-reproducible bug reports, usage questions and PRs we won't accept. These should be closed out as soon as we realise that they aren't going to be resolved or merged. This is kinder than deciding this after a long period of review. Our issue tracker should reflect work to be done. + +--- + +Thanks to https://gist.github.com/ryanflorence/124070e7c4b3839d4573 which influenced this document. + +Thanks to [Homebrew's "Avoiding Burnout" document](https://github.com/Homebrew/brew/blob/master/docs/Maintainers-Avoiding-Burnout.md) for providing a perfect base for this document. diff --git a/_docs/maintaining/becoming-a-maintainer.md b/_docs/maintaining/becoming-a-maintainer.md new file mode 100644 index 0000000..00abef5 --- /dev/null +++ b/_docs/maintaining/becoming-a-maintainer.md @@ -0,0 +1,38 @@ +--- +title: "Becoming a Maintainer" +--- + +**This guide is for contributors.** These special people have contributed to one or more of Jekyll's repositories, but do not yet have write access to any. You may find what is written here interesting, but it’s definitely not for everyone. +{: .note .info } + +So you want to become a maintainer of a Jekyll project? We'd love to have you! Here are some things we like to see from community members before we promote them to maintainers. + +## 1. Use Jekyll + +You want to maintain Jekyll? Use it often. Do weird things with it. Do normal things with it. Does it work? Does it have any weaknesses? Is there a gap in the product that you think should be filled? + +## 2. Help Triage Issues + +Watch the repository you're interested in. Join [an Affinity Team](https://teams.jekyllrb.com) and receive mentions regarding a particular interest area of the project. When you receive a notification for an issue that has not been triaged by a maintainer, dive in. Can you reproduce the issue? Can you determine the fix? [More tips on Triaging an Issue in our maintainer guide](../triaging-an-issue). Every maintainer loves an issue that is resolved before they get to it. :smiley: + +## 3. Write Documentation + +Good documentation means less confusion for our users and fewer issues to triage. Documentation is always in need of fixes and updates as we change the code. Read through the documentation during your normal usage of the product and submit changes as you feel they are necessary. + +## 4. Write Code + +As a maintainer, you will be reviewing pull requests which update code. You should feel comfortable with the Jekyll codebase enough to confidently review any pull request put forward. In order to become more comfortable, write some code of your own and send a pull request. A great place to start is with any issue labeled "bug" in the issue tracker. Write a test which replicates the problem and fails, then work on fixing the code such that the test passes. + +## 5. Review Pull Requests + +Start by reviewing one pull request a week. Leave detailed comments and [follow our guide for reviewing pull requests](../reviewing-a-pull-request). + +## 6. Ask! + +Open an issue describing your contributions to the project and why you wish to be a maintainer. Issues are nice because you can easily reference where you have demonstrated that you help triage issues, write code & documentation, and review pull requests. You may also email any maintainer privately if you do not feel comfortable asking in the open. + +We would love to expand the team and look forward to many more community members becoming maintainers! + +# Helping Out Elsewhere + +In addition to maintainers of our core and plugin code, the Jekyll team is comprised of moderators for our forums. These helpful community members take a look at the topics posted to [https://talk.jekyllrb.com](https://talk.jekyllrb.com) and ensure they are properly categorized and are acceptable under our Code of Conduct. If you would like to be a moderator, email one of the maintainers with links to where you have answered questions and a request to be added as a moderator. More help is always welcome. diff --git a/_docs/maintaining/index.md b/_docs/maintaining/index.md new file mode 100644 index 0000000..500f9db --- /dev/null +++ b/_docs/maintaining/index.md @@ -0,0 +1,48 @@ +--- +title: Jekyllのメンテナンス +permalink: /docs/maintaining/ +--- + + +**このガイドはJekyllの貢献者と維持管理者向けです。**これらの特別な人々は、1つ以上のジキルのリポジトリに貢献したり、他の人々の貢献を統合するのを助けています。こちらに書かれていることに興味を持つかもしれませんが、万人向けのガイドではありません。 +{: .note .info } + + + + +
    +
    日本語訳注:公式へのリンクです
    +

    ガイドの対象者および性質上、読む必要がある方は原文を読むべきと判断しました。

    +
    + +こんにちは! Jekyllを維持するためのさまざまなプロセスを文書化しています。Jekyllプロジェクトのメンテナになることは大きな責任です。ですから、あなたがメンテナとしてする可能性があるさまざまなタスクのために役立つドキュメントをまとめました。 + + + +- [アフィニティチームとそのキャプテン](https://jekyllrb.com/docs/maintaining/affinity-team-captain/){:target="_blank"} +- [issueの解決](https://jekyllrb.com/docs/maintaining/triaging-an-issue/){:target="_blank"} +- [プルリクエストのレビュー](https://jekyllrb.com/docs/maintaining/reviewing-a-pull-request/){:target="_blank"} +- [プルリクエストのマージ](https://jekyllrb.com/docs/maintaining/merging-a-pull-request/){:target="_blank"} +- [バーンアウトの回避](https://jekyllrb.com/docs/maintaining/avoiding-burnout/){:target="_blank"} +- [スペシャルラベル](https://jekyllrb.com/docs/maintaining/special-labels/){:target="_blank"} +- [新バージョンのリリース](https://jekyllrb.com/docs/maintaining/releasing-a-new-version/){:target="_blank"} + + + + +メンテナになることに興味がありますか? **貢献者**向けのドキュメンテーションはこちらです。 + + + +- [メンテナになる](https://jekyllrb.com/docs/maintaining/becoming-a-maintainer/){:target="_blank"} + + diff --git a/_docs/maintaining/merging-a-pull-request.md b/_docs/maintaining/merging-a-pull-request.md new file mode 100644 index 0000000..0403d05 --- /dev/null +++ b/_docs/maintaining/merging-a-pull-request.md @@ -0,0 +1,55 @@ +--- +title: "Merging a Pull Request" +--- + +**This guide is for maintainers.** These special people have **write access** to one or more of Jekyll's repositories and help merge the contributions of others. You may find what is written here interesting, but it’s definitely not for everyone. +{: .note .info } + +## Code Review + +All pull requests should be subject to code review. Code review is a [foundational value](https://blog.fullstory.com/what-we-learned-from-google-code-reviews-arent-just-for-catching-bugs/) of good engineering teams. Besides providing validation of correctness, it promotes a sense of community and gives other maintainers understanding of all parts of the code base. In short, code review is crucial to a healthy open source project. + +**Read our guide for [Reviewing a pull request](../reviewing-a-pull-request) before merging.** Notably, the change must have tests if for code, and at least two maintainers must give it an OK. + +## Merging + +We have [a helpful little bot](https://github.com/jekyllbot) which we use to merge pull requests. We don't use the GitHub.com interface for two reasons: + +1. You can't modify anything on mobile (e.g. titles, labels) +2. We like to provide a consistent paper trail in the `History.markdown` file for each release + +To merge a pull request, leave a comment thanking the contributor, then add the special merge request: + +```text +Thank you very much for your contribution. Folks like you make this project and community strong. :heart: + +@jekyllbot: merge +dev +``` + +The merge request is made up of three things: + +1. `@jekyllbot:` – this is the prefix our bot looks for when processing commands +2. `merge` – the command +3. `+dev` – the category to which the changes belong. + +The categories match the headings in the `History.markdown` file, and they are: + +1. Major Enhancements (`+major`) – major updates or breaking changes to the code which necessitate a major version bump (v3 ~> v4) +2. Minor Enhancements (`+minor`) – minor updates (with the labels `feature` or `enhancement`) which necessitate a minor version bump (v3.1 ~> v3.2) +3. Bug Fixes (`+bug`) – corrections to code which do not change or add functionality, which necessitate a patch version bump (v3.1.0 ~> v3.1.1) +4. Documentation (`+doc`) - changes to the documentation found in `docs/_docs/` +5. Site Enhancements (`+site`) – changes to the source of [https://jekyllrb.com](https://jekyllrb.com) found in `docs/` +6. Development Fixes (`+dev`) – changes which do not affect user-facing functionality or documentation, such as test fixes or bumping internal dependencies +7. Forward Ports (`+port`) — bug fixes applied to a previous version of Jekyll pulled onto `master`, e.g. cherry-picked commits from `3-1-stable` to `master` + +Once @jekyllbot has merged the pull request, you should see three things: + +1. A successful merge +2. Addition of labels for the necessary category if they aren't already applied +3. A commit to the `History.markdown` file which adds a note about the change + +If you forget the category, that's just fine. You can always go back and move the line to the proper category header later. The category is always necessary for `jekyll/jekyll`, but many plugins have too few changes to necessitate changelog categories. + +## Rejoice + +You did it! Thanks for being a maintainer for one of our official Jekyll projects. Your work means the world to our thousands of users who rely on Jekyll daily. :heart: diff --git a/_docs/maintaining/releasing-a-new-version.md b/_docs/maintaining/releasing-a-new-version.md new file mode 100644 index 0000000..f85f499 --- /dev/null +++ b/_docs/maintaining/releasing-a-new-version.md @@ -0,0 +1,89 @@ +--- +title: "Releasing a new version" +--- + +**This guide is for maintainers.** These special people have **write access** to one or more of Jekyll's repositories and help merge the contributions of others. You may find what is written here interesting, but it’s definitely not for everyone. +{: .note .info } + +The most important thing to understand before making a release is that there's no need to feel nervous. Most things are revertable, and even if you do publish an incomplete gem version, we can always skip that one. Don't hestitate to contact the other maintainers if you feel unsure or don't know what to do next. + +### Bump the version + +The only important place you need to manually bump the version is in `lib/jekyll/version.rb`. Adjust that, and everything else should work fine. + +### Update the history document + +Replace the first header of the history document with a version milestone. This looks like the following: + +```diff +-## HEAD ++## 3.7.1 / 2018-01-25 +``` + +Adjust the version number and the date. The `## HEAD` heading will be regenerated next time a pull request is merged. + +Once you've done this, update the website by running the following command: + +```sh +bundle exec rake site:generate +``` + +This updates the website's changelog, and pushes the versions in various other places. + +It's recommended that you go over the `History.markdown` file manually one more time, in case there are any spelling errors or such. Feel free to fix those manually, and after you're done generating the website changelog, commit your changes. + +## Write a release post + +In case this isn't done already, you can generate a new release post using the included `rake` command: + +```sh +bundle exec rake site:releases:new[3.8.0] +``` + +where `3.8.0` should be replaced with the new version. Then, write the post. Be sure to thank all of the collaborators and maintainers who have contributed since the last release. You can generate a log of their names using the following command: + +```sh +git shortlog -sn master...v3.7.2 +``` + +where, again `v3.7.2` is the last release. Be sure to open a pull request for your release post. + +### Push the version + +Before you do this step, make sure the following things are done: + +- You have permission to push a new gem version to RubyGems +- You're logged into RubyGems on your command line +- A release post has been prepared, and is ideally already live +- All of the prior steps are done, committed, and pushed to `master` + +Really the only thing left to do is to run this command: + +```sh +bundle exec rake release +``` + +This will automatically build the new gem, make a release commit and tag and then push the new gem to RubyGems. Don't worry about creating a GitHub release, @jekyllbot should take care of that. + +And then, you're done! :tada: Feel free to celebrate! + +If you have access to the [@jekyllrb](https://twitter.com/jekyllrb) Twitter account, you should tweet the release post from there. If not, just ask another maintainer to do it or to give you access. + +### Build the docs + +We package our documentation as a :gem: Gem for offline use. + +This is done with the +[**jekyll-docs**](https://github.com/jekyll/jekyll-docs#building) repository, +and more detailed instructions are provided there. + +## For non-core gems + +If you're not a maintainer for `jekyll/jekyll`, the procedure is much simpler in a lot of cases. Generally, the procedure still looks like this: + +- Bump the gem version manually, usually in `lib//version.rb` +- Adjust the history file +- Run `bundle exec rake release` or `script/release`, depending on which of the two exists +- Rejoice + +Be sure to ask your project's maintainers if you're unsure! diff --git a/_docs/maintaining/reviewing-a-pull-request.md b/_docs/maintaining/reviewing-a-pull-request.md new file mode 100644 index 0000000..a0a6e35 --- /dev/null +++ b/_docs/maintaining/reviewing-a-pull-request.md @@ -0,0 +1,46 @@ +--- +title: "Reviewing a Pull Request" +--- + +**This guide is for maintainers.** These special people have **write access** to one or more of Jekyll's repositories and help merge the contributions of others. You may find what is written here interesting, but it’s definitely not for everyone. +{: .note .info } + +## Respond Kindly + +Above all else, please review a pull request kindly. Our community can only be strong if we make it a welcoming and inclusive environment. To further promote this, the Jekyll community is governed by a [Code of Conduct](/docs/conduct/) by which all community members must abide. + +Use emoji liberally :heart: :tada: :sparkles: :confetti_ball: and feel free to be emotive!! Contributions keep this project moving forward and we're always happy to receive them, even if the pull request isn't ultimately merged. + +Mike McQuaid's post on the GitHub blog entitled ["Kindly Closing Pull Requests"](https://github.com/blog/2124-kindly-closing-pull-requests) is a great place to start. It describes various scenarios in which it would be acceptable to close a pull request for reasons other than lack of technical integrity or accuracy. Part of being kind is responding to and resolving pull requests quickly. + +## Respond Quickly + +We should be able to review all pull requests within one week. The only time initial review should take longer is if all the maintainers mysteriously took vacation during the same week. Promptness encourages frequent, high-quality contributions from community members and other maintainers. + +If your response requires a response on the part of the author, please add the `pending-feedback` tag. @jekyllbot will automatically remove the tag once the author of the pull request responds. + +## Resolve Quickly + +Similarly, we should aim to resolve pull requests quickly. If a pull request introduces a feature which does not fit into the core purpose or goal of the project, close it promptly with a kind explanation of why it is not acceptable. + +Leave detailed comments wherever possible. Provide the contributor with context around why the change you are requesting is necessary, or why the question you are asking is important to resolve. The more context we can clearly communicate to the contributor, the better able the contributor is to provide high-quality patches. + +You may close a pull request if more than 30 days pass without a response from the author. + +In some cases, review will involve many weeks of back-and-forth. As long as communication continues, this is fine. Ideally, any PR would be capable of resolution within 30 days of it being opened. + +## Look for Tests + +If this is a code change, are there tests for the updated or added behaviour? Shipping a version with bugs is inevitable, but ensuring changes are tested helps keep bugs and regressions to a minimum. + +## CI Must Pass + +It is fine to ask a contributor to investigate failures on Travis and patch them up before you begin your review. It is helpful to leave a message for the contributor indicating that the tests have failed and that no review will occur before the tests pass. If they ask for help, take a look and assist if you can. + +## Rule of Two + +A pull request may be merged once two maintainers have reviewed the pull request and indicated that it is acceptable to them. There is no need to wait for a third unless one of the two reviewers wishes for another set of eyes. + +## Think Security + +We owe it to our users to ensure that using a theme from the community or building someone else's site doesn't come with built-in security vulnerabilities. Things like where files may be read from and written to are important to keep secure. Jekyll is also the basis for hosted services such as [GitHub Pages](https://pages.github.com), which cannot upgrade when security issues are introduced. diff --git a/_docs/maintaining/special-labels.md b/_docs/maintaining/special-labels.md new file mode 100644 index 0000000..964ff0e --- /dev/null +++ b/_docs/maintaining/special-labels.md @@ -0,0 +1,24 @@ +--- +title: "Special Labels" +--- + +**This guide is for maintainers.** These special people have **write access** to one or more of Jekyll's repositories and help merge the contributions of others. You may find what is written here interesting, but it’s definitely not for everyone. +{: .note .info } + +We use a series of "special labels" on GitHub.com to automate handling of some parts of the pull request and issue process. @jekyllbot may automatically apply or remove certain labels based on actions taken by users or maintainers. Below are the labels and how they work: + +## `pending-feedback` + +This label is used to indicate that we need more information from the issue/PR author in order to continue. It may be that you need more info before you can properly triage a bug report, or that you have some unanswered questions about a PR that need to be resolved before moving forward. You can safely ignore any issue with this label, as it is waiting for feedback. + +## `needs-work` & `pending-rebase` + +These labels are used to indicate that the Git state of a pull request must change. Both are removed once a push is registered (a "synchronize" event for the pull request) and the pull request becomes mergable. Add `needs-work` to a PR if, after your review, it requires code changes. Add `pending-rebase` to a PR if the code is fine but the branch is not automatically mergable with the target branch (e.g. `master`). + +## `stale` + +This label is automatically added and removed by @jekyllbot based on activity on an issue or pull request. The rules for this label are laid out in [Triaging an Issue: Staleness and automatic closure](../triaging-an-issue/#staleness-and-automatic-closure). + +## `pinned` + +This label is for @jekyllbot to ignore the age of the issue, which means that the `stale` label won't be automatically added, and the issue won't be closed after a while. This needs to be set manually, and should be set with care. (The `has-pull-request` label does the same thing, but shouldn't be used to _only_ keep an issue open) diff --git a/_docs/maintaining/triaging-an-issue.md b/_docs/maintaining/triaging-an-issue.md new file mode 100644 index 0000000..36bfdcc --- /dev/null +++ b/_docs/maintaining/triaging-an-issue.md @@ -0,0 +1,54 @@ +--- +title: "Triaging an Issue" +--- + +**This guide is for maintainers.** These special people have **write access** to one or more of Jekyll's repositories and help merge the contributions of others. You may find what is written here interesting, but it’s definitely not for everyone. +{: .note .info } + +Before evaluating an issue, it is important to identify if it is a feature +request or a bug. For the Jekyll project the following definitions are used +to identify a feature or a bug: + +**Feature** - A feature is defined as a request that adds functionality to +Jekyll outside of its current capabilities. +**Bug** - A bug is defined as an issue that identifies an error that a user +(or users) encounter when using current Jekyll functionalities. + +## Feature? + +If the issue describes a feature request, ask: + +1. Is this a setting? [Settings are a crutch](http://ben.balter.com/2016/03/08/optimizing-for-power-users-and-edge-cases/#settings-are-a-crutch) for doing "the right thing". Settings usually point to a bad default or an edge case that could be solved easily with a plugin. Keep the :christmas_tree: of settings as small as possible so as not to reduce the usability of the product. We like the philosophy "decisions not options." +2. Would at least 80% of users find it useful? If even a quarter of our users won't use it, it's very likely that the request doesn't fit our product's core goal. +3. Is there another way to accomplish the end goal of the request? Most feature requests are due to bad documentation for or understanding of a pre-existing feature. See if you can clarify the end goal of the request. What is the user trying to do? Could they accomplish that goal through another feature we already support? +4. Even if 80% of our users will use it, does it fit the core goal of our project? We are writing a tool for making static websites, not a swiss army knife for publishing more generally. + +Feel free to get others' opinions and ask questions of the issue author, but depending upon the answers to the questions above, it may be out of scope for our project. + +If the request is within scope, prioritize it on the product roadmap with the other maintainers. Apply the appropriate tags and ensure the right people have weighed in to define the feature's scope and implementation. If you want to be the _best ever_, submit a PR yourself which adds the feature. + +## Bug? + +### Reproducibility + +If the bug has clear reproduction steps, take a minute to try them. If it helps, write a test in our test suite for the scenario which replicates the problem. Can you reliably replicate the issue? + +If you can't replicate the issue, post your replication steps which didn't work and ask for clarification from the issue author. + +### Supported Platform + +Is the author using a supported platform? We support the latest versions of macOS, Ubuntu, Debian, CentOS, Fedora, and Arch Linux. + +You may close the issue immediately if the author cannot reproduce the issue on a supported platform. For Windows-related problems, leave a comment letting the user know that Windows is not officially supported, but that they may absolutely continue using the issue to communicate with folks from `@jekyll/windows` to further investigate. Additionally, you can point them to Jekyll Talk (https://talk.jekyllrb.com) as a means of getting support from the community. + +If the user is experiencing issues with GitHub Pages or another hosted platform that we cannot reproduce, please direct them to the platform's support channel and close the issue. + +### What they wanted vs. what they got + +An issue without a clear explanation of what the user got and what they were expecting to get is not an issue we can accurately respond to. If the user doesn't provide this information, please ask for clarification and apply the `pending-feedback` label. This information helps us build test cases such that we do not break the behaviour again in the future. The `pending-feedback` label will be removed automatically once the issue author posts a reply. + +Is what they wanted to get something we want to happen? Sometimes a bug report is actually masquerading as a feature request. See the guidance above for handling feature requests. + +### Staleness and automatic closure + +@jekyllbot will automatically mark issues as `stale` if no activity occurs for at least one month. @jekyllbot leaves a comment asking for information about reproducibility in current versions. If no one responds after another month, the issue is automatically closed. This behavior can be suppressed by setting the [`pinned` label](/docs/maintaining/special-labels/#pinned). diff --git a/_docs/markdown-101.md b/_docs/markdown-101.md new file mode 100644 index 0000000..c1090db --- /dev/null +++ b/_docs/markdown-101.md @@ -0,0 +1,6 @@ +--- +title: Markdown 101 +permalink: /docs/markdown-101/ +--- + +# TO WRITE diff --git a/_docs/migrations.md b/_docs/migrations.md index 4b4feee..98833e1 100644 --- a/_docs/migrations.md +++ b/_docs/migrations.md @@ -1,30 +1,14 @@ --- -layout: docs -title: 他のBlogからの移行 -prev_section: assets -next_section: templates +title: ブログの移行 permalink: /docs/migrations/ -base_revision: 0fbdc6944041147c2d21b306751b078860b6603b[refs/heads/master] --- - - +--- --> -もし、他のブログから Jekyll に移行する場合、 -Jekyll のインポーターは移行の手助けをしてくれます。 -あなたのサイトを Jekyll にインポートする方法については、 -[`jekyll-import` docs site](http://import.jekyllrb.com/docs/home/) で -詳しく知ることができます。 +他のブログシステムからJekyllに移動しようとしている場合、Jekyllのインポート機能が移動を手助けしてくれます。Jekyllへのサイトのインポートについては、[`jekyll-import` docs site](https://import.jekyllrb.com/docs/home/){:target="_blank"}をご覧ください。 - +visit our [`jekyll-import` docs site](https://import.jekyllrb.com/docs/home/). --> diff --git a/_docs/pages.md b/_docs/pages.md index f5cea81..055b641 100644 --- a/_docs/pages.md +++ b/_docs/pages.md @@ -1,210 +1,42 @@ --- -layout: docs -title: ページ作成 -prev_section: drafts -next_section: variables +title: Pages(ページ) permalink: /docs/pages/ --- - - -[Post の書き方](../posts/)に加え、あなたが Jekyll サイトで -やりたいもう一つのことは静的なページを作成することです。 -この方法を利用することにより、 Jekyll はファイルとディレクトリを -コピーします、これを行うのは簡単です。 - - - -## ホームページ - - - -あなたが遭遇するほぼ全ての Web サーバの設定では、 -サイトのルートフォルダで(慣例により) `index.html` と呼ばれる HTML ファイルを探し、 -そしてホームページとして表示します。 -あなたが使用する Web サーバが、いくつかの他のファイル名を -デフォルトとして探しにいくと設定されていない限り、 -このファイルは Jekyll が生成したサイトのホームページに変わります。 - - - -
    -
    ProTip™: あなたのホームページで layouts を使用する
    -

    - あなたのサイトの任意の HTML は layouts そして/または includes を - ホームページで使うことができます。 - 共通のコンテンツは、ヘッダーそしてフッターのように、 - レイアウトへ抽出するための優れた候補を作ります。 -

    -
    - - - -## 追加したページの在り処 - - - -あなたが Page として配置した HTML ファイルが -どのように働いてほしいかは場所に依存します。 -Page を作成する主な方法は 2 つあります: - - +--- --> -- サイトのルートフォルダ内に各々の Page として 配置した HTML ファイル -- サイトのルートに各々の Page としてフォルダを作成し、各々の Page のフォルダ内に配置した index.html ファイル +ページはコンテンツの最も基礎となる要素です。(日付に基づかず、スタッフメンバーやレシピのようなグループでも無い)独立したコンテンツに便利です。 - + -どちらの方法もうまくいき(そして、お互いに組み合わせて使用することができます)、 -唯一の本当の違いは結果の URL です。 +ページを追加する最もシンプルな方法は、rootディレクトリに適した名前のHTMLファイルを追加することです。ページを拡張子を`.md`にしてMarkdownで書くこともできます。ビルド時にHTMLに変換されます。 +サイトのホームページ、aboutページ、コンタクトページ、これらをrootディレクトリに配置する例とURLにどのように関連づけられるかを示します。 - - -### HTML ファイルの命名 - - - -Page を追加するもっとも単純な方法は、ルートディレクトリ内に -あなたが作成したいと思う適切な名前の HTML ファイルをただ追加することです。 -ホームページ、アバウトページやコンタクトページを持つサイトについて、 -ルートディレクトリと関連した URL がどのように見えるかここに表します: - - +and associated URLs might look like: --> -{% highlight bash %} +```sh . -|-- _config.yml -|-- _includes/ -|-- _layouts/ -|-- _posts/ -|-- _site/ -|-- about.html # => http://example.com/about.html +|-- about.md # => http://example.com/about.html |-- index.html # => http://example.com/ └── contact.html # => http://example.com/contact.html -{% endhighlight %} +``` - +多くのページがあるのでしたら、サブフォルダに配置することもできます。ページに使用したサブフォルダは、ビルドしたときも`_site`フォルダの中に同じサブフォルダとして配置されます。 -### 名づけられたフォルダが index HTML ファイルを含んでいる場合 + - - -上記の方法には何の問題もありませんが、しかしながら、 -一部の人々はファイル名の拡張子のようなものがなくても URL を維持したいと思っています。 -Jekyll を使用したページできれいな URL を実現するには、 -あなたは単純にトップレベルのページにあなたがほしいと思う必要なフォルダを作成し、 -そして各ページのフォルダに `index.html` ファイルを配置します。 -この方法では、ページの URL は フォルダ名になり、 -Web サーバは `index.html` ファイルを提供します。 -ここでは、この構造がどのように見えるかの例を示します: - - - -{% highlight bash %} -. -├── _config.yml -├── _includes/ -├── _layouts/ -├── _posts/ -├── _site/ -├── about/ -| └── index.html # => http://example.com/about/ -├── contact/ -| └── index.html # => http://example.com/contact/ -└── index.html # => http://example.com/ -{% endhighlight %} - - +## 出力するURLを変更する + -このアプローチは、すべての人々にはあわないかもしれませんが、 -それはきれいな URL を好む人々のために簡単に動作します。 -最終的に決定するのはあなた自身です! +ビルド後のソースファイルでは、特定のフォルダ構成にしたい場合もあるでしょう。[permalinks]({{ "/docs/permalinks" | relative_url }})を使用することで、出力するURLをコントロールできます。 - \ No newline at end of file + diff --git a/_docs/pagination.md b/_docs/pagination.md index 1f986b4..68e3e45 100644 --- a/_docs/pagination.md +++ b/_docs/pagination.md @@ -1,344 +1,135 @@ --- -layout: docs -title: ページネーション -prev_section: permalinks -next_section: plugins +title: Pagination(ページ分け) permalink: /docs/pagination/ -base_revision: 0fbdc6944041147c2d21b306751b078860b6603b[refs/heads/master] --- - - +--- --> -多くのウェブサイト、とりわけブログにおいては、メインの投稿リストを小さなリストに分割して -複数のページにわたって表示させることがごく一般的に行われています。 -Jekyllはページネーションを組み込んでおり、リストのページ分割のために必要となる -適切なファイルとフォルダを自動生成できます。 +多くのWebサイト、特にブログでは、ポストのリストをいくつかの小さなリストに分けて、複数のページに分けて表示することは一般的です。Jekyllにはページ分けプラグインがあり、ページ区切り付きリストに適切なファイルとフォルダを自動的に生成できます。 - + -
    -
    ページネーションはHTMLファイル内でのみ動作します
    -

    - ページネーションはJekyllサイトのMarkdownファイルやTextileファイルでは動作しません。 - HTMLファイルの中で使用された場合のみ動作します。おそらくページネーションは - postsのリストを作成するために使われるでしょうから、このことは問題にならないでしょう。 -

    -
    +Jekyll 3では、`jekyll-paginate`プラグインが、Gemfileや`_config.yml`の`plugins`に含まれています。Jekyll 2ではスタンダードです。 + + -

    - Pagination does not work with Markdown or Textile files in your Jekyll site. - It will only work when used within HTML files. Since you’ll likely be using - this for the list of Posts, this shouldn’t be an issue. + ページ分けはJekyllサイトのMarkdownファイルでは機能しません。index.htmlという名前のHTMLファイルで呼び出されたときのみ機能します。paginate_path設定値でサブディレクトリ無いでページ分けを行うこともできます。

    + ---> - -## ページネーションを有効にする - +## ページ分けの有効化 + -ブログでページネーションを有効にするには、1ページあたりの表示アイテム数の指定を -`_config.yml` に追記します。 +ブログでポストのページ分けを有効にするには、`_config.yml`ふぁいるに1ページに何個のアイテムを表示するかの設定を追加します。 - + -{% highlight yaml %} +```yaml paginate: 5 -{% endhighlight %} +``` - - -生成されたサイトの1ページに表示させたいpost数の最大値を指定してください。 - - - -ページネーションを行うページの生成先を指定することもできます: - - - -{% highlight yaml %} -paginate_path: "blog/page:num" -{% endhighlight %} - - - -この指定は、`blog/index.html` を読み込み、それをLiquidの各分割ページに `paginator` として送り、 -出力を `blog/page:num` に書き込みます。ここで `:num` は `2` から始まるページ番号です。 -もしサイトに12のpostsがあり、 `paginate: 5` が指定されていた場合、 -Jekyllは `blog/index.html` に最初の5件を、 `blog/page2/index.html` に次の5件を、 -`blog/page3/index.html` に最後の2件を書き込んで出力先ディレクトリに配置します。 - - - -## 利用できるLiquidの属性 - - - -ページネーションプラグインは `paginator` Liquidオブジェクトに下記の属性を付与します。 - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    属性内容

    page

    現在のページ番号

    per_page

    ページあたりのpostの件数

    posts

    現在のページのpostのリスト

    total_posts

    サイトのpostの総件数

    total_pages

    分割されたページの総数

    -

    previous_page

    -

    - 前ページのページ番号。 - 前ページがない場合はnil -

    -

    previous_page_path

    -

    - 前ページのパス。 - 前ページがない場合はnil -

    -

    next_page

    -

    - 次ページのページ番号。 - 次ページがない場合はnil -

    -

    next_page_path

    -

    - 次ページのパス。 - 次ページがない場合はnil -

    -
    -
    +数字は、生成したサイトで1ページに表示するポストの最大数です。 - + -
    -
    ページネーションはタグとカテゴリをサポートしていません
    -

    ページネーションでは、各ページのYAML Front Matterにどのような変数が - 指定されているかには関知せず、サイトの posts 全部をページ分割します。 - 現在のところ、共通のタグやカテゴリで紐付けられたグループごとでの - ページネーションはできません。posts に限定されているため、ドキュメントの - 任意のコレクションを含めることはできません。 +ページ分けしたページの出力先も指定できます。 + + + +```yaml +paginate_path: "/blog/page:num/" +``` + +これで`blog/index.html`を読み込み、`paginator`としてLiquidのページ分けしたページを送り、`blog/page:num/`に出力します。ここで`:num`には`2`から始まるページ番号が入ります。 +`paginate: 5`の設定で12個のポストをページ分けした場合、Jekyllは`blog/index.html`には最初の5個、`blog/page2/index.html`には次の5個、`blog/page3/index.html`には最後の2個を出力します。 + + + +

    +
    パーマリンクを設定しないでください
    + +

    + ブログページのfront matterにパーマリンクを設定すると、ページ分けが壊れます。パーマリンクは省いてください。 +

    +
    - +

    + 新しいjekyll-paginate-v2プラグインには更なる機能があります。 + pagination examplesのリポジトリをご覧ください。このプラグインは、GitHub Pagesではサポートされていません。 +

    +
    ---> -## 分割されたページのレンダリング +## 利用可能なLiquid属性 + - +ページ分けプラグインは`paginator`Liquidオブジェクト属性を利用できます。 -`paginator` 変数が使えるようになったので、次は、 -これを使って実際のpostの一覧を表示させます。 -おそらくあなたはサイトのメインページのひとつでリストを表示させたいと思うでしょう。 -ページ分割されたpostsをHTMLファイルでレンダリングするシンプルなやり方の例は下記のとおりです: + - +{% include docs_variables_table.html scope=site.data.jekyll_variables.paginator %} -{% highlight html %} -{% raw %} ---- -layout: default -title: My Blog ---- +
    +
    Paginationはタグやカテゴリをサポートしていません
    + +

    front matterでhidden: trueでないポストを除き、全てのpostsのポストがページ分けされたページに出力されます。現在のページ分けは、同じタグやカテゴリでグループを作る機能はありません。またポストに限定されるため、コレクションのドキュメントは含まれません。

    + +
    - -{% for post in paginator.posts %} -

    {{ post.title }}

    -

    - {{ post.date }} -

    -
    - {{ post.content }} -
    -{% endfor %} +## ページ分けしたポストのレンダリング + - - -{% endraw %} -{% endhighlight %} +次に`paginator`変数を使用してポストのリストを実際に表示する必要が出てくるでしょう。 おそらく、サイトのメインページで行いたいのでしょう。以下は、ページ分けされたポストをHTMLファイルにレンダリングする簡単な方法の一例です。 + + - +``` {% endraw %} -{% endhighlight %} --->
    -
    1ページ目のエッジケースに注意
    +
    端のページに注意してください
    +

    - Jekyllは‘page1’フォルダを作らないので、上記のコードはもし /page1 - リンクが生成された場合は動きません。もしこれが問題になるようであれば、 - 扱い方について以下を参照してください。 + Jekyllは‘page1’フォルダを生成しませんので、上記のコードは/page1へのリンクが作成されたときには機能しません。これが問題でしたら、処理方法については下記をご覧ください。

    -
    - - ---> - -以下のHTMLは1ページ目をうまく取り扱い、現在のページ以外の全ページそれぞれの -リンクの一覧をレンダリングします。 - +次のHTMLはページ1を処理し、現在のページを除く全てのページへのリンクをレンダリングします。 -{% highlight html %} -{% raw %} -{% if paginator.total_pages > 1 %} - -{% endif %} -{% endraw %} -{% endhighlight %} + - diff --git a/_docs/permalinks.md b/_docs/permalinks.md index 4c18322..550499d 100644 --- a/_docs/permalinks.md +++ b/_docs/permalinks.md @@ -1,53 +1,72 @@ --- -layout: docs title: パーマリンク -prev_section: templates -next_section: pagination permalink: /docs/permalinks/ -base_revision: 0fbdc6944041147c2d21b306751b078860b6603b[refs/heads/master] --- - - + +パーマリンクは、ページやポスト、コレクションを出力するパスです。ソースコードのディレクトリ構成と出力するディレクトリ構成を変えることも可能です。 + + + +## Front Matter + +パーマリンクを設定するシンプルな方法は、front matterを使用することです。front matterの`permalink`変数に、好きな出力パスを設定します。 + + + +例えば、`/my_pages/about-me.html`のページの出力するURLを`/about/`にしたい場合は、ページのfront matterを次のようにセットします。 + + + +``` --- ---> - -Jekyll はサイトの URL を構築するための柔軟な方法をサポートしています。 -あなたは[設定項目](../configuration/)か、Post ごとの -[YAML Front Matter](../frontmatter/) 内でサイトのパーマリンクを指定することができます。 -あなたはリンクを作成するか、あなた自身のリンクを作成するために -組み込まれたスタイルのひとつを自由に選択します。 -デフォルトのスタイルは `date` です。 - - - -パーマリンクは動的要素がコロン接頭辞で表現された -テンプレートの URL を作成することによって構築されます。 -例えば、デフォルトの `date` パーマリンクは -`/:categories/:year/:month/:day/:title.html` として定義されています。 - - - -## テンプレート変数 - - +permalink: /about/ +--- +``` + +## グローバル + + +パーマリンクを全てのページのfront matterで設定するのは大変です。幸運なことに、Jekyllでは`_config.yml`でサイト全体のパーマリンクの構成を設定できます。 + + + +全体的なパーマリンクを設定するには、`_config.yml`で`permalink`変数を使用します。望む出力になるように置換用変数(placeholders)を使用できます。例えば: + + + +```yaml +permalink: /:categories/:year/:month/:day/:title:output_ext +``` + +ページやコレクションには時刻やカテゴリが無いことに注意してください。これらのパーマリンクスタイルは出力時には無視されます。 + + + +パーマリンクスタイルの例は、ポストなら`/:categories/:year/:month/:day/:title:output_ext`、ページやコレクションなら`/:title.html`です。 + + + +### 置換用変数(Placeholders) + + +使用できる全置換用変数(Placeholders)のリストです。 + + +
    @@ -55,6 +74,8 @@ permalink is defined as `/:categories/:year/:month/:day/:title.html`. + @@ -63,265 +84,276 @@ permalink is defined as `/:categories/:year/:month/:day/:title.html`.

    year

    - - - - - -
    変数 説明
    -

    Post のファイル名から取得できる年

    -
    -

    month

    -
    -

    Post のファイル名から取得できる月

    +

    + ポストのファイル名から取得した4桁の年。ドキュメントのfront matterのdateで上書きされる可能性があります。 +

    +
    -

    i_month

    +

    short_year

    -

    Post のファイル名から取得できる0埋めしない月

    +

    + ポストのファイル名から取得した西暦の下2桁。ドキュメントのfront matterのdateで上書きされる可能性があります。 +

    +
    -

    day

    +

    month

    -

    Post のファイル名から取得できる日

    +

    + ポストのファイル名から取得した月(2桁)。ドキュメントのfront matterのdateで上書きされる可能性があります。 +

    +
    -

    i_day

    +

    i_month

    -

    Post のファイル名から取得できる前ゼロなしの日

    +

    + ポストのファイル名から取得した月(10 の位の0なし)。ドキュメントのfront matterのdateで上書きされる可能性があります。 +

    +
    -

    short_year

    +

    short_month

    -

    Post のファイル名から取得できる年の下2桁

    +

    3文字表記の月。“Jan”など。

    +
    -

    title

    +

    long_month

    + {% include docs_version_badge.html version="4.0.0" %}
    -

    Post のファイル名から取得できるタイトル

    +

    月のフルネーム。“January”など。

    +
    -

    categories

    +

    day

    - この Post に対して指定されたカテゴリ。 - Jekyll は自動的に URL 中のダブルスラッシュを解析し、 - もしそのカテゴリーが存在しない場合は、これを無視します。 + ポストのファイル名から取得した日(2桁)。ドキュメントのfront matterのdateで上書きされる可能性があります。

    +
    -
    - - -

    month

    +

    y_day

    -

    Month from the Post’s filename

    +

    ポストのファイル名から取得した、その年の何日目か。 (001..366)

    + -

    i_month

    +

    w_year

    + {% include docs_version_badge.html version="4.0.0" %} -

    Month from the Post’s filename without leading zeros.

    +

    週の所属する年。1月の始めと12月の終わりは月の所属する年と異なる場合があります。

    + -

    day

    +

    week

    + {% include docs_version_badge.html version="4.0.0" %} -

    Day from the Post’s filename

    +

    その年の何週目か。ただし、1月の日が大部分を占める週から始まります。 (01..53)

    + -

    i_day

    +

    w_day

    + {% include docs_version_badge.html version="4.0.0" %} -

    Day from the Post’s filename without leading zeros.

    + + -

    short_year

    +

    short_day

    + {% include docs_version_badge.html version="4.0.0" %} -

    Year from the Post’s filename without the century.

    +

    3文字表記の曜日。“Sun”など

    + -

    title

    +

    long_day

    + {% include docs_version_badge.html version="4.0.0" %} -

    Title from the Post’s filename

    +

    曜日名。“Sunday”など。

    + -

    categories

    +

    hour

    - The specified categories for this Post. Jekyll automatically parses - out double slashes in the URLs, so if no categories are present, it - will ignore this. + ポストのfront matterのdateから取得した24時間表記の時。(00..23)

    - - - - - ---> - -## 組み込みパーマリンクスタイル - - - -
    - - - - - - - - - - - - -
    パーマリンクスタイルURL テンプレート
    -

    date

    -
    -

    /:categories/:year/:month/:day/:title.html

    +
    -

    pretty

    +

    minute

    -

    /:categories/:year/:month/:day/:title/

    +

    + ポストのfront matterのdateから取得した分。(00..59) +

    +
    -

    none

    +

    second

    -

    /:categories/:title.html

    +

    + ポストのfront matterのdateから取得した秒。(00..59) +

    +
    -
    - - -

    pretty

    +

    slug

    -

    /:categories/:year/:month/:day/:title/

    +

    + ドキュメントのファイル名からのタイトルをスラグ化(数字と文字を除くすべての文字はハイフンに置き換えらる)したもの。front matterのslugで上書きされる可能性があります。 +

    + -

    none

    +

    categories

    -

    /:categories/:title.html

    +

    + ポストのカテゴリ。ポストに複数のカテゴリがある場合、Jekyllは/category1/category2の様に階層化します。また、JekyllはURL内の二重スラッシュを自動的に修復します。そのため、カテゴリが存在しない場合、無視されます。 +

    + ---> - -## パーマリンクスタイルの例 - +### 組み込みフォーマット + -Post 名 `/2009-04-29-slap-chop.textile` が与えられた時: +Jekyllはポストに、以下の便利な組み込みスタイルを提供します。 - +
    + - + @@ -329,72 +361,133 @@ Given a post named: `/2009-04-29-slap-chop.textile`

    pretty

    + + + +
    パーマリンクスタイル URLテンプレートパーマリンク URL の結果
    -

    指定なし、または permalink: date

    +

    date

    -

    /2009/04/29/slap-chop.html

    +

    /:categories/:year/:month/:day/:title:output_ext

    -

    /2009/04/29/slap-chop/index.html

    +

    /:categories/:year/:month/:day/:title/

    -

    /:month-:day-:year/:title.html

    +

    ordinal

    -

    /04-29-2009/slap-chop.html

    +

    /:categories/:year/:y_day/:title:output_ext

    -

    /blog/:year/:month/:day/:title/

    +

    weekdate

    + {% include docs_version_badge.html version="4.0.0" %}
    -

    /blog/2009/04/29/slap-chop/

    +

    /:categories/:year/W:week/:short_day/:title:output_ext

    +
    +

    none

    +
    +

    /:categories/:title:output_ext

    - + +
    +
    front matterでのパーマリンクの指定
    + +

    組み込みパーマリンクスタイルはfront matterでは認識されません。ですので、 permalink: prettyは機能しません。

    + +
    + +### コレクション + + +コレクションは、`_config.yml`のコレクションの設定でグローバルパーマリンクを上書きできるオプションがあります。 + + + +```yaml +collections: + my_collection: + output: true + permalink: /:collection/:name +``` + +コレクションは以下の置換用変数を使用できます。 + + +
    - - + + + + + + +
    URL TemplateResulting Permalink URL変数説明
    -

    None specified, or permalink: date

    +

    :collection

    -

    /2009/04/29/slap-chop.html

    +

    どのコレクションかのラベル。

    +
    -

    pretty

    +

    :path

    -

    /2009/04/29/slap-chop/index.html

    +

    コレクションのディレクトリからの相対パス。

    +
    -

    /:month-:day-:year/:title.html

    +

    :name

    +
    +

    ドキュメントのベースファイル名。空白及びアルファベット以外の文字はハイフンに置き換えられます。

    +
    -

    /04-29-2009/slap-chop.html

    +

    :title

    +
    +

    + :titleテンプレート変数はfront matterslugがある場合はその値を取得します。無い場合、:title:nameは同じ値です。ファイル名から作成されたスラグとも言えます。 +

    +
    -

    /blog/:year/:month/:day/:title

    +

    :output_ext

    -

    /blog/2009/04/29/slap-chop/index.html

    +

    出力ファイルの拡張子。(デフォルトで含まれており、通常は不要です。)

    +
    ---> diff --git a/_docs/plugins.md b/_docs/plugins.md index 902123b..1db8154 100644 --- a/_docs/plugins.md +++ b/_docs/plugins.md @@ -1,1200 +1,32 @@ --- -layout: docs title: プラグイン -prev_section: pagination -next_section: extras permalink: /docs/plugins/ -base_revision: 0fbdc6944041147c2d21b306751b078860b6603b[refs/heads/master] --- - - +--- --> -Jekyllはフックによるプラグイン(plugin)システムを備えており、これによりあなたのサイト向けに特化したコンテンツの生成が可能になります。Jekyllのソース自体を修正することなく、あなたのサイト用のコードを実行できます。 +Jekyllは、サイトにカスタム生成されたコンテンツの作成を可能にするプラグインシステムを持っています。 Jekyllのソース自体を修正しなくても、サイト用のカスタムコードを実行することができます。 - - - -
    -
    GitHub Pagesにおけるプラグイン
    -

    - GitHub PagesはJekyllで動いていますが、ここで構築されるすべてのサイトは、セキュリティ上の理由から--safeオプションで生成され、カスタムプラグインが利用できないようになっています。残念ながら、これはあなたのプラグインをGitHub Pagesにデプロイしても動作しないことを意味します。

    - あなたのサイトを公開するためにGitHub Pagesを利用することはできますが、そのためには、Jekyllのソースファイルの代わりに、サイトをローカルで変換して、生成された静的ファイルをGitHubレポジトリにプッシュする必要があります。 -

    -
    - - - -## プラグインのインストール - - - -プラグインをインストールする2つの方法があります。 - - - -1. サイトのルートに`_plugins`ディレクトリを作って、プラグインをここに配置します。このディレクトリ内の`*.rb`で終わるすべてのファイルは、Jekyllがサイトを生成するときに読み込まれます。 - - -2. `_config.yml`ファイルに、`gems`をキーとし、使いたいプラグインのgem名を値とする新たな行を追加します。例を示します。 - - gems: [jekyll-test-plugin, jekyll-jsonify, jekyll-assets] - # これで各gemが自動的に読み込まれます。 - - - - -
    -
    - _pluginsgems - は同時に使用できます。 -
    -

    - 前述した2つのプラグインの選択肢は、同じサイトにおいて同時に使うことができます。一方の使用は、他方の使用を制限しません。 -

    -
    - - - -通常、あなたが作るpluginは次の3つのカテゴリの何れかに該当します。 - - - -1. ジェネレータ(Generators) -2. コンバータ(Converters) -3. タグ(Tags) - - - -## ジェネレータ(Generators) - - - -独自ルールでJekyllに追加コンテンツを生成させる必要があるときは、ジェネレータを作ります。 - - - -ジェネレータは、`generate`メソッドを定義している`Jekyll::Generator`のサブクラスであり、このメソッドは、[`Jekyll::Site`]({{ site.repository }}/blob/master/lib/jekyll/site.rb)のインスタンスを取ります。 - - - -ジェネレータは、その副作用のために起動され、`generate`メソッドの返り値は無視されます。Jekyllは引き起こされる如何なる特定の副作用も期待しておらず、ただそのメソッドを呼ぶだけです。 - - - -ジェネレータは、Jekyllが存在するコンテンツの目録を作った後、サイトが生成される前に、動作します。YAML front-matterを備えたpageは、[`Jekyll::Page`]({{ site.repository }}/blob/master/lib/jekyll/page.rb)のインスタンスとして格納され、`site.pages`を通して利用可能になります。静的ファイルは、[`Jekyll::StaticFile`]({{ site.repository }}/blob/master/lib/jekyll/static_file.rb)のインスタンスになり、`site.static_files`を通して利用可能になります。詳しくは、[変数のページ](/docs/variables/)および[`Jekyll::Site`]({{ site.repository }}/blob/master/lib/jekyll/site.rb)を確認して下さい。 - - - -例えばジェネレータは、ビルド時に計算された値をテンプレート変数を使い挿入できます。次の例ではテンプレート`reading.html`は2つの変数、`ongoing`および`done`を持っており、これらはジェネレータにおいて値を埋め込まれます。 - - - -{% highlight ruby %} -module Reading - class Generator < Jekyll::Generator - def generate(site) - ongoing, done = Book.all.partition(&:ongoing?) - - reading = site.pages.detect {|page| page.name == 'reading.html'} - reading.data['ongoing'] = ongoing - reading.data['done'] = done - end - end -end -{% endhighlight %} - - - -以下は、新しいページを生成する、より複雑なジェネレータです。 - - - -{% highlight ruby %} -module Jekyll - - class CategoryPage < Page - def initialize(site, base, dir, category) - @site = site - @base = base - @dir = dir - @name = 'index.html' - - self.process(@name) - self.read_yaml(File.join(base, '_layouts'), 'category_index.html') - self.data['category'] = category - - category_title_prefix = site.config['category_title_prefix'] || 'Category: ' - self.data['title'] = "#{category_title_prefix}#{category}" - end - end - - class CategoryPageGenerator < Generator - safe true - - def generate(site) - if site.layouts.key? 'category_index' - dir = site.config['category_dir'] || 'categories' - site.categories.keys.each do |category| - site.pages << CategoryPage.new(site, site.source, File.join(dir, category), category) - end - end - end - end - -end -{% endhighlight %} - - - -この例においてジェネレータは、各カテゴリごとに`categories`ディレクトリ下に一式のファイルを生成し、`category_index.html`レイアウトを使って、各カテゴリごとに記事をリスト表示します。 - - - -ジェネレータでは、1つのメソッドを実装すれば良いです。 - - - -
    - - - - - - - - - - - - - -
    メソッド解説
    -

    generate

    -
    -

    副作用でコンテンツを生成する

    -
    -
    - - - -## コンバータ(Converters) - - - -サイトで利用したい新しいマークアップ言語があるときは、独自のコンバータを実装することで利用できるようになります。MarkdownおよびTextileマークアップ言語は、共にこの方法で実装されています。 - - - -
    -
    YAML front-matterを忘れずに
    -

    - Jekyllは先頭にYAMLヘッダーがあるファイルだけを変換しますが、これはたとえプラグインを使って追加されたコンバータであっても同じです。 -

    -
    - - - -以下は、`.upcase`で終わる全postを対象に、これらを`UpcaseConverter`を使用して処理するコンバータの例です。 - - - -{% highlight ruby %} -module Jekyll - class UpcaseConverter < Converter - safe true - priority :low - - def matches(ext) - ext =~ /^\.upcase$/i - end - - def output_ext(ext) - ".html" - end - - def convert(content) - content.upcase - end - end -end -{% endhighlight %} - - - -コンバータには、最低3つのメソッドを実装する必要があります。 - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    メソッド解説
    -

    matches

    -

    - 与えられた拡張子はこのコンバータのアクセス可能な拡張子のリストにマッチするか?1引数を取る: ファイルの拡張子(ドットを含む)。マッチする場合はtrueを、それ以外はfalseを返す必要がある。 -

    -

    output_ext

    -

    - 出力ファイルに与えられる拡張子(ドットを含む)。 - 通常、これは".html"である。 -

    -

    convert

    -

    - コンテンツの変換をするためのロジック。1引数を取る: ファイルの未加工のコンテンツ(YAML front matterを含まない)。文字列を返す必要がある。 -

    -
    - - - -この例で、`UpcaseConverter#matches`は、ファイル名の拡張子が`.upcase`であるかをチェックし、そうである場合、このコンバータを使ってレンダリングを行います。`UpcaseConverter#convert`は、このコンテンツを処理するために呼ばれます。この簡単なコンバータでは単に全コンテンツの文字列を大文字化します。そして、このpageを保存するときは`.html`の拡張子で保存します。 - - - -## タグ(Tags) - - - - -サイトで専用Liquidタグを使いたいときは、タグシステムにフックさせることで実現できます。jekyllの組み込みサンプルには、'highlight'タグと'include'タグが含まれています。次の例は、pageが作られるときの時刻を出力する専用Liquidタグです。 - - - - -{% highlight ruby %} -module Jekyll - class RenderTimeTag < Liquid::Tag - - def initialize(tag_name, text, tokens) - super - @text = text - end - - def render(context) - "#{@text} #{Time.now}" - end - end -end - -Liquid::Template.register_tag('render_time', Jekyll::RenderTimeTag) -{% endhighlight %} - - - -Liquidタグでは最低限、次を実装する必要があります。 - - - -
    - - - - - - - - - - - - - -
    メソッド解説
    -

    render

    -
    -

    タグのコンテンツを出力する。

    -
    -
    - - - -また、Liquidテンプレートエンジンにこの専用タグを登録する必要があります。 - - - -{% highlight ruby %} -Liquid::Template.register_tag('render_time', Jekyll::RenderTimeTag) -{% endhighlight %} - - - -上記の例で、任意のpageのどこにでも、次のようなタグを配置できるようになります。 - - - -{% highlight ruby %} -{% raw %} -

    {% render_time page rendered at: %}

    -{% endraw %} -{% endhighlight %} - - - -これにより、page上に次のような出力が得られます。 - - - -{% highlight html %} -

    page rendered at: Tue June 22 23:38:47 –0500 2010

    -{% endhighlight %} - - - -### Liquidフィルタ(Liquid filters) - - - -上でタグを追加したように、Liquidテンプレートシステムに独自フィルタを追加することもできます。フィルタは、Liquidにメソッドをエクスポートする簡単なモジュールです。すべてのメソッドは、フィルタの入力としての少なくとも1つの引数を取る必要があります。その返り値はフィルタの出力になります。 - - - -{% highlight ruby %} -module Jekyll - module AssetFilter - def asset_url(input) - "http://www.example.com/#{input}?#{Time.now.to_i}" - end - end -end - -Liquid::Template.register_filter(Jekyll::AssetFilter) -{% endhighlight %} - - - -
    -
    ProTip™: Liquidを通じたsiteオブジェクトへのアクセス
    -

    - Jekyllではsiteオブジェクトにアクセスでき、これはLiquidのcontext.registers機能を通じたcontext.registers[:site]により可能になります。例えば、グローバル設定ファイル_config.ymlcontext.registers[:site].configを使ってアクセスできます。 -

    -
    - - - -### フラグ(Flags) - - - -プラグインを書くときに注意すべき2つのフラグがあります。 - - - -
    - - - - - - - - - - - - - - - - - -
    フラグ解説
    -

    safe

    -
    -

    - 任意のコードの実行が許可されていない環境で、対象のプラグインが安全に実行されるものであるか否かをJekyllに伝えるブーリアンフラグ。これはGitHub Pagesで利用され、そこでどのコアプラグインが利用でき、またどのプラグインが起動上安全でないかが判断される。あなたのプラグインが任意コードの実行を許可しない場合には、trueをセットする。これをセットしたとしてもGitHub Pagesは依然としてあなたのプラグインを読み込むようにはならないが、Jekyll本体に組み込むべくプラグインを供するつもりなら、このオプションを正しく設定しておくのがよい。 -

    -
    -

    priority

    -
    -

    - このフラグは、プラグインがロードされる順番を決定する。有効な値は、 :lowest, :low, :normal, - :high, および :highest。最上位(highest priority)のものは最初に適用され、最下位(lowest priority)のものは最後に適用される。 -

    -
    -
    - - - - -上で説明したサンプルプラグインの一つを使う場合、これら2つのフラグの指定は次のようになります。 - - - -{% highlight ruby %} -module Jekyll - class UpcaseConverter < Converter - safe true - priority :low - ... - end -end -{% endhighlight %} - - - -## 利用可能なプラグイン - - - -幾つかの便利なプラグインが次の場所にあります。 - - - -#### ジェネレータ - - - -- [ArchiveGenerator by Ilkka Laukkanen](https://gist.github.com/707909): [このarchive page](https://gist.github.com/707020)を使ってアーカイブを生成する。 -- [LESS.js Generator by Andy Fowler](https://gist.github.com/642739): 生成の過程においてLESS.jsファイルをレンダリングする。 -- [Version Reporter by Blake Smith](https://gist.github.com/449491): Jekyllのバージョンを含むversion.htmlファイルを作る。 -- [Sitemap.xml Generator by Michael Levin](https://github.com/kinnetica/jekyll-plugins): 利用可能な全postおよびpageを走査して、sitemap.xmlファイルを生成する。 -- [Full-text search by Pascal Widdershoven](https://github.com/PascalW/jekyll_indextank): プラグインと少しのJavaScriptを使って、あなたのJekyllサイトに全文テキスト検索を追加する。 -- [AliasGenerator by Thomas Mango](https://github.com/tsmango/jekyll_alias_generator): YAML Front Matterでエイリアスが指定されたときに、postのためのリダイレクトページを生成する。 -- [Pageless Redirect Generator by Nick Quinlan](https://github.com/nquinlan/jekyll-pageless-redirects): htaccessリダイレクトのサポートで、Jekyllのルート内のファイルに従ってリダイレクトを生成する。 -- [Projectlist by Frederic Hemberger](https://github.com/fhemberger/jekyll-projectlist): ディレクトリ内のファイル群を、分割されたpostとする代わりに、単一のページとしてレンダリングする。 -- [RssGenerator by Assaf Gelber](https://github.com/agelber/jekyll-rss): postからRSS 2.0フィードを自動的に生成する。 -- [Monthly archive generator by Shigeya Suzuki](https://github.com/shigeya/jekyll-monthly-archive-plugin): MovableTypeスタイルの月ごとのアーカイブをレンダリングする、Ilkka Laukkanenその他の作品をベースにした、ジェネレータとテンプレート。 -- [Category archive generator by Shigeya Suzuki](https://github.com/shigeya/jekyll-category-archive-plugin): MovableTypeスタイルのカテゴリーアーカイブをレンダリングする、Monthly archive generatorをベースにした、ジェネレータとテンプレート。 -- [Emoji for Jekyll](https://github.com/yihangho/emoji-for-jekyll): 全postおよびpageでシームレスに利用可能な絵文字。 -- [Compass integration for Jekyll](https://github.com/mscharley/jekyll-compass): CompassおよびSassをJekyllのウェブサイトに簡単に統合する。 -- [Pages Directory by Ben Baker-Smith](https://github.com/bbakersmith/jekyll-pages-directory): pageファイル群のための`_pages`ディレクトリを定義し、それがプロジェクトのルートに対する出力先を作る。 -- [Page Collections by Jeff Kolesky](https://github.com/jeffkole/jekyll-page-collections): Postに似た機能を持ったPageのコレクションを生成する。 -- [Windows 8.1 Live Tile Generation by Matt Sheehan](https://github.com/sheehamj13/jekyll-live-tiles): インターネットエクスプローラー11のconfig.xmlファイルおよびタイルテンプレートを生成し、サイトをWindows 8.1専用にする。 -- [Jekyll::AutolinkEmail by Ivan Tse](https://github.com/ivantsepp/jekyll-autolink_email): e-mailの自動リンク。 -- [Jekyll::GitMetadata by Ivan Tse](https://github.com/ivantsepp/jekyll-git_metadata): テンプレートにおけるGitのメタデータを公開する。 - - - -#### コンバータ - - - -- [Jade plugin by John Papandriopoulos](https://github.com/snappylabs/jade-jekyll-plugin): Jekyll用Jadeコンバータ。 -- [HAML plugin by Sam Z](https://gist.github.com/517556): Jekyll用HAMLコンバータ。 -- [HAML-Sass Converter by Adam Pearson](https://gist.github.com/481456): Jekyll用のシンプルなHAML-Sassコンバータ。Sam Xによる[Fork](https://gist.github.com/528642)。 -- [Sass SCSS Converter by Mark Wolfe](https://gist.github.com/960150): 新しいCSS互換シンタックスを使ったSassコンバータで、上記Sam Xのfork版がベース。 -- [LESS Converter by Jason Graham](https://gist.github.com/639920): LESSファイルをCSSに変換する。 -- [LESS Converter by Josh Brown](https://gist.github.com/760265): シンプルなLESSコンバータ。 -- [Upcase Converter by Blake Smith](https://gist.github.com/449463): サンプルとしてのJekyllコンバータ。 -- [CoffeeScript Converter by phaer](https://gist.github.com/959938): [CoffeeScript](http://coffeescript.org)からJavascriptへのコンバータ。 -- [Markdown References by Olov Lassus](https://github.com/olov/jekyll-references): すべてのmarkdownの参照型リンクを一つの\_references.mdファイルに保持する。 -- [Stylus Converter](https://gist.github.com/988201): .stylを.cssに変換する。 -- [ReStructuredText Converter](https://github.com/xdissent/jekyll-rst): ReSTドキュメントを、PygmentsシンタックスハイライトでHTMLに変換する。 -- [Jekyll-pandoc-plugin](https://github.com/dsanson/jekyll-pandoc-plugin): markdownをレンダリングするためにpandocを使う。 -- [Jekyll-pandoc-multiple-formats](https://github.com/fauno/jekyll-pandoc-multiple-formats) by [edsl](https://github.com/edsl): pandocを使って複数のフォーマットでサイトを生成する。pandocのmarkdown拡張をサポート。 -- [Transform Layouts](https://gist.github.com/1472645): HAMLレイアウトを可能にする(これを機能させるには、HAMLコンバータプラグインが必要)。 -- [Org-mode Converter](https://gist.github.com/abhiyerra/7377603): Jekyll用Org-modeコンバータ。 -- [Customized Kramdown Converter](https://github.com/mvdbos/kramdown-with-pygments): Kramdownでパースされるフェンスコードブロックに対し、Pygmentsによるシンタックスハイライトを使えるようにする。 - - - -#### フィルタ - - - -- [Truncate HTML](https://github.com/MattHall/truncatehtml) by [Matt Hall](http://codebeef.com): マークアップ構造を維持しつつHTMLをトランケートするJekyllフィルタ。 -- [Domain Name Filter by Lawrence Woodman](https://github.com/LawrenceWoodman/domain_name-liquid_filter): ドメイン名が残るように入力テキストをフィルタする。 -- [Summarize Filter by Mathieu Arnold](https://gist.github.com/731597): `
    `タグの後のマークアップを除去する。 -- [URL encoding by James An](https://gist.github.com/919275): URIパーセントエンコーディング。 -- [JSON Filter](https://gist.github.com/1850654) by [joelverhagen](https://github.com/joelverhagen): 入力テキストを得てJSONとして出力するフィルタ。JavaScriptをレンダリングするのに好適。 -- [i18n_filter](https://github.com/gacha/gacha.id.lv/blob/master/_plugins/i18n_filter.rb): I18nローカライゼーションに使うLiquidフィルタ。 -- [Smilify](https://github.com/SaswatPadhi/jekyll_smilify) by [SaswatPadhi](https://github.com/SaswatPadhi): コンテンツ内の顔文字テキスト(emoticons)をテーマ別顔文字画像に変換する。 -- [Read in X Minutes](https://gist.github.com/zachleat/5792681) by [zachleat](https://github.com/zachleat): 文字列(ブログ記事のコンテンツ)のリーディング時間を見積る。 -- [Jekyll-timeago](https://github.com/markets/jekyll-timeago): 時間値を時間経過の単語に変換する。 -- [pluralize](https://github.com/bdesham/pluralize): 数字と単語を文法的に正しい量(例:“1 minute” or “2 minute**s**”)で簡単に結合する。 -- [reading_time](https://github.com/bdesham/reading_time): 単語をカウントし、テキスト片のリーディング時間を見積る。この場合、対象テキストとして含めるにそぐわないHTML要素は無視される。 -- [Table of Content Generator](https://github.com/dafi/jekyll-toc-generator): 目次(TOC)を含むHTMLコードを生成する。目次は多様な方法でカスタマイズ可能であり、例えば、目次を持たないページを指定できる。 -- [jekyll-humanize](https://github.com/23maverick23/jekyll-humanize): これはDjangoアプリhumanizeの移植版で、データに"人間らしさ"を追加する。各メソッドは、Fluidタイプフィルタを表し、Jekyllサイトのテンプレートで利用可能。Jekyllは静的サイトを生成するので、いくつかのオリジナルメソッドは移植版において論理的な意味をなさない(例:naturaltime)。 -- [Jekyll-Ordinal](https://github.com/PatrickC8t/Jekyll-Ordinal): "st"、"nd"、"rd"、"th"などの日付けの序数を出力するJekyllのLiquidフィルタ。 -- [Deprecated articles keeper](https://github.com/kzykbys/JekyllPlugins) by [Kazuya Kobayashi](http://blog.kazuya.co/): 記事の古さを監視するシンプルなJekyllフィルタ。 - - - -#### タグ - - - -- [Asset Path Tag](https://github.com/samrayner/jekyll-asset-path-plugin) by [Sam Rayner](http://www.samrayner.com/): 与えられたファイルのpostまたはpageに対する相対パスを出力することで、アセットをサブディレクトリに整理できるようにする。 -- [Delicious Plugin by Christian Hellsten](https://github.com/christianhellsten/jekyll-plugins): delicious.comからブックマークを取得しレンダリングする。 -- [Ultraviolet Plugin by Steve Alex](https://gist.github.com/480380): [Ultraviolet](https://github.com/grosser/ultraviolet)コードハイライターのためのJekyllタグ。 -- [Tag Cloud Plugin by Ilkka Laukkanen](https://gist.github.com/710577): タグページにリンクしたタグクラウドを生成する。 -- [GIT Tag by Alexandre Girard](https://gist.github.com/730347): リスト内にGitのアクティビティを追加する。 -- [MathJax Liquid Tags by Jessy Cowan-Sharp](https://gist.github.com/834610): インラインおよびブロック引用の数式を、適切なMathJaxスクリプトタグに変換するJekyll用のシンプルなLiquidタグ。 -- [Non-JS Gist Tag by Brandon Tilley](https://gist.github.com/1027674) Gistsを埋め込み、JavaScript非対応ブラウザおよびリーダー用にコードを表示するLiquidタグ。 -- [Render Time Tag by Blake Smith](https://gist.github.com/449509): Jekyllのページが生成された時刻を表示する。 -- [Status.net/OStatus Tag by phaer](https://gist.github.com/912466): 渡されたstatus.net/ostatusフィード内の通知を表示する。 -- [Raw Tag by phaer](https://gist.github.com/1020852): `raw`タグ間のLiquidをテキストパースに対して維持する。 -- [Embed.ly client by Robert Böhnke](https://github.com/robb/jekyll-embedly-client): oEmbedを使ってURLから添付物(embeds)を自動生成する。 -- [Logarithmic Tag Cloud](https://gist.github.com/2290195): フレキシブルな対数分布。説明はコード内を参照。 -- [oEmbed Tag by Tammo van Lessen](https://gist.github.com/1455726): oEmbed経由で(YouTube, Flickr, Slideshareなどから)簡単にコンテンツの埋め込みができるようにする。 -- [FlickrSetTag by Thomas Mango](https://github.com/tsmango/jekyll_flickr_set_tag): Flickrのsetから画像ギャラリーを生成する。 -- [Tweet Tag by Scott W. Bradley](https://github.com/scottwb/jekyll-tweet-tag): Twitterの短いコードを使った[ツイートをサイトに埋め込む(Embedded Tweets)](https://dev.twitter.com/docs/embedded-tweets)のためのLiquidタグ。 -- [Jekyll-contentblocks](https://github.com/rustygeldmacher/jekyll-contentblocks): テンプレートでRails風のcontent_forタグを使えるようにして、コンテンツをpostからレイアウトに渡せるようにする。 -- [Generate YouTube Embed](https://gist.github.com/1805814) by [joelverhagen](https://github.com/joelverhagen): YouTubeビデオをそのIDを使ってpageに埋め込めるようにするJekyllのプラグイン。オプションでwidthとheightのサイズを指定できる。 YouTube専用の“oEmbed Tag”。 -- [Jekyll-beastiepress](https://github.com/okeeblow/jekyll-beastiepress): Jekyllサイト用FreeBSDユーティリティタグ。 -- [Jsonball](https://gist.github.com/1895282): JSONファイルを読んで、Jekyllファイルで使う写像(maps)を生成する。 -- [Bibjekyll](https://github.com/pablooliveira/bibjekyll): bibtex2htmlを使ってBibTeX形式の目録/postおよびpageに含まれる引用をレンダリングする。 -- [Jekyll-citation](https://github.com/archome/jekyll-citation): BibTeX形式の目録/postおよびpageに含まれる引用をレンダリングする(100%Ruby)。 -- [Jekyll Dribbble Set Tag](https://github.com/ericdfields/Jekyll-Dribbble-Set-Tag): 任意ユーザからのDribbble画像ギャラリーを構築する。 -- [Debbugs](https://gist.github.com/2218470): Debian BTSへのリンクの投稿を簡単にできるようにする。 -- [Refheap_tag](https://github.com/aburdette/refheap_tag): [refheap](https://refheap.com)からのコードスニペットの埋め込みを可能にするLiquidタグ。 -- [Jekyll-devonly_tag](https://gist.github.com/2403522): 開発期間だけにマークアップを挿入するブロックタグ。 -- [JekyllGalleryTag](https://github.com/redwallhp/JekyllGalleryTag) by [redwallhp](https://github.com/redwallhp): 画像ディレクトリからサムネイルを生成し、グリッド状に表示する。 -- [Youku and Tudou Embed](https://gist.github.com/Yexiaoxing/5891929): YoukuおよびTudouビデオを埋め込むためのLiquidプラグイン。 -- [Jekyll-swfobject](https://github.com/sectore/jekyll-swfobject): [SWFObject](http://code.google.com/p/swfobject/)を使ってAdobe Flashファイル(.swf)を埋め込むためのLiquidプラグイン。 -- [Jekyll Picture Tag](https://github.com/robwierzbowski/jekyll-picture-tag): Jekyll用の簡易なレスポンシブ画像タグ。[``](http://picture.responsiveimages.org/) 要素案に基づき、Scott Jehlの[Picturefill](https://github.com/scottjehl/picturefill)でポリフィルされている。 -- [Jekyll Image Tag](https://github.com/robwierzbowski/jekyll-image-tag): Jekyll用の高機能画像タグ。画像プリセットの保存、リサイズ画像の生成、並びに、クラス、altテキストおよび他の属性の追加ができる。 -- [Ditaa Tag](https://github.com/matze/jekyll-ditaa) by [matze](https://github.com/matze): ASCIIダイアグラムアートをPNGイメージにレンダリングし、画像タグを挿入する。 -- [Good Include](https://github.com/penibelst/jekyll-good-include) by [Anatol Broder](http://penibelst.de/): includeされるファイルが処理される前に、その文末から改行と空白を除去する。 -- [Jekyll Suggested Tweet](https://github.com/davidensinger/jekyll-suggested-tweet) by [David Ensinger](https://github.com/davidensinger/): TwitterのWeb Intents APIを経由してサジェストされたツイートを埋め込めるようにするJekyll用Liquidタグ。 -- [Jekyll Date Chart](https://github.com/GSI/jekyll_date_chart) by [GSI](https://github.com/GSI): texttile形式のテーブルで日付ラインチャートをレンダリングするブロック。 -- [Jekyll Image Encode](https://github.com/GSI/jekyll_image_encode) by [GSI](https://github.com/GSI): ウェブから取得した画像のbase64コードをレンダリングするタグ。 -- [Jekyll Quick Man](https://github.com/GSI/jekyll_quick_man) by [GSI](https://github.com/GSI): インターネット上のmanページのソースへのちょっとしたリンクをレンダリングするタグ。 -- [jekyll-font-awesome](https://gist.github.com/23maverick23/8532525): postにFont Awesomeのアイコンを簡単に追加する。 -- [Lychee Gallery Tag](https://gist.github.com/tobru/9171700) by [tobru](https://github.com/tobru): postに[Lychee](http://lychee.electerious.com/)アルバムを挿入する。はじめに、[Jekyll meets Lychee - A Liquid Tag plugin](https://tobrunet.ch/articles/jekyll-meets-lychee-a-liquid-tag-plugin/)を参照のこと。 -- [Image Set/Gallery Tag](https://github.com/callmeed/jekyll-image-set) by [callmeed](https://github.com/callmeed): Jekyllサイトの特定フォルダから画像ギャラリーのためのHTMLをレンダリングする。フォルダ名とclass/tagオプションを渡します。 -- [jekyll_figure](https://github.com/lmullen/jekyll_figure): 図と見出しを複数のフォーマットの画像リンクと共に生成する。 -- [Jekyll Github Sample Tag](https://github.com/bwillis/jekyll-github-sample): GitHubリポジトリファイルのサンプルをJekyllサイトに含めるためのLiquidタグ。 -- [Jekyll Project Version Tag](https://github.com/rob-murray/jekyll-version-plugin): Jekyllサイトのバージョン識別子をレンダリングするLiquidタグプラグイン。識別子はサイトのコードを管理するgitリポジトリから取得される。 -- [Piwigo Gallery](https://github.com/AlessandroLorenzi/piwigo_gallery) by [Alessandro Lorenzi](http://www.alorenzi.eu/): Piwigoギャラリーからサムネイルを生成し、Liquidタグを使って表示するためのJekyllプラグイン。 - - - - -#### コレクション - - - -- [Jekyll Plugins by Recursive Design](http://recursive-design.com/projects/jekyll-plugins/): GitHubのREADMEからプロジェクトページを生成するプラグイン、カテゴリページとサイトマップのジェネレータ。 -- [Company website and blog plugins](https://github.com/flatterline/jekyll-plugins) by Flatterline, a [Ruby on Rails development company](http://flatterline.com/): ポートフォリオ/プロジェクトページのジェネレータ、チーム/個人ページのジェネレータ、postで使える著者略歴用のLiquidタグ、およびその他の小さなプラグイン群。 -- [Jekyll plugins by Aucor](https://github.com/aucor/jekyll-plugins): 不要な改行/空白を除去するプラグインと、weight属性でページをソートするプラグイン。 - - - -#### その他 - - - -- [Pygments Cache Path by Raimonds Simanovskis](https://github.com/rsim/blog.rayapps.com/blob/master/_plugins/pygments_cache_patch.rb): Pygmentsでシンタックスハイライトされたコードをキャッシュするプラグイン。 -- [Draft/Publish Plugin by Michael Ivey](https://gist.github.com/49630): ドラフトとしてpostを保存する。 -- [Growl Notification Generator by Tate Johnson](https://gist.github.com/490101): GrowlにJekyllの通知を送る。 -- [Growl Notification Hook by Tate Johnson](https://gist.github.com/525267): 上記の高機能な他の選択肢だが、Jekyllの“hook”のフォーク版が必要。 -- [Related Posts by Lawrence Woodman](https://github.com/LawrenceWoodman/related_posts-jekyll_plugin): `site.related_posts`を上書きし、関係性を評価したカテゴリを使えるようにする。 -- [Tiered Archives by Eli Naeher](https://gist.github.com/88cda643aa7e3b0ca1e5): 多段テンプレート変数を生成し、年および月ごとにアーカイブをグループ化できるようにする。 -- [Jekyll-localization](https://github.com/blackwinter/jekyll-localization): レンダリングエンジンにローカライゼーション機能を追加するJekyllプラグイン。 -- [Jekyll-rendering](https://github.com/blackwinter/jekyll-rendering): レンダリングエンジンの他の選択肢を提供するJekyllプラグイン。 -- [Jekyll-pagination](https://github.com/blackwinter/jekyll-pagination): ページネーションジェネレータを拡張するJekyllプラグイン。 -- [Jekyll-tagging](https://github.com/pattex/jekyll-tagging): タグクラウドおよびタグページを自動で生成するJekyllプラグイン。 -- [Jekyll-scholar](https://github.com/inukshuk/jekyll-scholar): 学術研究向けブログのためのJekyll拡張。 -- [Jekyll-asset_bundler](https://github.com/moshen/jekyll-asset_bundler): JavaScriptとCSSをバンドルしミニファイする。 -- [Jekyll-assets](http://ixti.net/jekyll-assets/) by [ixti](https://github.com/ixti): Rails風アセットパイプライン(アセットをCoffeeScript, Sass, LESSなどで書いて、アセット内の簡単な宣言的コメントで自動バンドリングのための依存関係を指定し、ミニファイおよび圧縮を実行し、JSTテンプレートを使用し、キャッシュ消去(cache bust)をし、その他諸々をする)。 -- [JAPR](https://github.com/kitsched/japr): Jekyll Asset Pipeline Reborn - JavaScriptおよびCSSファイル群を収集、変換および圧縮するJekyll用の強力なアセットパイプライン。 -- [File compressor](https://gist.github.com/2758691) by [mytharcher](https://github.com/mytharcher): サイトのビルドにおいてHTMLおよびJavaScriptファイルを圧縮する。 -- [Jekyll-minibundle](https://github.com/tkareine/jekyll-minibundle): アセットのバンドリングおよびキャッシュ消去(cache busting)を、指定の外部ミニファイツールを使って行う。他のGemに依存しない。 -- [Singlepage-jekyll](https://github.com/JCB-K/singlepage-jekyll) by [JCB-K](https://github.com/JCB-K): Jekyllを動的な単一ページWebサイトに変える。 -- [generator-jekyllrb](https://github.com/robwierzbowski/generator-jekyllrb): Jekyllを[Yeoman](http://yeoman.io/)でラップするジェネレータ。Yeomanは、最新のWebアプリを構築するためのツールセットおよびワークフローである。 -- [grunt-jekyll](https://github.com/dannygarcia/grunt-jekyll): 文字通りのJekyll用[Grunt](http://gruntjs.com/)プラグイン。 -- [jekyll-postfiles](https://github.com/indirect/jekyll-postfiles): `_postfiles`ディレクトリと{% raw %}`{{ postfile }}`{% endraw %}タグを追加し、postから参照するファイルを常にpostのすぐそばに置けるようにする。 -- [A layout that compresses HTML](https://github.com/penibelst/jekyll-compress-html) by [Anatol Broder](http://penibelst.de/): サイト生成時に作動するHTML圧縮用プラグイン。GitHub Pages対応。圧縮方法は設定可能。 -- [Jekyll CO₂](https://github.com/wdenton/jekyll-co2): ハワイ州マウナロア観測所における大気中CO₂の月ごとの変化を表示するHTMLを生成する。 - - - -#### エディタ - - - -- [sublime-jekyll](https://github.com/23maverick23/sublime-jekyll): Jekyll静的サイトのためのSublimeテキストエディタパッケージ。本パッケージは、Jekyllサイトの生成を助け投稿を容易にするもので、これは、キーテンプレートタグおよびフィルタ、並びに、良く使う補完および現在のdate/datetimeコマンド(postの日付け決め用)へのアクセスを提供することで実現される。本パッケージは手作業でGitHubから、または[Package Control](https://sublime.wbond.net/packages/Jekyll)を通してインストールできる。 -- [vim-jekyll](https://github.com/parkr/vim-jekyll): Vimから離れることなく新規投稿および`jekyll build`の起動を可能にするVimプラグイン。 - - - -
    -
    Jekyllプラグイン求む
    -

    - このリストに追加したいJekyllプラグインがある場合は、貢献(contributing)ページを読んで、そうする方法を調べてください。 -

    -
    - - - +having to modify the Jekyll source itself. --> + +* [インストール]({{ "/docs/plugins/installation/" | | relative_url }}) - プラグインのインストール法 +* [初めてのプラグイン]({{ "/docs/plugins/your-first-plugin/" | | relative_url }}) - プラグインの書き方 +* [Generators(ジェネレータ)]({{ "/docs/plugins/generators/" | | relative_url }}) - サイトの追加コンテンツを作成 +* [Converters(コンバータ)]({{ "/docs/plugins/converters/" | | relative_url }}) - マークアップ言語を他のフォーマットに変換 +* [コマンド]({{ "/docs/plugins/commands/" | | relative_url }}) - `jekyll`の実行をサブコマンドで拡張 +* [タグ]({{ "/docs/plugins/tags" | | relative_url }}) - カスタムLiquidタグを作成 +* [フィルタ]({{ "/docs/plugins/filters/" | | relative_url }}) - カスタムLiquidフィルタを作成 +* [Hooks(フック)]({{ "/docs/plugins/hooks/" | | relative_url }}) - ビルドプロセスを拡張するための細かい制御 + + diff --git a/_docs/plugins/commands.md b/_docs/plugins/commands.md new file mode 100644 index 0000000..f7db0de --- /dev/null +++ b/_docs/plugins/commands.md @@ -0,0 +1,81 @@ +--- +title: コマンド +permalink: /docs/plugins/commands/ +--- + + +バージョン2.5.0以降、Jekyllはプラグインで`jekyll`で実行可能なサブコマンドを提供することができます。`:jekyll_plugins`という`Gemfile`グループに関連するプラグインを含めることで可能になります。 + + + +```ruby +group :jekyll_plugins do + gem "my_fancy_jekyll_plugin" +end +``` + +各`Command`は`Jekyll::Command`クラスのサブクラスである必要があり、`init_with_program`メソッドを含まなければなりません。例えば、 + + + +```ruby +class MyNewCommand < Jekyll::Command + class << self + def init_with_program(prog) + prog.command(:new) do |c| + c.syntax "new [options]" + c.description 'Create a new Jekyll site.' + + c.option 'dest', '-d DEST', 'Where the site should go.' + + c.action do |args, options| + Jekyll::Site.new_site_at(options['dest']) + end + end + end + end +end +``` + +コマンドには一つのメソッドが必要です。 + + + +
    + + + + + + + + + + + + + + +
    メソッド説明
    +

    init_with_program

    +

    + このメソッドは、1つのパラメーター、Jekyllプログラム自体であるMercenary::Programインスタンスを受け入れます。プログラム上で、上記の構文を使用してコマンドを作成できます。 詳細については、GitHub.comのMercenaryリポジトリをご覧ください。 +

    + +
    +
    diff --git a/_docs/plugins/converters.md b/_docs/plugins/converters.md new file mode 100644 index 0000000..682be9e --- /dev/null +++ b/_docs/plugins/converters.md @@ -0,0 +1,124 @@ +--- +title: Converters(コンバータ) +permalink: /docs/plugins/converters/ +--- + + +サイトで使用したい新しいマークアップ言語がある場合は、あなた自身のコンバータを実施することで含めることができます。Markdownと[Textile](https://github.com/jekyll/jekyll-textile-converter){:target="_blank"}のマークアップ言語は共にこのメソッドを実施しています。 + + + +
    +
    Front Matterを忘れないでください
    + +

    + JekyllはYAMLヘッダ最初にあるファイルだけを変換します。それはプラグインで追加したコンバータの場合も同様です。 +

    + +
    + +以下は`.upcase`で終わる全てのポストを取得して、`UpcaseConverter`を使用して変換するコンバータです。 + + + +```ruby +module Jekyll + class UpcaseConverter < Converter + safe true + priority :low + + def matches(ext) + ext =~ /^\.upcase$/i + end + + def output_ext(ext) + ".html" + end + + def convert(content) + content.upcase + end + end +end +``` + +コンバータは最低3つのメソッドが必要です。 + + + +
    + + + + + + + + + + + + + + + + + + + + + + +
    メソッド説明
    +

    matches

    +

    + このコンバータで使用する拡張子のリストと一致するかどうか。(ドットを含む)ファイルの拡張子の引数をとる。一致する場合はtrue、そうでなければfalseを返す必要がある。 +

    + +
    +

    output_ext

    +

    + (ドットを含む)出力ファイルの拡張子。 + 通常は".html"。 +

    + +
    +

    convert

    +

    + コンテンツの変換ロジック。(front matterを含まない)ファイルのコンテンツを引数としてとります。文字列を返す必要があります。 +

    + +
    +
    + +先ほどの例では、`UpcaseConverter#matches`でファイル名の拡張子が`.upcase`かを確認し、そうであるならコンバータでレンダリングします。コンテンツを処理するために`UpcaseConverter#convert`を呼ぶということです。先ほどのシンプルなコンバータは、単純にコンテンツの文字列を大文字に変換します。最後に、ページをして保存するときに`.html`拡張子を使用します。 + + diff --git a/_docs/plugins/filters.md b/_docs/plugins/filters.md new file mode 100644 index 0000000..34a9f00 --- /dev/null +++ b/_docs/plugins/filters.md @@ -0,0 +1,40 @@ +--- +title: フィルタ +permalink: /docs/plugins/filters/ +--- + + +フィルタはメソッドをLiquidに書き出すモジュールです。すべてのメソッドは、フィルタの入力を表す少なくとも1つのパラメータを受け取る必要があります。戻り値はフィルタの出力になります。 + + + +```ruby +module Jekyll + module AssetFilter + def asset_url(input) + "http://www.example.com/#{input}?#{Time.now.to_i}" + end + end +end + +Liquid::Template.register_filter(Jekyll::AssetFilter) +``` + +
    +
    ProTip™: Liquidを使用してサイトオブジェクトにアクセスする
    + +

    + Jekyllでは、context.registers[:site]のLiquidのcontext.registers機能を通じて、siteオブジェクトにアクセスすることができます。例えば、 context.registers[:site].configを使用してグローバル設定ファイルの_config.ymlにアクセスできます。 +

    + +
    diff --git a/_docs/plugins/generators.md b/_docs/plugins/generators.md new file mode 100644 index 0000000..4f65c73 --- /dev/null +++ b/_docs/plugins/generators.md @@ -0,0 +1,127 @@ +--- +title: Generators(ジェネレータ) +permalink: /docs/plugins/generators/ +--- + + +あなた自身のルールに基づいた追加コンテンツがJekyllに必要なら、ジェネレータを作ることができます。 + + + +ジェネレータは`generate`メソッドを定義する`Jekyll::Generator`のサブクラスです。[`Jekyll::Site`]({{ site.repository }}/blob/master/lib/jekyll/site.rb){:target="_blank"}のインスタンスを受け取ります。`generate`が返す値は無視されます。 + + + +ジェネレータは、Jekyllが既存のコンテンツのインベントリを作成した後、サイトが生成される前に実行されます。front matterのあるページは[`Jekyll::Page`]({{ site.repository }}/blob/master/lib/jekyll/page.rb){:target="_blank"}インスタンスとして保管され、`site.pages`で使用可能です。静的ファイルは[`Jekyll::StaticFile`]({{ site.repository }}/blob/master/lib/jekyll/static_file.rb){:target="_blank"}インスタンスになり、`site.static_files`で使用可能です。詳細は[ドキュメンテーションの変数ページ]({{ "/docs/variables/" | relative_url }})と[`Jekyll::Site`]({{ site.repository }}/blob/master/lib/jekyll/site.rb){:target="_blank"}を見てください。 + + + +例えば、ジェネレータはテンプレート変数に構築時に計算された値を代入することができます。以下の例では、`reading.html`テンプレートに`ongoing`と`done`の2つの変数をジェネレータから書き込んでいます。 + + + +```ruby +module Reading + class Generator < Jekyll::Generator + def generate(site) + ongoing, done = Book.all.partition(&:ongoing?) + + reading = site.pages.detect {|page| page.name == 'reading.html'} + reading.data['ongoing'] = ongoing + reading.data['done'] = done + end + end +end +``` + +こちらは新しいページを生成するより複雑なジェネレータです。 + + + +```ruby +module Jekyll + class CategoryPageGenerator < Generator + safe true + + def generate(site) + if site.layouts.key? 'category_index' + dir = site.config['category_dir'] || 'categories' + site.categories.each_key do |category| + site.pages << CategoryPage.new(site, site.source, File.join(dir, category), category) + end + end + end + end + + # A Page subclass used in the `CategoryPageGenerator` + class CategoryPage < Page + def initialize(site, base, dir, category) + @site = site + @base = base + @dir = dir + @name = 'index.html' + + self.process(@name) + self.read_yaml(File.join(base, '_layouts'), 'category_index.html') + self.data['category'] = category + + category_title_prefix = site.config['category_title_prefix'] || 'Category: ' + self.data['title'] = "#{category_title_prefix}#{category}" + end + end +end +``` + +この例では、ジェネレータは一連のファイルを`categories`ディレクトリに各カテゴリの作成します。`category_index.html`レイアウトを使用し、各カテゴリのポストの一覧を作成します。 + + + +ジェネレータには一つのメソッドの実装が必要です。 + + + +
    + + + + + + + + + + + + + + +
    メソッド説明
    +

    generate

    +
    +

    サイドエフェクトとしてコンテンツを生成する。

    + +
    +
    diff --git a/_docs/plugins/hooks.md b/_docs/plugins/hooks.md new file mode 100644 index 0000000..094b407 --- /dev/null +++ b/_docs/plugins/hooks.md @@ -0,0 +1,279 @@ +--- +title: Hooks(フック) +permalink: /docs/plugins/hooks/ +--- + + +Hookを使用すると、プラグインはビルドプロセスのさまざまな側面をきめ細かく制御できます。プラグインが何らかのHookを定義している場合、Jekyllはそれらを事前定義された時点で呼び出します。 + + + +Hookはコンテナとイベント名に登録されます。登録するには、Jekyll::Hooks.registerを呼び出し、フックがトリガーされるたびに呼び出すコンテナ、イベント名、およびコードを渡します。たとえば、Jekyllが投稿をレンダリングするたびにカスタム機能を実行したい場合は、次のようにフックを登録します。 + + + +```ruby +Jekyll::Hooks.register :posts, :post_render do |post| + # code to call after Jekyll renders a post +end +``` + +Jekyllは`:site`、`:pages`、`:posts`そして`:documents`にHookを提供します。すべての場合において、Jekyllは最初のコールバックパラメータとしてのコンテナオブジェクトを使用してHookを呼び出します。 全ての`:pre_render` Hookと`:site, :post_render` Hookもペイロードハッシュを2番目のパラメータとして提供します。`:pre_render`の場合、ペイロードはレンダリング中に利用可能な変数を完全に制御します。`:site, :post_render`の場合、ペイロードにはすべてのサイトをレンダリングした後の最終値が含まれます(サイトマップ、フィードなどに役立ちます)。 + + + +以下に利用可能なHookの完全なリストを示します。 + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    コンテナイベント読み込み
    +

    :site

    +
    +

    :after_init

    +
    +

    サイト初期化直後でセットアップやレンダリングの前。サイトの構成の修正によい。

    + +
    +

    :site

    +
    +

    :after_reset

    +
    +

    サイトのリセット直後

    + +
    +

    :site

    +
    +

    :post_read

    +
    +

    サイトのデータがディスクに読み書きされた後

    + +
    +

    :site

    +
    +

    :pre_render

    +
    +

    サイトのレンダリング直前

    + +
    +

    :site

    +
    +

    :post_render

    +
    +

    サイトレンダリング後、ファイルを書き込む前

    + +
    +

    :site

    +
    +

    :post_write

    +
    +

    サイトをディスクに書き込んだ後

    + +
    +

    :pages

    +
    +

    :post_init

    +
    +

    ページが初期化される度

    + +
    +

    :pages

    +
    +

    :pre_render

    +
    +

    ページがレンダリングされる直前

    + +
    +

    :pages

    +
    +

    :post_render

    +
    +

    ページレンダリング後、ディスクへの書き込み前

    + +
    +

    :pages

    +
    +

    :post_write

    +
    +

    ページをディスクに書き込んだ後

    + +
    +

    :posts

    +
    +

    :post_init

    +
    +

    ポストが初期化される度

    + +
    +

    :posts

    +
    +

    :pre_render

    +
    +

    ポストのレンダリング直前

    + +
    +

    :posts

    +
    +

    :post_render

    +
    +

    ポストレンダリング後、ディスクに書き込む前

    + +
    +

    :posts

    +
    +

    :post_write

    +
    +

    ポストをディスクに書き込んだ後

    + +
    +

    :documents

    +
    +

    :post_init

    +
    +

    ドキュメントが初期化される度

    + +
    +

    :documents

    +
    +

    :pre_render

    +
    +

    ドキュメントのレンダリング直前

    + +
    +

    :documents

    +
    +

    :post_render

    +
    +

    ドキュメントのレンダリング後、ディスクに書き込む前

    + +
    +

    :documents

    +
    +

    :post_write

    +
    +

    ドキュメントをディスクに書き込んだ後

    + +
    +
    diff --git a/_docs/plugins/installation.md b/_docs/plugins/installation.md new file mode 100644 index 0000000..3e76b25 --- /dev/null +++ b/_docs/plugins/installation.md @@ -0,0 +1,133 @@ +--- +title: プラグイン +permalink: /docs/plugins/installation/ +--- + + +プラグインのインストールに3つのオプションがあります。 + + + +1. サイトのソースrootに`_plugins`ディレクトリを作ります。プラグインをここに入れます。このディレクトリにある`*.rb`で終わる全てのファイルはJekyllがサイトを生成する前に読み込まれます。 +2. `_config.yml`ファイルに`plugins`キー(もしくはJekyll < `3.5.0`は`gems`)と使用したいgem名の値の配列を追加します。例えば、 + + ```yaml + # This will require each of these plugins automatically. + plugins: + - jekyll-gist + - jekyll-coffeescript + - jekyll-assets + - another-jekyll-plugin + ``` + + 次に`gem install jekyll-gist jekyll-coffeescript jekyll-assets another-jekyll-plugin`でプラグインをインストールします。 +3. `Gemfile`のBundlerグループに関連するプラグインを追加します。例えば、 + + ```ruby + group :jekyll_plugins do + gem "jekyll-gist" + gem "jekyll-coffeescript" + gem "jekyll-assets" + gem "another-jekyll-plugin" + end + ``` + + `bundle install`コマンドを実行して、Bundlerグループから全てのプラグインをインストールする必要があります。 + + + +
    +
    GitHub Pagesでのプラグイン
    + +

    + GitHub PagesはJekyllで動いています。セキュリティ上の理由で(いくつかのホワイトリストのプラグインを除く)プラグインを無効にする--safeオプションで全てのページを生成します。GitHub Pagesで公開する場合はあなたのプラグインが機能しないことを意味します。

    + GitHubページを使用してサイトを公開することはできますが、サイトをローカルで変換し、Jekyllのソースファイルではなく、生成された静的ファイルをGitHubリポジトリにプッシュする必要があります。 +

    + +
    + +
    +
    + _plugins_config.ymlGemfileは同時に使用できます。 +
    + +

    + 同じサイト内で上記のプラグインオプションを同時に使用することもできます。1つの使用は他の使用を制限しません。 +

    + +
    + +### jekyll_pligin グループ + + +Jekyllは`Gemfile`の中の特定のGemグループを別に扱います。このグループに含まれる全てのGemは、Jekyllがあなたのソースディレクトリの残りを処理し始める前にロードされます。 + + + +ここに含まれるGemは、設定ファイルの`plugins:`キーに明示されなくても、有効になります。 + + + +
    +

    + :jekyll-pluginsグループに含まれるGemは、--safeモード設定に関係なく有効になります。このグループにどのようなGemが含まれているかに、注意してください! +

    + +
    diff --git a/_docs/plugins/tags.md b/_docs/plugins/tags.md new file mode 100644 index 0000000..64cbd67 --- /dev/null +++ b/_docs/plugins/tags.md @@ -0,0 +1,142 @@ +--- +title: タグ +permalink: /docs/plugins/tags/ +--- + + +サイトでカスタムLiquidタグを使用したい場合は、タグシステムで行うことができます。組み込み例として、Jekyllには`highlight`や`include`タグがあります。以下は、ページがレンダリングされた時を出力するカスタムLiquidダグの例です。 + + + +```ruby +module Jekyll + class RenderTimeTag < Liquid::Tag + + def initialize(tag_name, text, tokens) + super + @text = text + end + + def render(context) + "#{@text} #{Time.now}" + end + end +end + +Liquid::Template.register_tag('render_time', Jekyll::RenderTimeTag) +``` + +最低、次のメソッドの実装が必要です。 + + + +
    + + + + + + + + + + + + + + +
    メソッド説明
    +

    render

    +
    +

    タグの内容の出力

    + +
    +
    + +次のようにLiquidテンプレートエンジンにカスタムタグを登録する必要があります。 + + + +```ruby +Liquid::Template.register_tag('render_time', Jekyll::RenderTimeTag) +``` + +上記の例では、ページのどこにでもタグを設置することができます。 + + + +{% raw %} +```ruby +

    {% render_time page rendered at: %}

    +``` +{% endraw %} + +ページには次のように出力されます。 + + + +```html +

    page rendered at: Tue June 22 23:38:47 –0500 2010

    +``` + +## タグブロック + + +上記の`render_time`タグは、`Liquid::Block`クラスを継承することでタグブロックとして書くこともできます。以下の例を見てください。 + + + +```ruby +module Jekyll + class RenderTimeTagBlock < Liquid::Block + + def render(context) + text = super + "

    #{text} #{Time.now}

    " + end + + end +end + +Liquid::Template.register_tag('render_time', Jekyll::RenderTimeTagBlock) +``` + +これで、タグブロックをどこでも使用できます。 + + + +{% raw %} +```liquid +{% render_time %} +page rendered at: +{% endrender_time %} +``` +{% endraw %} + +ページでは上の例と同じ出力を得ることができます。 + + + +```html +

    page rendered at: Tue June 22 23:38:47 –0500 2010

    +``` + +
    +

    上記の例では、タグとタグブロックを同じ名前render_timeで登録しました。しかし、同じプロジェクトでタグとタグブロックに同じ名前を使用することは推奨しません。競合する可能性があります。

    + +
    \ No newline at end of file diff --git a/_docs/plugins/your-first-plugin.md b/_docs/plugins/your-first-plugin.md new file mode 100644 index 0000000..9ffdfaf --- /dev/null +++ b/_docs/plugins/your-first-plugin.md @@ -0,0 +1,203 @@ +--- +title: 初めてのプラグイン +permalink: /docs/plugins/your-first-plugin/ +--- + + +プラグインはあなたのニーズに合わせたJekyllの拡張動作を可能にします。Jekyllのプラグインには6種類あります。 + + + +## Generatiors(ジェネレータ) + + +[Generators(ジェネレータ)]({{ "/docs/plugins/generators/" | relative_url }})はサイトにコンテンツを作成します。 +例えば、 + + + +* [jekyll-feed](https://github.com/jekyll/jekyll-feed){:target="_blank"} ブログポストのAtomフィードを作成する。 +* [jekyll-archives](https://github.com/jekyll/jekyll-archives){:target="_blank"} ブログのカテゴリやタグのアーカイブページを作成する。 +* [jekyll-sitemap](https://github.com/jekyll/jekyll-sitemap){:target="_blank"} sitemapを作成する。 + + + +## Converters(コンバータ) + + +[Converters(コンバータ)]({{ "/docs/plugins/converters/" | relative_url }})はマークアップ言語を他のフォーマットに変換します。 +例えば、 + + + +* [jekyll-textile-converter](https://github.com/jekyll/jekyll-textile-converter){:target="_blank"} +textileをHTMLに変換する。 +* [jekyll-coffeescript](https://github.com/jekyll/jekyll-coffeescript){:target="_blank"} CoffeescriptをJavaScriptに変換する。 +* [jekyll-opal](https://github.com/jekyll/jekyll-opal){:target="_blank"} RubyをJavaScriptに変換する。 + + + +## コマンド + + +[コマンド]({{ "/docs/plugins/commands/" | relative_url }}) サブコマンドで`jekyll`の実行を拡張します。 +例えば、 + + + +* [jekyll-compose](https://github.com/jekyll/jekyll-compose){:target="_blank"} ポストやページ、ドラフトを作成するサブコマンドを追加する。 + + + +## タグ + + +[タグ]({{ "/docs/plugins/tags/" | relative_url }})はカスタムLiquidタグを作成します。 +例えば、 + + + +* [jekyll-youtube](https://github.com/dommmel/jekyll-youtube){:target="_blank"} YouTubeビデオを埋め込む。 +* [jekyll-asset-path-plugin](https://github.com/samrayner/jekyll-asset-path-plugin){:target="_blank"} アセットの相対パスを出力する。 +* [jekyll-swfobject](https://github.com/sectore/jekyll-swfobject){:target="_blank"} SWFオブジェクトを埋め込む。 + + + +## フィルタ + + +[フィルタ]({{ "/docs/plugins/filters/" | relative_url }})はカスタムLiquidフィルタを作成します。 +例えば、 + + + +* [jekyll-time-ago](https://github.com/markets/jekyll-timeago){:target="_blank"} 2つの日付の間隔。 +* [jekyll-toc](https://github.com/toshimaru/jekyll-toc){:target="_blank"} 目次を作成する。 +* [jekyll-email-protect](https://github.com/vwochnik/jekyll-email-protect){:target="_blank"} スパムボットから保護するために電子メールを難読化する。 + + + +## Hooks(ホック) + + +[Hooks(ホック)]({{ "/docs/plugins/hooks/" | relative_url }})はビルドプロセスを拡張するためのきめ細かい制御を与えます。 + + + +## Flags + +プラグインを書くときに気をつけるべき2つのFlagがあります。 + + + +
    + + + + + + + + + + + + + + + + + + +
    Flag説明
    +

    safe

    +
    +

    + 任意のコードの実行が許可されていない環境でこのプラグインを安全に実行できるかどうかをJekyllに通知するboolean flag。これはGitHubページがどのコアプラグインを使うことができるか、そしてどれを実行するのが危険かを判断するために使われます。プラグインが任意のコードの実行を許可していない場合は、これをtrueに設定してください。GitHub Pagesはまだあなたのプラグインをロードすることはできませんが、コアに含めるために提出することが、使用するための最善の方法です! +

    + +
    +

    priority

    +
    +

    + プラグインがロードされる順位を定義します。使用できる値は、:lowest, :low, :normal, :high, :highestです。highestが最初に適用され、lowestが最後に適用されます。 +

    + +
    +
    + +上記のことをプラグインで使用する例として、この2つのflagの指定方法を示します。 + + + +```ruby +module Jekyll + class UpcaseConverter < Converter + safe true + priority :low + ... + end +end +``` + +## Best Practices + +ガイドがプラグインの作成の助けとなるでしょう。プラグイン構築に関して、推奨することがあります。 + + + +プラグインに[gem]({{ "/docs/ruby-101/#gems" | relative_url }})を使うことをお勧めします。依存関係の管理を助け、サイトのソースコードと切り分け、複数のプロジェクトに渡り共用できるようになります。gemの作成に関しては、[Ruby gems guide](https://guides.rubygems.org/make-your-own-gem/){:target="_blank"}や[jekyll-feed](https://github.com/jekyll/jekyll-feed){:target="_blank"}等既存のプラグインのソースを見てください。 + + diff --git a/_docs/posts.md b/_docs/posts.md index 166d380..1ad1431 100644 --- a/_docs/posts.md +++ b/_docs/posts.md @@ -1,520 +1,273 @@ --- -layout: docs -title: Post を書く -prev_section: frontmatter -next_section: drafts +title: Posts(ポスト) permalink: /docs/posts/ -base_revision: 0fbdc6944041147c2d21b306751b078860b6603b[refs/heads/master] +redirect_from: + - /docs/drafts/ --- - - -Jekyll の最高の側面の一つは、それが “Blog のようである” ということです。 -これはまさに何を意味するのでしょうか? -まあ、簡単に言えば、それはブログは Jekyll の機能に焼成されることを意味しています。 -もし、Post を書き、そしてそれらをオンラインで公開する場合、 -これはあなたがブログの公開と維持をコンピュータ上のテキストファイルで -フォルダ管理をすることによって単純にできることを意味します。 -データベースの設定と管理の手間や Web ベースの CMS システムと比較して、 -これは喜ばしい変化になります! - - - -## Post のフォルダ - - - -[ディレクトリ構成](../structure/) ページで説明した通り、 -`_posts` フォルダはあなたのブログの Post がある場所です。 -これらのファイルは -[Markdown](http://daringfireball.net/projects/markdown/) や -[Textile](http://redcloth.org/textile) フォーマットのテキストファイルの -どちらでも書くことができ、そしてそれらが -[YAML front-matter](../frontmatter/) を持っている限り、 -これらのソースフォーマットから静的サイトの一部として HTML ページに変換されます。 - - - -### Post ファイルを作成する - - - -新しい Post を作成するために、あなたが行う必要があることは、 -`_posts` ディレクトリに新しいファイルを作成することです。 -このフォルダ内のファイルにどのように名前をつけるかが重要になります。 -Jekyll は以下のようなフォーマットによって命名されたブログの Post ファイルが必要です: - - - -{% highlight bash %} -YEAR-MONTH-DAY-title.MARKUP -{% endhighlight %} +redirect_from: + - /docs/drafts/ +--- --> + +ブログはJekyllに組み込まれています。あなたがブログポストをテキストファイルで書き、Jekyllがそれをブログにします。 + + + +## ポストフォルダ + - + +## ポストを作る + + +ポストを作るには、`_posts`ディレクトリに以下のフォーマットでファイルを追加します。 + + + +``` YEAR-MONTH-DAY-title.MARKUP -{% endhighlight %} ---> +``` -`YEAR` は 4 桁の数字、 `MONTH` と `DAY` は両方とも 2 桁の数字、 -そして `MARKUP` はファイルで使用されるフォーマットを表すファイル拡張子です。 -例えば、以下は有効な Post のファイル名の例になります: +`YEAR`は4桁を、`MONTH`と`DAY`は2桁を使用します。`MARKUP`はファイルで使用している形式を表す拡張子です。 +以下に有効なファイル名の例を示します。 - +file. For example, the following are examples of valid post filenames: --> -{% highlight bash %} +``` 2011-12-31-new-years-eve-is-awesome.md -2012-09-12-how-to-write-a-blog.textile -{% endhighlight %} +2012-09-12-how-to-write-a-blog.md +``` - +全てのブログポスト用ファイルは[front matter]({{ "docs/front-matter/" | relative_url }})で開始します。通常ここには使用する[レイアウト]({{ "docs/layouts/" | relative_url }})やその他メタデータを記述します。 +シンプルな例として、何も書かないも可能です。 -
    -
    ProTip™: 別のポストへのリンク
    -

    - post_url タグを使って - 別のポストにリンクをすることにより、サイトのパーマリンクの変更時のURL変更を - 気にしなくて済みます。 -

    -
    + + +```markdown +--- +layout: post +title: "Welcome to Jekyll!" +--- + +# Welcome + +**Hello world**, this is my first Jekyll blog post. + +I hope you like it! +``` -

    - Use the post_url - tag to link to other posts without having to worry about the URL's - breaking when the site permalink style changes. + post_urlタグを使用することで、パーマリンクの形式を変更したときにURLが壊れる心配なく、他のポストへリンクできます。

    +
    ---> - -### コンテンツのフォーマット - - - -すべてのブログ Post は [YAML front-matter](../frontmatter/) ではじまるべきです。 -後は、あなたが好むフォーマットを決定するだけです。 -Jekyll は 2 つの人気のあるマークアップフォーマットをサポートしています: -[Markdown](http://daringfireball.net/projects/markdown/) と -[Textile](http://redcloth.org/textile) です。 -これらのフォーマットはそれぞれ -Post のコンテンツの異なるタイプをマークアップする独自の方法を持っているため、 -あなたは自分のニーズにもっとも適したものを決定し、それらのフォーマットに慣れるべきです。 - - -
    -
    文字セットに注意してください
    -

    - コンテンツプロセッサは、それらをよりよく見せるために、 - 特定の文字を変更することができます。 - 例えば、 Redcarpet 内の smart 拡張子は - ASCII のクォーテーション文字を Unicode のものに通常変換します。 - ブラウザにそれらの文字を適切に表示するためには、 - layout ファイルの <head> 内に - <meta charset="utf-8"> を含むことによって - 文字セットのメタ値を定義します。 -

    -
    -

    + コンテンツプロセッサはより美しく見せるために、特定の文字を変更できます。例えば、Redcarpetのsmart extensionは、標準のASCII引用符をUnicodeの中括弧に変換します。ブラウザがこれらの文字を正しく表示するために、レイアウトの<head><meta charset="utf-8">の文字コード定義メタタグを入れてください。 +

    + ---> - -## 画像やリソースを含める - - - -あなたが画像、ダウンロードや他のデジタル資産を -テキストのコンテンツに沿って含めるチャンスです。 -これらのリソースにリンクするための構文は Markdown と Textile の間で異なり、 -あなたのサイトにこれらのファイルを格納することの動作の問題は誰もが直面するものです。 - - - -なぜなら Jekyll の柔軟性は、これらを行うための方法に -たくさんのソリューションがあるからです。 -一つの一般的なソリューションは、任意の画像、 -ダウンロードや他のリソースを配置した `assets` や `downloads` のように -呼ばれるディレクトリをプロジェクトのルートに作成することです。 -その後、任意の Post の中からそれらは資産を含めたパスとして -サイトのルートを使用してリンクすることができます。 -繰り返しますが、これはあなたのサイトの(サブ)ドメインとパスの設定方法に依存しますが、 -ここであなたが Post の `site.url` 変数を使用してこれを行う方法の -いくつかの(Markdown での)例を示します。 - - - -Post 内に画像資産を含めます: - - - -{% highlight text %} -… 以下にスクリーンショットが表示されます: -![私の有用なスクリーンショット]({% raw %}{{ site.url }}{% endraw %}/assets/screenshot.jpg) -{% endhighlight %} - - - -読者がダウンロードするための PDF へのリンクを貼ります: - - - -{% highlight text %} -… あなたはそのまま [PDFをダウンロードできます]({% raw %}{{ site.url }}{% endraw %}/assets/mydoc.pdf) 。 -{% endhighlight %} - - -
    -
    ProTip™: 単にサイトのルート URL を使用してリンクする
    -

    - もしあなたのサイトが今までドメインのルート URL で表示していたならば、 - {% raw %}{{ site.url }}{% endraw %} 変数をスキップすることができます。 - この場合、あなたは単に /path/file.jpg とすれば、 - 資産を直接参照することができます。 -

    -
    +## イメージやリソースを含める + - - -## Post の index を表示する - - - -それは、フォルダ内で持っている Post がすべて順調でよいですが、 -あなたがどこかで Post のリストを持っていない限りブログはそれを使用しません。 -別のページ(または[テンプレート](../templates/)内)上の Post の index を作成するのは -簡単で、それは [Liquid template language](http://wiki.shopify.com/Liquid) と -そのタグのおかげと思っています。 -これはあなたのブログの Post へのリンクのリストを作成する方法の基本的な例です: - - - -{% highlight html %} - -{% endhighlight %} +いくつかのポイントとして、テキストコンテンツに画像やダウンロード、その他デジタルファイルを入れたくなるでしょう。一般的な方法として、プロジェクトディレクトリのrootフォルダに`assets`のようなイメージや他のリソースを入れておくためのフォルダを作ります。そうすれば、どのようなポストでもサイトのrootパスから挿入するアイテムへのリンクを使用することができます。実行するには、サイトの(サブ)ドメインとパスの構成により方法が異なりますが、シンプルなMarkdownの例を示します。 + + + +ポストに画像を入れる: + + + +```markdown +... which is shown in the screenshot below: +![My helpful screenshot](/assets/screenshot.jpg) +``` - + +```markdown +... you can [get the PDF](/assets/mydoc.pdf) directly. +``` + +## ポストのインデックスを表示する + + +他のページにポストのインデックスを作るのは、[Liquid](https://docs.shopify.com/themes/liquid/basics){:target="_blank"}とそのタグのおかげで簡単です。 +ここに、ブログポストへのリンクのリストを作り方のシンプルな例を示します。 + + + +{% raw %} +```html -{% endhighlight %} ---> +``` +{% endraw %} -もちろん、あなたは Post を表示する方法(と場所)や、 -サイトを構築する方法を完全に制御することができます。 -もし、さらに知りたい場合は、 Jekyll とともに -[テンプレートがどのように働くか](../templates/)について詳細を読むべきです。 +ポストをどのように(どこで)表示するか、サイトの構成をどのようにするかは、全てコントロールできます。もっと知りたい場合、Jekillの[テンプレートの働き方]({{ "docs/templates/" | relative_url }})を更に読むべきです。 - - -## Post の抜粋 - - - -各々の Post は自動的に excerpt_separator の最初に発生するコンテンツの先頭から -文書のはじめのブロックが取られ、そして post.excerpt として設定されます。 -上記の Post の index の例です。 -多分、あなたは各々の Post のはじめの段落を追加することよって Post の -内容について少しヒント含めたいのです: - - - -{% highlight html %} - -{% endhighlight %} +work](/docs/templates/) with Jekyll if you want to know more. --> + +`post`が上記の`for`ループ内にのみ存在することに注意してください。変換対象のポストやページの変数(`for`ループの中にあるポストやページの変数)にアクセスしたいときは、代わりに`page`変数を使用してください。 + + + +## カテゴリとタグ + + +Jekyllはブログポストのカテゴリとタグをサポートしています。カテゴリとタグの違いは、カテゴリはポストのURLに含めることができますが、タグはできません。 + + + +使用するにはまず、カテゴリとタグをfront matterにセットします: + + + +```yaml +--- +layout: post +title: A Trip +categories: [blog, travel] +tags: [hot, summer] +--- +``` + +Jekyllは`site.categories`でカテゴリを使用可能にします。`site.categories`には2つの異なる配列が格納されています。一つ目はカテゴリの名前、二つ目はそのカテゴリのポストの配列です。 + + + +{% raw %} +```liquid +{% for category in site.categories %} +

    {{ category[0] }}

    + +{% endfor %} +``` +{% endraw %} + +タグも同様に`site.tags`で使用できます。 - + +## ポストの抜粋 + + +ポストで`excerpt`変数を使用することで、抜粋にアクセスすることができます。デフォルトはポストの最初の段落ですが、front matterや`_config.yml`で`excerpt_separator`を設定することでカスタマイズできます。 + + + +```yaml +--- +excerpt_separator: +--- + +Excerpt with multiple paragraphs + +Here's another paragraph in the excerpt. + +Out-of-excerpt +``` + +抜粋付きのブログポストのリストを出力する例です: + + + +{% raw %} +```liquid -{% endhighlight %} ---> - -Jekyll はあなたのために既にはじめの段落を掴んでくれているので、 -抜粋を `p` タグでラップする必要はありません。 -あなたが好むなら、これらのタグは以下のように消すことができます: - - - -{% highlight html %} -{% raw %}{{ post.excerpt | remove: '

    ' | remove: '

    ' }}{% endraw %} -{% endhighlight %} - - - -もし、あなたが自動的に生成された Post の抜粋を好まないなら、 -Post の YAML front-matter に `excerpt` を追加することによって上書きすることができます。 -`excerpt_separator` に `""` を設定することによって、完全にそれを無効にします。 - - - -また、 Liquid タグによって生成された任意の出力も同様に、任意の html タグを -出力の中から削除するために `| strip_html` フラグを渡すことができます。 -これはもし、あなたが `meta="description"` タグを Post の `head` として Post の抜粋を -出力するか、またはどこか他の内容の html タグ に沿って持つことを希望するなら、 -望ましくないが特に有効です。 - - - -## コードスニペットのハイライト化 - - - -Jekyll もまた Pygments か Rouge を使用したコードスニペットの -シンタックスハイライトサポートが組み込まれているため、 -任意の Post 内にコードスニペットを含めることは簡単です。 -ちょうど、次のように専用の Liquid タグを使用します。 - - - -{% highlight text %} -{% raw %}{% highlight ruby %}{% endraw %} -def show - @widget = Widget(params[:id]) - respond_to do |format| - format.html # show.html.erb - format.json { render json: @widget } - end -end -{% raw %}{% endhighlight %}{% endraw %} -{% endhighlight %} - - - -そして、出力はこのようになります: - - - -{% highlight ruby %} -def show - @widget = Widget(params[:id]) - respond_to do |format| - format.html # show.html.erb - format.json { render json: @widget } - end -end -{% endhighlight %} - - +``` +{% endraw %} -
    -
    ProTip™: 行番号を表示する
    -

    - あなたは、このように highlight 開始タグの終端に linenos を - 加えることによってコードスニペットに行番号を含めることができます: - {% raw %}{% highlight ruby linenos %}{% endraw %}。 -

    -
    +## ドラフト + - - -これらの基本情報は、あなたがはじめの Post を書き始めるのに十分でなければなりません。 -あなたがそれ以外の情報を掘り下げる準備が可能になったとき、 -あなたの Post やあなたのサイトの他の場所で -[Postのパーマリンクをカスタマイズする](../permalinks/)ことや、 -[カスタム変数](../variables/)を使用するようなことに興味がわいているかもしれません。 - - +ドラフトは、ファイル名に日付を含まないポストです。作業中で、まだ公開したくないポストです。ドラフトを立ち上げるには、サイトのrootに`_drafts`フォルダを作り、最初のドラフトを作成してください。 + + + +```text +|-- _drafts/ +| |-- a-draft-post.md +``` + +ドラフトを含むプレビューは、`jekyll serve`や`jekyll build`の実行時に`--drafts`スイッチをつけてください。ドラフトファイルの日付が割り当てられるため、現在編集中のドラフトは最新のポストとして表示されます。 + + diff --git a/_docs/ruby-101.md b/_docs/ruby-101.md new file mode 100644 index 0000000..4b6e7aa --- /dev/null +++ b/_docs/ruby-101.md @@ -0,0 +1,64 @@ +--- +title: Ruby基礎 +permalink: /docs/ruby-101/ +--- + + +JekyllはRubyで書かれています。Rubyが初めてでしたら、このページはいくつかの用語を理解するのを助けるものです。 + + +## Gems + +gemはRubyプロジェクトに含めることができるコードです。機能をパッケージにして、他のプロジェクトや他の人々と共有することを可能にします。 +gemは次のような機能を実行できます。 + + +* RubyオブジェクトをJSONにコンバート +* ページ分け +* GitHubのようなAPIとの相互作用 +* Jekyllはそれ自身が、[jekyll-feed](https://github.com/jekyll/jekyll-feed){:target="_blank"}、[jekyll-seo-tag](https://github.com/jekyll/jekyll-seo-tag){:target="_blank"}や[jekyll-archives](https://github.com/jekyll/jekyll-archives){:target="_blank"}を含む多くのJekyllプラグインと同様にgemです。 + + + + +## Gemfile + +`Gemfile`はあなたのサイトに必要なgemのリストです。シンプルなJekyllサイトの場合、この様になります。 + + +```ruby +source 'https://rubygems.org' + +gem 'jekyll' + +group :jekyll_plugins do + gem 'jekyll-feed' + gem 'jekyll-seo-tag' +end +``` + +## Bundler + +Bundlerは`Gemfile`のgemをインストールします。`Gemfile`や`bundler`の使用は必須ではありませんが、異なる環境で横断的に、JekyllやJekyllプラグインと同じバージョンを確保することを強くお勧めします。 + + +`gem install bundler`で[Bundler](https://rubygems.org/gems/bundler){:target="_blank"}をインストールします。必要なのは1回だけです。 — 新しいJekyllプロジェクトを作成する度ではありません。 +追加情報をいくつか以下に記載しています。 + + +`Gemfile`を使用している場合、最初に`bundle install`でgemをインストールし、`bundle exec jekyll serve`でサイトを構築します。これは`Gemfile`に設定されているgemバーションを使用することを保証します。 +`Gemfile`を使用していない場合は、ただ`jekyll serve`で実行できます。 + + +JekyllプロジェクトでのBundlerの使い方についてのさらなる情報は、この[チュートリアル]({{ "/tutorials/using-jekyll-with-bundler/" | relative_url }})に多くの共通の質問の回答と、すぐに起動して実行する方法があります。 + diff --git a/_docs/static_files.md b/_docs/static_files.md new file mode 100644 index 0000000..43e06d6 --- /dev/null +++ b/_docs/static_files.md @@ -0,0 +1,126 @@ +--- +title: 静的ファイル +permalink: /docs/static-files/ +--- + + +静的ファイルはfront matterの無いファイルです。画像やPDFなどレンダリングしないファイルも含みます。 + + + +`site.static_files`でLiquidからアクセスでき、以下のメタデータを含んでいます。 + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    変数説明

    file.path

    + + ファイルの相対パス。/assets/img/image.jpgなど。 + + +

    file.modified_time

    + + ファイルが最後に修正された`Time`。2016-04-01 16:35:26 +0200など。 + + +

    file.name

    + + ファイル名の文字列。 例:ファイルがimage.jpgだとimage.jpg。 + + +

    file.basename

    + + ファイルのベースネーム。例:ファイルがimage.jpgだとimage。 + + +

    file.extname

    + + ファイルの拡張子。例:ファイルがimage.jpgだと.jpg + + +

    +
    + +上記の表で、`file`は何にでもなることに注意してください。(ループのような)処理で変数として使用するものです。グローバルなサイトやページの変数ではありません。 + + + +## 静的ファイルへのfront matterの追加 + + +静的ファイルに直接front matterを追加することはできませんが、設定ファイルの[デフォルトプロパティ]({{ "docs/configuration/front-matter-defaults/" | relative_url }})を通じてfront matterニア隊をセットできます。Jekyllが構築するときにセットしたfront matterを使用できます。 + + + +例えば: + + +`_config.yml`に`defaults`として以下の値を追加します。 + + + +```yaml +defaults: + - scope: + path: "assets/img" + values: + image: true +``` + +Jekyllサイトの画像(静的ファイル)が全て`assets/img`にあると仮定します。すると、Jekyllがサイトを構築するとき、全ての画像ファイルにfront matterで`image: true`とされているかのように扱います。 + + + +`assets/img`にある画像ファイルのリストを作りたいとします。`static_files`を見るループ処理で、このfront matterを持つファイルを取得します。 + + + +{% raw %} +```liquid +{% assign image_files = site.static_files | where: "image", true %} +{% for myimage in image_files %} + {{ myimage.path }} +{% endfor %} +``` +{% endraw %} + +サイトを構築すると、このfront matterを持つファイルのパスのリストが出力されます。 + + diff --git a/_docs/step-by-step/01-setup.md b/_docs/step-by-step/01-setup.md new file mode 100644 index 0000000..c3c5423 --- /dev/null +++ b/_docs/step-by-step/01-setup.md @@ -0,0 +1,134 @@ +--- +layout: step +title: セットアップ +menu_name: Step by Stepチュートリアル +position: 1 +--- + + +Jekkylのstep-by-stepチュートリアルへようこそ。このチュートリアルの目的は、デフォルトのgemベースのテーマに頼ることなく、一から最初のJekyllサイトを構築し、フロントエンドのWeb開発の経験をすることです。 +さあ、始めましょう! + + + +## インストール + + +JekyllはRubyプログラムですので、最初にRubyをあなたのマシーンにインストールする必要があります。[インストールガイド]({{ "/docs/installation/" | relative_url }})へ向かい、OSにあわせた説明を確認してください。 + + + +Rubyをセットアップしたら、ターミナルで以下を実行し、Jekyllをインストールできます。 + + + +``` +gem install jekyll bundler +``` + +プロジェクトの依存関係のリストのために、新しい`Gemfile`を作成します。 + + + +``` +bundle init +``` + +`Gemfile`を編集し、依存関係としてJekyllを追加します。 + + + +``` +gem "jekyll" +``` + +最後にプロジェクトのためのJekyllをインストールするために`bundle`を実行します。 + + + +以上でこのチュートリアルに書かれている全てのコマンドの前に`bundle exec`をつけることで、`Gemfile`で定義されたjekyllのバーションを使用できます。 + + + +## サイトを作る + + +サイトを作るときです! サイト用の新しいディレクトリを作り、好きな名前をつけましょう。このチュートリアルでは、そのディレクトリを“root”とします。 + + + +冒険がお好きなら、ここでGitリポジトリを初期化することができます。Jekyllの素晴らしいところの一つは、データベースが無いことです。全てのコンテンツとサイトの構成はGitのリポジトリでバージョン管理できるファイルです。リポジトリを使用するのは完全にオプションですが、習得するのは良い習慣です。Gitの使用については、[Git Handbook](https://guides.github.com/introduction/git-handbook/){:target="_blank"}を読むことで学べます。 + + + +最初のファイルを作成しましょう。rootに以下の内容の`index.html`を作成します。 + + + +```html + + + + + Home + + +

    Hello World!

    + + +``` + +## ビルド + + +Jekyllは静的サイトのジェネレータですので、サイトを見る前にJekyllで構築する必要があります。 +構築するためにrootで実行できるコマンドは2つあります。 + + + +* `jekyll build` - サイトを構築し、`_site`ディレクトリに出力します。 +* `jekyll serve` - 上記と同じことをし、変更を加える度に再構築を行います。あわせて`http://localhost:4000`でローカルサーバを走らせます。 + + + +サイトを開発しているときは、変更を更新するために`jekyll serve`を使用するとよいでしょう。 + + + +`jekyll serve`を実行し、ブラウザでhttp://localhost:4000を見てみましょう。"Hello World!"と表示されるはずです。 + + + +さて、あなたはこれが何だというのかと、考えているでしょうか? JekyllはただHTMLファイルをある場所から別の場所へコピーしただけです。もう少し我慢してください。まだまだ学ぶことがあります。 + + diff --git a/_docs/step-by-step/02-liquid.md b/_docs/step-by-step/02-liquid.md new file mode 100644 index 0000000..5b00c01 --- /dev/null +++ b/_docs/step-by-step/02-liquid.md @@ -0,0 +1,115 @@ +--- +layout: step +title: Liquid +position: 2 +--- + +LiquidでJekyllはもっと面白くなります。Liquidは3つの主なパート:[オブジェクト](#objects)、[タグ](#tags)、[フィルタ](#filters)を持つテンプレート言語です。 + + + + +## オブジェクト {#objects} + + +ObjectはLiquidにコンテンツを出力する場所を指示します。2つの中括弧:{% raw %}`{{`{% endraw %}と{% raw %}`}}`{% endraw %}で示します。例えば、 + + + +{% raw %} +```liquid +{{ page.title }} +``` +{% endraw %} + +ページに`page.title`という変数の内容を出力します。 + + + +## タグ {#tags} + + +タグはロジックを作成し、テンプレートの流れをコントロールします。中括弧とパーセント:{% raw %}`{%`{% endraw %}と{% raw %}`%}`{% endraw %}で示します。例えば、 + + + +{% raw %} +```liquid +{% if page.show_sidebar %} + +{% endif %} +``` +{% endraw %} + +もし`page.show_sidebar`がtrueなら、サイドバーを出力します。Jekyllで使用できるタグについては、[こちら]({{ "/docs/liquid/tags/" | relative_url }})をご確認ください。 + + + +## フィルタ {#filters} + + +フィルタはLiquidオブジェクトの出力を変更します。アプトプットの中で使用し、`|`で区切ります。例えば、 + + + +{% raw %} +```liquid +{{ "hi" | capitalize }} +``` +{% endraw %} + +`Hi`が出力されます。Jekyllで使用できるフィルタについては、[こちら]({{ "/docs/liquid/filters/" | relative_url }})をご確認ください。 + + + +## Liquidを使う + + +あなたの番です。ページのHello World!を小文字での出力に変更しましょう。 + + + +{% raw %} +```liquid +... +

    {{ "Hello World!" | downcase }}

    +... +``` +{% endraw %} + +変更をJekyllが処理するには、ページの先頭に[front matter](03-front-matter/)を追加する必要があります。 + + + +```markdown +--- +# front matter tells Jekyll to process Liquid +--- +``` + +"Hello World!"はレンダリング時に小文字になります。 + + + +今は何もないように見えるかもしれませんが、JekyllはLiquidや他の機能と組み合わせることで、大きな力を発揮します。 + + + +`downcase`のLiquidフィルタによる変更を見るには、front matterを追加する必要があります。 + + + +歩みを止めず、次へ進みましょう。 + + diff --git a/_docs/step-by-step/03-front-matter.md b/_docs/step-by-step/03-front-matter.md new file mode 100644 index 0000000..77e702e --- /dev/null +++ b/_docs/step-by-step/03-front-matter.md @@ -0,0 +1,58 @@ +--- +layout: step +title: Front Matter +position: 3 +--- +front matterは、ファイル冒頭の3つのダッシュのライン2つの間の[YAML](http://yaml.org/){:target="_blank"}の断片です。front matterは、例えば次のようにしてページに変数をセットするために使います。 + + + +```liquid +--- +my_number: 5 +--- +``` + +front matterの変数は、`page`変数としてLiquidで使用できます。例えば、上記の変数を出力する場合は、次のように使用します。 + + + +{% raw %} +```liquid +{{ page.my_number }} +``` +{% endraw %} + +## front matterを使う + + +front matterを使って、サイトの``を変更してみましょう。 + +<!-- Let's change the `<title>` on your site to populate using front matter: --> + +{% raw %} +```html +--- +title: Home +--- +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <title>{{ page.title }} + + +

    {{ "Hello World!" | downcase }}

    + + +``` +{% endraw %} + +普通のHTMLよりもソースコードを多く書かなければいけないのに、どうしてこの様にするのか不思議に思っているのではないでしょうか。次のステップへ進むと、理由が分かります。 + + diff --git a/_docs/step-by-step/04-layouts.md b/_docs/step-by-step/04-layouts.md new file mode 100644 index 0000000..d5a086d --- /dev/null +++ b/_docs/step-by-step/04-layouts.md @@ -0,0 +1,123 @@ +--- +layout: step +title: レイアウト +position: 4 +--- + + +Webサイトには通常複数のページがあり、このWebサイトでも違いはありません。 + + + +JekyllはページのためにHTMLと同様[Markdown](https://daringfireball.net/projects/markdown/syntax){:target="_blank"}もサポートしています。MarkdownはHTMLと比較して少ない要素で済み、(段落とヘッダと画像という)シンプルな構成要素のページには素晴らしい選択です。2つ目のページでは、それに挑戦してみましょう。 + + + +rootに`about.md`を作成します。 + + + +構成は`index.html`をコピーして、aboutページになるよう修正します。これを行う際の問題は、重複しているコードがあることです。スタイルシートをサイトに追加したくなったら、各ページの``に指定を追加しなければなりません。2ページだけならそう大変には思えないでしょうが、100ページある場合を想像してみてください。簡単な変更でも、長い時間がかかります。 + + + +## レイアウトを作る + + +レイアウトを使うことは、より良い選択です。レイアウトはコンテンツを包み込むテンプレートです。それらは、`_layouts`に入っています。 + + + +以下の内容で、`_layouts/default.html`にあなたの最初のレイアウトを作りましょう。 + + + +{% raw %} +```liquid + + + + + {{ page.title }} + + + {{ content }} + + +``` +{% endraw %} + +`index.html`とほとんど同じことに気づいたのではないでしょうか。違いは、front matterが無いことと、ページのコンテンツが`content`変数に置き換わっていることです。`content`は特別な変数で、ページが読み込まれたときに、そのレンダリングされたコンテンツを持っています。 + + + +`index.html`がこのレイアウトを使う用にするために、front matterに`layout`変数をセットします。レイアウトがコンテンツを包み込むため、`index.html`に入れる必要があるのは、いかが全てです。 + + + +{% raw %} +```html +--- +layout: default +title: Home +--- +

    {{ "Hello World!" | downcase }}

    +``` +{% endraw %} + +これを行ったあと、出力は以前と全く同じになります。レイアウトから、`page`のfront matterにアクセスすることができます。今回の場合は、`title`がindexページのfront matterで設定されていますが、レイアウトで出力されています。 + + + +## Aboutページ + + +aboutページに戻り、`index.html`からコピーする代わりに、レイアウトを使用することができます。 + + + +`about.md`を以下のようにします。 + + + +{% raw %} +```html +--- +layout: default +title: About +--- +# About page + +This page tells you a little bit about me. +``` +{% endraw %} + +http://localhost:4000/about.htmlをブラウザで開き、新しいページを見てみましょう。 + + + +おめでとうございます、2つのページのWebサイトができました! しかし、どうやってあるページから別のページへナビゲートしましょう? それを見つけるため、引き続き読み進めてください。 + + diff --git a/_docs/step-by-step/05-includes.md b/_docs/step-by-step/05-includes.md new file mode 100644 index 0000000..e1d47bf --- /dev/null +++ b/_docs/step-by-step/05-includes.md @@ -0,0 +1,116 @@ +--- +layout: step +title: Includes(インクルード) +position: 5 +--- + + +サイトは一緒にできていますが、ページ間を移動する方法がありません。そこを修正していきましょう。 + + + +ナビゲーションは全てのページにあるべきですので、レイアウトに追加するのが正しいです。レイアウトに直接追加するのではなく、インクルードについて学ぶ機会に使いましょう。 + + + +## インクルードタグ + + +`include`タグは、`_includes`フォルダにある別のファイルを読み込むことを可能にします。インクルードはサイト内で繰り返されるコードを一つにしたり、読みやすさを向上させるのに役立ちます。 + + + +ナビゲーションのソースコードは複雑になる可能性があるため、インクルードに移動する方が場合があります。 + + + +## インクルードの使い方 + + +以下の内容のナビゲーションファイルを`_includes/navigation.html`として作成します。 + + + +```liquid + +``` + +インクルードタグを使用して、`_layouts/default.html`にナビゲーションを追加してみましょう。 + + + +{% raw %} +```liquid + + + + + {{ page.title }} + + + {% include navigation.html %} + {{ content }} + + +``` +{% endraw %} + +http://localhost:4000をブラウザで開いて、ページの移動をやってみましょう。 + + + +## 現在のページを強調 + + +更に一歩進んで、ナビゲーションの現在のページを強調してみましょう。 + + + +スタイルを追加するためには、`_includes/navigation.html`が挿入されるページのURLを知っている必要があります。Jekyllでは便利な[変数]({{ "/docs/variables/" | relative_url }})を使用でき、その一つが`page.url`です。 + + + +`page.url`を使用して各リンクが現在のページなのかを確認し、そうなら色を赤にします。 + + + +{% raw %} +```liquid + +``` +{% endraw %} + +http://localhost:4000を見て、現在のページがレッドリンクになっていることを確認してください。 + + + +ナビゲーションに新しい項目を追加したり、ハイライトの色を変更したい場合は、ここでも多くの繰り返しがあります。次のステップでは、これに対処します。 + + diff --git a/_docs/step-by-step/06-data-files.md b/_docs/step-by-step/06-data-files.md new file mode 100644 index 0000000..08e10fa --- /dev/null +++ b/_docs/step-by-step/06-data-files.md @@ -0,0 +1,69 @@ +--- +layout: step +title: Dataファイル +position: 6 +--- + + +Jekyllは`_data`ディレクトリにあるYAMLやJSON、CSVファイルからのデータのロードをサポートしています。データファイルはコースコードとコンテンツを分け、サイトの管理を簡単にするよい方法です。 + + + +このステップでは、ナビゲーションの内容をデータファイルに保存して、ナビゲーションのインクルードで繰り返して使用します。 + + + +## データファイルの使い方 + + +[YAML](http://yaml.org/){:target="_blank"}はRubyエコシステムと共通のフォーマットです。ナビゲーションの各名前とリンクのアイテムを配列で保存して使用します。 + + + +以下の内容のナビゲーション用ファイルを`_data/navigation.yml`として作成します。 + + + +```yaml +- name: Home + link: / +- name: About + link: /about.html +``` + +Jekyllはこのデータファイルを`site.data.navigation`で利用できるようにします。`_includes/navigation.html`の各リンクの出力の代わりに、データファイルの反復処理でできます。 + + + +{% raw %} +```liquid + +``` +{% endraw %} + +出力結果は同じです。違いは、新しいナビゲーションを追加やHTML構成の変更が簡単になることです。 + + + +CSS、JS、画像のないサイトは何がいいのでしょう? JekyllでAssetsを処理する方法を見てみましょう。 + + diff --git a/_docs/step-by-step/07-assets.md b/_docs/step-by-step/07-assets.md new file mode 100644 index 0000000..ebdaa73 --- /dev/null +++ b/_docs/step-by-step/07-assets.md @@ -0,0 +1,113 @@ +--- +layout: step +title: Assets +position: 7 +--- + +JekyllでCSSやJS、画像その他のファイルを使うのは、簡単です。サイトのフォルダにそれらを入れれば、サイトを構築する家庭でコピーされます。 + + + +Jekyllのサイトでは、ファイルを整理するために次のような構成を取ることが多いです。 + + + +```sh +. +├── assets +| ├── css +| ├── images +| └── js +... +``` + +## Sass + +`_includes/navigation.html`のインラインスタイルは、ベストではありません。classを使用して、現在のページの表示スタイルを設定してみましょう。 + + + +{% raw %} +```liquid + +``` +{% endraw %} + +スタイル設定のために一般的なCSSを使用することもできますが、このステップでは[Sass](https://sass-lang.com/){:target="_blank"}を使ってみましょう。SassはJekyllに組み込まれているCSSの素晴らしい拡張機能です。 + + + +まず、以下の内容で`/assets/css/styles.scss`のファイルを作成します。 + + + +{% raw %} +```css +--- +--- +@import "main"; +``` +{% endraw %} + +冒頭にある空のfront matterは、Jekyllに処理が必要なファイルだと知らせるためのものです。`@import "main"`は、Sassへのsassディレクトリ(デフォルトではサイトのrootの`_sass/`)の`main.scss`というファイルを探すようにという指示です。 + + + +この段階では、メインのcssファイルのみです。より大きなプロジェクトでは、CSSを整理するための素晴らしい方法になります。 + + + +以下の内容で、`/_sass/main.scss`を作成します。 + + + +```sass +.current { + color: green; +} +``` + +レイアウトで、スタイルシートを参照するようにする必要があります。 + + + +`_layouts/default.html`を開き、``にスタイルシートの参照を追加します。 + + + +{% raw %} +```liquid + + + + + {{ page.title }} + + + + {% include navigation.html %} + {{ content }} + + +``` +{% endraw %} + +http://localhost:4000を読み込み、ナビゲーションのそのページへのリンクが緑になっていることを確認しましょう。 + + + +次は、Jekyllの最もポピュラーな機能、ブログについて見てみましょう。 + + diff --git a/_docs/step-by-step/08-blogging.md b/_docs/step-by-step/08-blogging.md new file mode 100644 index 0000000..47db76c --- /dev/null +++ b/_docs/step-by-step/08-blogging.md @@ -0,0 +1,189 @@ +--- +layout: step +title: ブログ +position: 8 +--- + + +データベースを使わず、どうやってブログにするのか不思議に思っているのではないでしょうか。Jekyllのスタイルなら、テキストファイルだけでブログを作ることができます。 + + + +## ポスト + + +ブログポストは`_posts`フォルダに入れます。ポストのファイル名は特別なフォーマットで、公開日、タイトル、拡張子です。 + + + +最初のポストを、以下の内容で`_posts/2018-08-20-bananas.md`として作成しましょう。 + + + +```markdown +--- +layout: post +author: jill +--- +A banana is an edible fruit – botanically a berry – produced by several kinds +of large herbaceous flowering plants in the genus Musa. + +In some countries, bananas used for cooking may be called "plantains", +distinguishing them from dessert bananas. The fruit is variable in size, color, +and firmness, but is usually elongated and curved, with soft flesh rich in +starch covered with a rind, which may be green, yellow, red, purple, or brown +when ripe. +``` + +以前作成した`about.md`に似ていますが、レイアウトが異なり、著者(author)の指定が入っています。`author`はカスタム変数で、必須ではありませんし、`creator`の様な名前にすることもできます。 + + + +## レイアウト + + +`post`レイアウトがありませんので、以下の内容で`_layouts/post.html`を作成しましょう。 + + + +{% raw %} +```html +--- +layout: default +--- +

    {{ page.title }}

    +

    {{ page.date | date_to_string }} - {{ page.author }}

    + +{{ content }} +``` +{% endraw %} + +これはレイアウトを継承する例です。postレイアウトはタイトル、日付、著者をコンテンツをdefaultレイアウトのbodyに出力します。 + + + +`date_to_string`はフィルタで、日付のフォーマットをより良いフォーマットに変換します。 + + + +## ポストのリスト + + +ブログポストへの移動方法がまだありません。通常ブログはポストのリストのページがあります。次はそれを作ってみましょう。 + + + +Jekyllはポストを`site.posts`で使用可能にします。 + + + +以下の内容の`blog.html`をroot(`/blog.html`)に作成します。 + + + +{% raw %} +```html +--- +layout: default +title: Blog +--- +

    Latest Posts

    + +
      + {% for post in site.posts %} +
    • +

      {{ post.title }}

      +

      {{ post.excerpt }}

      +
    • + {% endfor %} +
    +``` +{% endraw %} + +このコードのメモです。 + + + +* `post.url`はJekyllが自動でセットするポストの出力するパスです。 +* `post.title`はポストのファイル名から取得され、front matterで`title`を設定することで上書きできます。 +* `post.excerpt`はデフォルトではポストの内容の最初の段落です。 + + + +また、メインナビゲーションにこのページへの移動が必要です。`_data/navigation.yml`を開き、ブログページを追加しましょう。 + + + +```yaml +- name: Home + link: / +- name: About + link: /about.html +- name: Blog + link: /blog.html +``` + +## ポストを増やす + + +一つのポストだけのブログは面白くありません。もう少し追加しましょう。 + + + +`_posts/2018-08-21-apples.md`: + +```markdown +--- +layout: post +author: jill +--- +An apple is a sweet, edible fruit produced by an apple tree. + +Apple trees are cultivated worldwide, and are the most widely grown species in +the genus Malus. The tree originated in Central Asia, where its wild ancestor, +Malus sieversii, is still found today. Apples have been grown for thousands of +years in Asia and Europe, and were brought to North America by European +colonists. +``` + +`_posts/2018-08-22-kiwifruit.md`: + +```markdown +--- +layout: post +author: ted +--- +Kiwifruit (often abbreviated as kiwi), or Chinese gooseberry is the edible +berry of several species of woody vines in the genus Actinidia. + +The most common cultivar group of kiwifruit is oval, about the size of a large +hen's egg (5–8 cm (2.0–3.1 in) in length and 4.5–5.5 cm (1.8–2.2 in) in +diameter). It has a fibrous, dull greenish-brown skin and bright green or +golden flesh with rows of tiny, black, edible seeds. The fruit has a soft +texture, with a sweet and unique flavor. +``` + +http://localhost:4000を開き、ブログポストを確認してみましょう。 + + + +次は、ポストの著者のページの作成に焦点を合わせます。 + + diff --git a/_docs/step-by-step/09-collections.md b/_docs/step-by-step/09-collections.md new file mode 100644 index 0000000..79bc7cd --- /dev/null +++ b/_docs/step-by-step/09-collections.md @@ -0,0 +1,320 @@ +--- +layout: step +title: コレクション +position: 9 +--- + + +著者について肉付けするため、各著者の紹介と公開したポストのページを準備しましょう。 + + + +それを行うために、コレクションを使用します。コレクションはポストによく似ていますが、日付でグループ化されない点が異なります。 + + + +## 設定 + + +コレクションをセットアップするために、Jekyllに教える必要があります。(デフォルトでは)Jekyllの設定は`_config.yml`というファイルで行います。 + + + +以下の内容で`_config.yml`を作成します。 + + + +```yaml +collections: + authors: +``` + +設定ファイルを(再)読み込みするために、Jekyllサーバーをリスタートします。ターミナルで、`Ctrl`+`C`を押しサーバーを止めてから、`jekyll serve`で再起動します。 + + + +## 著者を追加する + + +ドキュメント(コレクションのアイテム)は、サイトのrootの`_*collection_name*`に入れます。今回の場合は、`_authors`です。 + + + +各著者のドキュメントを作成します。 + + + +`_authors/jill.md`: + +```markdown +--- +short_name: jill +name: Jill Smith +position: Chief Editor +--- +Jill is an avid fruit grower based in the south of France. +``` + +`_authors/ted.md`: + +```markdown +--- +short_name: ted +name: Ted Doe +position: Writer +--- +Ted has been eating fruit since he was baby. +``` + +## スタッフページ + + +サイトの全著者のリストのページを追加しましょう。Jekyllは`site.authors`でコレクションを利用可能にします。 + + + +`staff.html`を作り、`site.authors`を繰り返し処理して全てのスタッフを出力します。 + + + +{% raw %} +```html +--- +layout: default +title: Staff +--- +

    Staff

    + +
      + {% for author in site.authors %} +
    • +

      {{ author.name }}

      +

      {{ author.position }}

      +

      {{ author.content | markdownify }}

      +
    • + {% endfor %} +
    +``` +{% endraw %} + +contentはmarkdownで書かれていますので、`markdownify`フィルタを通す必要があります。レイアウトで{% raw %}`{{ content }}`{% endraw %}を使用するときは、自動で行われています。 + + + +また、メインナビゲーションでこのページに移動できるようにしましょう。`_data/navigation.yml`を開き、スタッフページの記述を追加しましょう。 + + + +```yaml +- name: Home + link: / +- name: About + link: /about.html +- name: Blog + link: /blog.html +- name: Staff + link: /staff.html +``` + +## ページの出力 + + +デフォルトでは、コレクションはドキュメントのページを出力しません。今回の場合、各著者のページが必要ですので、コレクションの設定を修正します。 + + + +`_config.yml`を開き、authorコレクションの設定に`output: true`を追加します。 + + + +```yaml +collections: + authors: + output: true +``` + +出力したページへのリンクは、`author.url`を使用して行えます。 + + + +`staff.html`ページにリンクを追加します。 + + + +{% raw %} +```html +--- +layout: default +--- +

    Staff

    + +
      + {% for author in site.authors %} +
    • +

      {{ author.name }}

      +

      {{ author.position }}

      +

      {{ author.content | markdownify }}

      +
    • + {% endfor %} +
    +``` +{% endraw %} + +ポストと同じように、著者のレイアウトを作成する必要があります。 + + + +以下の内容で`_layouts/author.html`を作成します。 + + + +{% raw %} +```html +--- +layout: default +--- +

    {{ page.name }}

    +

    {{ page.position }}

    + +{{ content }} +``` +{% endraw %} + +## front matterのデフォルト値 + + +次は、著者のドキュメントに`author`レイアウトを設定する必要があります。これまでやったように、front matterで設定することができますが、それでは何度も同じ操作が必要です。 + + + +自動でポストはpostレイアウト、著者のページにはauthorレイアウト、その他のページはdefaultレイアウトになるといいですよね。 + + + +`_config.yml`で[front matter defaults]({{ "/docs/configuration/front-matter-defaults/" | relative_url }})を使用すれば、できます。デフォルトをscopeに当てはめて、望むfront matterのデフォルト値を設定します。 + + + +実際に`_config.yml`にレイアウトのデフォルト値を追加してみましょう。 + + + +```yaml +collections: + authors: + output: true + +defaults: + - scope: + path: "" + type: "authors" + values: + layout: "author" + - scope: + path: "" + type: "posts" + values: + layout: "post" + - scope: + path: "" + values: + layout: "default" +``` + +これで、全てのページやポストのfront matterからレイアウトの指定を省くことができます。`_config.yml`を更新した場合は、変更を反映するためにJekyllを再起動する必要があります。 + + + +## 著者の投稿のリスト + + +著者のページに公開したポストをリストアップしてみましょう。これには、著者の`short_name`とポストの`author`を一致させる必要があります。ポストをauthorでフィルタすることで行うことができます。 + + + +著者のポストを出力するために、`_layouts/author.html`のフィルタをかけたリストの繰り返し処理を行います。 + + + +{% raw %} +```html +--- +layout: default +--- +

    {{ page.name }}

    +

    {{ page.position }}

    + +{{ content }} + +

    Posts

    +
      + {% assign filtered_posts = site.posts | where: 'author', page.short_name %} + {% for post in filtered_posts %} +
    • {{ post.title }}
    • + {% endfor %} +
    +``` +{% endraw %} + +## 著者ページへのリンク + + +ポストでは著者を参照していますので、著者のページへのリンクを貼りましょう。`_layouts/post.html`で、先ほどとよく似たフィルタのテクニックを使います。 + + + +{% raw %} +```html +--- +layout: default +--- +

    {{ page.title }}

    + +

    + {{ page.date | date_to_string }} + {% assign author = site.authors | where: 'short_name', page.author | first %} + {% if author %} + - {{ author.name }} + {% endif %} +

    + +{{ content }} +``` +{% endraw %} + +http://localhost:4000を開き、スタッフページやポストの著者のリンクが、きちんと機能していることを確認しましょう。 + + + +次はこのチュートリアルの最後のステップです。サイトに磨きをかけ、作品の配備の準備をします。 + + diff --git a/_docs/step-by-step/10-deployment.md b/_docs/step-by-step/10-deployment.md new file mode 100644 index 0000000..a3e8f84 --- /dev/null +++ b/_docs/step-by-step/10-deployment.md @@ -0,0 +1,204 @@ +--- +layout: step +title: Deployment +position: 10 +--- + +この最後のステップでは、サイトの公開準備をします。 + + + +## Gemfile + +サイトの[Gemfile]({{ "/docs/ruby-101/#gemfile" | relative_url }})を用意することは、よい経験になります。これにより、Jekyllや他のgemのバージョンが異なる環境でも、一貫していることが保証されます。 + + + +rootに以下の`Gemfile`を作ります。 + + + +``` +source 'https://rubygems.org' + +gem 'jekyll' +``` + +ターミナルで`bundle install`を実行します。これでgemをインストールし、後々`bundle install`時に現在のgemのバージョンをロックしておくための`Gemfile.lock`を作成します。gemのバージョンを更新したいときは、`bundle update`を実行してください。 + + + +`Gemfile`を使用すると、`jekyll serve`の様なコマンドは`bundle exec`を前につけて実行します。ですので、フルコマンドは次のようになります。 + + + +```bash +bundle exec jekyll serve +``` + +これは、`Gemfile`で設定されたgemだけを使用するようにRuby環境を制限します。 + + + +## プラグイン + + +Jekyllプラグインは、サイトに固有のカスタムコンテンツを生成することができます。沢山の利用可能な[plugins]({{ "/docs/plugins/" | relative_url }})がありますし、自分自身で作ることもできます。 + + + +多くのJekyllサイトで便利な公式のプラグイン3つを紹介します。 + + + +* [jekyll-sitemap](https://github.com/jekyll/jekyll-sitemap){:target="_blank"} - 検索エンジンがコンテンツをインデックスに加えるのを助けるsitemapを作成します。 +* [jekyll-feed](https://github.com/jekyll/jekyll-feed){:target="_blank"} - ポストのRSSフィードを作成します。 +* [jekyll-seo-tag](https://github.com/jekyll/jekyll-seo-tag) {:target="_blank"}- SEO用のmetaタグを追加します。 + + + +これらを使用するには、まず`Gemfile`に追記します。`jekyll_plugins`に配置すれば、自動でJekyllに要求されます。 + + + +``` +source 'https://rubygems.org' + +gem 'jekyll' + +group :jekyll_plugins do + gem 'jekyll-sitemap' + gem 'jekyll-feed' + gem 'jekyll-seo-tag' +end +``` + +次に以下の行を`_config.yml`に追加します。 + + + +``` +plugins: + - jekyll-feed + - jekyll-sitemap + - jekyll-seo-tag +``` + +では、`bundle update`を実行して、これらをインストールしましょう。 + + + +`jekyll-sitemap`はこれ以上のステップを必要とせず、構築時にsitemapを作成します。 + + + +`jekyll-feed`と`jekyll-seo-tag`は`_layouts/default.html`にタグの追加が必要です。 + + + +{% raw %} +```liquid + + + + + {{ page.title }} + + {% feed_meta %} + {% seo %} + + + {% include navigation.html %} + {{ content }} + + +``` +{% endraw %} + +Jekyll serverを再起動して、これらのタグが``に追加されていることを確認しましょう。 + + + +## Environments(環境) + + +作品に出力したいけれど、まだデプロイにないものに出会うこともあるでしょう。例としては、Analyticsスクリプトです。 + + + +これを行うには、[environments]({{ "/docs/configuration/environments/" | relative_url }})を使用します。`JEKYLL_ENV`変数を使用して、コマンド実行時に環境を設定します。例えば、 + + + +```bash +JEKYLL_ENV=production bundle exec jekyll build +``` + +デフォルトでは`JEKYLL_ENV`はデプロイです。`JEKYLL_ENV`は`jekyll.environment`でLiquidで使用できます。 + + + +{% raw %} +```liquid +{% if jekyll.environment == "production" %} + +{% endif %} +``` +{% endraw %} + +## デプロイ + + +最後のステップではsiteをサーバーに上げます。最も基本的な方法は、production buildを実行することです。 + + + +```bash +JEKYLL_ENV=production bundle exec jekyll build +``` + +そして、`_site`のコンテンツをサーバーにコピーします。 + + + +更によい方法は、このプロセスを[CI]({{ "/docs/deployment/automated/" | relative_url }})や[3rd party]({{ "/docs/deployment/third-party/" | relative_url }})の利用による自動化です。 + + + +## 最後に + + +これで、このstep-by-stepちょーとリアルはお終いです。ですが、あなたのJekyllの旅は始まったばかりです! + + + +* [community forums](https://talk.jekyllrb.com){:target="_blank"}に行き挨拶しましょう。 +* [貢献]({{ "/docs/contributing/" | relative_url }})でJekyllをより良くするのを手伝ってください。 +* Jekyllサイトを作り続けてください。 + + diff --git a/_docs/structure.md b/_docs/structure.md index 08f185d..9d3f8c0 100644 --- a/_docs/structure.md +++ b/_docs/structure.md @@ -1,76 +1,24 @@ --- -layout: docs title: ディレクトリ構成 -prev_section: usage -next_section: configuration permalink: /docs/structure/ -base_revision: 0fbdc6944041147c2d21b306751b078860b6603b[refs/heads/master] --- - - +--- --> -Jekyll のコアは、テキスト変換エンジンです。 -システムの背後のコンセプトはこれです: -あなたが、 Markdown や Textile や ただのプレーン HTML のような -自分のお気に入りのマークアップ言語で書かれたテキストを -与えると、それはレイアウトや一連のレイアウトファイルを大量生産します。 -そのプロセスを通して、あなたはどのようにサイト URL が見られるか、 -取得データがレイアウトの中に表示されるかなどを微調整することができます -それはすべてのテキストファイル編集を通して行われ、 -静的な Web サイトは最終的な成果物となります。 +基本的なJekyllサイトは、通常この様になっています。 - + -基本的な Jekyll サイトは、通常このようになります: - - - -{% highlight bash %} +```sh . ├── _config.yml -├── _drafts -| ├── begin-with-the-crazy-ideas.textile -| └── on-simplicity-in-technology.markdown -├── _includes -| ├── footer.html -| └── header.html -├── _layouts -| ├── default.html -| └── post.html -├── _posts -| ├── 2007-10-29-why-every-programmer-should-play-nethack.textile -| └── 2009-04-26-barcamp-boston-4-roundup.textile ├── _data | └── members.yml -├── _site -└── index.html -{% endhighlight %} - - +├── .jekyll-metadata +└── index.html # can also be an 'index.md' with valid front matter +``` + +
    +
    gemベーステーマを使ったJekyllサイトのディレクトリ構成
    + +

    + Jekyll 3.2から、jekyll newの新しいJekyllプロジェクトは、gemベーステーマを使用してサイトの外観を決定します。その結果、デフォルトのディレクトリ構成は軽くます。_layouts_includes_sassがテーマのgemに入っています。 +

    + +
    +

    + minimaは現在のデフォルトテーマで、 bundle show minimaでminimaのテーマファイルがコンピュータのどこに保存されているのかを見ることができます。 +

    + +
    -これらのファイルの概要はこのようになります: +以下は、それぞれのファイルがなんなのかの概要です。 - +
    - + + @@ -108,12 +75,13 @@ An overview of what each of these does: @@ -122,12 +90,13 @@ An overview of what each of these does: @@ -136,13 +105,15 @@ An overview of what each of these does: @@ -151,14 +122,16 @@ An overview of what each of these does: @@ -167,14 +140,16 @@ An overview of what each of these does: @@ -183,214 +158,104 @@ An overview of what each of these does: - - - - - - - - - - - - - - -
    ファイル / ディレクトリファイル・
    ディレクトリ
    説明

    - - 設定項目 データを保管します。 - これらのオプションの多くはコマンドラインの実行から指定することもできます。 - しかし、オプションはここで指定する方が簡単です。オプションを覚えておく必要がありません。 - + 構成データの保管場所です。多くのオプションはコマンドラインから実行するときに指定できますが、ここで設定する方が簡単です。ですので、覚えておく必要がありません。

    +

    - - ドラフトは posts に出力しません。 - これらのファイルのフォーマットは日付がありません: title.MARKUP 。 - ドラフトの働き で使い方を学んでください。 - + ドラフトは未公開のポストです。これらのファイルのフォーマットは、日付を含めません: title.MARKUPドラフトの働きで方法を学んでください。

    +

    - - これらは部分的な再利用を容易にするために layouts ファイルと posts ファイルによって - ミックス、マッチすることができます。 - liquid のタグ {% raw %}{% include file.ext %}{% endraw %} は - ファイルの _includes/file.ext を含むために使用されます。 - + レイアウトやポストに入れ込んで使う部品です。Liquidタグの{% raw %}{% include file.ext %}{% endraw %}_includes/file.extのファイルを読み込んで使用できます。

    +

    - - これらは posts をラップするテンプレートです。 - layouts は次のセクションに記述されている YAML front matter - に基づいて post 毎に選択されます。 - liquid タグ {% raw %}{{ content }}{% endraw %} は - ウェブページにコンテンツを挿入するために使用されます。 - + ポストを包むテンプレートです。レイアウトはポスト毎にfront matterで設定できます。Liqudタグ{% raw %}{{ content }}{% endraw %}をページにコンテンツを挿入するために使用します。

    +

    - - 言うならば、あなたの動的コンテンツです。 - これらのファイルのフォーマットは重要で、フォーマットに従う必要があります: - YEAR-MONTH-DAY-title.MARKUP 。 - パーマリンク は、各 post のためにカスタマイズすることができます。 - しかし、日付とマークアップ言語はファイル名によってのみ決定されます。 - + 言うなれば、あなたの動的コンテンツです。ファイルの命名規則が重要で、YEAR-MONTH-DAY-title.MARKUPのフォーマットでなければなりません。ポスト毎にパーマリンクをカスタマイズできますが、日付とマークアップの言語はファイル名によってのみ決まります。

    +

    - - よく整備されたサイトデータはここに置かれるべきです。 - Jekyll エンジンはこのディレクトリの全ての yaml ファイルをオートロードします。 - (.yml または .yaml で終わるもの) - このディレクトリの下に member.yml がある場合、あなたは - site.data.members を通してコンテンツにアクセスできます。 - -

    -
    -

    _site

    -
    -

    - - Jekyll がそれを変換すると、生成されたサイトは(デフォルトで)ここに置かれます。 - あなたの .gitignore ファイルにこれを追加するのは良い考えです。 - -

    -
    -

    index.html や、他の HTML, Markdown, Textile ファイル

    -
    -

    - - YAML Front Matter セクションを持つという条件で、 - それは Jekyll によって変換されます。 - 同様の事がどんな .html.markdown 、 - .md 、または .textile ファイルにも - サイトのルートディレクトリや、上記以外のディレクトリに起こります。 - -

    -
    -

    他のファイル/フォルダ

    -
    -

    - - 上記のリストで挙げたファイルやディレクトリを除く全てのもの - ― cssimages フォルダ、 - favicon.ico ファイルのような― - そのまま生成したサイトにコピーされます。 - もし、あなたが彼らが展開したものに興味があれば、 - 既に Jekyll を使用しているサイトはたくさんあります。 - -

    -
    -
    - - -

    _drafts

    +

    _sass

    - - Drafts are unpublished posts. The format of these files is without a date: title.MARKUP. Learn how to work with drafts. - + main.scssにインポートするためのsassの部品ファイルです。変換する家庭で一つのスタイルシートmain.cssになり、サイトのスタイルとして使用できます。

    + -

    _includes

    - - -

    - - These are the partials that can be mixed and matched by your layouts - and posts to facilitate reuse. The liquid tag - {% raw %}{% include file.ext %}{% endraw %} - can be used to include the partial in - _includes/file.ext. - -

    - - - - -

    _layouts

    - - -

    - - These are the templates that wrap posts. Layouts are chosen on a post- - by-post basis in the YAML front matter, - which is described in the next section. The liquid tag - {% raw %}{{ content }}{% endraw %} - is used to inject content into the web page. - -

    - - - - -

    _posts

    +

    _site

    - - Your dynamic content, so to speak. The naming convention of these files is - important, and must follow the format: - YEAR-MONTH-DAY-title.MARKUP. - The permalinks can be customized for each - post, but the date and markup language are determined solely by the - file name. - + 生成されたサイトがJ、ekyllが変換した際に配置される(デフォルトの)場所です。これを .gitignore ファイルに追加することをお勧めします。

    + -

    _data

    +

    .jekyll-metadata

    - - Well-formatted site data should be placed here. The jekyll engine will - autoload all yaml files (ends with .yml or .yaml) - in this directory. If there's a file members.yml under the directory, - then you can access contents of the file through site.data.members. - + これにより、Jekyllは、サイトが最後に構築されてから変更されていないファイル、および次回の構築時にどのファイルを再生成する必要があるかを追跡できます。このファイルは生成されたサイトには含まれません。これをあなたの.gitignoreファイルに追加するのはおそらく良い考えです。

    + -

    _site

    +

    index.htmlindex.mdと他のHTML、Markdownファイル

    +

    - - This is where the generated site will be placed (by default) once - Jekyll is done transforming it. It’s probably a good idea to add this - to your .gitignore file. - + ファイルにfront matterがある場合、Jekyllによって変換されます。サイトのルートディレクトリまたは上記以外のディレクトリにある.html.markdown.mdまたは.textileファイルについても同様です。

    - - - - -

    index.html and other HTML, Markdown, Textile files

    - - -

    - - Provided that the file has a YAML Front - Matter section, it will be transformed by Jekyll. The same will + -

    Other Files/Folders

    +

    他のファイルやフォルダ

    +

    - + cssimagesフォルダ、favicon.icoファイルなど、上記以外のすべてのディレクトリとファイルは、生成されたサイトにそのままコピーされます。レイアウトがどのように行われているかを知りたい場合は、既にJekyllを使用しているサイトがたくさんあります。 +

    + ---> diff --git a/_docs/support.md b/_docs/support.md new file mode 100644 index 0000000..b376b3e --- /dev/null +++ b/_docs/support.md @@ -0,0 +1,44 @@ +--- +title: サポート +permalink: "/docs/support/" +note: This file is autogenerated. Edit /.github/SUPPORT.markdown instead. +--- + + +## 助けを得る + + +**Jekyllのissueトラッカーはサポートフォーラムではありません。** + + + +Jekyllのサポートをお探しでしたら、多くののオプションがあります。 + + + +* [Jekyll ドキュメンテーション](https://jekyllrb.com/docs/home/)を読む。 +* Jekyllの使い方について質問がある場合は、[Jekyll Forum](https://talk.jekyllrb.com/){:target="_blank"}や[StackOverflow](https://stackoverflow.com/questions/tagged/jekyll){:target="_blank"}でディスカッションを開始してください。 +* Jekyllersとのチャット — [our Gitter channel](https://gitter.im/jekyll/jekyll){:target="_blank"}や[our IRC channel on Freenode](irc:irc.freenode.net/jekyll){:target="_blank"}に参加してください。 + + + +これらのサービスには、正しい方向性を示すために喜んで助けてくれるコミュニティメンバーがたくさんいます。 + + + +## バグの報告 + + +* Jekyllプラグインのバグを見つけたと思った場合は、プラグインのリポジトリのissueを開いてください。 — まず[rubygemsでプラグインを探し](https://rubygems.org/){:target="_blank"}、`Homepage`リンクをクリックして、プラグインのリポジトリにアクセスします。 +* Jekyll自身のバグだと思う場合は、[issueを開いて](https://github.com/jekyll/jekyll/issues/new){:target="_blank"}ください。 + + + +Happy Jekyllin'! diff --git a/_docs/themes.md b/_docs/themes.md new file mode 100644 index 0000000..a6563a9 --- /dev/null +++ b/_docs/themes.md @@ -0,0 +1,507 @@ +--- +title: テーマ +permalink: /docs/themes/ +--- + + +Jekyllには幅広いテーマシステムがあり、サイトの表現をカスタマイズできる、コミュティーで管理されたテンプレートとスタイルを提供します。Jekyllのテーマは、プラグインとパッケージ化されたAsset、レイアウト、インクルード、スタイルシートで、サイトのコンテンツで上書きできます。 + + + +## gemベーステーマを理解する + + +`jekyll new `コマンドを実行して、[新しいJekyllサイトを作る]({{ "/docs/" | relative_url }})時、Jekyllは[Minima](https://github.com/jekyll/minima){:target="_blank"}というgemベーステーマをインストールします。 + + + +gemベーステーマでは、いくつかのサイトディレクトリ(`assets`や`_layouts`、`_includes`、`_sass`ディレクトリ)はテーマに内包されていて、直接見えるところからは隠れています。ですが、全ての必要なディレクトリはJekyllが構築するときに読み込み、作業を行います。 + + + +Minimaの場合、Jekyllのサイトディレクトリでは以下のファイルだけが見えます。 + + + +``` +├── Gemfile +├── Gemfile.lock +├── _config.yml +├── _posts +│ └── 2016-12-04-welcome-to-jekyll.markdown +├── about.markdown +└── index.markdown +``` + +`Gemfile`と`Gemfile.lock`は、Jekyllのサイトを構築するのに必要なgemの必須バージョンを追跡するために、Bundlerが使用します。 + + + +gemベーステーマは、テーマ開発者が使用者に更新を利用可能にするのを簡単にします。更新があるとき、開発者はRubyGemsに更新をプッシュします。 + + + +テーマgemを使用している場合、(希望するなら)プロジェクトの全てのgemを更新するには、`bundle update`を実行します。`bundle update `の``に`minima`のようなテーマの名前を入れて、テーマgemのみを更新することもできます。開発者が追加や更新した(スタイルシートやインクルード)ファイルが自動でプロジェクトにプルします。 + + + +gemベーステーマの目標は、テーマのファイルを取得し直す手間無く更新したり、過度に複雑にすること無く、テーマの利点を享受し、コンテンツの作成に注力することです。 + + + +## テーマのデフォルトを上書きする + + +Jekyllのテーマはデフォルトのレイアウトやインクルド、スタイルシートを設定します。しかし、サイトのコンテンツでテーマのデフォルトを上書きすることができます。 + + + +テーマのレイアウトやインクルードを置き換えるには、あなたの`_layouts`や`_includes`ディレクトリに修正するファイルをコピーしたり、上書きしたいファイルと同じ名前のファイルを新たに作成します。 + + + +例えば、テーマに`page`レイアウトがある場合、`_layouts`ディレクトリに`page`レイアウト(`_layouts/page.html`)を作成することで、テーマのレイアウトを上書きできます。 + + + +コンピューターにあるテーマのファイルを見つけるには、 + + + +1. `bundle show`にテーマgemの名前をつけて実行します。Jekyllのデフォルトテーマなら、`bundle show minima`です。 + これは、gemベーステーマのファイルの場所を返します。例えばmacOSなら、Minimaテーマのファイルは、`/usr/local/lib/ruby/gems/2.3.0/gems/minima-2.1.0`にあるはずです。 + + + + + +2. FinderやExplorerでテーマのディレクトリを開きます。 + + + + ```sh + # On MacOS + open $(bundle show minima) + + # On Windows + # First get the gem's installation path: + # + # bundle show minima + # => C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/minima-2.1.0 + # + # then invoke explorer with above path, substituting `/` with `\` + explorer C:\Ruby24-x64\lib\ruby\gems\2.4.0\gems\minima-2.1.0 + + # On Linux + xdg-open $(bundle show minima) + ``` + + FinderやExplorerが開き、テーマのファイルやディレクトリが表示されます。Minimaテーマgemはこれらのファイルを含んでいます。 + + + + ``` + ├── LICENSE.txt + ├── README.md + ├── _includes + │   ├── disqus_comments.html + │   ├── footer.html + │   ├── google-analytics.html + │   ├── head.html + │   ├── header.html + │   ├── icon-github.html + │   ├── icon-github.svg + │   ├── icon-twitter.html + │   └── icon-twitter.svg + ├── _layouts + │   ├── default.html + │   ├── home.html + │   ├── page.html + │   └── post.html + ├── _sass + │   ├── minima + │   │   ├── _base.scss + │   │   ├── _layout.scss + │   │   └── _syntax-highlighting.scss + │   └── minima.scss + └── assets + └── main.scss + ``` + +テーマファイルをはっきり理解するには、あなたのJekyllサイトのディレクトリに同じ名前のファイルを作成します。 + + + +Minimaのフッターを上書きしたい例です。Jekyllサイトに`_includes`フォルダを作り、`footer.html`というファイルを追加します。これで、JekyllはMinimaテーマの`footer.html`ではなく、あなたのサイトの`footer.html`を使用するようになります。 + + + +スタイルシートを修正する場合はもう一つステップが必要で、メインのsassファイル(Minimaテーマの場合は`_sass/minima.scss`)もサイトのソースの`_sass`ディレクトリにコピーします。 + + + +Jekyllは以下のフォルダへのリクエストがあったときは、テーマのデフォルトを探す前に、まずサイトのコンテンツを探します。 + + + +- `/assets` +- `/_layouts` +- `/_includes` +- `/_sass` + +テーマのファイルのコピーを作成すると、それらの更新を受け取れなくなります。テーマの全てのスタイルシートの更新を受け取りたい場合、あなた自身のCSSセレクタを追加し、別名のCSSファイルを使用するとよいでしょう。 + + + +上書きできるファイルの詳細については、選択したテーマのドキュメントやソースリポジトリを参照してください。 +{: .note .info} + + + +## gemベーステーマから通常のテーマへの変換 + + +gemベーステーマを取り除き、全てのファイルがテーマgemでは無く、Jekyllサイトディレクトリにある通常のテーマに、切り替えたいとします。 + + + +これを行うには、テーマgemのディレクトリから、Jekyllサイトのディレクトリにファイルをコピーします。(Jekyllサイトを`/myblog`に作成したなら、`/myblog`にコピーします。詳細は前項を見てください。) + + + +次に、テーマが参照しているプラグインをJekyllに知らせなければなりません。これらのプラグインは、ランタイムと従属関係のテーマのgemspecファイルで見つけることができます。例えば、Minimaテーマの場合は次のようになります。 + + + +``` +spec.add_runtime_dependency "jekyll-feed", "~> 0.9" +spec.add_runtime_dependency "jekyll-seo-tag", "~> 2.1" +``` + +これらのリファレンスを2つの方法のどちらかで、`Gemfile`に含めなければなりません。 + + + +`Gemfile`と`_config.yml`の両方に記載する方法があります。 + + + +```ruby +# ./Gemfile + +gem "jekyll-feed", "~> 0.9" +gem "jekyll-seo-tag", "~> 2.1" +``` + +```yaml +# ./_config.yml + +plugins: + - jekyll-feed + - jekyll-seo-tag +``` + +もしくは、JekyllプラグインとしてGemfileに記載し、`_config.yml`は更新しない方法もあります。 + + + +```ruby +# ./Gemfile + +group :jekyll_plugins do + gem "jekyll-feed", "~> 0.9" + gem "jekyll-seo-tag", "~> 2.1" +end +``` + +どちらの方法でも、`bundle update`を忘れないでください。 + + + +GitHub Pagesで公開している場合は、GitHub PagesはBundler経由でプラグインをロードしないため、`_config.yml`だけを更新してください。 + + + +最後に、`Gemfile`のテーマgemへの参照と設定を削除します。`minima`を削除する場合を例示します。 + + + +- `Gemfile`を開き、`gem "minima", "~> 2.0"`を削除します。 +- `_config.yml`を開き、`theme: minima`を削除します。 + + + +これで、`bundle update`をしてもテーマgemの更新は取得されません。 + + + +## gemベーステーマのインストール + + +`jekyll new `コマンドはgemベーステーマの新しいJekyllサイトを作る唯一の方法ではありません。Gemベーステーマをオンラインで見つけ、それをJekyllプロジェクトに組み込むこともできます。 + + + +例えば、[RubyGemsでJekyllテーマ](https://rubygems.org/search?utf8=%E2%9C%93&query=jekyll-theme){:target="_blank"}を検索すると、他のgemベーステーマを見つけることができます。(全てのテーマが`jekyll-theme`をテーマの名前に使用しているわけではありません。) + + + +gemベーステーマをインストールするには: + + + +1. サイトの`Gemfile`にテーマgemを追加します。 + + + + ```ruby + # ./Gemfile + + # This is an example, declare the theme gem you want to use here + gem "jekyll-theme-minimal" + ``` + + もしくは、`jekyll new`コマンドで開始するときなら、`gem "minima", "~> 2.0"`を好きなように書き換えてください。 + + + + ```diff + # ./Gemfile + + - gem "minima", "~> 2.0" + + gem "jekyll-theme-minimal" + ``` + +2. テーマをインストールします。 + + + + ```sh + bundle install + ``` + +3. テーマを有効にするために、サイトの`_config.yml`に以下を追加します。 + + + + ```yaml + theme: jekyll-theme-minimal + ``` + +4. サイトを構築します。 + + + ```sh + bundle exec jekyll serve + ``` + +`Gemfile`には、複数のテーマをリストアップできます。しかし、サイトの`_config.yml`に指定した1つのテーマだけが選択されます。{: .note .info } + + + +Jekyllサイトを[GitHub Pages](https://pages.github.com/){:target="_blank"}で公開している場合、GitHub Pagesは[いくつかのgemベーステーマ](https://pages.github.com/themes/){:target="_blank"}しかサポートしていないことに注意してください。GitHub Pagesは`remote_theme`設定で、gemベーステーマなら[GitHubがホストのテーマの使用](https://help.github.com/articles/adding-a-jekyll-theme-to-your-github-pages-site/#adding-a-jekyll-theme-in-your-sites-_configyml-file){:target="_blank"}をサポートしています。 + + + +## gemベーステーマの作成 + + +あなたが(テーマの使用者というよりも)開発者なら、あなたのテーマをBundlerを通じユーザーがインストールできるように、RubyGemsにパッケージにすることができます。 + + + +Ruby gemsの作成になれていなくても、心配しないでください。Jekyllは`new-theme`コマンドで新しいテーマの骨組みを作成します。テーマ名を引数にして`jekyll new-theme`を実行してください。 + + + +こちらがその例です。 + + + +```sh +jekyll new-theme jekyll-theme-awesome + create /path/to/jekyll-theme-awesome/_layouts + create /path/to/jekyll-theme-awesome/_includes + create /path/to/jekyll-theme-awesome/_sass + create /path/to/jekyll-theme-awesome/_layouts/page.html + create /path/to/jekyll-theme-awesome/_layouts/post.html + create /path/to/jekyll-theme-awesome/_layouts/default.html + create /path/to/jekyll-theme-awesome/Gemfile + create /path/to/jekyll-theme-awesome/jekyll-theme-awesome.gemspec + create /path/to/jekyll-theme-awesome/README.md + create /path/to/jekyll-theme-awesome/LICENSE.txt + initialize /path/to/jekyll-theme-awesome/.git + create /path/to/jekyll-theme-awesome/.gitignore +Your new Jekyll theme, jekyll-theme-awesome, is ready for you in /path/to/jekyll-theme-awesome! +For help getting started, read /path/to/jekyll-theme-awesome/README.md. +``` + +テンプレートファイルを対応するフォルダに追加してください。必要に応じ`.gemspec`とREADMEファイルを完成させてください。 + + + +### レイアウトとインクルード + + +テーマのレイアウトとインクルードはJekyllサイトと同様に働きます。レイアウトは`/_layouts`フォルダに、インクルードは`/_includes`フォルダに入れてください。 + + + +例えば、テーマに`/_layouts/page.html`があり、ページのfront matterに`layout: page`があれば、Jekyllはまずサイトの`_layouts`フォルダに`page`があるかを確認し、無ければテーマの`page`レイアウトを使用します。 + + + +### Assets + +`/assets`フォルダのファイルは、同じ相対パスのファイルが無ければ、ユーザーがサイトを構築するときにコピーされます。SCSS、画像、Webフォントなどを出荷することができます。これらのファイルは、Jekyllに静的ファイルの様に取り扱われます。 + + + +- ファイルの冒頭に[front matter]({{ "/docs/front-matter/" | relative_url }})がある場合、レンダリングされます。 +- front matterが無い場合、単純にサイトにコピーされます。 + + + +これにより、テーマの作成者は`/assets/styles.css`を出荷することが可能になり、レイアウトで`/assets/styles.css`を使用できます。 + + + +サイトでJekyllを使用しているのと同じように、`/assets`内のファイルは、作成されたサイトの`/assets`フォルダにコピーされます。 + + + +### Stylesheets + +テーマのスタイルシートは、Jekyllサイトを作成するときと同じように、テーマの `_sass`フォルダに入れます。 + + + +``` +_sass +├── jekyll-theme-awesome.scss +``` + +テーマのスタイルシートは`@import`を使用することでダイレクトにユーザーのスタイルシートを取り込めます。 + + + +{% raw %} +```css +@import "{{ site.theme }}"; +``` +{% endraw %} + +### テーマgemの依存関係 {%- include docs_version_badge.html version="3.5.0" -%} + + +サイトの設定ファイルに`plugins`として明示されていなくても、テーマgemのホワイトリストの`runtime_dependencies`を、Jekyllは自動的に必要とします。(注:ホワイトリストは`--safe`オプションで提供するとき、構築するときのみ必要です。) + + + +これにより、エンドユーザーはテーマgemが機能するように、設定ファイルに含めたプラグインを追跡する必要がありません。 + + + +{% if site.version == '4.0.0' %} +{% comment %} Remove this encapsulation when `v4.0` ships {% endcomment %} + +### テーマgemの事前設定 {%- include docs_version_badge.html version="4.0.0" -%} + + +Jekyllはテーマgemのrootで `_config.yml`を読み込み、そのデータをサイトの既存の設定データにマージします。 + + + +しかし、テーマ内からロードされた他のエンティティとは異なり、設定ファイルのロードには、以下に要約するように、いくつかの制限があります。 + + + + * Jekkyllのデフォルト設定はテーマの設定で上書きできません。*権限はまだ、ユーザーにあります*。 + * テーマの設定ファイルは、`safe mode`やシンボリックリンクが指すファイルがテーマgem内の正当なファイルであるかどうかにかかわらず、シンボリックリンクはできません。 + * テーマの設定は一連のキーと値のペアでなければなりません。空の設定ファイル、キーの下の項目を単にリストする設定ファイル、または単純なテキスト文字列を含む設定ファイルは、単に黙って無視されます。この矛盾に関する警告やログ出力は表示されません。 + * 全てのテーマ設定ファイルの内容は、ユーザーが上書き可能です。 + + + +この機能はテーマをより簡単に採用できるようにするためのものですが、制限によってテーマ設定が適切な方法でビルドに影響を及さないようにします。テーマに必要なすべてのプラグインはユーザーが手動でリストするか、テーマの `gemspec`ファイルで提供されなければなりません。 + + + +この機能により、テーマgemは*テーマ固有の設定変数*をそのまま使用できるようになります。 + + +{% endif %} + +### テーマのドキュメンテーション + + +テーマには、テーマのインストールや使用法を伝えるための`/README.md`ファイルを含めるべきです。どんなレイアウト、どんなファイルが含まれていますか? 使用者はサイトの設定ファイルに何か特別なことを書き加えなければなりませんか? + + + +### スクリーンショットの追加 + + +テーマは見た目です。スクリーンショットをテーマのリポジトリ内に `/ screenshot.png`としてプログラムで取得できるように含めることで、テーマの見た目をユーザーに示すことができます。このスクリーンショットをテーマのドキュメンテーションに含めることもできます。 + + + +### テーマのプレビュー + + +著者としてテーマのプレビューを行うには、`/index.html`や`/page.html`のダミーコンテンツを追加するのが便利です。`jekyll build`や`jekyll serve`をプレビューのために利用できるようになります。あとは、Jekyllサイトのプレビューを行うだけです。 + + + +ローカル環境でテーマのプレビューを行ったら、テーマを配布するときにコンパイル済みのサイトが含まれないように、テーマの`.gitignore`に`/_site`を追加するのを忘れないようにしましょう。 +{: .info .note} + + + +### あなたのテーマを公開 + + +テーマは[RubyGems.org](https://rubygems.org){:target="_blank"}で公開されています。RubyGemsのアカウントが必要なら、[無料で作成](https://rubygems.org/sign_up){:target="_blank"}できます。 + + + +1. 始めに、gitリポジトリを用意する必要があります。 + + + + ```sh + git init # Only the first time + git add -A + git commit -m "Init commit" + ``` + +2. 次に、以下のコマンドでテーマをパッケージ化します。`jekyll-theme-awesome`はあなたのテーマの名前に変えてください。 + + + + ```sh + gem build jekyll-theme-awesome.gemspec + ``` + +3. 最後に、RubyGemsサービスに以下のコマンドを実行して、パッケージ化したテーマをプッシュしてください。`jekyll-theme-awesome`はあなたのテーマの名前に変えてください。 + + + + ```sh + gem push jekyll-theme-awesome-*.gem + ``` + +4. テーマの新しいバージョンをリリースするときは、gemspecファイル(この例では`jekyll-theme-awesome.gemspec`)のバージョンナンバーを更新し、上記の1〜3のステップを繰り返してください。テーマバージョンを上げながら、[Semantic Versioning](http://semver.org/){:target="_blank"}に従うことをお勧めします。 + + diff --git a/_docs/troubleshooting.md b/_docs/troubleshooting.md index 769d519..b26d11e 100644 --- a/_docs/troubleshooting.md +++ b/_docs/troubleshooting.md @@ -1,374 +1,436 @@ --- -layout: docs title: トラブルシューティング -prev_section: deployment-methods -next_section: sites permalink: /docs/troubleshooting/ -base_revision: 0fbdc6944041147c2d21b306751b078860b6603b[refs/heads/master] --- - - +--- --> -あなたが今までJekyllのインストールや使用した際に問題が発生した場合、 -いくつか助けになるかもしれないヒントがあります。以下にあるヒントでも解決しない場合、 -[その問題を報告(英語)]({{site.help_url}}/issues/new) してください。そうすることで -Jekyll コミュニティはすべての人によりよい体験を与えられます。 +Jekyllのインストールや使用に関する問題に出会ったら、ここにいくつかのヒントがあります。あなたが経験している問題が以下でカバーされていなければ、**[他のヘルプリソースをチェック]({{ "/help/" | relative_url }})してください**。 - +**please [check out our other help resources](/help/)** as well. --> -## インストールでの問題 +- [インストールの問題](#installation-problems) +- [Jekyll実行の問題](#problems-running-jekyll) +- [Base-URLの問題](#base-url-problems) +- [設定の問題](#configuration-problems) +- [マークアップの問題](#markup-problems) +- [productionの問題](#production-problems) - + -もしあなたがgem インストールにおいてエラーに遭遇したら, あなたはruby 1.9.1 -用の拡張モジュールをコンパイルするためのヘッダファイルをインストールする必要があります。 -Ubuntu や Debian 上で以下を実行することでインストールできます。 +## インストールの問題 {#installation-problems} + - +gemのインストール時にエラーに遭遇したら、Ruby 2.x用コンパイルの拡張モジュールのヘッダファイルをインストールする必要があります。UbuntuやDebianでは次を実行します。 -{% highlight bash %} -sudo apt-get install ruby1.9.1-dev -{% endhighlight %} + - +```sh +sudo apt-get install ruby2.6-dev +``` -Red Hat、CentOSやFedoraのシステム上では以下を実行することでインストールできます。 +Red Hat, CentOS, そしてFedoraでは、次を実行します。 - + -{% highlight bash %} +```sh sudo yum install ruby-devel -{% endhighlight %} +``` - +上記をインストールしたが、 - 特にFedora 23で - 拡張機能がまだコンパイルしない場合は、おそらく`redhat-rpm-config`が欠けているFedora imageを実行しているのでしょう。解決するために次を実行します。 -[NearlyFreeSpeech](http://nearlyfreespeech.net/) では、あなたはJekyllを -インストールする前に次のコマンドを実行する必要があります: + - +```sh +sudo dnf install redhat-rpm-config +``` -{% highlight bash %} -export GEM_HOME=/home/private/gems -export GEM_PATH=/home/private/gems:/usr/local/lib/ruby/gems/1.8/ -export PATH=$PATH:/home/private/gems/bin -export RB_USER_INSTALL='true' -{% endhighlight %} +Arch Linuxでは次の実行が必要です。 + + + +```sh +sudo pacman -S ruby-ffi +``` + +Ubuntuで`bundle exec jekyll serve`の後動けなくなり、`Could not locate Gemfile`や`.bundle/ directory`といったエラーが出たのでしたら、おそらく満たされていない要件があるのでしょう。最近の標準のUbuntuディストリビューションは`ruby`と`ruby-all-dev`パッケージの両方のインストールが必要です。 + + - + +```sh export GEM_HOME=/home/private/gems export GEM_PATH=/home/private/gems:/usr/local/lib/ruby/gems/1.8/ export PATH=$PATH:/home/private/gems/bin export RB_USER_INSTALL='true' -{% endhighlight %} ---> +``` -OSXでは、RubyGemsの更新をする必要があります: +GentooにRubyGemsをインストールするために: - + -{% highlight bash %} -sudo gem update --system -{% endhighlight %} +```sh +sudo emerge -av dev-ruby/rubygems +``` - +Windowsでは、[RubyInstaller +DevKit](https://wiki.github.com/oneclick/rubyinstaller/development-kit){:target="_blank"}のインストールが必要です。 -それでもまだ問題がある場合は、 [Xcodeを使ってコマンドラインツールをインストールする] -(http://www.zlu.me/ruby/os%20x/gem/mountain%20lion/2012/02/21/install-native-ruby-gem-in-mountain-lion-preview.html) -必要があります。 -コマンドラインツールをインストールすることで、次のコマンドを使ってネイティブのgemsをインストールすることができます。 + - +Android (with Termux)では全ての必要要件を次の実行でインストールできます。 -{% highlight bash %} -sudo gem install jekyll -{% endhighlight %} + - +```sh +apt update && apt install libffi-dev clang ruby-dev make +``` -GentooでのRubyGemsのインストール: +macOSでは、RubyGemsのアップデートが必要かもしれません(必要な場合だけ`sudo`を使用します)。 - + -{% highlight bash %} -sudo emerge -av dev-ruby/rubygems -{% endhighlight %} +```sh +gem update --system +``` - +まだ問題があるのでしたら、(`gcc`のような)新しいコマンドラインツールを以下のコマンドでインストールしてください。 -Windows では[RubyInstaller DevKit](https://wiki.github.com/oneclick/rubyinstaller/development-kit) -をインストールする必要があります。 + - +```sh +xcode-select --install +``` -## Jekyllの実行での問題 +これにより、このコマンド(必要な場合だけ`sudo`を使用します)でネイティブgemsをインストールできるようになります。 - + -Debian や Ubuntuでは、あなたのターミナルで `jekyll` コマンドが実行できるようにするために -PATHに `/var/lib/gems/1.8/bin/` を追加する必要があります。 +```sh +gem install jekyll +``` - +macOSのアップグレードは自動でXcodeをアップグレードしません(App Storeで別途行えます)、古いXcode.appは上記でダウンロードしたコマンドラインツールを妨害する恐れがあります。この問題に直面している場合は、Xcodeをアップグレードし、アップグレードされたコマンドラインツールをインストールしてください。 -## Base-URL の問題 + - +### Non-SuperuserとしてJekyllを実行する (no sudo!) +{: #no-sudo} + -もし、あなたが次のようなbase-urlオプションを使用している場合: +Linux、macOS、およびWindows上のUbuntuのBashのほとんどのフレーバーでは、次の行を`.bashrc`ファイルの末尾に追加することで、Jekyllをnon-superuserとして実行し、システム全体の場所にgemをインストールする必要はありません。 - + -{% highlight bash %} -jekyll serve --baseurl '/blog' -{% endhighlight %} +``` +# Ruby exports + +export GEM_HOME=$HOME/gems +export PATH=$HOME/gems/bin:$PATH +``` + +これは、`gem`の場所をシステム全体の場所ではなく、ユーザーのホームフォルダのgemsにし、システム全体のパスよりもユーザーの`PATH`にlocal jekyllコマンドを追加します。 + + + +これは、ユーザーアカウントの権限が限られている多くの共有Webホスティングサービスにも役立ちます。`gem install jekyll bundler`を実行する前に、これらのexportを`.bashrc`に追加すると、Jekyllを完全にnon-`sudo`でインストールできます。 + + + +新しいexportを有効にするには、Bashを閉じ再起動するか、shellアカウントからログアウトしてログインしなおすか、実行中のshellで`. .bashrc`を実行します。 + + + +`jekyll new`コマンドで以下のようなエラーを見た場合は、上記の手順で解決することができます。 + + + +```sh +jekyll new test + +Running bundle install in /home/user/test... + +Your user account is not allowed to install to the system RubyGems. +You can cancel this installation and run: + + bundle install --path vendor/bundle + +to install the gems into ./vendor/bundle/, or you can enter your password +and install the bundled gems to RubyGems using sudo. + +Password: +``` + +一度これを行えば、`jekyll new`はあなたのユーザーアカウントで適切に動作するはずです。 + + + +### Jekyll & macOS + +v10.11でのSystem Integrity Protectionの導入により、以前は書き込み可能だったいくつかのディレクトリがシステムの場所と見なされ、使用できなくなりました。これらの変更を受け、起動して実行するにはいくつかの簡単な方法があります。1つの選択肢は、gemがインストールされる場所を変更することです(ここでも、必要な場合にのみ`sudo`を使用します)。 + + + +```sh +gem install -n /usr/local/bin jekyll +``` + +あるいは、HomebrewをインストールしてRubyのセットアップに使用することもできます。これは次のようにして行うことができます。 + + + +```sh +ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" +``` + +Homebrewをインストールしたら、2番目のステップで実行します。 + + + +```sh +brew install ruby +``` - + +[RVM]: https://rvm.io +[rbenv]: http://rbenv.org +[chruby]: https://github.com/postmodern/chruby +[etc]: https://github.com/rvm/rvm/blob/master/docs/alt.md + +Rubyのインストールに上記の方法のいずれかを使用することを選択した場合は、次のコマンドを使用して`$PATH`変数を変更する必要がある場合があります。 + + + +```sh +export PATH=/usr/local/bin:$PATH +``` + +GUI appsは以下で`$PATH`を修正できます。 + + + +```sh +launchctl setenv PATH "/usr/local/bin:$PATH" +``` + +SIPが有効になっているシステムでは`/usr/local`が「安全な」場所と見なされ、Appleが提供するRubyのバージョンとの潜在的な競合を回避し、Jekyllとその依存関係をサンドボックス環境に保ちます。gemを追加または削除するときに`sudo`を必要としないという利点もあります。 + + + +### JavaScriptランタイムが見つけられない。(ExecJS::RuntimeUnavailable) + + +適切なJavaScriptランタイムがない場合、`jekyll-coffeescript`のインストール中にこのエラーが発生する可能性があります。これを解決するには、`execjs`と`therubyracer` gemsをインストールするか、`nodejs`をインストールしてください。 詳細は[issue #2327](https://github.com/jekyll/jekyll/issues/2327){:target="_blank"}をご覧ください。 + + + +## Jekyll実行の問題 {#problems-running-jekyll} + + +DebianやUbuntuでは、`jekyll`実行ファイルをターミナルで利用できるようにするために、パスに`/var/lib/gems/1.8/bin/`を追加する必要があります。 + + + +## Base-URLの問題 {#base-url-problems} + + + + + +```sh jekyll serve --baseurl '/blog' -{% endhighlight %} ---> +``` -… その時は次の様にしてあなたのサイトにアクセスできることを確認してください: +上記のようにbase-urlオプションを使用している場合、サイトへのアクセスは以下を使用します。 - -{% highlight bash %} -http://localhost:4000/blog/index.html -{% endhighlight %} + - +``` -以下にアクセスしてもうまく動きません: +以下では上手く機能しません。 - + -{% highlight bash %} +``` http://localhost:4000/blog -{% endhighlight %} +``` - +## 設定の問題 {#configuration-problems} + + +[構成・設定]({{ "/docs/configuration/" | relative_url }})で矛盾がある場合の優先順位は以下の通りです。 -## 設定での問題 + - +1. コマンドラインのflags +2. 設定ファイルの設定 +3. デフォルト -[構成設定](../configuration/)の競合の優先順位は次のとおりです: + - +これは、デフォルトは`_config.yml`のオプション設定で上書きされ、コマンドラインのflagsは他の設定を上書きするを意味しています。 -1. コマンドラインフラグ -2. 設定ファイルでの設定 -3. デフォルト値 + - +**注:v3.3.0以降、Jekyllはデフォルトで`node_modules`と`vendor`内の特定のサブディレクトリを処理しません。ただし、設定ファイルで明示的に`exclude:`arrayを定義すると、このデフォルト設定が上書きされるため、一部のユーザーはサイトの構築時にエラーが発生し、次のエラーメッセージが表示されます。** -それは、次のとおりです: デフォルト値は`_config.yml`で指定されたオプションで上書きされて、 -そしてコマンドラインで指定されたフラグは、他の場所で設定されたすべての設定を上書きします。 +**Note: From v3.3.0 onward, Jekyll does not process `node_modules` and certain subdirectories within `vendor`, by default. But, by having an `exclude:` array defined explicitly in the config file overrides this default setting, which results in some users to encounter an error in building the site, with the following error message:** - +```sh + ERROR: YOUR SITE COULD NOT BE BUILT: + ------------------------------------ + Invalid date '<%= Time.now.strftime('%Y-%m-%d %H:%M:%S %z') %>': + Document 'vendor/bundle/gems/jekyll-3.4.3/lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb' + does not have a valid date in front matter. +``` -## マークアップでの問題 +`vendor/bundle`を`exclude:`リストに追加することでこの問題は解決されますが、`/vendor/`(および`/node_modules/`下のサブディレクトリ)の下に他のサブディレクトリも宛先フォルダー`_site`に処理されることになります。 - + -Jekyllが利用する様々なマークアップエンジンはいくつかの問題があることがあります。この -ページには、同じ問題が発生する可能性のある他の人を助けるためにそれらをドキュメント化します。 +適切な解決策は、完全に上書きするのではなく、`exclude:`のデフォルト設定を組み込むことです: - - -### Maruku - - - -もし、あなたのリンクにエスケープが必要な文字が含まれていた場合、次の文法を使う必要があります: - - - -{% highlight text %} -![Alt text](http://yuml.me/diagram/class/[Project]->[Task]) -{% endhighlight %} - - - -中身が空のタグがある場合、例えば`