From 11b4ae05e51d9d47693aeb1020dcb92d07575a03 Mon Sep 17 00:00:00 2001 From: Tom Johnson Date: Sun, 25 Dec 2016 20:33:09 -0800 Subject: [PATCH 01/39] Improve theme docs See https://github.com/jekyll/jekyll/pull/5630 for more details on the update. @jekyll/documentation @DirtyF --- docs/_docs/themes.md | 616 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 543 insertions(+), 73 deletions(-) diff --git a/docs/_docs/themes.md b/docs/_docs/themes.md index c7d6d574..31fdd457 100644 --- a/docs/_docs/themes.md +++ b/docs/_docs/themes.md @@ -1,110 +1,580 @@ --- layout: docs -title: Themes -permalink: /docs/themes/ +title: Templates +permalink: /docs/templates/ --- -Jekyll has an extensive theme system, which allows you to leverage community-maintained templates and styles to customize your site's presentation. Jekyll themes package layouts, includes, and stylesheets in a way that can be overridden by your site's content. +Jekyll uses the [Liquid](https://shopify.github.io/liquid/) templating language to +process templates. All of the standard Liquid [tags](https://shopify.github.io/liquid/tags/) and +[filters](https://shopify.github.io/liquid/filters/) are +supported. Jekyll even adds a few handy filters and tags of its own to make +common tasks easier. -## Installing a theme +## Filters -1. To install a theme, first, add the theme to your site's `Gemfile`: +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DescriptionFilter and Output
+

Relative URL

+

Prepend the baseurl value to the input. Useful if your site is hosted at a subpath rather than the root of the domain.

+
+

+ {% raw %}{{ "/assets/style.css" | relative_url }}{% endraw %} +

+

+ /my-baseurl/assets/style.css +

+
+

Absolute URL

+

Prepend the url and baseurl value to the input.

+
+

+ {% raw %}{{ "/assets/style.css" | absolute_url }}{% endraw %} +

+

+ http://example.com/my-baseurl/assets/style.css +

+
+

Date to XML Schema

+

Convert a Date into XML Schema (ISO 8601) format.

+
+

+ {% raw %}{{ site.time | date_to_xmlschema }}{% endraw %} +

+

+ 2008-11-07T13:07:54-08:00 +

+
+

Date to RFC-822 Format

+

Convert a Date into the RFC-822 format used for RSS feeds.

+
+

+ {% raw %}{{ site.time | date_to_rfc822 }}{% endraw %} +

+

+ Mon, 07 Nov 2008 13:07:54 -0800 +

+
+

Date to String

+

Convert a date to short format.

+
+

+ {% raw %}{{ site.time | date_to_string }}{% endraw %} +

+

+ 07 Nov 2008 +

+
+

Date to Long String

+

Format a date to long format.

+
+

+ {% raw %}{{ site.time | date_to_long_string }}{% endraw %} +

+

+ 07 November 2008 +

+
+

Where

+

Select all the objects in an array where the key has the given value.

+
+

+ {% raw %}{{ site.members | where:"graduation_year","2014" }}{% endraw %} +

+
+

Where Expression

+

Select all the objects in an array where the expression is true. Jekyll v3.2.0 & later.

+
+

+ {% raw %}{{ site.members | where_exp:"item", +"item.graduation_year == 2014" }}{% endraw %} + {% raw %}{{ site.members | where_exp:"item", +"item.graduation_year < 2014" }}{% endraw %} + {% raw %}{{ site.members | where_exp:"item", +"item.projects contains 'foo'" }}{% endraw %} +

+
+

Group By

+

Group an array's items by a given property.

+
+

+ {% raw %}{{ site.members | group_by:"graduation_year" }}{% endraw %} +

+

+ [{"name"=>"2013", "items"=>[...]}, +{"name"=>"2014", "items"=>[...]}] +

+
+

Group By Expression

+

Group an array's items using a Liquid expression.

+
+

+ {% raw %}{{ site.members | group_by_exp:"item", +"item.graduation_year | truncate: 3, \"\"" }}{% endraw %} +

+

+ [{"name"=>"201...", "items"=>[...]}, +{"name"=>"200...", "items"=>[...]}] +

+
+

XML Escape

+

Escape some text for use in XML.

+
+

+ {% raw %}{{ page.content | xml_escape }}{% endraw %} +

+
+

CGI Escape

+

+ CGI escape a string for use in a URL. Replaces any special characters + with appropriate %XX replacements. +

+
+

+ {% raw %}{{ "foo,bar;baz?" | cgi_escape }}{% endraw %} +

+

+ foo%2Cbar%3Bbaz%3F +

+
+

URI Escape

+

+ URI escape a string. +

+
+

+ {% raw %}{{ "foo, bar \baz?" | uri_escape }}{% endraw %} +

+

+ foo,%20bar%20%5Cbaz? +

+
+

Number of Words

+

Count the number of words in some text.

+
+

+ {% raw %}{{ page.content | number_of_words }}{% endraw %} +

+

+ 1337 +

+
+

Array to Sentence

+

Convert an array into a sentence. Useful for listing tags. Optional argument for connector.

+
+

+ {% raw %}{{ page.tags | array_to_sentence_string }}{% endraw %} +

+

+ foo, bar, and baz +

+

+ {% raw %}{{ page.tags | array_to_sentence_string: 'or' }}{% endraw %} +

+

+ foo, bar, or baz +

+
+

Markdownify

+

Convert a Markdown-formatted string into HTML.

+
+

+ {% raw %}{{ page.excerpt | markdownify }}{% endraw %} +

+
+

Smartify

+

Convert "quotes" into “smart quotes.”

+
+

+ {% raw %}{{ page.title | smartify }}{% endraw %} +

+
+

Converting Sass/SCSS

+

Convert a Sass- or SCSS-formatted string into CSS.

+
+

+ {% raw %}{{ some_scss | scssify }}{% endraw %} + {% raw %}{{ some_sass | sassify }}{% endraw %} +

+
+

Slugify

+

Convert a string into a lowercase URL "slug". See below for options.

+
+

+ {% raw %}{{ "The _config.yml file" | slugify }}{% endraw %} +

+

+ the-config-yml-file +

+

+ {% raw %}{{ "The _config.yml file" | slugify: 'pretty' }}{% endraw %} +

+

+ the-_config.yml-file +

+
+

Data To JSON

+

Convert Hash or Array to JSON.

+
+

+ {% raw %}{{ site.data.projects | jsonify }}{% endraw %} +

+
+

Normalize Whitespace

+

Replace any occurrence of whitespace with a single space.

+
+

+ {% raw %}{{ "a \n b" | normalize_whitespace }}{% endraw %} +

+
+

Sort

+

Sort an array. Optional arguments for hashes: 1. property name 2. nils order (first or last).

+
+

+ {% raw %}{{ page.tags | sort }}{% endraw %} +

+

+ {% raw %}{{ site.posts | sort: 'author' }}{% endraw %} +

+

+ {% raw %}{{ site.pages | sort: 'title', 'last' }}{% endraw %} +

+
+

Sample

+

Pick a random value from an array. Optional: pick multiple values.

+
+

+ {% raw %}{{ site.pages | sample }}{% endraw %} +

+

+ {% raw %}{{ site.pages | sample:2 }}{% endraw %} +

+
+

To Integer

+

Convert a string or boolean to integer.

+
+

+ {% raw %}{{ some_var | to_integer }}{% endraw %} +

+
+

Array Filters

+

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.

+
+

+ {% raw %}{{ page.tags | push: 'Spokane' }}{% endraw %} +

+

+ ['Seattle', 'Tacoma', 'Spokane'] +

+

+ {% raw %}{{ page.tags | pop }}{% endraw %} +

+

+ ['Seattle'] +

+

+ {% raw %}{{ page.tags | shift }}{% endraw %} +

+

+ ['Tacoma'] +

+

+ {% raw %}{{ page.tags | unshift: "Olympia" }}{% endraw %} +

+

+ ['Olympia', 'Seattle', 'Tacoma'] +

+
+

Inspect

+

Convert an object into its String representation for debugging.

+
+

+ {% raw %}{{ some_var | inspect }}{% endraw %} +

+
+
- gem 'my-awesome-jekyll-theme' +### Options for the `slugify` filter -2. Save the changes to your `Gemfile` -3. Run the command `bundle install` to install the theme -4. Finally, activate the theme by adding the following to your site's `_config.yml`: +The `slugify` filter accepts an option, each specifying what to filter. +The default is `default`. They are as follows (with what they filter): - theme: my-awesome-jekyll-theme +- `none`: no characters +- `raw`: spaces +- `default`: spaces and non-alphanumeric characters +- `pretty`: spaces and non-alphanumeric characters except for `._~!$&'()+,;=@` -You can have multiple themes listed in your site's Gemfile, but only one theme can be selected in your site's `_config.yml`. -{: .note .info } +## Tags -## Overriding theme defaults +### Includes -Jekyll themes set default layouts, includes, and stylesheets, that can be overridden by your site's content. For example, if your selected theme has a `page` layout, you can override the theme's layout by creating your own `page` layout in the `_layouts` folder (e.g., `_layouts/page.html`). +If you have small page fragments that you want to include in multiple places on your site, you can use the `include` tag: -Jekyll will look first to your site's content, before looking to the theme's defaults, for any requested file in the following folders: - -* `/assets` -* `/_layouts` -* `/_includes` -* `/_sass` - -Refer to your selected theme's documentation and source repository for more information on what files you can override. -{: .note .info} - -To locate theme's files on your computer, run `bundle show` followed by -the name of the theme's gem, e.g. `bundle show minima` for default Jekyll's -theme. Then copy the files you want to override, from the returned path to your root folder. - -## Creating a theme - -Jekyll themes are distributed as Ruby gems. Don't worry, Jekyll will help you scaffold a new theme with the `new-theme` command. Just run `jekyll new-theme` with the theme name as an argument: - -```sh -jekyll new-theme my-awesome-theme - create /path/to/my-awesome-theme/_layouts - create /path/to/my-awesome-theme/_includes - create /path/to/my-awesome-theme/_sass - create /path/to/my-awesome-theme/_layouts/page.html - create /path/to/my-awesome-theme/_layouts/post.html - create /path/to/my-awesome-theme/_layouts/default.html - create /path/to/my-awesome-theme/Gemfile - create /path/to/my-awesome-theme/my-awesome-theme.gemspec - create /path/to/my-awesome-theme/README.md - create /path/to/my-awesome-theme/LICENSE.txt - initialize /path/to/my-awesome-theme/.git - create /path/to/my-awesome-theme/.gitignore -Your new Jekyll theme, my-awesome-theme, is ready for you in /path/to/my-awesome-theme! -For help getting started, read /path/to/my-awesome-theme/README.md. +```liquid +{% raw %}{% include footer.html %}{% endraw %} ``` -Add your template files in the corresponding folders, complete the `.gemspec` and the README files according to your needs. +Jekyll expects all include files to be placed in an `_includes` directory at the root of your source directory. In the above example, this will embed the contents of `_includes/footer.html` into the calling file. -### Layouts and includes +For more advanced information on using includes, see [Includes](../includes). -Theme layouts and includes work just like they work in any Jekyll site. Place layouts in your theme's `/_layouts` folder, and place includes in your themes `/_includes` folder. +### Code snippet highlighting -For example, if your theme has a `/_layouts/page.html` file, and a page has `layout: page` in its YAML front matter, Jekyll will first look to the site's `_layouts` folder for a the `page` layout, and if none exists, will use your theme's `page` layout. +Jekyll has built in support for syntax highlighting of over 60 languages +thanks to [Rouge](http://rouge.jneen.net). Rouge is the default highlighter +in Jekyll 3 and above. To use it in Jekyll 2, set `highlighter` to `rouge` +and ensure the `rouge` gem is installed properly. -### Assets +Alternatively, you can use [Pygments](http://pygments.org) to highlight +your code snippets. To use Pygments, you must have Python installed on your +system, have the `pygments.rb` gem installed and set `highlighter` to +`pygments` in your site's configuration file. Pygments supports [over 100 +languages](http://pygments.org/languages/) -Any file in `/assets` will be copied over to the user's site upon build unless they have a file with the same relative path. You may ship any kind of asset here: SCSS, an image, a webfont, etc. These files behave just like pages and static files in Jekyll: if the file has [YAML front matter]({{ site.baseurl }}/docs/frontmatter/) at the top, then it will be rendered. If it does not have YAML front matter, it will simply be copied over into the resulting site. This allows theme creators to ship a default `/assets/styles.scss` file which their layouts can depend on as `/assets/styles.css`. +To render a code block with syntax highlighting, surround your code as follows: -All files in `/assets` will be output into the compiled site in the `/assets` folder just as you'd expect from using Jekyll on your sites. +```liquid +{% raw %} +{% highlight ruby %} +def foo + puts 'foo' +end +{% endhighlight %} +{% endraw %} +``` -### Stylesheets +The argument to the `highlight` tag (`ruby` in the example above) is the +language identifier. To find the appropriate identifier to use for the language +you want to highlight, look for the “short name” on the [Rouge +wiki](https://github.com/jayferd/rouge/wiki/List-of-supported-languages-and-lexers) +or the [Pygments' Lexers page](http://pygments.org/docs/lexers/). -Your theme's stylesheets should be placed in your theme's `/_sass` folder, again, just as you would when authoring a Jekyll site. Your theme's styles can be included in the user's stylesheet using the `@import` directive. +#### Line numbers -### Documenting your theme +There is a second argument to `highlight` called `linenos` that is optional. +Including the `linenos` argument will force the highlighted code to include line +numbers. For instance, the following code block would include line numbers next +to each line: -Your theme should include a `/README.md` file, which explains how site authors can install and use your theme. What layouts are included? What includes? Do they need to add anything special to their site's configuration file? +```liquid +{% raw %} +{% highlight ruby linenos %} +def foo + puts 'foo' +end +{% endhighlight %} +{% endraw %} +``` -### Adding a screenshot +#### Stylesheets for syntax highlighting -Themes are visual. Show users what your theme looks like by including a screenshot as `/screenshot.png` within your theme's repository where it can be retrieved programatically. You can also include this screenshot within your theme's documentation. +In order for the highlighting to show up, you’ll need to include a highlighting +stylesheet. For an example stylesheet you can look at +[syntax.css](https://github.com/mojombo/tpw/tree/master/css/syntax.css). These +are the same styles as used by GitHub and you are free to use them for your own +site. If you use `linenos`, you might want to include an additional CSS class +definition for the `.lineno` class in `syntax.css` to distinguish the line +numbers from the highlighted code. -### Previewing your theme +### Gist -To preview your theme as you're authoring it, it may be helpful to add dummy content in, for example, `/index.html` and `/page.html` files. This will allow you to use the `jekyll build` and `jekyll serve` commands to preview your theme, just as you'd preview a Jekyll site. +Use the `gist` tag to easily embed a GitHub Gist onto your site. This works +with public or secret gists: -If you do preview your theme locally, be sure to add `/_site` to your theme's `.gitignore` file to prevent the compiled site from also being included when you distribute your theme. -{: .info .note} +```liquid +{% raw %} +{% gist parkr/931c1c8d465a04042403 %} +{% endraw %} +``` -### Publishing your theme +You may also optionally specify the filename in the gist to display: -Themes are published via [RubyGems.org](https://rubygems.org). You'll need a RubyGems account, which you can [create for free](https://rubygems.org/sign_up). +```liquid +{% raw %} +{% gist parkr/931c1c8d465a04042403 jekyll-private-gist.markdown %} +{% endraw %} +``` -1. First, package your theme, by running the following command, replacing `my-awesome-jekyll-theme` with the name of your theme: +To use the `gist` tag, you'll need to add the +[jekyll-gist](https://github.com/jekyll/jekyll-gist) gem to your project. - gem build my-awesome-jekyll-theme.gemspec +## Links -2. Next, push your packaged theme up to the RubyGems service, by running the following command, again replacing `my-awesome-jekyll-theme` with the name of your theme: +### Linking to pages {#link} - gem push my-awesome-jekyll-theme-*.gem +To link to a post, a page, collection item, or file, the `link` tag will generate the correct permalink URL for the path you specify. For example, if you use the `link` tag to link to `mypage.html`, even if you change your permalink style to include the file extension or omit it, the URL formed by the `link` tag will always be valid. -3. To release a new version of your theme, simply update the version number in the gemspec file, ( `my-awesome-jekyll-theme.gemspec` in this example ), and then repeat Steps 1 & 2 above. -We recommend that you follow [Semantic Versioning](http://semver.org/) while bumping your theme-version. +You must include the file's original extension when using the `link` tag. Here are some examples: + +```liquid +{% raw %} +{{ site.baseurl }}{% link _collection/name-of-document.md %} +{{ site.baseurl }}{% link _posts/2016-07-26-name-of-post.md %} +{{ site.baseurl }}{% link news/index.html %} +{{ site.baseurl }}{% link /assets/files/doc.pdf %} +{% endraw %} +``` + +You can also use the `link` tag to create a link in Markdown as follows: + +```liquid +{% raw %} +[Link to a document]({{ site.baseurl }}{% link _collection/name-of-document.md %}) +[Link to a post]({{ site.baseurl }}{% link _posts/2016-07-26-name-of-post.md %}) +[Link to a page]({{ site.baseurl }}{% link news/index.html %}) +[Link to a file]({{ site.baseurl }}{% link /assets/files/doc.pdf %}) +{% endraw %} +``` + +Including `{% raw %}{{site.baseurl}}{% endraw %}` is optional — it depends on whether you want the link to be absolute or root-relative. + +The path to the post, page, or collection is defined as the path relative to the root directory (where your config file is) to the file, not the path from your existing page to the other page. + +For example, suppose you're creating a link `page_a.md` (stored in `pages/folder1/folder2`) to `page_b.md` (stored in `pages/folder1`). Your path in the link would not be `../page_b.html`. Instead, it would be `/pages/folder1/page_b.md`. + +If you're unsure of the path, add `{% raw %}{{page.path}}{% endraw %}` to the page and it will display the path. + +One major benefit of using the `link` tag is link validation. If the link doesn't exist, Jekyll won't build your site. This is a good thing, as it will alert you to a broken link so you can fix it (rather than allowing you to build and deploy a site with broken links). + +Note you cannot add filters to `link` tags. For example, you cannot append a string using Liquid filters, such as `{% raw %}{% link mypage.html | append: "#section1" %} {% endraw %}`. To link to sections on a page, you will need to use regular HTML or Markdown linking techniques. + +### Linking to posts + +If you want like to include a link to a post on your site, the `post_url` tag will generate the correct permalink URL for the post you specify. + +```liquid +{% raw %} +{{ site.baseurl }}{% post_url 2010-07-21-name-of-post %} +{% endraw %} +``` + +If you organize your posts in subdirectories, you need to include subdirectory path to the post: + +```liquid +{% raw %} +{{ site.baseurl }}{% post_url /subdir/2010-07-21-name-of-post %} +{% endraw %} +``` + +There is no need to include the file extension when using the `post_url` tag. + +You can also use this tag to create a link to a post in Markdown as follows: + +```liquid +{% raw %} +[Name of Link]({{ site.baseurl }}{% post_url 2010-07-21-name-of-post %}) +{% endraw %} +``` From 9e1c61381894d320729d5a651021b91f9a2d34a3 Mon Sep 17 00:00:00 2001 From: Tom Johnson Date: Sun, 25 Dec 2016 20:37:24 -0800 Subject: [PATCH 02/39] Improve template docs See https://github.com/jekyll/jekyll/pull/5630 for more details on the update. @jekyll/documentation @DirtyF --- docs/_docs/templates.md | 173 +++++++++++++++++----------------------- 1 file changed, 71 insertions(+), 102 deletions(-) diff --git a/docs/_docs/templates.md b/docs/_docs/templates.md index 79b5fdae..31fdd457 100644 --- a/docs/_docs/templates.md +++ b/docs/_docs/templates.md @@ -421,56 +421,15 @@ The default is `default`. They are as follows (with what they filter): ### Includes -If you have small page fragments that you wish to include in multiple places on -your site, you can use the `include` tag. +If you have small page fragments that you want to include in multiple places on your site, you can use the `include` tag: ```liquid {% raw %}{% include footer.html %}{% endraw %} ``` -Jekyll expects all include files to be placed in an `_includes` directory at the -root of your source directory. This will embed the contents of -`/_includes/footer.html` into the calling file. +Jekyll expects all include files to be placed in an `_includes` directory at the root of your source directory. In the above example, this will embed the contents of `_includes/footer.html` into the calling file. -
-
ProTip™: Use variables as file name
-

- - The name of the file you wish to embed can be literal (as in the example above), - or you can use a variable, using liquid-like variable syntax as in - {% raw %}{% include {{my_variable}} %}{% endraw %}. - -

-
- -You can also pass parameters to an include. Omit the quotation marks to send a variable's value. Liquid curly brackets should not be used here: - -```liquid -{% raw %}{% include footer.html param="value" variable-param=page.variable %}{% endraw %} -``` - -These parameters are available via Liquid in the include: - -```liquid -{% raw %}{{ include.param }}{% endraw %} -``` - -#### Including files relative to another file - -You can also choose to include file fragments relative to the current file: - -```liquid -{% raw %}{% include_relative somedir/footer.html %}{% endraw %} -``` - -You won't need to place your included content within the `_includes` directory. Instead, -the inclusion is specifically relative to the file where the tag is being used. For example, -if `_posts/2014-09-03-my-file.markdown` uses the `include_relative` tag, the included file -must be within the `_posts` directory, or one of its subdirectories. You cannot include -files in other locations. - -All the other capabilities of the `include` tag are available to the `include_relative` tag, -such as using variables. +For more advanced information on using includes, see [Includes](../includes). ### Code snippet highlighting @@ -530,64 +489,6 @@ site. If you use `linenos`, you might want to include an additional CSS class definition for the `.lineno` class in `syntax.css` to distinguish the line numbers from the highlighted code. -### Link - -If you want to include a link to a collection's document, a post, a page -or a file the `link` tag will generate the correct permalink URL for the path -you specify. - -You must include the file extension when using the `link` tag. - -```liquid -{% raw %} -{{ site.baseurl }}{% link _collection/name-of-document.md %} -{{ site.baseurl }}{% link _posts/2016-07-26-name-of-post.md %} -{{ site.baseurl }}{% link news/index.html %} -{{ site.baseurl }}{% link /assets/files/doc.pdf %} -{% endraw %} -``` - -You can also use this tag to create a link in Markdown as follows: - -```liquid -{% raw %} -[Link to a document]({{ site.baseurl }}{% link _collection/name-of-document.md %}) -[Link to a post]({{ site.baseurl }}{% link _posts/2016-07-26-name-of-post.md %}) -[Link to a page]({{ site.baseurl }}{% link news/index.html %}) -[Link to a file]({{ site.baseurl }}{% link /assets/files/doc.pdf %}) -{% endraw %} -``` - -### Post URL - -If you would like to include a link to a post on your site, the `post_url` tag -will generate the correct permalink URL for the post you specify. - -```liquid -{% raw %} -{{ site.baseurl }}{% post_url 2010-07-21-name-of-post %} -{% endraw %} -``` - -If you organize your posts in subdirectories, you need to include subdirectory -path to the post: - -```liquid -{% raw %} -{{ site.baseurl }}{% post_url /subdir/2010-07-21-name-of-post %} -{% endraw %} -``` - -There is no need to include the file extension when using the `post_url` tag. - -You can also use this tag to create a link to a post in Markdown as follows: - -```liquid -{% raw %} -[Name of Link]({{ site.baseurl }}{% post_url 2010-07-21-name-of-post %}) -{% endraw %} -``` - ### Gist Use the `gist` tag to easily embed a GitHub Gist onto your site. This works @@ -609,3 +510,71 @@ You may also optionally specify the filename in the gist to display: To use the `gist` tag, you'll need to add the [jekyll-gist](https://github.com/jekyll/jekyll-gist) gem to your project. + +## Links + +### Linking to pages {#link} + +To link to a post, a page, collection item, or file, the `link` tag will generate the correct permalink URL for the path you specify. For example, if you use the `link` tag to link to `mypage.html`, even if you change your permalink style to include the file extension or omit it, the URL formed by the `link` tag will always be valid. + +You must include the file's original extension when using the `link` tag. Here are some examples: + +```liquid +{% raw %} +{{ site.baseurl }}{% link _collection/name-of-document.md %} +{{ site.baseurl }}{% link _posts/2016-07-26-name-of-post.md %} +{{ site.baseurl }}{% link news/index.html %} +{{ site.baseurl }}{% link /assets/files/doc.pdf %} +{% endraw %} +``` + +You can also use the `link` tag to create a link in Markdown as follows: + +```liquid +{% raw %} +[Link to a document]({{ site.baseurl }}{% link _collection/name-of-document.md %}) +[Link to a post]({{ site.baseurl }}{% link _posts/2016-07-26-name-of-post.md %}) +[Link to a page]({{ site.baseurl }}{% link news/index.html %}) +[Link to a file]({{ site.baseurl }}{% link /assets/files/doc.pdf %}) +{% endraw %} +``` + +Including `{% raw %}{{site.baseurl}}{% endraw %}` is optional — it depends on whether you want the link to be absolute or root-relative. + +The path to the post, page, or collection is defined as the path relative to the root directory (where your config file is) to the file, not the path from your existing page to the other page. + +For example, suppose you're creating a link `page_a.md` (stored in `pages/folder1/folder2`) to `page_b.md` (stored in `pages/folder1`). Your path in the link would not be `../page_b.html`. Instead, it would be `/pages/folder1/page_b.md`. + +If you're unsure of the path, add `{% raw %}{{page.path}}{% endraw %}` to the page and it will display the path. + +One major benefit of using the `link` tag is link validation. If the link doesn't exist, Jekyll won't build your site. This is a good thing, as it will alert you to a broken link so you can fix it (rather than allowing you to build and deploy a site with broken links). + +Note you cannot add filters to `link` tags. For example, you cannot append a string using Liquid filters, such as `{% raw %}{% link mypage.html | append: "#section1" %} {% endraw %}`. To link to sections on a page, you will need to use regular HTML or Markdown linking techniques. + +### Linking to posts + +If you want like to include a link to a post on your site, the `post_url` tag will generate the correct permalink URL for the post you specify. + +```liquid +{% raw %} +{{ site.baseurl }}{% post_url 2010-07-21-name-of-post %} +{% endraw %} +``` + +If you organize your posts in subdirectories, you need to include subdirectory path to the post: + +```liquid +{% raw %} +{{ site.baseurl }}{% post_url /subdir/2010-07-21-name-of-post %} +{% endraw %} +``` + +There is no need to include the file extension when using the `post_url` tag. + +You can also use this tag to create a link to a post in Markdown as follows: + +```liquid +{% raw %} +[Name of Link]({{ site.baseurl }}{% post_url 2010-07-21-name-of-post %}) +{% endraw %} +``` From a6d357050a33b95eb448c962d7a6a6279c9e3de6 Mon Sep 17 00:00:00 2001 From: Tom Johnson Date: Sun, 25 Dec 2016 23:03:22 -0800 Subject: [PATCH 03/39] Updated to correct content I previously had pasted in the wrong page here. Now it's fixed. --- docs/_docs/themes.md | 676 +++++++++---------------------------------- 1 file changed, 136 insertions(+), 540 deletions(-) diff --git a/docs/_docs/themes.md b/docs/_docs/themes.md index 31fdd457..ddcc3653 100644 --- a/docs/_docs/themes.md +++ b/docs/_docs/themes.md @@ -1,580 +1,176 @@ --- layout: docs -title: Templates -permalink: /docs/templates/ +title: Themes +permalink: /docs/themes/ --- -Jekyll uses the [Liquid](https://shopify.github.io/liquid/) templating language to -process templates. All of the standard Liquid [tags](https://shopify.github.io/liquid/tags/) and -[filters](https://shopify.github.io/liquid/filters/) are -supported. Jekyll even adds a few handy filters and tags of its own to make -common tasks easier. +Jekyll has an extensive theme system that allows you to leverage community-maintained templates and styles to customize your site's presentation. Jekyll themes package up layouts, includes, and stylesheets in a way that can be overridden by your site's content. -## Filters +## Understanding gem-based themes -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DescriptionFilter and Output
-

Relative URL

-

Prepend the baseurl value to the input. Useful if your site is hosted at a subpath rather than the root of the domain.

-
-

- {% raw %}{{ "/assets/style.css" | relative_url }}{% endraw %} -

-

- /my-baseurl/assets/style.css -

-
-

Absolute URL

-

Prepend the url and baseurl value to the input.

-
-

- {% raw %}{{ "/assets/style.css" | absolute_url }}{% endraw %} -

-

- http://example.com/my-baseurl/assets/style.css -

-
-

Date to XML Schema

-

Convert a Date into XML Schema (ISO 8601) format.

-
-

- {% raw %}{{ site.time | date_to_xmlschema }}{% endraw %} -

-

- 2008-11-07T13:07:54-08:00 -

-
-

Date to RFC-822 Format

-

Convert a Date into the RFC-822 format used for RSS feeds.

-
-

- {% raw %}{{ site.time | date_to_rfc822 }}{% endraw %} -

-

- Mon, 07 Nov 2008 13:07:54 -0800 -

-
-

Date to String

-

Convert a date to short format.

-
-

- {% raw %}{{ site.time | date_to_string }}{% endraw %} -

-

- 07 Nov 2008 -

-
-

Date to Long String

-

Format a date to long format.

-
-

- {% raw %}{{ site.time | date_to_long_string }}{% endraw %} -

-

- 07 November 2008 -

-
-

Where

-

Select all the objects in an array where the key has the given value.

-
-

- {% raw %}{{ site.members | where:"graduation_year","2014" }}{% endraw %} -

-
-

Where Expression

-

Select all the objects in an array where the expression is true. Jekyll v3.2.0 & later.

-
-

- {% raw %}{{ site.members | where_exp:"item", -"item.graduation_year == 2014" }}{% endraw %} - {% raw %}{{ site.members | where_exp:"item", -"item.graduation_year < 2014" }}{% endraw %} - {% raw %}{{ site.members | where_exp:"item", -"item.projects contains 'foo'" }}{% endraw %} -

-
-

Group By

-

Group an array's items by a given property.

-
-

- {% raw %}{{ site.members | group_by:"graduation_year" }}{% endraw %} -

-

- [{"name"=>"2013", "items"=>[...]}, -{"name"=>"2014", "items"=>[...]}] -

-
-

Group By Expression

-

Group an array's items using a Liquid expression.

-
-

- {% raw %}{{ site.members | group_by_exp:"item", -"item.graduation_year | truncate: 3, \"\"" }}{% endraw %} -

-

- [{"name"=>"201...", "items"=>[...]}, -{"name"=>"200...", "items"=>[...]}] -

-
-

XML Escape

-

Escape some text for use in XML.

-
-

- {% raw %}{{ page.content | xml_escape }}{% endraw %} -

-
-

CGI Escape

-

- CGI escape a string for use in a URL. Replaces any special characters - with appropriate %XX replacements. -

-
-

- {% raw %}{{ "foo,bar;baz?" | cgi_escape }}{% endraw %} -

-

- foo%2Cbar%3Bbaz%3F -

-
-

URI Escape

-

- URI escape a string. -

-
-

- {% raw %}{{ "foo, bar \baz?" | uri_escape }}{% endraw %} -

-

- foo,%20bar%20%5Cbaz? -

-
-

Number of Words

-

Count the number of words in some text.

-
-

- {% raw %}{{ page.content | number_of_words }}{% endraw %} -

-

- 1337 -

-
-

Array to Sentence

-

Convert an array into a sentence. Useful for listing tags. Optional argument for connector.

-
-

- {% raw %}{{ page.tags | array_to_sentence_string }}{% endraw %} -

-

- foo, bar, and baz -

-

- {% raw %}{{ page.tags | array_to_sentence_string: 'or' }}{% endraw %} -

-

- foo, bar, or baz -

-
-

Markdownify

-

Convert a Markdown-formatted string into HTML.

-
-

- {% raw %}{{ page.excerpt | markdownify }}{% endraw %} -

-
-

Smartify

-

Convert "quotes" into “smart quotes.”

-
-

- {% raw %}{{ page.title | smartify }}{% endraw %} -

-
-

Converting Sass/SCSS

-

Convert a Sass- or SCSS-formatted string into CSS.

-
-

- {% raw %}{{ some_scss | scssify }}{% endraw %} - {% raw %}{{ some_sass | sassify }}{% endraw %} -

-
-

Slugify

-

Convert a string into a lowercase URL "slug". See below for options.

-
-

- {% raw %}{{ "The _config.yml file" | slugify }}{% endraw %} -

-

- the-config-yml-file -

-

- {% raw %}{{ "The _config.yml file" | slugify: 'pretty' }}{% endraw %} -

-

- the-_config.yml-file -

-
-

Data To JSON

-

Convert Hash or Array to JSON.

-
-

- {% raw %}{{ site.data.projects | jsonify }}{% endraw %} -

-
-

Normalize Whitespace

-

Replace any occurrence of whitespace with a single space.

-
-

- {% raw %}{{ "a \n b" | normalize_whitespace }}{% endraw %} -

-
-

Sort

-

Sort an array. Optional arguments for hashes: 1. property name 2. nils order (first or last).

-
-

- {% raw %}{{ page.tags | sort }}{% endraw %} -

-

- {% raw %}{{ site.posts | sort: 'author' }}{% endraw %} -

-

- {% raw %}{{ site.pages | sort: 'title', 'last' }}{% endraw %} -

-
-

Sample

-

Pick a random value from an array. Optional: pick multiple values.

-
-

- {% raw %}{{ site.pages | sample }}{% endraw %} -

-

- {% raw %}{{ site.pages | sample:2 }}{% endraw %} -

-
-

To Integer

-

Convert a string or boolean to integer.

-
-

- {% raw %}{{ some_var | to_integer }}{% endraw %} -

-
-

Array Filters

-

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.

-
-

- {% raw %}{{ page.tags | push: 'Spokane' }}{% endraw %} -

-

- ['Seattle', 'Tacoma', 'Spokane'] -

-

- {% raw %}{{ page.tags | pop }}{% endraw %} -

-

- ['Seattle'] -

-

- {% raw %}{{ page.tags | shift }}{% endraw %} -

-

- ['Tacoma'] -

-

- {% raw %}{{ page.tags | unshift: "Olympia" }}{% endraw %} -

-

- ['Olympia', 'Seattle', 'Tacoma'] -

-
-

Inspect

-

Convert an object into its String representation for debugging.

-
-

- {% raw %}{{ some_var | inspect }}{% endraw %} -

-
-
+When you [create a new Jekyll site](/docs/quickstart) (by running the `jekyll new ` command), Jekyll installs a gem-based theme called [Minima](https://github.com/jekyll/minima). -### Options for the `slugify` filter +With gem-based themes, some of the theme directories and files are stored in the gem, hidden from view in your Jekyll project. As a result, the files and directories shown for your site are only part of all the theme's files. In the case of Minima, you see only the following: -The `slugify` filter accepts an option, each specifying what to filter. -The default is `default`. They are as follows (with what they filter): - -- `none`: no characters -- `raw`: spaces -- `default`: spaces and non-alphanumeric characters -- `pretty`: spaces and non-alphanumeric characters except for `._~!$&'()+,;=@` - -## Tags - -### Includes - -If you have small page fragments that you want to include in multiple places on your site, you can use the `include` tag: - -```liquid -{% raw %}{% include footer.html %}{% endraw %} +``` +├── Gemfile +├── Gemfile.lock +├── _config.yml +├── _posts +│   └── 2016-12-04-welcome-to-jekyll.markdown +├── about.md +└── index.md ``` -Jekyll expects all include files to be placed in an `_includes` directory at the root of your source directory. In the above example, this will embed the contents of `_includes/footer.html` into the calling file. +The `Gemfile` and `Gemfile.lock` files are used by Bundler to keep track of the required gems and gem versions you need to build your Jekyll site. -For more advanced information on using includes, see [Includes](../includes). +Gem-based themes make it easy for theme developers to make updates available to anyone who has the theme gem. When there's an update, theme developers push the update to RubyGems. -### Code snippet highlighting +If you have the theme gem, you can (if you desire) run `bundle update` to update all gems in your project. Or you can run `bundle update `, replacing `` with the theme name, such as `minima`, to just update the theme gem. Any new files or updates the theme developer has made (such as to stylesheets or includes) will be pulled into your project automatically. -Jekyll has built in support for syntax highlighting of over 60 languages -thanks to [Rouge](http://rouge.jneen.net). Rouge is the default highlighter -in Jekyll 3 and above. To use it in Jekyll 2, set `highlighter` to `rouge` -and ensure the `rouge` gem is installed properly. +The goal of gem-based themes is to allow you to get all the benefits of a robust, continually updated theme without having all the theme's files getting in your way and over-complicating what might be your primary focus: creating content. -Alternatively, you can use [Pygments](http://pygments.org) to highlight -your code snippets. To use Pygments, you must have Python installed on your -system, have the `pygments.rb` gem installed and set `highlighter` to -`pygments` in your site's configuration file. Pygments supports [over 100 -languages](http://pygments.org/languages/) +## Overriding theme defaults -To render a code block with syntax highlighting, surround your code as follows: +Jekyll themes set default layouts, includes, and stylesheets. However, you can override any of the theme defaults with your own site content. For example, if your selected theme has a `page` layout, you can override the theme's layout by creating your own `page` layout in the `_layouts` directory (for example, `_layouts/page.html`). -```liquid -{% raw %} -{% highlight ruby %} -def foo - puts 'foo' -end -{% endhighlight %} -{% endraw %} +Jekyll will look first to your site's content before looking to the theme's defaults for any requested file in the following folders: + +* `/assets` +* `/_layouts` +* `/_includes` +* `/_sass` + +Refer to your selected theme's documentation and source repository for more information on what files you can override. +{: .note .info} + +To locate theme's files on your computer: + +1. Run `bundle show` followed by the name of the theme's gem, e.g., `bundle show minima` for default Jekyll's theme. + + The location of the theme gem is returned. For example, minima is located in `/usr/local/lib/ruby/gems/2.3.0/gems/minima-2.1.0` on a Mac. + +2. Change to the directory's location and open the directory in Finder or Explorer: + + ``` + cd /usr/local/lib/ruby/gems/2.3.0/gems/minima-2.1.0 + open . + # for Windows, use "explorer ." + ``` + + A Finder or Explorer window opens showing the theme's files and directories. + + With a clear understanding of the theme's files, you can now override any theme file by creating a similarly named file in your Jekyll site directory. + +If you want to get rid of the theme gem altogether, copy the files from the theme gem's directory into your Jekyll site directory (for example, copy them to `/myblog` if you created your Jekyll site at `/myblog`). + +Then modify the Gemfile and configuration to remove references to the theme gem. For example, to remove Minima: +* Open `Gemfile` and remove `gem "minima", "~> 2.0"`. +* Open `_config.yml` and remove `theme: minima`. + +Now `bundle update` will no longer get updates for the theme gem. + +## Using themes other than the default {#installing-a-theme} + +The `jekyll new ` command isn't the only way to create a new Jekyll site with a gem-based theme. You can also find gem-based themes online and incorporate them into your Jekyll project. To install a gem-based theme: + +1. Add the theme to your site's `Gemfile`: + + ``` + gem 'my-awesome-jekyll-theme' + ``` + +3. Install the theme: + + ``` + bundle install + ``` + +3. Add the following to your site's `_config.yml` to activate the theme: + + ``` + theme: my-awesome-jekyll-theme + ``` + +5. Build your site: + + ``` + bundle exec jekyll serve + ``` + +You can have multiple themes listed in your site's `Gemfile`, but only one theme can be selected in your site's `_config.yml`. +{: .note .info } + +If you're publishing your Jekyll site on [Github Pages](https://pages.github.com/), note that Github Pages supports only some gem-based themes. See [Supported Themes](https://pages.github.com/themes/) in Github's documentation to see which themes are supported. + +## Creating your own gem-based theme + +If you're a Jekyll theme developer (rather than just a consumer of themes), you can package up your theme in RubyGems and allow users to install it through Bundler. + +If you're unfamiliar with distributing ruby gems, don't worry. Jekyll will help you scaffold a new theme with the `new-theme` command. Just run `jekyll new-theme` with the theme name as an argument: + +```sh +jekyll new-theme my-awesome-theme + create /path/to/my-awesome-theme/_layouts + create /path/to/my-awesome-theme/_includes + create /path/to/my-awesome-theme/_sass + create /path/to/my-awesome-theme/_layouts/page.html + create /path/to/my-awesome-theme/_layouts/post.html + create /path/to/my-awesome-theme/_layouts/default.html + create /path/to/my-awesome-theme/Gemfile + create /path/to/my-awesome-theme/my-awesome-theme.gemspec + create /path/to/my-awesome-theme/README.md + create /path/to/my-awesome-theme/LICENSE.txt + initialize /path/to/my-awesome-theme/.git + create /path/to/my-awesome-theme/.gitignore +Your new Jekyll theme, my-awesome-theme, is ready for you in /path/to/my-awesome-theme! +For help getting started, read /path/to/my-awesome-theme/README.md. ``` -The argument to the `highlight` tag (`ruby` in the example above) is the -language identifier. To find the appropriate identifier to use for the language -you want to highlight, look for the “short name” on the [Rouge -wiki](https://github.com/jayferd/rouge/wiki/List-of-supported-languages-and-lexers) -or the [Pygments' Lexers page](http://pygments.org/docs/lexers/). +Add your template files in the corresponding folders. Then complete the `.gemspec` and the README files according to your needs. -#### Line numbers +### Layouts and includes -There is a second argument to `highlight` called `linenos` that is optional. -Including the `linenos` argument will force the highlighted code to include line -numbers. For instance, the following code block would include line numbers next -to each line: +Theme layouts and includes work just like they work in any Jekyll site. Place layouts in your theme's `/_layouts` folder, and place includes in your themes `/_includes` folder. -```liquid -{% raw %} -{% highlight ruby linenos %} -def foo - puts 'foo' -end -{% endhighlight %} -{% endraw %} -``` +For example, if your theme has a `/_layouts/page.html` file, and a page has `layout: page` in its YAML front matter, Jekyll will first look to the site's `_layouts` folder for a the `page` layout, and if none exists, will use your theme's `page` layout. -#### Stylesheets for syntax highlighting +### Assets -In order for the highlighting to show up, you’ll need to include a highlighting -stylesheet. For an example stylesheet you can look at -[syntax.css](https://github.com/mojombo/tpw/tree/master/css/syntax.css). These -are the same styles as used by GitHub and you are free to use them for your own -site. If you use `linenos`, you might want to include an additional CSS class -definition for the `.lineno` class in `syntax.css` to distinguish the line -numbers from the highlighted code. +Any file in `/assets` will be copied over to the user's site upon build unless they have a file with the same relative path. You can ship any kind of asset here: SCSS, an image, a webfont, etc. These files behave just like pages and static files in Jekyll: if the file has [YAML front matter](../docs/frontmatter/) at the top, then it will be rendered. If it does not have YAML front matter, it will simply be copied over into the resulting site. This allows theme creators to ship a default `/assets/styles.scss` file which their layouts can depend on as `/assets/styles.css`. -### Gist +All files in `/assets` will be output into the compiled site in the `/assets` folder just as you'd expect from using Jekyll on your sites. -Use the `gist` tag to easily embed a GitHub Gist onto your site. This works -with public or secret gists: +### Stylesheets -```liquid -{% raw %} -{% gist parkr/931c1c8d465a04042403 %} -{% endraw %} -``` +Your theme's stylesheets should be placed in your theme's `/_sass` folder, again, just as you would when authoring a Jekyll site. Your theme's styles can be included in the user's stylesheet using the `@import` directive. -You may also optionally specify the filename in the gist to display: +### Documenting your theme -```liquid -{% raw %} -{% gist parkr/931c1c8d465a04042403 jekyll-private-gist.markdown %} -{% endraw %} -``` +Your theme should include a `/README.md` file, which explains how site authors can install and use your theme. What layouts are included? What includes? Do they need to add anything special to their site's configuration file? -To use the `gist` tag, you'll need to add the -[jekyll-gist](https://github.com/jekyll/jekyll-gist) gem to your project. +### Adding a screenshot -## Links +Themes are visual. Show users what your theme looks like by including a screenshot as `/screenshot.png` within your theme's repository where it can be retrieved programatically. You can also include this screenshot within your theme's documentation. -### Linking to pages {#link} +### Previewing your theme -To link to a post, a page, collection item, or file, the `link` tag will generate the correct permalink URL for the path you specify. For example, if you use the `link` tag to link to `mypage.html`, even if you change your permalink style to include the file extension or omit it, the URL formed by the `link` tag will always be valid. +To preview your theme as you're authoring it, it may be helpful to add dummy content in, for example, `/index.html` and `/page.html` files. This will allow you to use the `jekyll build` and `jekyll serve` commands to preview your theme, just as you'd preview a Jekyll site. -You must include the file's original extension when using the `link` tag. Here are some examples: +If you do preview your theme locally, be sure to add `/_site` to your theme's `.gitignore` file to prevent the compiled site from also being included when you distribute your theme. +{: .info .note} -```liquid -{% raw %} -{{ site.baseurl }}{% link _collection/name-of-document.md %} -{{ site.baseurl }}{% link _posts/2016-07-26-name-of-post.md %} -{{ site.baseurl }}{% link news/index.html %} -{{ site.baseurl }}{% link /assets/files/doc.pdf %} -{% endraw %} -``` +### Publishing your theme -You can also use the `link` tag to create a link in Markdown as follows: +Themes are published via [RubyGems.org](https://rubygems.org). You'll need a RubyGems account, which you can [create for free](https://rubygems.org/sign_up). -```liquid -{% raw %} -[Link to a document]({{ site.baseurl }}{% link _collection/name-of-document.md %}) -[Link to a post]({{ site.baseurl }}{% link _posts/2016-07-26-name-of-post.md %}) -[Link to a page]({{ site.baseurl }}{% link news/index.html %}) -[Link to a file]({{ site.baseurl }}{% link /assets/files/doc.pdf %}) -{% endraw %} -``` +1. First, package your theme, by running the following command, replacing `my-awesome-jekyll-theme` with the name of your theme: -Including `{% raw %}{{site.baseurl}}{% endraw %}` is optional — it depends on whether you want the link to be absolute or root-relative. + gem build my-awesome-jekyll-theme.gemspec -The path to the post, page, or collection is defined as the path relative to the root directory (where your config file is) to the file, not the path from your existing page to the other page. +2. Next, push your packaged theme up to the RubyGems service, by running the following command, again replacing `my-awesome-jekyll-theme` with the name of your theme: -For example, suppose you're creating a link `page_a.md` (stored in `pages/folder1/folder2`) to `page_b.md` (stored in `pages/folder1`). Your path in the link would not be `../page_b.html`. Instead, it would be `/pages/folder1/page_b.md`. + gem push my-awesome-jekyll-theme-*.gem -If you're unsure of the path, add `{% raw %}{{page.path}}{% endraw %}` to the page and it will display the path. - -One major benefit of using the `link` tag is link validation. If the link doesn't exist, Jekyll won't build your site. This is a good thing, as it will alert you to a broken link so you can fix it (rather than allowing you to build and deploy a site with broken links). - -Note you cannot add filters to `link` tags. For example, you cannot append a string using Liquid filters, such as `{% raw %}{% link mypage.html | append: "#section1" %} {% endraw %}`. To link to sections on a page, you will need to use regular HTML or Markdown linking techniques. - -### Linking to posts - -If you want like to include a link to a post on your site, the `post_url` tag will generate the correct permalink URL for the post you specify. - -```liquid -{% raw %} -{{ site.baseurl }}{% post_url 2010-07-21-name-of-post %} -{% endraw %} -``` - -If you organize your posts in subdirectories, you need to include subdirectory path to the post: - -```liquid -{% raw %} -{{ site.baseurl }}{% post_url /subdir/2010-07-21-name-of-post %} -{% endraw %} -``` - -There is no need to include the file extension when using the `post_url` tag. - -You can also use this tag to create a link to a post in Markdown as follows: - -```liquid -{% raw %} -[Name of Link]({{ site.baseurl }}{% post_url 2010-07-21-name-of-post %}) -{% endraw %} -``` +3. To release a new version of your theme, simply update the version number in the gemspec file, ( `my-awesome-jekyll-theme.gemspec` in this example ), and then repeat Steps 1 & 2 above. +We recommend that you follow [Semantic Versioning](http://semver.org/) while bumping your theme-version. From b37b433b60a5bce9470b4415e6c62c45fca7fb07 Mon Sep 17 00:00:00 2001 From: Tom Johnson Date: Mon, 26 Dec 2016 18:48:42 -0800 Subject: [PATCH 04/39] made requested updates I made the requested updates. Mostly just small formatting improvements. --- docs/_docs/templates.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/_docs/templates.md b/docs/_docs/templates.md index 31fdd457..b6c1ef6f 100644 --- a/docs/_docs/templates.md +++ b/docs/_docs/templates.md @@ -421,13 +421,13 @@ The default is `default`. They are as follows (with what they filter): ### Includes -If you have small page fragments that you want to include in multiple places on your site, you can use the `include` tag: +If you have small page snippets that you want to include in multiple places on your site, save the snippets as *include files* and insert them where required, by using the `include` tag: ```liquid {% raw %}{% include footer.html %}{% endraw %} ``` -Jekyll expects all include files to be placed in an `_includes` directory at the root of your source directory. In the above example, this will embed the contents of `_includes/footer.html` into the calling file. +Jekyll expects all **include files** to be placed in an `_includes` directory at the root of your source directory. In the above example, this will embed the contents of `_includes/footer.html` into the calling file. For more advanced information on using includes, see [Includes](../includes). @@ -539,7 +539,7 @@ You can also use the `link` tag to create a link in Markdown as follows: {% endraw %} ``` -Including `{% raw %}{{site.baseurl}}{% endraw %}` is optional — it depends on whether you want the link to be absolute or root-relative. +(Including `{% raw %}{{site.baseurl}}{% endraw %}` is optional — it depends on whether you want to preface the page URL with the `baseurl` value.) The path to the post, page, or collection is defined as the path relative to the root directory (where your config file is) to the file, not the path from your existing page to the other page. From 938388a6bea57b042ed5ac60446f16fae579f7d2 Mon Sep 17 00:00:00 2001 From: Tom Johnson Date: Mon, 26 Dec 2016 20:31:54 -0800 Subject: [PATCH 05/39] Made updates requested by others in PR I made various updates as requested by the reviewers. --- docs/_docs/themes.md | 60 ++++++++++++++++++++++++++++++++------------ 1 file changed, 44 insertions(+), 16 deletions(-) diff --git a/docs/_docs/themes.md b/docs/_docs/themes.md index ddcc3653..011ead6e 100644 --- a/docs/_docs/themes.md +++ b/docs/_docs/themes.md @@ -8,9 +8,11 @@ Jekyll has an extensive theme system that allows you to leverage community-maint ## Understanding gem-based themes -When you [create a new Jekyll site](/docs/quickstart) (by running the `jekyll new ` command), Jekyll installs a gem-based theme called [Minima](https://github.com/jekyll/minima). +When you [create a new Jekyll site](/docs/quickstart) (by running the `jekyll new ` command), Jekyll installs a site that uses a gem-based theme called [Minima](https://github.com/jekyll/minima). -With gem-based themes, some of the theme directories and files are stored in the gem, hidden from view in your Jekyll project. As a result, the files and directories shown for your site are only part of all the theme's files. In the case of Minima, you see only the following: +With gem-based themes, some of the site's directories (such as the `assets`, `_layouts`, `_includes`, and `_sass` directories) are stored in the theme-gem, hidden from your immediate view. Yet all of the necessary directories will be read and processed during Jekyll's build process. + +In the case of Minima, you see only the following files in your Jekyll site directory: ``` ├── Gemfile @@ -32,7 +34,9 @@ The goal of gem-based themes is to allow you to get all the benefits of a robust ## Overriding theme defaults -Jekyll themes set default layouts, includes, and stylesheets. However, you can override any of the theme defaults with your own site content. For example, if your selected theme has a `page` layout, you can override the theme's layout by creating your own `page` layout in the `_layouts` directory (for example, `_layouts/page.html`). +Jekyll themes set default layouts, includes, and stylesheets. However, you can override any of the theme defaults with your own site content. + +For example, if your selected theme has a `page` layout, you can override the theme's layout by creating your own `page` layout in the `_layouts` directory (for example, `_layouts/page.html`). Jekyll will look first to your site's content before looking to the theme's defaults for any requested file in the following folders: @@ -62,7 +66,11 @@ To locate theme's files on your computer: With a clear understanding of the theme's files, you can now override any theme file by creating a similarly named file in your Jekyll site directory. -If you want to get rid of the theme gem altogether, copy the files from the theme gem's directory into your Jekyll site directory (for example, copy them to `/myblog` if you created your Jekyll site at `/myblog`). +## Converting gem-based themes to regular themes + +Suppose you want to get rid of the gem-based theme and convert it to a regular theme, where all files are present in your Jekyll site directory, with nothing stored in the theme gem. + +To do this, copy the files from the theme gem's directory into your Jekyll site directory. (For example, copy them to `/myblog` if you created your Jekyll site at `/myblog`. See the previous section for details.) Then modify the Gemfile and configuration to remove references to the theme gem. For example, to remove Minima: * Open `Gemfile` and remove `gem "minima", "~> 2.0"`. @@ -70,31 +78,35 @@ Then modify the Gemfile and configuration to remove references to the theme gem. Now `bundle update` will no longer get updates for the theme gem. -## Using themes other than the default {#installing-a-theme} +## Installing a gem-based theme {#installing-a-theme} -The `jekyll new ` command isn't the only way to create a new Jekyll site with a gem-based theme. You can also find gem-based themes online and incorporate them into your Jekyll project. To install a gem-based theme: +The `jekyll new ` command isn't the only way to create a new Jekyll site with a gem-based theme. You can also find gem-based themes online and incorporate them into your Jekyll project. + +For example, search for [jekyll-theme on RubyGems](https://rubygems.org/search?utf8=%E2%9C%93&query=jekyll-theme) to find other gem-based themes. (Note that not all themes are using `jekyll-theme` as a convention in the theme name.) + +To install a gem-based theme: 1. Add the theme to your site's `Gemfile`: - ``` + ```sh gem 'my-awesome-jekyll-theme' ``` -3. Install the theme: +2. Install the theme: - ``` + ```sh bundle install ``` 3. Add the following to your site's `_config.yml` to activate the theme: - ``` + ```sh theme: my-awesome-jekyll-theme ``` -5. Build your site: +4. Build your site: - ``` + ```sh bundle exec jekyll serve ``` @@ -103,11 +115,11 @@ You can have multiple themes listed in your site's `Gemfile`, but only one theme If you're publishing your Jekyll site on [Github Pages](https://pages.github.com/), note that Github Pages supports only some gem-based themes. See [Supported Themes](https://pages.github.com/themes/) in Github's documentation to see which themes are supported. -## Creating your own gem-based theme +## Creating a gem-based theme If you're a Jekyll theme developer (rather than just a consumer of themes), you can package up your theme in RubyGems and allow users to install it through Bundler. -If you're unfamiliar with distributing ruby gems, don't worry. Jekyll will help you scaffold a new theme with the `new-theme` command. Just run `jekyll new-theme` with the theme name as an argument: +If you're unfamiliar with creating Ruby gems, don't worry. Jekyll will help you scaffold a new theme with the `new-theme` command. Just run `jekyll new-theme` with the theme name as an argument: ```sh jekyll new-theme my-awesome-theme @@ -137,13 +149,29 @@ For example, if your theme has a `/_layouts/page.html` file, and a page has `lay ### Assets -Any file in `/assets` will be copied over to the user's site upon build unless they have a file with the same relative path. You can ship any kind of asset here: SCSS, an image, a webfont, etc. These files behave just like pages and static files in Jekyll: if the file has [YAML front matter](../docs/frontmatter/) at the top, then it will be rendered. If it does not have YAML front matter, it will simply be copied over into the resulting site. This allows theme creators to ship a default `/assets/styles.scss` file which their layouts can depend on as `/assets/styles.css`. +Any file in `/assets` will be copied over to the user's site upon build unless they have a file with the same relative path. You can ship any kind of asset here: SCSS, an image, a webfont, etc. These files behave just like pages and static files in Jekyll: + +* If the file has [YAML front matter](../docs/frontmatter/) at the top, it will be rendered. +* If the file does not have YAML front matter, it will simply be copied over into the resulting site. + +This allows theme creators to ship a default `/assets/styles.scss` file which their layouts can depend on as `/assets/styles.css`. All files in `/assets` will be output into the compiled site in the `/assets` folder just as you'd expect from using Jekyll on your sites. ### Stylesheets -Your theme's stylesheets should be placed in your theme's `/_sass` folder, again, just as you would when authoring a Jekyll site. Your theme's styles can be included in the user's stylesheet using the `@import` directive. +Your theme's stylesheets should be placed in your theme's `_sass` folder, again, just as you would when authoring a Jekyll site. + +``` + _sass +├── jekyll-theme-my-awesome-theme.scss +``` + +Your theme's styles can be included in the user's stylesheet using the `@import` directive. + +```css +{% raw %}@import "{{ site.theme }}";{% endraw %} +``` ### Documenting your theme From c31716194277197accd8aa0798996af6f2318be8 Mon Sep 17 00:00:00 2001 From: Tom Johnson Date: Wed, 28 Dec 2016 08:15:20 -0800 Subject: [PATCH 06/39] fixed space --- docs/_docs/themes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_docs/themes.md b/docs/_docs/themes.md index 011ead6e..0e57df9c 100644 --- a/docs/_docs/themes.md +++ b/docs/_docs/themes.md @@ -98,7 +98,7 @@ To install a gem-based theme: bundle install ``` -3. Add the following to your site's `_config.yml` to activate the theme: +3. Add the following to your site's `_config.yml` to activate the theme: ```sh theme: my-awesome-jekyll-theme From 2c8b826460e2c4b6cc4c0b9a3ef556c9e358622d Mon Sep 17 00:00:00 2001 From: Tom Johnson Date: Wed, 28 Dec 2016 23:00:06 -0800 Subject: [PATCH 07/39] made requested change **includes** --> *includes* --- docs/_docs/templates.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_docs/templates.md b/docs/_docs/templates.md index b6c1ef6f..32050813 100644 --- a/docs/_docs/templates.md +++ b/docs/_docs/templates.md @@ -427,7 +427,7 @@ If you have small page snippets that you want to include in multiple places on y {% raw %}{% include footer.html %}{% endraw %} ``` -Jekyll expects all **include files** to be placed in an `_includes` directory at the root of your source directory. In the above example, this will embed the contents of `_includes/footer.html` into the calling file. +Jekyll expects all *include files* to be placed in an `_includes` directory at the root of your source directory. In the above example, this will embed the contents of `_includes/footer.html` into the calling file. For more advanced information on using includes, see [Includes](../includes). From 90da02b1fcde20895d6d4b881ad38eed1d1888fd Mon Sep 17 00:00:00 2001 From: Tom Johnson Date: Thu, 29 Dec 2016 00:15:52 -0800 Subject: [PATCH 08/39] made updates from Parkr's review - most prominent update is example of how to override minima default --- docs/_docs/themes.md | 42 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/docs/_docs/themes.md b/docs/_docs/themes.md index 0e57df9c..8e937b61 100644 --- a/docs/_docs/themes.md +++ b/docs/_docs/themes.md @@ -36,7 +36,7 @@ The goal of gem-based themes is to allow you to get all the benefits of a robust Jekyll themes set default layouts, includes, and stylesheets. However, you can override any of the theme defaults with your own site content. -For example, if your selected theme has a `page` layout, you can override the theme's layout by creating your own `page` layout in the `_layouts` directory (for example, `_layouts/page.html`). +For example, if your selected theme has a `page` layout, you can override the theme's layout by creating your own `page` layout in the `_layouts` directory (that is, `_layouts/page.html`). Jekyll will look first to your site's content before looking to the theme's defaults for any requested file in the following folders: @@ -52,7 +52,7 @@ To locate theme's files on your computer: 1. Run `bundle show` followed by the name of the theme's gem, e.g., `bundle show minima` for default Jekyll's theme. - The location of the theme gem is returned. For example, minima is located in `/usr/local/lib/ruby/gems/2.3.0/gems/minima-2.1.0` on a Mac. + The location of the theme gem is returned. For example, minima is located in `/usr/local/lib/ruby/gems/2.3.0/gems/minima-2.1.0` when using the system Ruby installation on a Mac. 2. Change to the directory's location and open the directory in Finder or Explorer: @@ -62,9 +62,39 @@ To locate theme's files on your computer: # for Windows, use "explorer ." ``` - A Finder or Explorer window opens showing the theme's files and directories. + A Finder or Explorer window opens showing the theme's files and directories. The Minima theme gem contains these files: + + ``` + ├── 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 + ``` With a clear understanding of the theme's files, you can now override any theme file by creating a similarly named file in your Jekyll site directory. + + Let's say you want to override Minima's footer. In your Jekyll site, create an `_includes` folder and add a file in it called `footer.html`. Jekyll will now use your site's `footer.html` file instead of the `footer.html` file from the Minima theme gem. ## Converting gem-based themes to regular themes @@ -82,7 +112,7 @@ Now `bundle update` will no longer get updates for the theme gem. The `jekyll new ` command isn't the only way to create a new Jekyll site with a gem-based theme. You can also find gem-based themes online and incorporate them into your Jekyll project. -For example, search for [jekyll-theme on RubyGems](https://rubygems.org/search?utf8=%E2%9C%93&query=jekyll-theme) to find other gem-based themes. (Note that not all themes are using `jekyll-theme` as a convention in the theme name.) +For example, search for [jekyll theme on RubyGems](https://rubygems.org/search?utf8=%E2%9C%93&query=jekyll-theme) to find other gem-based themes. (Note that not all themes are using `jekyll-theme` as a convention in the theme name.) To install a gem-based theme: @@ -98,7 +128,7 @@ To install a gem-based theme: bundle install ``` -3. Add the following to your site's `_config.yml` to activate the theme: +3. Add the following to your site's `_config.yml` to activate the theme: ```sh theme: my-awesome-jekyll-theme @@ -113,7 +143,7 @@ To install a gem-based theme: You can have multiple themes listed in your site's `Gemfile`, but only one theme can be selected in your site's `_config.yml`. {: .note .info } -If you're publishing your Jekyll site on [Github Pages](https://pages.github.com/), note that Github Pages supports only some gem-based themes. See [Supported Themes](https://pages.github.com/themes/) in Github's documentation to see which themes are supported. +If you're publishing your Jekyll site on [GitHub Pages](https://pages.github.com/), note that GitHub Pages supports only some gem-based themes. See [Supported Themes](https://pages.github.com/themes/) in GitHub's documentation to see which themes are supported. ## Creating a gem-based theme From 234ed44db69933dc9a589c89096df0ec8a175021 Mon Sep 17 00:00:00 2001 From: Frank Taillandier Date: Sun, 8 Jan 2017 14:44:59 +0100 Subject: [PATCH 09/39] Fix format, corrections --- docs/_docs/themes.md | 145 ++++++++++++++++++++++--------------------- 1 file changed, 75 insertions(+), 70 deletions(-) diff --git a/docs/_docs/themes.md b/docs/_docs/themes.md index 8e937b61..d4da3eea 100644 --- a/docs/_docs/themes.md +++ b/docs/_docs/themes.md @@ -10,7 +10,7 @@ Jekyll has an extensive theme system that allows you to leverage community-maint When you [create a new Jekyll site](/docs/quickstart) (by running the `jekyll new ` command), Jekyll installs a site that uses a gem-based theme called [Minima](https://github.com/jekyll/minima). -With gem-based themes, some of the site's directories (such as the `assets`, `_layouts`, `_includes`, and `_sass` directories) are stored in the theme-gem, hidden from your immediate view. Yet all of the necessary directories will be read and processed during Jekyll's build process. +With gem-based themes, some of the site's directories (such as the `assets`, `_layouts`, `_includes`, and `_sass` directories) are stored in the theme's gem, hidden from your immediate view. Yet all of the necessary directories will be read and processed during Jekyll's build process. In the case of Minima, you see only the following files in your Jekyll site directory: @@ -19,7 +19,7 @@ In the case of Minima, you see only the following files in your Jekyll site dire ├── Gemfile.lock ├── _config.yml ├── _posts -│   └── 2016-12-04-welcome-to-jekyll.markdown +│ └── 2016-12-04-welcome-to-jekyll.markdown ├── about.md └── index.md ``` @@ -28,7 +28,7 @@ The `Gemfile` and `Gemfile.lock` files are used by Bundler to keep track of the Gem-based themes make it easy for theme developers to make updates available to anyone who has the theme gem. When there's an update, theme developers push the update to RubyGems. -If you have the theme gem, you can (if you desire) run `bundle update` to update all gems in your project. Or you can run `bundle update `, replacing `` with the theme name, such as `minima`, to just update the theme gem. Any new files or updates the theme developer has made (such as to stylesheets or includes) will be pulled into your project automatically. +If you have the theme gem, you can (if you desire) run `bundle update` to update all gems in your project. Or you can run `bundle update `, replacing `` with the theme name, such as `minima`, to just update the theme gem. Any new files or updates the theme developer has made (such as to stylesheets or includes) will be pulled into your project automatically. The goal of gem-based themes is to allow you to get all the benefits of a robust, continually updated theme without having all the theme's files getting in your way and over-complicating what might be your primary focus: creating content. @@ -40,30 +40,31 @@ For example, if your selected theme has a `page` layout, you can override the th Jekyll will look first to your site's content before looking to the theme's defaults for any requested file in the following folders: -* `/assets` -* `/_layouts` -* `/_includes` -* `/_sass` +- `/assets` +- `/_layouts` +- `/_includes` +- `/_sass` Refer to your selected theme's documentation and source repository for more information on what files you can override. {: .note .info} To locate theme's files on your computer: -1. Run `bundle show` followed by the name of the theme's gem, e.g., `bundle show minima` for default Jekyll's theme. +1. Run `bundle show` followed by the name of the theme's gem, e.g., `bundle show minima` for default Jekyll's theme. - The location of the theme gem is returned. For example, minima is located in `/usr/local/lib/ruby/gems/2.3.0/gems/minima-2.1.0` when using the system Ruby installation on a Mac. + This returns the location of the gem-based theme files. For example, Minima theme's files are located in `/usr/local/lib/ruby/gems/2.3.0/gems/minima-2.1.0` on macOS. -2. Change to the directory's location and open the directory in Finder or Explorer: +2. Open the theme's directory in Finder or Explorer: - ``` - cd /usr/local/lib/ruby/gems/2.3.0/gems/minima-2.1.0 - open . - # for Windows, use "explorer ." - ``` + ```shell + # On MacOS + open $(bundle show minima) + # On Windows + explorer /usr/local/lib/ruby/gems/2.3.0/gems/minima-2.1.0 + ``` + + A Finder or Explorer window opens showing the theme's files and directories. The Minima theme gem contains these files: - A Finder or Explorer window opens showing the theme's files and directories. The Minima theme gem contains these files: - ``` ├── LICENSE.txt ├── README.md @@ -92,9 +93,9 @@ To locate theme's files on your computer: └── main.scss ``` - With a clear understanding of the theme's files, you can now override any theme file by creating a similarly named file in your Jekyll site directory. - - Let's say you want to override Minima's footer. In your Jekyll site, create an `_includes` folder and add a file in it called `footer.html`. Jekyll will now use your site's `footer.html` file instead of the `footer.html` file from the Minima theme gem. + With a clear understanding of the theme's files, you can now override any theme file by creating a similarly named file in your Jekyll site directory. + + Let's say you want to override Minima's footer. In your Jekyll site, create an `_includes` folder and add a file in it called `footer.html`. Jekyll will now use your site's `footer.html` file instead of the `footer.html` file from the Minima theme gem. ## Converting gem-based themes to regular themes @@ -102,9 +103,10 @@ Suppose you want to get rid of the gem-based theme and convert it to a regular t To do this, copy the files from the theme gem's directory into your Jekyll site directory. (For example, copy them to `/myblog` if you created your Jekyll site at `/myblog`. See the previous section for details.) -Then modify the Gemfile and configuration to remove references to the theme gem. For example, to remove Minima: -* Open `Gemfile` and remove `gem "minima", "~> 2.0"`. -* Open `_config.yml` and remove `theme: minima`. +Then remove references to the theme gem in `Gemfile` and configuration. For example, to remove `minima`: + +- Open `Gemfile` and remove `gem "minima", "~> 2.0"`. +- Open `_config.yml` and remove `theme: minima`. Now `bundle update` will no longer get updates for the theme gem. @@ -116,32 +118,31 @@ For example, search for [jekyll theme on RubyGems](https://rubygems.org/search?u To install a gem-based theme: -1. Add the theme to your site's `Gemfile`: +1. Add the theme to your site's `Gemfile`: - ```sh - gem 'my-awesome-jekyll-theme' - ``` + ```sh + gem "jekyll-theme-awesome" + ``` -2. Install the theme: +2. Install the theme: - ```sh - bundle install - ``` + ```sh + bundle install + ``` 3. Add the following to your site's `_config.yml` to activate the theme: - ```sh - theme: my-awesome-jekyll-theme - ``` + ```sh + theme: jekyll-theme-awesome + ``` -4. Build your site: +4. Build your site: - ```sh - bundle exec jekyll serve - ``` + ```sh + bundle exec jekyll serve + ``` -You can have multiple themes listed in your site's `Gemfile`, but only one theme can be selected in your site's `_config.yml`. -{: .note .info } +You can have multiple themes listed in your site's `Gemfile`, but only one theme can be selected in your site's `_config.yml`. {: .note .info } If you're publishing your Jekyll site on [GitHub Pages](https://pages.github.com/), note that GitHub Pages supports only some gem-based themes. See [Supported Themes](https://pages.github.com/themes/) in GitHub's documentation to see which themes are supported. @@ -149,24 +150,26 @@ If you're publishing your Jekyll site on [GitHub Pages](https://pages.github.com If you're a Jekyll theme developer (rather than just a consumer of themes), you can package up your theme in RubyGems and allow users to install it through Bundler. -If you're unfamiliar with creating Ruby gems, don't worry. Jekyll will help you scaffold a new theme with the `new-theme` command. Just run `jekyll new-theme` with the theme name as an argument: +If you're unfamiliar with creating Ruby gems, don't worry. Jekyll will help you scaffold a new theme with the `new-theme` command. Run `jekyll new-theme` with the theme name as an argument. + +Here is an example: ```sh -jekyll new-theme my-awesome-theme - create /path/to/my-awesome-theme/_layouts - create /path/to/my-awesome-theme/_includes - create /path/to/my-awesome-theme/_sass - create /path/to/my-awesome-theme/_layouts/page.html - create /path/to/my-awesome-theme/_layouts/post.html - create /path/to/my-awesome-theme/_layouts/default.html - create /path/to/my-awesome-theme/Gemfile - create /path/to/my-awesome-theme/my-awesome-theme.gemspec - create /path/to/my-awesome-theme/README.md - create /path/to/my-awesome-theme/LICENSE.txt - initialize /path/to/my-awesome-theme/.git - create /path/to/my-awesome-theme/.gitignore -Your new Jekyll theme, my-awesome-theme, is ready for you in /path/to/my-awesome-theme! -For help getting started, read /path/to/my-awesome-theme/README.md. +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. ``` Add your template files in the corresponding folders. Then complete the `.gemspec` and the README files according to your needs. @@ -179,10 +182,10 @@ For example, if your theme has a `/_layouts/page.html` file, and a page has `lay ### Assets -Any file in `/assets` will be copied over to the user's site upon build unless they have a file with the same relative path. You can ship any kind of asset here: SCSS, an image, a webfont, etc. These files behave just like pages and static files in Jekyll: +Any file in `/assets` will be copied over to the user's site upon build unless they have a file with the same relative path. You can ship any kind of asset here: SCSS, an image, a webfont, etc. These files behave like pages and static files in Jekyll: -* If the file has [YAML front matter](../docs/frontmatter/) at the top, it will be rendered. -* If the file does not have YAML front matter, it will simply be copied over into the resulting site. +- If the file has [YAML front matter](../docs/frontmatter/) at the top, it will be rendered. +- If the file does not have YAML front matter, it will simply be copied over into the resulting site. This allows theme creators to ship a default `/assets/styles.scss` file which their layouts can depend on as `/assets/styles.css`. @@ -193,8 +196,8 @@ All files in `/assets` will be output into the compiled site in the `/assets` fo Your theme's stylesheets should be placed in your theme's `_sass` folder, again, just as you would when authoring a Jekyll site. ``` - _sass -├── jekyll-theme-my-awesome-theme.scss +_sass +├── jekyll-theme-awesome.scss ``` Your theme's styles can be included in the user's stylesheet using the `@import` directive. @@ -215,20 +218,22 @@ Themes are visual. Show users what your theme looks like by including a screensh To preview your theme as you're authoring it, it may be helpful to add dummy content in, for example, `/index.html` and `/page.html` files. This will allow you to use the `jekyll build` and `jekyll serve` commands to preview your theme, just as you'd preview a Jekyll site. -If you do preview your theme locally, be sure to add `/_site` to your theme's `.gitignore` file to prevent the compiled site from also being included when you distribute your theme. -{: .info .note} +If you do preview your theme locally, be sure to add `/_site` to your theme's `.gitignore` file to prevent the compiled site from also being included when you distribute your theme. {: .info .note} ### Publishing your theme -Themes are published via [RubyGems.org](https://rubygems.org). You'll need a RubyGems account, which you can [create for free](https://rubygems.org/sign_up). +Themes are published via [RubyGems.org](https://rubygems.org). You will need a RubyGems account, which you can [create for free](https://rubygems.org/sign_up). -1. First, package your theme, by running the following command, replacing `my-awesome-jekyll-theme` with the name of your theme: +1. First, package your theme, by running the following command, replacing `jekyll-theme-awesome` with the name of your theme: - gem build my-awesome-jekyll-theme.gemspec + ```sh + gem build jekyll-theme-awesome.gemspec + ``` -2. Next, push your packaged theme up to the RubyGems service, by running the following command, again replacing `my-awesome-jekyll-theme` with the name of your theme: +2. Next, push your packaged theme up to the RubyGems service, by running the following command, again replacing `jekyll-theme-awesome` with the name of your theme: - gem push my-awesome-jekyll-theme-*.gem + ```sh + gem push jekyll-theme-awesome-*.gem + ``` -3. To release a new version of your theme, simply update the version number in the gemspec file, ( `my-awesome-jekyll-theme.gemspec` in this example ), and then repeat Steps 1 & 2 above. -We recommend that you follow [Semantic Versioning](http://semver.org/) while bumping your theme-version. +3. To release a new version of your theme, update the version number in the gemspec file, ( `jekyll-theme-awesome.gemspec` in this example ), and then repeat Steps 1 & 2 above. We recommend that you follow [Semantic Versioning](http://semver.org/) while bumping your theme-version. From 02a8ce5585cd69077b345fc9675e166dc186dff9 Mon Sep 17 00:00:00 2001 From: Frank Taillandier Date: Sun, 8 Jan 2017 15:15:48 +0100 Subject: [PATCH 10/39] add spaces to variables --- docs/_docs/templates.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/_docs/templates.md b/docs/_docs/templates.md index 32050813..404e3704 100644 --- a/docs/_docs/templates.md +++ b/docs/_docs/templates.md @@ -539,13 +539,13 @@ You can also use the `link` tag to create a link in Markdown as follows: {% endraw %} ``` -(Including `{% raw %}{{site.baseurl}}{% endraw %}` is optional — it depends on whether you want to preface the page URL with the `baseurl` value.) +(Including `{% raw %}{{ site.baseurl }}{% endraw %}` is optional — it depends on whether you want to preface the page URL with the `baseurl` value.) The path to the post, page, or collection is defined as the path relative to the root directory (where your config file is) to the file, not the path from your existing page to the other page. For example, suppose you're creating a link `page_a.md` (stored in `pages/folder1/folder2`) to `page_b.md` (stored in `pages/folder1`). Your path in the link would not be `../page_b.html`. Instead, it would be `/pages/folder1/page_b.md`. -If you're unsure of the path, add `{% raw %}{{page.path}}{% endraw %}` to the page and it will display the path. +If you're unsure of the path, add `{% raw %}{{ page.path }}{% endraw %}` to the page and it will display the path. One major benefit of using the `link` tag is link validation. If the link doesn't exist, Jekyll won't build your site. This is a good thing, as it will alert you to a broken link so you can fix it (rather than allowing you to build and deploy a site with broken links). From 441b275af2135bdb315ca9c6ac32b416b1d1705f Mon Sep 17 00:00:00 2001 From: Frank Taillandier Date: Sun, 8 Jan 2017 16:43:59 +0100 Subject: [PATCH 11/39] fix broken links in documentation --- docs/_docs/deployment-methods.md | 3 +-- docs/_docs/extras.md | 2 +- docs/_docs/github-pages.md | 8 +++----- docs/_docs/permalinks.md | 2 +- docs/_docs/quickstart.md | 4 ++-- docs/_docs/windows.md | 5 +++-- 6 files changed, 11 insertions(+), 13 deletions(-) diff --git a/docs/_docs/deployment-methods.md b/docs/_docs/deployment-methods.md index cefb4d32..62c94257 100644 --- a/docs/_docs/deployment-methods.md +++ b/docs/_docs/deployment-methods.md @@ -168,7 +168,7 @@ script executes. [Rack-Jekyll](https://github.com/adaoraul/rack-jekyll/) is an easy way to deploy your site on any Rack server such as Amazon EC2, Slicehost, Heroku, and so forth. It also can run with [shotgun](https://github.com/rtomayko/shotgun/), [rackup](https://github.com/rack/rack), [mongrel](https://github.com/mongrel/mongrel), [unicorn](https://github.com/defunkt/unicorn/), and [others](https://github.com/adaoraul/rack-jekyll#readme). -Read [this post](http://andycroll.com/ruby/serving-a-jekyll-blog-using-heroku) on how to deploy to Heroku using Rack-Jekyll. +Read [this post](http://andycroll.com/ruby/serving-a-jekyll-blog-using-heroku/) on how to deploy to Heroku using Rack-Jekyll. ## Jekyll-Admin for Rails @@ -207,4 +207,3 @@ Setting up Kickster is very easy, just install the gem and you are good to go. M [Aerobatic](https://www.aerobatic.com) is an add-on for Bitbucket that brings GitHub Pages style functionality to Bitbucket users. It includes continuous deployment, custom domains with a wildcard SSL cert, CDN, basic auth, and staging branches all in the box. Automating the build and deployment of a Jekyll site is just as simple as GitHub Pages - push your changes to your repo (excluding the `_site` directory) and within seconds a build will be triggered and your built site deployed to our highly- available, globally distributed hosting service. The build process will even install and execute custom Ruby plugins. See our [Jekyll docs](https://www.aerobatic.com/docs/static-generators#jekyll) for more details. - diff --git a/docs/_docs/extras.md b/docs/_docs/extras.md index 83e79963..a52ccaf1 100644 --- a/docs/_docs/extras.md +++ b/docs/_docs/extras.md @@ -15,7 +15,7 @@ Kramdown comes with optional support for LaTeX to PNG rendering via [MathJax](ht ``` -For more information about getting started, check out [this excellent blog post](http://gastonsanchez.com/opinion/2014/02/16/Mathjax-with-jekyll/). +For more information about getting started, check out [this excellent blog post](http://gastonsanchez.com/visually-enforced/opinion/2014/02/16/Mathjax-with-jekyll/). ## Alternative Markdown Processors diff --git a/docs/_docs/github-pages.md b/docs/_docs/github-pages.md index 710f702e..b9b0cce6 100644 --- a/docs/_docs/github-pages.md +++ b/docs/_docs/github-pages.md @@ -12,15 +12,13 @@ content, they’re also a great way to host your Jekyll-powered website for free Never built a website with GitHub Pages before? [See this marvelous guide by Jonathan McGlone to get you up and running](http://jmcglone.com/guides/github-pages/). -This guide will teach you what you need to know about Git, GitHub, and Jekyll to -create your very own website on GitHub Pages. +This guide will teach you what you need to know about Git, GitHub, and Jekyll to create your very own website on GitHub Pages. ### Project Page URL Structure Sometimes it's nice to preview your Jekyll site before you push your `gh-pages` branch to GitHub. However, the subdirectory-like URL structure GitHub uses for -Project Pages complicates the proper resolution of URLs. In order to assure your -site builds properly, use `site.github.url` in your URL's. +Project Pages complicates the proper resolution of URLs. In order to assure your site builds properly, use `site.github.url` in your URL's. ```html {% raw %} @@ -91,7 +89,7 @@ gem 'github-pages' And be sure to run `bundle update` often. If you like to install `pages-gem` on Windows you can find instructions by Jens Willmer on -[how to install github-pages gem on Windows (x64)]("https://jwillmer.de/blog/tutorial/how-to-install-jekyll-and-pages-gem-on-windows-10-x46#github-pages-and-plugins"). +[how to install github-pages gem on Windows (x64)](https://jwillmer.de/blog/tutorial/how-to-install-jekyll-and-pages-gem-on-windows-10-x46#github-pages-and-plugins).
diff --git a/docs/_docs/permalinks.md b/docs/_docs/permalinks.md index b8fd5ec6..dc6ae44f 100644 --- a/docs/_docs/permalinks.md +++ b/docs/_docs/permalinks.md @@ -328,7 +328,7 @@ As with posts, if you use a permalink style that omits the `.html` file extensio By default, collections follow a similar structure in the `_site` folder as pages, except that the path is prefaced by the collection name. For example: `collectionname/mypage.html`. For permalink settings that omit the file extension, the path would be `collection_name/mypage/index.html`. -Collections have their own way of setting permalinks. Additionally, collections have unique template variables available available (such as `path` and `output_ext`). See the [Configuring permalinks for collections]( ../collections#permalinks ) in Collections for more information. +Collections have their own way of setting permalinks. Additionally, collections have unique template variables available available (such as `path` and `output_ext`). See the [Configuring permalinks for collections](../collections/#permalinks) in Collections for more information. ## Flattening pages in \_site on build diff --git a/docs/_docs/quickstart.md b/docs/_docs/quickstart.md index d15a9eb1..7a81e70e 100644 --- a/docs/_docs/quickstart.md +++ b/docs/_docs/quickstart.md @@ -4,7 +4,7 @@ title: Quick-start guide permalink: /docs/quickstart/ --- -If you already have [Ruby](https://www.ruby-lang.org/en/downloads/) and [RubyGems](https://rubygems.org/pages/download) installed (see Jekyll's [requirements](/docs/installation/#requirements/)), you can create a new Jekyll site by doing the following: +If you already have [Ruby](https://www.ruby-lang.org/en/downloads/) and [RubyGems](https://rubygems.org/pages/download) installed (see Jekyll's [requirements](../installation/#requirements)), you can create a new Jekyll site by doing the following: ```sh # Install Jekyll and Bundler gems through RubyGems @@ -35,7 +35,7 @@ If you already have [Ruby](https://www.ruby-lang.org/en/downloads/) and [RubyGem `jekyll new ` installs a new Jekyll site at the path specified (relative to current directory). In this case, Jekyll will be installed in a directory called `myblog`. Here are some additional details: -* To install the Jekyll site into the directory you're currently in, run `jekyll new .` If the existing directory isn't empty, you can pass the `--force` option with `jekyll new . --force`. +* To install the Jekyll site into the directory you're currently in, run `jekyll new .` If the existing directory isn't empty, you can pass the `--force` option with `jekyll new . --force`. * `jekyll new` automatically initiates `bundle install` to install the dependencies required. (If you don't want Bundler to install the gems, use `jekyll new myblog --skip-bundle`.) * By default, the Jekyll site installed by `jekyll new` uses a gem-based theme called [Minima](https://github.com/jekyll/minima). With [gem-based themes](../themes), some of the directories and files are stored in the theme-gem, hidden from your immediate view. * To learn about other parameters you can include with `jekyll new`, type `jekyll new --help`. diff --git a/docs/_docs/windows.md b/docs/_docs/windows.md index 8d7bb8bc..7dedde22 100644 --- a/docs/_docs/windows.md +++ b/docs/_docs/windows.md @@ -17,6 +17,7 @@ A quick way to install Jekyll is to follow the [installation instructions by Dav 3. Reopen a command prompt and install Jekyll: `gem install jekyll` Updates in the infrastructure of Ruby may cause SSL errors when attempting to use `gem install` with versions of the RubyGems package older than 2.6. (The RubyGems package installed via the Chocolatey tool is version 2.3) If you have installed an older version, you can update the RubyGems package using the directions [here.][ssl-certificate-update] + [ssl-certificate-update]: http://guides.rubygems.org/ssl-certificate-update/#installing-using-update-packages For a more conventional way of installing Jekyll you can follow this [complete guide to install Jekyll 3 on Windows by Sverrir Sigmundarson][windows-installjekyll3]. @@ -39,10 +40,10 @@ $ chcp 65001 ## Timezone Management -Since Windows doesn't have a native source of zoneinfo data, the Ruby Interpreter would not understand IANA Timezones and hence using them had the `TZ` environment variable default to UTC/GMT 00:00. +Since Windows doesn't have a native source of zoneinfo data, the Ruby Interpreter would not understand IANA Timezones and hence using them had the `TZ` environment variable default to UTC/GMT 00:00. Though Windows users could alternatively define their blog's timezone by setting the key to use POSIX format of defining timezones, it wasn't as user-friendly when it came to having the clock altered to changing DST-rules. -Jekyll now uses a rubygem to internally configure Timezone based on established [IANA Timezone Database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). +Jekyll now uses a rubygem to internally configure Timezone based on established [IANA Timezone Database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). While 'new' blogs created with Jekyll v3.4 and greater, will have the following added to their 'Gemfile' by default, existing sites *will* have to update their 'Gemfile' (and installed) to enable development on Windows: ```ruby From b2d93913d09740494d5bfedea9a9f459acdf9353 Mon Sep 17 00:00:00 2001 From: jekyllbot Date: Wed, 18 Jan 2017 15:36:13 -0500 Subject: [PATCH 12/39] Update history to reflect merge of #5694 [ci skip] --- History.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/History.markdown b/History.markdown index 36e70cb6..e9df1fb4 100644 --- a/History.markdown +++ b/History.markdown @@ -41,6 +41,7 @@ * Improve collections docs (#5691) * Fix #5730: add gcc and make to the list of requirements (#5731) * Add missing class (#5791) + * Improve template docs (#5694) ### Development Fixes From 60ba3fc0c982f771c75f59d2f4d2061d0bc1ef8f Mon Sep 17 00:00:00 2001 From: jekyllbot Date: Thu, 19 Jan 2017 08:55:04 -0500 Subject: [PATCH 13/39] Update history to reflect merge of #5736 [ci skip] --- History.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/History.markdown b/History.markdown index e9df1fb4..b813f405 100644 --- a/History.markdown +++ b/History.markdown @@ -87,6 +87,7 @@ * Fix a markdown link to look properly on the web (#5769) * [docs] Info about the help command usage (#5312) * Add missing merge labels for jekyllbot (#5753) + * Fix broken links in documentation (#5736) ## 3.3.1 / 2016-11-14 From 63dfe080db91334dab01276e70b33e77430a2e41 Mon Sep 17 00:00:00 2001 From: Frank Taillandier Date: Thu, 19 Jan 2017 22:06:37 +0100 Subject: [PATCH 14/39] bump rdoc to v5.0 --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 7a786c9b..0abcbe4a 100644 --- a/Gemfile +++ b/Gemfile @@ -69,7 +69,7 @@ group :jekyll_optional_dependencies do gem "jekyll-redirect-from" gem "kramdown", "~> 1.9" gem "mime-types", "~> 3.0" - gem "rdoc", "~> 4.2" + gem "rdoc", "~> 5.0" gem "toml", "~> 0.1.0" platform :ruby, :mswin, :mingw, :x64_mingw do From 6ec2145c0ccf949e0d1ef0ca7d0aa4acbdb05c4c Mon Sep 17 00:00:00 2001 From: Frank Taillandier Date: Thu, 19 Jan 2017 22:15:07 +0100 Subject: [PATCH 15/39] bump codeclimate-test-reporter to v1.0.5 --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 7a786c9b..9b0a2c18 100644 --- a/Gemfile +++ b/Gemfile @@ -18,7 +18,7 @@ end # group :test do - gem "codeclimate-test-reporter", "~> 0.6.0" + gem "codeclimate-test-reporter", "~> 1.0.5" gem "cucumber", "~> 2.1" gem "jekyll_test_plugin" gem "jekyll_test_plugin_malicious" From 5ed22d0b3eb4dbabfdf458fa5ad288983f29e8d7 Mon Sep 17 00:00:00 2001 From: Frank Taillandier Date: Thu, 19 Jan 2017 22:39:39 +0100 Subject: [PATCH 16/39] Now we must execute SimpleCov --- test/helper.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/helper.rb b/test/helper.rb index 94bad2cc..74f2682e 100644 --- a/test/helper.rb +++ b/test/helper.rb @@ -10,8 +10,8 @@ def jruby? end if ENV["CI"] - require "codeclimate-test-reporter" - CodeClimate::TestReporter.start + require "simplecov" + SimpleCov.start else require File.expand_path("../simplecov_custom_profile", __FILE__) SimpleCov.start "gem" do From 4ed4c430445dd58f0991f322cded2e38feecf1b6 Mon Sep 17 00:00:00 2001 From: Tunghsiao Liu Date: Fri, 20 Jan 2017 15:14:23 +0800 Subject: [PATCH 17/39] Add `match_regex` and `replace_regex` filters --- docs/_docs/plugins.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/_docs/plugins.md b/docs/_docs/plugins.md index 9034cb20..09bb2feb 100644 --- a/docs/_docs/plugins.md +++ b/docs/_docs/plugins.md @@ -803,6 +803,8 @@ LESS.js files during generation. - [jekyll-typogrify](https://github.com/myles/jekyll-typogrify): A Jekyll plugin that brings the functions of [typogruby](http://avdgaag.github.io/typogruby/). - [Jekyll Email Protect](https://github.com/vwochnik/jekyll-email-protect): Email protection liquid filter for Jekyll - [Jekyll Uglify Filter](https://github.com/mattg/jekyll-uglify-filter): A Liquid filter that runs your JavaScript through UglifyJS. +- [match_regex](https://github.com/sparanoid/match_regex): A Liquid filter to perform regex match. +- [replace_regex](https://github.com/sparanoid/replace_regex): A Liquid filter to perform regex replace. #### Tags From 4804806266e9fade7c3de6bf0d3064bc013e29fd Mon Sep 17 00:00:00 2001 From: jekyllbot Date: Fri, 20 Jan 2017 03:42:02 -0500 Subject: [PATCH 18/39] Update history to reflect merge of #5799 [ci skip] --- History.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/History.markdown b/History.markdown index b813f405..883cb845 100644 --- a/History.markdown +++ b/History.markdown @@ -88,6 +88,7 @@ * [docs] Info about the help command usage (#5312) * Add missing merge labels for jekyllbot (#5753) * Fix broken links in documentation (#5736) + * Docs: add `match_regex` and `replace_regex` filters (#5799) ## 3.3.1 / 2016-11-14 From 12201d4f1bf057abdbad544a7a49c64b539691f0 Mon Sep 17 00:00:00 2001 From: Frank Taillandier Date: Fri, 20 Jan 2017 09:49:34 +0100 Subject: [PATCH 19/39] update excluded paths --- .codeclimate.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.codeclimate.yml b/.codeclimate.yml index cd70c7de..b3d26d65 100644 --- a/.codeclimate.yml +++ b/.codeclimate.yml @@ -23,7 +23,7 @@ exclude_paths: - features/**/* - script/**/* - - site/**/* + - docs/**/* - spec/**/* - test/**/* - vendor/**/* From 9fe73be1013639b6721b4bffb787d8e62cbf12bd Mon Sep 17 00:00:00 2001 From: jekyllbot Date: Fri, 20 Jan 2017 13:59:19 -0500 Subject: [PATCH 20/39] Update history to reflect merge of #5797 [ci skip] --- History.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/History.markdown b/History.markdown index 883cb845..8b63ad60 100644 --- a/History.markdown +++ b/History.markdown @@ -62,6 +62,7 @@ * Use latest jemoji gem (#5782) * Bump htmlproofer (#5781) * Bump rubies we test against (#5784) + * Bump rdoc to v5.0 (#5797) ### Documentation From eb54e270f91892e4df6d3252cfa896b5ff9afdf5 Mon Sep 17 00:00:00 2001 From: Ajay Karwal Date: Sat, 21 Jan 2017 00:17:14 +0000 Subject: [PATCH 21/39] Added note about --blank flag Added instructions about installing Jekyll with a blank slate using the --blank flag. --- docs/_docs/quickstart.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/_docs/quickstart.md b/docs/_docs/quickstart.md index 50df76cf..a8a2ae98 100644 --- a/docs/_docs/quickstart.md +++ b/docs/_docs/quickstart.md @@ -40,6 +40,7 @@ If you encounter any unexpected errors during the above, please refer to the alr * To install the Jekyll site into the directory you're currently in, run `jekyll new .` If the existing directory isn't empty, you can pass the `--force` option with `jekyll new . --force`. * `jekyll new` automatically initiates `bundle install` to install the dependencies required. (If you don't want Bundler to install the gems, use `jekyll new myblog --skip-bundle`.) * By default, the Jekyll site installed by `jekyll new` uses a gem-based theme called [Minima](https://github.com/jekyll/minima). With [gem-based themes](../themes), some of the directories and files are stored in the theme-gem, hidden from your immediate view. +* We recommend setting up Jekyll with a gem-based theme but if you want to start with a blank slate, use `jekyll new myblog --blank` * To learn about other parameters you can include with `jekyll new`, type `jekyll new --help`. When in doubt, use the help command to remind you of all available options and usage, it also works with the new, build and serve subcommands, e.g. jekyll help new or jekyll help build. From f7186c86c4b365fbd13a5b9602033eb34bf83f08 Mon Sep 17 00:00:00 2001 From: Josh Habdas Date: Sun, 22 Jan 2017 22:33:21 +0800 Subject: [PATCH 22/39] Got that diaper money? --- docs/_docs/plugins.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/_docs/plugins.md b/docs/_docs/plugins.md index 09bb2feb..d9e5fe33 100644 --- a/docs/_docs/plugins.md +++ b/docs/_docs/plugins.md @@ -805,6 +805,7 @@ LESS.js files during generation. - [Jekyll Uglify Filter](https://github.com/mattg/jekyll-uglify-filter): A Liquid filter that runs your JavaScript through UglifyJS. - [match_regex](https://github.com/sparanoid/match_regex): A Liquid filter to perform regex match. - [replace_regex](https://github.com/sparanoid/replace_regex): A Liquid filter to perform regex replace. +- [Jekyll Money](https://rubygems.org/gems/jekyll-money): A Jekyll plugin for dealing with money. Because we all have to at some point. #### Tags From c1b542e066f656f81a3fc138b0b73871c4852d9b Mon Sep 17 00:00:00 2001 From: jekyllbot Date: Sun, 22 Jan 2017 12:00:29 -0500 Subject: [PATCH 23/39] Update history to reflect merge of #5810 [ci skip] --- History.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/History.markdown b/History.markdown index 8b63ad60..64cc144c 100644 --- a/History.markdown +++ b/History.markdown @@ -90,6 +90,7 @@ * Add missing merge labels for jekyllbot (#5753) * Fix broken links in documentation (#5736) * Docs: add `match_regex` and `replace_regex` filters (#5799) + * Got that diaper money? (#5810) ## 3.3.1 / 2016-11-14 From 03722f022e4a0858aabfe85d7b06b369c942786d Mon Sep 17 00:00:00 2001 From: Nicolas Hoizey Date: Sun, 22 Jan 2017 22:12:58 +0100 Subject: [PATCH 24/39] Add mention of classifier-reborn for LSI classifier-reborn is mandatory for LSI since Jekyll 3.0 --- docs/_docs/configuration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_docs/configuration.md b/docs/_docs/configuration.md index e4c35b8a..2542b85f 100644 --- a/docs/_docs/configuration.md +++ b/docs/_docs/configuration.md @@ -233,7 +233,7 @@ class="flag">flags (specified on the command-line) that control them.

LSI

-

Produce an index for related posts.

+

Produce an index for related posts. The classifier-reborn plugin must be used.

lsi: BOOL

From e6392ea6dd56af288de3b6602868455414eba92a Mon Sep 17 00:00:00 2001 From: Nicolas Hoizey Date: Mon, 23 Jan 2017 10:06:24 +0100 Subject: [PATCH 25/39] Update configuration.md --- docs/_docs/configuration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_docs/configuration.md b/docs/_docs/configuration.md index 2542b85f..3f3bfd25 100644 --- a/docs/_docs/configuration.md +++ b/docs/_docs/configuration.md @@ -233,7 +233,7 @@ class="flag">flags (specified on the command-line) that control them.

LSI

-

Produce an index for related posts. The classifier-reborn plugin must be used.

+

Produce an index for related posts. Requires the classifier-reborn plugin.

lsi: BOOL

From 2a2602cf61af9b83c43b60470dc89d1817557a64 Mon Sep 17 00:00:00 2001 From: Josh Habdas Date: Mon, 23 Jan 2017 17:59:25 +0800 Subject: [PATCH 26/39] Add jekyll-ga plug-in --- docs/_docs/plugins.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/_docs/plugins.md b/docs/_docs/plugins.md index 09bb2feb..f0cdb345 100644 --- a/docs/_docs/plugins.md +++ b/docs/_docs/plugins.md @@ -753,6 +753,7 @@ LESS.js files during generation. - [Jekyll::Paginate::Category](https://github.com/midnightSuyama/jekyll-paginate-category): Pagination Generator for Jekyll Category. - [AMP-Jekyll by Juuso Mikkonen](https://github.com/juusaw/amp-jekyll): Generate [Accelerated Mobile Pages](https://www.ampproject.org) of Jekyll posts. - [Jekyll Art Gallery plugin](https://github.com/alexivkin/Jekyll-Art-Gallery-Plugin): An advanced art/photo gallery generation plugin for creating galleries from a set of image folders. Supports image tagging, thumbnails, sorting, image rotation, post-processing (remove EXIF, add watermark), multiple collections and much more. +- [jekyll-ga](https://github.com/developmentseed/jekyll-ga): A Jekyll plugin that downloads Google Analytics data and adds it to posts. Useful for making a site that lists "most popular" content. [Read the introduction](https://developmentseed.org/blog/google-analytics-jekyll-plugin/) post on the developmentSEED blog. #### Converters From 2a56e9ce0d5eaf3581bf0bf4e134241731785974 Mon Sep 17 00:00:00 2001 From: jekyllbot Date: Mon, 23 Jan 2017 11:53:13 -0500 Subject: [PATCH 27/39] Update history to reflect merge of #5812 [ci skip] --- History.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/History.markdown b/History.markdown index 64cc144c..776fd40b 100644 --- a/History.markdown +++ b/History.markdown @@ -91,6 +91,7 @@ * Fix broken links in documentation (#5736) * Docs: add `match_regex` and `replace_regex` filters (#5799) * Got that diaper money? (#5810) + * Sort content by popularity using Google Analytics (#5812) ## 3.3.1 / 2016-11-14 From 3a3ceff1509b0391952252c6121db614387dd88e Mon Sep 17 00:00:00 2001 From: Ricardo N Feliciano Date: Thu, 19 Jan 2017 19:29:09 -0500 Subject: [PATCH 28/39] Rework CI doc to include multiple providers. --- docs/_docs/continuous-integration.md | 240 +----------------- docs/_docs/continuous-integration/circleci.md | 92 +++++++ .../_docs/continuous-integration/travis-ci.md | 230 +++++++++++++++++ docs/img/circleci-badge.svg | 14 + docs/img/travis-ci-badge.png | Bin 0 -> 26749 bytes 5 files changed, 350 insertions(+), 226 deletions(-) create mode 100644 docs/_docs/continuous-integration/circleci.md create mode 100644 docs/_docs/continuous-integration/travis-ci.md create mode 100644 docs/img/circleci-badge.svg create mode 100644 docs/img/travis-ci-badge.png diff --git a/docs/_docs/continuous-integration.md b/docs/_docs/continuous-integration.md index c2e8a31f..79477645 100644 --- a/docs/_docs/continuous-integration.md +++ b/docs/_docs/continuous-integration.md @@ -1,232 +1,20 @@ --- title: Continuous Integration -permalink: /docs/continuous-integration/ --- -You can easily test your website build against one or more versions of Ruby. -The following guide will show you how to set up a free build environment on -[Travis][0], with [GitHub][1] integration for pull requests. Paid -alternatives exist for private repositories. +Continuous Integration (CI) enables you to publish your Jekyll generated website with confidence by automating the quality assurance and deployment processes. You can quickly get started using CI with one of the providers below: -[0]: https://travis-ci.org/ -[1]: https://github.com/ - -## 1. Enabling Travis and GitHub - -Enabling Travis builds for your GitHub repository is pretty simple: - -1. Go to your profile on travis-ci.org: https://travis-ci.org/profile/username -2. Find the repository for which you're interested in enabling builds. -3. Click the slider on the right so it says "ON" and is a dark grey. -4. Optionally configure the build by clicking on the gear icon. Further - configuration happens in your `.travis.yml` file. More details on that - below. - -## 2. The Test Script - -The simplest test script simply runs `jekyll build` and ensures that Jekyll -doesn't fail to build the site. It doesn't check the resulting site, but it -does ensure things are built properly. - -When testing Jekyll output, there is no better tool than [html-proofer][2]. -This tool checks your resulting site to ensure all links and images exist. -Utilize it either with the convenient `htmlproofer` command-line executable, -or write a Ruby script which utilizes the gem. - -Save the commands you want to run and succeed in a file: `./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 -``` - -Some options can be specified via command-line switches. Check out the -`html-proofer` README for more information about these switches, or run -`htmlproofer --help` locally. - -For example to avoid testing external sites, use this command: - -```sh -$ bundle exec htmlproofer ./_site --disable-external -``` - -### The HTML Proofer Library - -You can also invoke `html-proofer` in Ruby scripts (e.g. in a Rakefile): - -```ruby -#!/usr/bin/env ruby - -require 'html-proofer' -HTMLProofer.check_directory("./_site").run -``` - -Options are given as a second argument to `.new`, and are encoded in a -symbol-keyed Ruby Hash. For more information about the configuration options, -check out `html-proofer`'s README file. - -[2]: https://github.com/gjtorikian/html-proofer - -## 3. Configuring Your Travis Builds - -This file is used to configure your Travis builds. Because Jekyll is built -with Ruby and requires RubyGems to install, we use the Ruby language build -environment. Below is a sample `.travis.yml` file, followed by -an explanation of each line. - -**Note:** You will need a Gemfile as well, [Travis will automatically install](https://docs.travis-ci.com/user/languages/ruby/#Dependency-Management) the dependencies based on the referenced gems: - -```ruby -source "https://rubygems.org" - -gem "jekyll" -gem "html-proofer" -``` - -Your `.travis.yml` file should look like this: - -```yaml -language: ruby -rvm: -- 2.2.5 - -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 - -sudo: false # route your build to the container-based infrastructure for a faster build -``` - -Ok, now for an explanation of each line: - -```yaml -language: ruby -``` - -This line tells Travis to use a Ruby build container. It gives your script -access to Bundler, RubyGems, and a Ruby runtime. - -```yaml -rvm: -- 2.2.5 -``` - -RVM is a popular Ruby Version Manager (like rbenv, chruby, etc). This -directive tells Travis the Ruby version to use when running your test -script. - -```yaml -before_script: - - chmod +x ./script/cibuild -``` - -The build script file needs to have the *executable* attribute set or -Travis will fail with a permission denied error. You can also run this -locally and commit the permissions directly, thus rendering this step -irrelevant. - -```yaml -script: ./script/cibuild -``` - -Travis allows you to run any arbitrary shell script to test your site. One -convention is to put all scripts for your project in the `script` -directory, and to call your test script `cibuild`. This line is completely -customizable. If your script won't change much, you can write your test -incantation here directly: - -```yaml -install: gem install jekyll html-proofer -script: jekyll build && htmlproofer ./_site -``` - -The `script` directive can be absolutely any valid shell command. - -```yaml -# branch whitelist, only for GitHub Pages -branches: - only: - - gh-pages # test the gh-pages branch - - /pages-(.*)/ # test every branch which starts with "pages-" -``` - -You want to ensure the Travis builds for your site are being run only on -the branch or branches which contain your site. One means of ensuring this -isolation is including a branch whitelist in your Travis configuration -file. By specifying the `gh-pages` branch, you will ensure the associated -test script (discussed above) is only executed on site branches. If you use -a pull request flow for proposing changes, you may wish to enforce a -convention for your builds such that all branches containing edits are -prefixed, exemplified above with the `/pages-(.*)/` regular expression. - -The `branches` directive is completely optional. Travis will build from every -push to any branch of your repo if leave it out. - -```yaml -env: - global: - - NOKOGIRI_USE_SYSTEM_LIBRARIES=true # speeds up installation of html-proofer -``` - -Using `html-proofer`? You'll want this environment variable. Nokogiri, used -to parse HTML files in your compiled site, comes bundled with libraries -which it must compile each time it is installed. Luckily, you can -dramatically decrease the install time of Nokogiri by setting the -environment variable `NOKOGIRI_USE_SYSTEM_LIBRARIES` to `true`. - -
-
Be sure to exclude vendor from your - _config.yml
-

Travis bundles all gems in the vendor directory on its build - servers, which Jekyll will mistakenly read and explode on.

+ - -```yaml -exclude: [vendor] -``` - -By default you should supply the `sudo: false` command to Travis. This command -explicitly tells Travis to run your build on Travis's [container-based - infrastructure](https://docs.travis-ci.com/user/workers/container-based-infrastructure/#Routing-your-build-to-container-based-infrastructure). Running on the container-based infrastructure can often times -speed up your build. If you have any trouble with your build, or if your build -does need `sudo` access, modify the line to `sudo: required`. - -```yaml -sudo: false -``` - -### Troubleshooting - -**Travis error:** *"You are trying to install in deployment mode after changing -your Gemfile. Run bundle install elsewhere and add the updated Gemfile.lock -to version control."* - -**Workaround:** Either run `bundle install` locally and commit your changes to -`Gemfile.lock`, or remove the `Gemfile.lock` file from your repository and add -an entry in the `.gitignore` file to avoid it from being checked in again. - -### Questions? - -This entire guide is open-source. Go ahead and [edit it][3] if you have a -fix or [ask for help][4] if you run into trouble and need some help. - -[3]: https://github.com/jekyll/jekyll/edit/master/docs/_docs/continuous-integration.md -[4]: https://jekyllrb.com/help/ diff --git a/docs/_docs/continuous-integration/circleci.md b/docs/_docs/continuous-integration/circleci.md new file mode 100644 index 00000000..ccd2d933 --- /dev/null +++ b/docs/_docs/continuous-integration/circleci.md @@ -0,0 +1,92 @@ +--- +title: "CircleCI" +--- + +Building, testing, and deploying your Jekyll-generated website can quickly be done with [CircleCI][0], a continuous integration & delivery tool. CircleCI supports [GitHub][1] and [Bitbucket][2], and you can get started for free using an open-source or private repository. + +[0]: https://circleci.com/ +[1]: https://github.com/ +[2]: https://bitbucket.org/ + +## Follow Your Project on CircleCI + +To start building your project on CircleCI, all you need to do is 'follow' your project from CircleCI's website: + +1. Visit the 'Add Projects' page: +1. From the GitHub or Bitbucket tab on the left, choose a user or organization. +1. Find your project in the list and click 'Build project' on the right. +1. The first build will start on its own. You can start telling CircleCI how to build your project by creating a [circle.yml][3] file in the root of your repository. + +[3]: https://circleci.com/docs/configuration/ + +## Dependencies + +The easiest way to manage dependencies for a Jekyll project (with or without CircleCI) is via a [Gemfile][4]. You'd want to have Jekyll, any Jekyll plugins, [HTML Proofer](#html-proofer), and any other gems that you are using in the `Gemfile`. Don't forget to version `Gemfile.lock` as well. Here's an example `Gemfile`: + +[4]: http://bundler.io/gemfile.html + +```yaml +source 'https://rubygems.org' + +ruby '2.4.0' + +gem 'jekyll' +gem 'html-proofer' +``` + +CircleCI detects when `Gemfile` is present is will automatically run `bundle install` for you in the `dependencies` phase. + +## Testing + +The most basic test that can be run is simply seeing if `jekyll build` actually works. This is a blocker, a dependency if you will, for other tests you might run on the generate site. So we'll run Jekyll, via Bundler, in the `dependencies` phase. + +``` +dependencies: + post: + - bundle exec jekyll build +``` + +### HTML Proofer + +With your site built, it's useful to run tests to check for valid HTML, broken links, etc. There's a few tools out there but [HTML Proofer][5] is popular amongst Jekyll users. We'll run it in the `test` phase with a few preferred flags. Check out the `html-proofer` [README][6] for all available flags, or run `htmlproofer --help` locally. + +[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 +``` + +## Complete Example circle.yml File + +When you put it all together, here's an example of what that `circle.yml` file could look like: + +``` +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 +``` + +## Questions? + +This entire guide is open-source. Go ahead and [edit it][7] if you have a fix or [ask for help][8] if you run into trouble and need some help. CircleCI also has an [online community][9] for help. + +[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/_docs/continuous-integration/travis-ci.md b/docs/_docs/continuous-integration/travis-ci.md new file mode 100644 index 00000000..caff2f64 --- /dev/null +++ b/docs/_docs/continuous-integration/travis-ci.md @@ -0,0 +1,230 @@ +--- +title: "Travis CI" +--- + +You can easily test your website build against one or more versions of Ruby. +The following guide will show you how to set up a free build environment on +[Travis][0], with [GitHub][1] integration for pull requests. + +[0]: https://travis-ci.org/ +[1]: https://github.com/ + +## 1. Enabling Travis and GitHub + +Enabling Travis builds for your GitHub repository is pretty simple: + +1. Go to your profile on travis-ci.org: https://travis-ci.org/profile/username +2. Find the repository for which you're interested in enabling builds. +3. Click the slider on the right so it says "ON" and is a dark grey. +4. Optionally configure the build by clicking on the gear icon. Further + configuration happens in your `.travis.yml` file. More details on that + below. + +## 2. The Test Script + +The simplest test script simply runs `jekyll build` and ensures that Jekyll +doesn't fail to build the site. It doesn't check the resulting site, but it +does ensure things are built properly. + +When testing Jekyll output, there is no better tool than [html-proofer][2]. +This tool checks your resulting site to ensure all links and images exist. +Utilize it either with the convenient `htmlproofer` command-line executable, +or write a Ruby script which utilizes the gem. + +Save the commands you want to run and succeed in a file: `./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 +``` + +Some options can be specified via command-line switches. Check out the +`html-proofer` README for more information about these switches, or run +`htmlproofer --help` locally. + +For example to avoid testing external sites, use this command: + +```sh +$ bundle exec htmlproofer ./_site --disable-external +``` + +### The HTML Proofer Library + +You can also invoke `html-proofer` in Ruby scripts (e.g. in a Rakefile): + +```ruby +#!/usr/bin/env ruby + +require 'html-proofer' +HTMLProofer.check_directory("./_site").run +``` + +Options are given as a second argument to `.new`, and are encoded in a +symbol-keyed Ruby Hash. For more information about the configuration options, +check out `html-proofer`'s README file. + +[2]: https://github.com/gjtorikian/html-proofer + +## 3. Configuring Your Travis Builds + +This file is used to configure your Travis builds. Because Jekyll is built +with Ruby and requires RubyGems to install, we use the Ruby language build +environment. Below is a sample `.travis.yml` file, followed by +an explanation of each line. + +**Note:** You will need a Gemfile as well, [Travis will automatically install](https://docs.travis-ci.com/user/languages/ruby/#Dependency-Management) the dependencies based on the referenced gems: + +```ruby +source "https://rubygems.org" + +gem "jekyll" +gem "html-proofer" +``` + +Your `.travis.yml` file should look like this: + +```yaml +language: ruby +rvm: +- 2.2.5 + +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 + +sudo: false # route your build to the container-based infrastructure for a faster build +``` + +Ok, now for an explanation of each line: + +```yaml +language: ruby +``` + +This line tells Travis to use a Ruby build container. It gives your script +access to Bundler, RubyGems, and a Ruby runtime. + +```yaml +rvm: +- 2.2.5 +``` + +RVM is a popular Ruby Version Manager (like rbenv, chruby, etc). This +directive tells Travis the Ruby version to use when running your test +script. + +```yaml +before_script: + - chmod +x ./script/cibuild +``` + +The build script file needs to have the *executable* attribute set or +Travis will fail with a permission denied error. You can also run this +locally and commit the permissions directly, thus rendering this step +irrelevant. + +```yaml +script: ./script/cibuild +``` + +Travis allows you to run any arbitrary shell script to test your site. One +convention is to put all scripts for your project in the `script` +directory, and to call your test script `cibuild`. This line is completely +customizable. If your script won't change much, you can write your test +incantation here directly: + +```yaml +install: gem install jekyll html-proofer +script: jekyll build && htmlproofer ./_site +``` + +The `script` directive can be absolutely any valid shell command. + +```yaml +# branch whitelist, only for GitHub Pages +branches: + only: + - gh-pages # test the gh-pages branch + - /pages-(.*)/ # test every branch which starts with "pages-" +``` + +You want to ensure the Travis builds for your site are being run only on +the branch or branches which contain your site. One means of ensuring this +isolation is including a branch whitelist in your Travis configuration +file. By specifying the `gh-pages` branch, you will ensure the associated +test script (discussed above) is only executed on site branches. If you use +a pull request flow for proposing changes, you may wish to enforce a +convention for your builds such that all branches containing edits are +prefixed, exemplified above with the `/pages-(.*)/` regular expression. + +The `branches` directive is completely optional. Travis will build from every +push to any branch of your repo if leave it out. + +```yaml +env: + global: + - NOKOGIRI_USE_SYSTEM_LIBRARIES=true # speeds up installation of html-proofer +``` + +Using `html-proofer`? You'll want this environment variable. Nokogiri, used +to parse HTML files in your compiled site, comes bundled with libraries +which it must compile each time it is installed. Luckily, you can +dramatically decrease the install time of Nokogiri by setting the +environment variable `NOKOGIRI_USE_SYSTEM_LIBRARIES` to `true`. + +
+
Be sure to exclude vendor from your + _config.yml
+

Travis bundles all gems in the vendor directory on its build + servers, which Jekyll will mistakenly read and explode on.

+
+ +```yaml +exclude: [vendor] +``` + +By default you should supply the `sudo: false` command to Travis. This command +explicitly tells Travis to run your build on Travis's [container-based + infrastructure](https://docs.travis-ci.com/user/workers/container-based-infrastructure/#Routing-your-build-to-container-based-infrastructure). Running on the container-based infrastructure can often times +speed up your build. If you have any trouble with your build, or if your build +does need `sudo` access, modify the line to `sudo: required`. + +```yaml +sudo: false +``` + +### Troubleshooting + +**Travis error:** *"You are trying to install in deployment mode after changing +your Gemfile. Run bundle install elsewhere and add the updated Gemfile.lock +to version control."* + +**Workaround:** Either run `bundle install` locally and commit your changes to +`Gemfile.lock`, or remove the `Gemfile.lock` file from your repository and add +an entry in the `.gitignore` file to avoid it from being checked in again. + +### Questions? + +This entire guide is open-source. Go ahead and [edit it][3] if you have a +fix or [ask for help][4] if you run into trouble and need some help. + +[3]: https://github.com/jekyll/jekyll/edit/master/docs/_docs/continuous-integration/travis-ci.md +[4]: https://jekyllrb.com/help/ diff --git a/docs/img/circleci-badge.svg b/docs/img/circleci-badge.svg new file mode 100644 index 00000000..38658380 --- /dev/null +++ b/docs/img/circleci-badge.svg @@ -0,0 +1,14 @@ + + + + + + + + diff --git a/docs/img/travis-ci-badge.png b/docs/img/travis-ci-badge.png new file mode 100644 index 0000000000000000000000000000000000000000..94f255ec9ef016e18e94f7fedb6bb04105ae4aa7 GIT binary patch literal 26749 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

ak<2AIA!{{F87&q>sx_$WcF+D1SEnsUiAvXH$1 z>WQVF!17Kx?b>k=ZTdgPktZdh7j-n!al_Z%9jXM6TZ~h)s=Iv}6o(5UIpruZNQZ>A`-f{vt&0!u}S_0XLy`mELyVB*}ZamShLYG?4?S$a6`l1Rcg z{OrKJv%aEQ{;1U(jHH@tK(Bs!PIdT_nh5pCm~F^CA#H=(D@r=C^Ow_5M3a(<;zL@> za{kq7!|8*CH^k5QxI60ytp*pEQsS_1GlTrrK$m^K)y|9RrEnkqj+-szV13pJMy$PI z_&7(XgDKV!?XTkqKA5JO$mf*EehRa<7QE+Av5GL;bXiokw5omnU-JyfiATX=b3{$6 z&-L2nn2FY!Kuyom6FK{_R!vH9Cneb`N8Pv)je2$v$!TGmS&}`pXl~;UCPA9UCUqtt zK4e3vnV44$D0F3p>OjOqO6B+-8UNg6t89ONZDhLLeM#C`_S4g6Pif50{!#eH!Rk6? zp$R(e*9p})l!xFpBg(r)DFh}{&Bp!dlU0Fk53}HN_?OCKB};R_?}dHArP_0$7j)*g-!Ie{wf!lM-J4OC#bYVdo*3zbyUV|6E4?kBr7p$j)n5Lf+RjeQDZLY6 zc^qV0Rb$?9$WxT%F6BMtdZ{GacO4!&)T(Lk)T!~`z?6}wsfkIIcZKalVVaJr^_lCN z>8ClNQV(ZOA82n>_vYO0tlC?mpdkv3}gg!n{W-D z2PNJzeg`+5&qWc61}?~el0zI!Cg82D({0e$BIR+Nx4h@7Wk*`-0%=9Q*S0NF`q#Bx z{JswuFWPBq)$&kXqs8{j-Cq1jqm=5MYA zTa0Z;G2W8ARrl$fKSimRkDjs6r=9%9y=JdS!LkvBXvhK$pedyf{f0l=Pi^2{X(>f#y@E(=1PGg!4A_tN^wC1(to{7HCsYs}nImdmAFcL3llMJz zw|X*c5U*8QX)C@=i6*RqJ}i{y^= z=g(w+{U?{qu!T=5rruW26)Uig^_xo?9h4cLeEM+TwAnB$HkRQ(+eTfiI(MT1zt3#( zirHB6(xAR;GvI@0t9{>~psA?%8BthM;E(ABZ!wzT|2{)WzDVpk2|6dwrwb@=0bfOx z`6VJSayqmy9$MS(!BD%Z{}f^!cHsf>=`_-GIX4LZSC@4nQZXhX?+t2$9a!w$$t&&r~EC7&t~ikwu&%H14S&d+U6qFSRU^ZCwWmrgv5lThaU zMDC5exyyUaJst^0t14zyn=<=`4L7nmj!QP1dvk7qo)h!)-&i;PBg|9YN$dS#Iewi~ zEtO^H9sAu?7mibL1gUy&5tArC4Ou?is$7bv8kDD-qfysOrQ>O^L;O8~pI^urSRCsV zkU=60H?vHC+{7)_EMEr`2z$-I8qOcqMoK+VF+^Xd2?^Xi_R)}=dz}C(5E>M{%ftQS zscyeR@4IITliU@-sSA6CcRAz^;nCl}C0D@nhzPG;ewFpo@*32H1e`RomWmR#V7)g} zxxQFD*ej9O{uo_%-!o-5YPvp`sdr{SP!NFPMe!~FtKzddRt>ILiqk27fERxHP^9NZ z)`HNqBad1B890+7Id3SMO6M>10;{1QSm{IMuGA;9GexD9h(HIuaqnHN9QkmpQ~1$N z2Ua;VEVy;zLAF%Cbe;aE-DWfVxtZUKpld0BLwXXcgs5AW2lT;Y{R=a1`A5}==8KuhMhvQg zzAEd#e;724i~Uc5P4(gsOaQ#GeD*~q5nlgRh}(Px#3+^>8^Wc`I>uZH)-}y*b#NAC zR8UC%;b+!@coN?vA*Y-R&M)c( zVAP@-+~O-_PF*L2j;Scq)x-TMXV`aKs`HQkdQ30@ukP$rUg+?u5qp#M%f*paod$f7 zxC^qF^3e@ZAy;}XI>BnX&k-?VKVuPgVO?OJUhtY)(c#|b{zOpUhidxznznSzV zU8?qdib<1t`+j|Gbk$?*J2z6iku6>GOV;@$A=<6B?O3bg6dFp{l+QsoGY-q=p(FC1 z(|GydKf5}*#5?4s`TDsWYEx|MFPGb1obMO#HjwXB);I+esn7g4z6=``eHNj8f^7{1Gh;W}r?zh@cw;*Oe? zKgsLtCzs(I;_pprgUu^p5x^Lj3yoWw4sU_KDJurOBGFfRGh*ac1a+THrwA z%-KfseZ}i-G4rMv7mfApU&~c{?*I}*Qr(N=wXw!R43kC6D1T3sSj?w+8i%h;mBIDS z7RRS$_f#2Rd8=$|+lN9DFU#*dY?5!rHz=B7l=LK4YTb`_OwjG&<$>p&z4FHtQXpf8_e$CoW0uM}(fSN^Bw z=CxZ-BYeO|wwKQmrLu64er>cB88``Tc&mA@^y*Y7OSZxBWG77VLYb!X+TM4>;Ien( zwqP7=GuNKWw9`#Xw#FuaVU_W{dd%{7t>eBYq({e4~*1EVl#u>ZjQ4GE-mMR!sEDE?y|R{kFpXX(yQYR>W$<(AFr1@$*lj|iJ>3ebgP;BdOw_uS9VnVXnH(P zW`bz@!Jh}zWV1xS`hXH$4_3qK)ZiLh&d>Ui@lS#hAa39~ZDNKXC-R-xZuVX2U(e;J zOi4~eh`&@XH|*Kk93~R1?kceHdAXCEvj?4aYSms1?E$Ws#a(Z@YY#YH*7p3M*6$FL zN|`un7+&XsEUo*4Ill-dh*^8`CF|7-$9&-xFz%KO1NxjEO{mv#M{qjFV0OdY4_0X& z%A?nX_GNq`_ZUvE-n3PEDTc(5?DXwkm6mKiT}#v`9OLe>qitifo~7zx4wo@p)g-%@ z_Q%U&u+j>Su9cOLIUOMeg3mt{NNtU^SrJ_38pO)Ds%f~`)%|p#l-SVGSo$X8-m=RR z72cBGP&^+%3U9730TOAjyZ7s0L(3pMOTciso9*kbJP_<5o!gKD&rMcGj%>J0^Kadr zROF|>fxp!sj?NedM2mWvtdAM4ztH7lIFB_ypr)P7;Wv6p{_#90v)Ze^-}TIPPG*Mqd7WzBzp2hE^TxPfel}q66{+v=+YS-}~UpM{8cf zrSDf^emQ2~;wXF5>W|Ba3fBTk;%-u5ppWL$;1_cx*dFfo$A}r@JnJ z#Q)^S2B0B|?CkdY?g!sn>s5c`A4gcdppzXP#x(k=IZrl%jZ z7?+Pem*OeQ{E7`jE*)MTAF-?v2dx~h4!FOiy7>Ufe>Jn~JQ=dS^*M;%Isyl z|8r!v6Gp_vYf52l_7i}jiwrDL&}Nk=-Q+-|24_5821>MSdY4bT>Xm;L*Vmerq#Q2kIGnH zBhcY0jjKxAewiCDNJxWg zQrv!`TkwZgTqcQLb?|SHPRkDI+Zf?ur1fzkhiBuo$#+m% z3Z?nMsnus1a98OW^fzloU!3VfuY^)mxyS8Vri;@IS7<^*3MO9f-2s%$RK5O}5$~`1 zPRs#WV5fHuwI{W5{CWGGn$LZOwFc9kT{yJJ@!62UW#I?0ng6sv7GJHWnZn%t8ffg^ z)}?y?d{6k=CVF-z8Z%%I@LJ1sD>7t#%vLSocRy*cewE4V2Mq`9JnQg6Z6n9g`gRA`ZM zVNICEI;p@g#w6VE>4mtq&Id$cF2DIKs>r`Ng#r~DdZ-VPuM0HMP4Gw>v0aV(fNizT zbg$uCAZ#7rsv9Q=oT;{7KEB|jC}yygkB$ozQ&$HnHBn*Z-I*8Ee-mrw0!V!Y%M@oGeTxkA(=-Xs ze|+Dqdd*4EjDdjJM4pn85_uSTnj*1S<=qxzzEd*Hv?DY3^cQml=St3d2H>OfJc2V` zL8Gw70_W9$?di4iRenF;P|T1vU*~$~P|{q-9E{dT$nTkb5-3At~VYkZ{qT69Gqw<=Y19`r_Uc_yOfmF`yox1`7iXo%Ya$<(tnyrhx zOlATv!^NxxD{2P=%$9pd_m=aY>4&>9 zj@$^(jxDiWZW;Ao#cBi3tkvfTCyOe*gY=(<7wA<52G2EH=HX~!>$3Fz#JUG<31&(; zKeN9-=WcU{qGrC32Xr{@$@);0_XM|6HK0ys z#yJAGhNb-;-HodKJRkm+wW92kfZy471zjm^(kF2D@SKSdRf{Wxye!pEo6k87)n4Lc zwG04EOE%sf-$aAmUT7E+Yy<_-ysP*~lElUAo`)N?LHhM-=GEL@%Xc`fZ%&-IeYpg? zJLf6qT|E98ap!5DnAP7dv|<=e5Sg74EloE3!Fun7{Zh~Y{+(kK5ckF}oUQUiWg&4L zW0l{jpZ6obv2o-syd|pt0g2Dr*ADBvtDMF*1u4V%6UkiLg3Nx!>Elj(>-oSEnmXYA zvDY!IEZ23e+Ux{*eOaG}47jXIdNn%>ryVQ%i*MJQ?s0&XRGxet9wJYMA2Zzzs*)yu ze++N2@LC?al@0Q3N%pM}WppA`983e-g7SoqXb7k*(lJ8O=4H2*HNN;+qRzQ`mj5xlZB zz$vQ#~u^UK~l__0rV(EH}53Y`@Fs;Wc__Qh^%^?T*U zsB8*-wP_L*$?CjPTPhj7`fmIcA8R=Nfn9#^#&Z7+1vvk}!4XuzA~abFXfEV7_nsAH zv-H|uFGv&+TSGE&#|D^%{r%_}9sL_)_~eE!V6f$(|C>wdi>u9BY}3Ri**Gm(T)%Fn zew~{X$qW15S?cDj*@EkVIxQ-{tM_Uk_LJIiT|nNO-$@N4f?)Jv!{J4!#LGpy7esLL zfrlco-wx!?U$>iK z-`5)#_w98K3K97A@uBD0xsV4Vh@GJ1BRt?~U9bpylt%1rjWJkoE~x$HNU-xqEz4vW zTKmRp3S_+Dd;JewvaI_>B&i#pS@SR{zgDSzu|OF2BCv-f_s=;qc4c zA~4%an@9Zt5#JM>zNt_&J*yJ2ahk=53=T>=PApLEgkh4q!Xm=xZ~=x1u0x%ThJD8h zO%VtoMAf!EUFI_YDzQQ)v);AYdJp?#c)^-}tPBtDY^E-_2^3QHR88|YerrKF_P?(# zf#0dqLM1qgN4@^GCmQe^E8tb=BT~12;7l&)Z&X>h@TunNMEc$M!(b)k_{1MnTG{fuQXeea57k-<@ZBc6Ng6-LA;<5YO}cXdYRGH3)HW z)eHOe?We;F-(p5OpF#hxq^k~Svg_iTlz@y-L0VF2>23i55u|H$C^2#j$temVARSTz zrBj+QN*a-rl#P^b>HZ$x@9*uNdr#iy-h0mP(A!Kdm$_4#mMl8uKW8~&aVqnZqJ-^E zNn8rYycsCuofCBy&wLSt+Eo9>;7+C3bu`16))~4{F(y(oI-|h5^zR4NGXW53nH_FhArHejb z{6RmIQ;&09*6Sj$hIwI;oEfcC9y)0O#I*chi0ew$Zbeq4WbYqVwfAsbblIOK%*M*X zHsZmq?(NY_O)~?aa&0hIz@Vxww+3SdxFu9)h1M4lt4XOA&@F(i9TFI2_TOc6lx-Fc zGgri!aXXTR|K?B%9ATjy0KwBRA42igoW?FUast^4gqKA-K{VV#sm~#wHm0qP`6*xz zymtt#SPP2N`*rdy@JEfL*xPBdVBXS2z&wam*6z0gDgmi<)7u+ZSYZh!-~g@v2K1h% z`iddfQ%v7Z4UHy@pEt}ykvK+YKNM@fSF>($h;AOq)A*94#(7#A21&10VmxkA?h1Oh z4dnmdh_m+~WBv~wd<>|QfmAJO^(Hgi+Y0|$>wYf`d(YLC*hu0Rqs|fL=hUaI%jQZJ z#CiS1#nCXInf5UzHda5|^e~UTz#r~d46~yiOl&{SKj2bVlOHPt7>E(c*h;9CBu8L^ zzot8lG5&1O2$c#G4U=0>bg}&AzUY5Y{K(~{PTImR$RW2Q-g@pYJ=6iB?p!HDmual% z(Mv@j!n!LKB75jyB9ZZv3L#_KsurnW&+_uw>9Bll=$4!T2 zs8kILgMp-mo%3h(*>WR}ZpVeYv}grf=ANeK?~Q>%Ls_kbl=x5UtYP_u$7hBJ^hQ^i z;QO}$<_DpnGTe@R1uDG%XbV%b%=@4CjivM2l^fKd9#>G`Hxl@!nlf2Rgs=Rl^Ilu& zj>j`~uyAJdw3LYPmU=6&iEA!?ITce1f&SHf^>0Qzy^wR2yQdKFS;?Pe1X+to0p~) zlSnp&s~SRVOQk%14Vjc`{i#C?o<=tG%zu48qcTv8Nmrxd8fOc8uDv16-nDn-^_?h4 zvlF$40O3qqfD$BsT1S<5*O0S>z=qT`DK4{4xs!o*sMj4s%i4MAqmhXD0)v*6zrUxd z-yF12poM#*cDcdA3es`|t2$qa0;=S^J)f}b(@X4QkfIwoDCHia*?pgDgxQjddS87% zzl%S;43UcOgJ(X@W~FC0Z&7rirf@MnE4j!$bzYum2fiQN>V@ry&+rgT*{#h;AtA)idCk5p@-YLT2 zT@98og(a!pdew~PX^IHA6u8s!I zx4l^fi&6w0@UZgj6D<+xmI%pnOsw0xl=rW)7GDk|*)B^v{c)AuA@aVi6dNm=wlt*+ zoqNX#F_mX2zz&75xF|a>^km*y>r|99Kr_vU;{p^12e}J}pp&%bA zLN+&nO#G2ll&v{#+5EtOcpgyeO0TRse}Ng#q)K$0C{a|W%xxQv{!Zh~nsvJ%{^N`{ zZ!g4IOy<3XHpcY3X88JmSfGjW{}=03$T{Ni_?c{Xdi$5a%2bW9&BK+WAVNbn{)E@6 zuYdyoD*J?zDgP-VL3p=L@r=Z%xZ5Y{K(XDa#FhN9~|E9c7JcCx9{7{3( zcn9FKKP7eO!2&NA^qIl@)xQ~DyARzPpSGk2che(QSyzUj5NIXrH?16-qoA4$vL$ZP zNWU+3jC8m*kv$*%B0CgEz7Tyd$8Y>AJ_{GKUh zjf9u_{Ow>cGQt@lxy^Dc4DOUrY(>V;ntxFfQMxgsdI~ z60?ac1*trL`z<}ezaxZ#w^M6G$j8Nho01=S z34&iirAt_Aw@ix+DTOc3`}t1m%rTDuS{Sfl!ginrK3-3zFaX%~ByytXrcK z{8`bVa)8GMCDi>JD3SI%obGlzv&NYo9@2}ef$#7BS$uJo>sHwo*r7VX6S_(c^G8Vb zCIONp3lE%1EXw|GH#DMOl$Rbp{o@u`y)gst?iZh0Tzl6L+$6O`8hlKI61h|6-a`TB z1NeX?2O|4Ic4QhSeG2X}t-{IXTY296-&}>UWKYP8^nQx*7t}S9%Z%GYzt0A4{4g~X z;^QY1_^1Y`)*VB#&FZ+*`pj4HA*_P+JJ4}{p94;yA` z1JA!i#=m$R$fj&zSRYb+FXDDz!2*-$u~CnGE9t~w6@TY_fvI?Zwj-yIUuDN!iZ~-4 z8=5{{BN6_z;IsIAXIG032_DoJ<+ZdByASbLI}iCkn4UNAKfuXpNaEVoH|B*#!|!vOk%zF*-b|OwDv>}*2IRi+~??eN(?vi0|*GLYC3MMxZydC&mVf;5W_E~MMuDS*MW zlK(Dbm+r~t6CC=y%4sHTrcH*BiYCwBzPcgsaH0eOgkXz>DR59G+nnPiceDJiuBg?( z3_ZbNUg<$9;bcnI3{(G`dY_($-8H|vM#KS8NP|{WWsOircnwe%-o!NH4eKVnAdVwZ zXNm7Cs+`61TK3wmp25oqsrnfLxFby?l-HbEyH8^_=z-&ha(@fM6Dt*LI?N^hxOvU{ zsTPc%*egMYFxf@$md)YabN!+&3(RQZi$kp_RHyORd$iGyQSnkqp8@z6^jvWTeO_Bl z(X3FoDz3!+1+KDqI*sdKk>evgGd>#3#*K)?hTb@fV;0dlk*jVmHX6tHk$_!(9qXgym z6~o!-I4Y9ELM!f-?81|ylRDbOrexgw2-O-ev>jS!5xZYs#Pz`x8P%m zd0~AURFi&Gh)cPz@AS^4-Lg(HX{J`lhh;3f$Kq_6&tzWEbY%5eo2|911lvDjUr4<* z-<;8ZV=hN$E;N2i;aVuCiZ@gDhK`h&EEaI@FL z`6+pmtUWvxEcJ=Ad9j{$h<^pHWX&cC+8M~VpIrV(fCBz_B*V;!xGY= zT86%jAmXLh4#!f|JQJ1caqyLA4|%}LEvKVlL6gPT{#ZE4zpL=TG2NQKi3$qTY%bKv zzO2Ooq2Ei4bb(?@3Nr*1zvN&czz7?5o!vdQhd?3KTU(&%h1CP|-{|m}!#m#!h!Wk+Q|jKDwFh8zKA@i_PZmuf-8qO2+OhnP|@1eVE3r zkLo`9z=8*@UpAi~IL>MDKcq{o907}=iL#?*h!L{fCNEkRX<%j)f4|*5FWL*-X1T^x z=*})OH_SH4I-_-rlF^;Dm^r=Yz%IfhP~w4If7J5t^sQLL80ggliM zq|0m&=TTL7x7Q>wYBmh?dyW5?tjEjv8#adf!_y7*g)7}PioM3Xj>n2k%u!NG{uP5@ z;q)R&#WW3Ip@_P!Uc>HB`=G?K7;)&F9|8D1;+$?xo$?&8&9y{4Mt*;Cz zvEAXCqrW!?7G%>0qwO7JW^4SKe#Oi-xcWavXch%2(Uy=miut-NU~ua1CECDW&Y2u{ zKWe>ez}=U}&E*MV*uA{&A&;k`Gyf(nIYDKAnq8E-`)~O^jY|tAHkNP2uSbd-=Zx!s zPzE)rr3wHXfe#MYLyOK^#QvHnm*j3=uG?oA$?7o4P5?*|+jq-BZ%7o3-k5c31QO4evGj?Wp25v2)AclVAcfwt1)eREJjIStFPL@G2Cy?u0*z6wP zG1l`_a2iRqTk~R+e1Yj{CTrQOPSCA4G#brjRMIQ0=6nC{?f3zfe*cp5mw^Fa;C@|O zUtO1;Nh-L_&Ij+0XtJv>7tSl;V->v;&9KL*wfmG;%9@WmXRK}+P~XXB?fgQPB-d@p zY+kOyqeKcjoc%>ZGVV4aWn3-5yjdh!mWaBnc%{bcByj_(!%P^JpF&5YF{@GC)?~BD ze)?W4-(G_iE7v>bar7T7mxIMV|1&9gr(PPQvW2J})|c5A<@W=J=2bcVkB zB}Y+6JYX5LNBo;qs|^aNKs(WhmqT6~yWFzJfUnBNjJz{Vo0|5goqgcVwGPL@ubmFZ z2Y{66)ZnlUos5sq&%vDYd(zw{TOO=L9RGr%tF4$hyI&jXxG9YUJWtcKcx+J;C-izM zp+0Z!=RS3=nE4boI<3+nK&S6_%O=oXg2X( zgUENu9T)z20?y^6*HaM@z!QhTGYB2Drfh$FEKORwWQH*3d<0d3uB1fBNZvoH6sH0E zVV8asMTZ8aD5W@kR#aJp@cSHLJN2iI0cs=B(lIniG&M^edoj7&Yr5p0Tn|_!SBKWM zGSm#+3hRGwH8>wGMRiQ=E!ctgef#9<_d?d0Yqy9!k?>9sbn|y9G5Gd+kxBkb)w)_`mAUk zT4(WFN6j#Jv*YNc2gUIqgJTPDU^DU`VBZc`e#fx)Z)$y~r%i)qH1SFI?e+#T-hxZQ zp(gAqc+PkphXK-5>SKzxZPl#7catIfSG-kYj2#Fq3diJKn>+5lnlB7QgXStO4^KzhjgE#zV_>em~x`K(e2|5BmaUc!Z?@z2rw zA>T&;1eQ^&()?H?`T(NNKe+A``v&fM+5V;l6wYbS`OHanpLWqXMP>$w$m~51Sq>^0M zp0wkE>yw#mo_X)@Kfg!e=-5v-?XSwS5vo@5*&u$_v-V~k7UK=jX!(G@@3ObC;MFqf z09qzu{{?F{51%&K@=sNL8Yr!l3x^ZP8b^UZohgTh{8jKZ4Sj*0PLe(>A7P=n5hXE z#~mIjuhlsf;oYs5&&=Fy0a>mD)+72Yw#H%@NCu)g=bg}i+*bGSnK6)2|GofiA-$Q_o|;bfyTC9mWlYxOmnbXcJ^ z(7xek!~3JTl$~35!aZ&^Bv?fjGd>a96`pRg*~6Hw`Sb#ouoYKR)*)e&3&(s@r^*d3 zrO(4V8NRuw$G^Dw+!dK4-$nfLbqfJtEasgKgcM8i@tqkFlTSFiTyeF5+2mPf>y;dd zP4<%H!MM=AK|^xTm~yKp>(iKFQSAyKBcR{7Z2iRk-oz`!V8G{=70 zJ(b&|EV1rfU6fVE!VU7aKQD#X6tLGCZ&r%}>=VcQPDVYUy~bHrJC*4qJ2Z%JKX4vK zq<@0`vKxSeOlN$C237~({}}ho!{=<7w4=X&HUCumnGM0FmI-iRl&YW4WF9Q+!_GJ# z^Cm#xWfiC>R{K0mj)ZiWs^S#>zSFB;KQsgg)<=vxdflk%Yn%EQ+C)ng`Q*zL*}K%K z<{80%KwkbcZ2^<{fVtGF;ufE!mBKZ!8qZVNs)y80>B?lljxoCFIKv~(6e1p+h^Ya9 zUgYE>o9eOpNXDYPLkoteK_<%J$D|Cuka@7dI1!NUZ}CLjWGzuv4*=UbGtTkClVco^ zX79IO^XWF#Wq>-p_GHAfMbgg^St-bmwj@6;D<$zVS;KqVATqJ?HA7saN-$wQF-=76 z8)>TD!BkwFmL90rG?gmsHnY9co^9fO6Pu^0U2c9zL$#0%_|2oS{)7|}H6~CXc2Tj+ z&s!Z9)XHprsaX>A*CuNJyrSn67Rcnlpju3_p6a-rs!uZ;6Y2-En(~R6bq6r7KW@s0 z{^7Rc*l$b=YBRB?fh~loM1>HwKfvY}delz_bSCXQ*tUELL#W5u0kH(KWx^-qT_h~l zzgG?=4~IPu(;)Ul<2cj}0lciKQftgI{j;Jp(fWD4&hGwjm`@#sUH!&idacOBV+7@G zUZpNBgp%*=-MGNmU`^i^zdF^_d0^u)aBfeie*a6*Hi#8XKf@wd#wi>pa&O)7Cr-p4 zmBr7ogV|0IluzyI(QyF&sdEM0+aS%vM~VB%Kg>Iy$u;r{BLbWEy*89CX8UYoXBy_;I2j za~#$tt@Rm|b6!IzzR!(ylu?#eZ0RjpCVY&1!+};O4t4#W=lwY0W?XyT{lNNp$zf9q zrXaa$yBc=1I@LyxCn%BqCNf}mKbdLFkj$W##<^y)?d8-)q~a1S7)Eo~8gvGKG;zIt zmn5{1`|+u!$(o81AhFX1D?}M-l71S@HH*FQHRXn~pO7=%ANzGj97-a63pInt ziIjo=D??L-ywl>@iINL*+4Xeea!U^W0mm2GpIG)@7R7-WQdX{Ms38ELnQT~zB*QJU z_gX7cPm<}ng-AqwB1bDhQ+u+0Y3UN7C8jiS?BGCEbBfV0*Hu#WN0mtSFfB>0NsdxR zI`62D#K2U_menscAZ>6M2%Rl$GamQ2MYJTIcrQ!8pm^H+MZX;T*gfZ_BA0#Sm(%50jDeyGjH#GG3FQr=Z7Dl?B&~d#keNehjp=MclX{lrM zC2e6t_uS^I@`5$huf--wZp*u)x#8y6)HnyI8xZ{!t(YNujb|a~hAsfpHd0Kza4Yv& z9TNb|KNz%V>cwM0Bqq;ySqUnwJM*G?N_Bdqv{r@;+2L zi$VFSva4SfcQzU~ToHrcfNbkPznlD``n5DCF47_Vy>TbiCv}=SM!_d4Z*i=|RwsCh z_Nj?fRSXZA@`|*?jJ|RLnn>|D$j$NjjwYUqoitMN{K_JY6O9ivHGCrl{Fu`Ui&

#3$RpaHpFsInJ z%)l~`DYR|$8JI+u!{ddZPw(u~i%N!YIQ!smB~;rol(_-BM{+vIww93 zE^uUK?a$>G1guNls@n-sLXe~+9Irn$!QL6T-K#bL{$0EF1Hoh=awm+d@`X8ow*NM; zEL)X1WMhHjBY95gQr42wSNqJ9!7knq zOXgSKee>c2NX6Dnafr#M*o{@Y^tiH5;<;#KBt<{2}x@VsTCLaAyp@yxcB?QGO%`EJNVy$O7Z30jFz*J z_zVI0!yf}7YUBu?o#sluV_(mqJrBT|a)x6RCce9~*(N3t`YvFt-PPQa9mm8HCei5Z z$dDI-hhGL-E>H8NZ!YyW1GehqNO~~qI?ZTX6T9^P~)Q0MZ_D z;nJoB*#-aLUB?xdD&bXMmbyy+@-SE-+-tf1rVYP3L&!l&w9c@5$3A(?!4Gpq^k|Ee;WDK)1adYf}x#Y)RZ=b4ZZ~5_n1pBn(gFFZT30 zI;1U6|Lt|LFkyF@0|uw{OqL_w-OOJ3CtlsOZvJ1D$m`ddx3InC0nPiREf;royKa%I zyDF+H2JN;w>)}>ZIDPwVL5dFG>8YVrdxvs~+;pLVb}V1`%Vooqti-0^@RGW$G()SF21 zyVbD>ruM)mA16hSu5CXbF;K`wv_CyzoJUyH2I-mQ=W6Xmrb1_L z8rHnKkjTPMeE~}MUqWa%{gdqi*9Nv96E%*llULp{eR$K#L>JAF>Pt|qhpa1t!FE68 zoko&;kFBe-;g{^mK`Xv9j{_W1H@VpZ!c;`}idSE#UDhB{M*ha;xKe1&#-~+^Tzp&n_iulDmUNtT)3$_tje Date: Tue, 24 Jan 2017 01:42:53 +0100 Subject: [PATCH 29/39] Review CI pages --- docs/_docs/continuous-integration.md | 20 ------------------ docs/_docs/continuous-integration/circleci.md | 6 +++--- docs/_docs/continuous-integration/index.md | 9 ++++++++ .../_docs/continuous-integration/travis-ci.md | 14 ++++++------ docs/img/circleci-badge.svg | 14 ------------ docs/img/travis-ci-badge.png | Bin 26749 -> 0 bytes 6 files changed, 19 insertions(+), 44 deletions(-) delete mode 100644 docs/_docs/continuous-integration.md create mode 100644 docs/_docs/continuous-integration/index.md delete mode 100644 docs/img/circleci-badge.svg delete mode 100644 docs/img/travis-ci-badge.png diff --git a/docs/_docs/continuous-integration.md b/docs/_docs/continuous-integration.md deleted file mode 100644 index 79477645..00000000 --- a/docs/_docs/continuous-integration.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Continuous Integration ---- - -Continuous Integration (CI) enables you to publish your Jekyll generated website with confidence by automating the quality assurance and deployment processes. You can quickly get started using CI with one of the providers below: - - diff --git a/docs/_docs/continuous-integration/circleci.md b/docs/_docs/continuous-integration/circleci.md index ccd2d933..fede484a 100644 --- a/docs/_docs/continuous-integration/circleci.md +++ b/docs/_docs/continuous-integration/circleci.md @@ -8,7 +8,7 @@ Building, testing, and deploying your Jekyll-generated website can quickly be do [1]: https://github.com/ [2]: https://bitbucket.org/ -## Follow Your Project on CircleCI +## 1. Follow Your Project on CircleCI To start building your project on CircleCI, all you need to do is 'follow' your project from CircleCI's website: @@ -19,7 +19,7 @@ To start building your project on CircleCI, all you need to do is 'follow' your [3]: https://circleci.com/docs/configuration/ -## Dependencies +## 2. Dependencies The easiest way to manage dependencies for a Jekyll project (with or without CircleCI) is via a [Gemfile][4]. You'd want to have Jekyll, any Jekyll plugins, [HTML Proofer](#html-proofer), and any other gems that you are using in the `Gemfile`. Don't forget to version `Gemfile.lock` as well. Here's an example `Gemfile`: @@ -36,7 +36,7 @@ gem 'html-proofer' CircleCI detects when `Gemfile` is present is will automatically run `bundle install` for you in the `dependencies` phase. -## Testing +## 3. Testing The most basic test that can be run is simply seeing if `jekyll build` actually works. This is a blocker, a dependency if you will, for other tests you might run on the generate site. So we'll run Jekyll, via Bundler, in the `dependencies` phase. diff --git a/docs/_docs/continuous-integration/index.md b/docs/_docs/continuous-integration/index.md new file mode 100644 index 00000000..14c5c749 --- /dev/null +++ b/docs/_docs/continuous-integration/index.md @@ -0,0 +1,9 @@ +--- +title: Continuous Integration +permalink: /docs/continuous-integration/ +--- + +Continuous Integration (CI) enables you to publish your Jekyll generated website with confidence by automating the quality assurance and deployment processes. You can quickly get started using CI with one of the providers below: + +* [Travis CI](travis-ci) +* [CircleCI](circleci) diff --git a/docs/_docs/continuous-integration/travis-ci.md b/docs/_docs/continuous-integration/travis-ci.md index caff2f64..e76e1a60 100644 --- a/docs/_docs/continuous-integration/travis-ci.md +++ b/docs/_docs/continuous-integration/travis-ci.md @@ -4,10 +4,10 @@ title: "Travis CI" You can easily test your website build against one or more versions of Ruby. The following guide will show you how to set up a free build environment on -[Travis][0], with [GitHub][1] integration for pull requests. +[Travis][travis], with [GitHub][github] integration for pull requests. -[0]: https://travis-ci.org/ -[1]: https://github.com/ +[travis]: https://travis-ci.org/ +[github]: https://github.com/ ## 1. Enabling Travis and GitHub @@ -26,7 +26,7 @@ The simplest test script simply runs `jekyll build` and ensures that Jekyll doesn't fail to build the site. It doesn't check the resulting site, but it does ensure things are built properly. -When testing Jekyll output, there is no better tool than [html-proofer][2]. +When testing Jekyll output, there is no better tool than [html-proofer][html-proofer]. This tool checks your resulting site to ensure all links and images exist. Utilize it either with the convenient `htmlproofer` command-line executable, or write a Ruby script which utilizes the gem. @@ -68,7 +68,7 @@ Options are given as a second argument to `.new`, and are encoded in a symbol-keyed Ruby Hash. For more information about the configuration options, check out `html-proofer`'s README file. -[2]: https://github.com/gjtorikian/html-proofer +[html-proofer]: https://github.com/gjtorikian/html-proofer ## 3. Configuring Your Travis Builds @@ -91,7 +91,7 @@ Your `.travis.yml` file should look like this: ```yaml language: ruby rvm: -- 2.2.5 +- 2.3.3 before_script: - chmod +x ./script/cibuild # or do this locally and commit @@ -124,7 +124,7 @@ access to Bundler, RubyGems, and a Ruby runtime. ```yaml rvm: -- 2.2.5 +- 2.3.3 ``` RVM is a popular Ruby Version Manager (like rbenv, chruby, etc). This diff --git a/docs/img/circleci-badge.svg b/docs/img/circleci-badge.svg deleted file mode 100644 index 38658380..00000000 --- a/docs/img/circleci-badge.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - diff --git a/docs/img/travis-ci-badge.png b/docs/img/travis-ci-badge.png deleted file mode 100644 index 94f255ec9ef016e18e94f7fedb6bb04105ae4aa7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26749 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

ak<2AIA!{{F87&q>sx_$WcF+D1SEnsUiAvXH$1 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

#3$RpaHpFsInJ z%)l~`DYR|$8JI+u!{ddZPw(u~i%N!YIQ!smB~;rol(_-BM{+vIww93 zE^uUK?a$>G1guNls@n-sLXe~+9Irn$!QL6T-K#bL{$0EF1Hoh=awm+d@`X8ow*NM; zEL)X1WMhHjBY95gQr42wSNqJ9!7knq zOXgSKee>c2NX6Dnafr#M*o{@Y^tiH5;<;#KBt<{2}x@VsTCLaAyp@yxcB?QGO%`EJNVy$O7Z30jFz*J z_zVI0!yf}7YUBu?o#sluV_(mqJrBT|a)x6RCce9~*(N3t`YvFt-PPQa9mm8HCei5Z z$dDI-hhGL-E>H8NZ!YyW1GehqNO~~qI?ZTX6T9^P~)Q0MZ_D z;nJoB*#-aLUB?xdD&bXMmbyy+@-SE-+-tf1rVYP3L&!l&w9c@5$3A(?!4Gpq^k|Ee;WDK)1adYf}x#Y)RZ=b4ZZ~5_n1pBn(gFFZT30 zI;1U6|Lt|LFkyF@0|uw{OqL_w-OOJ3CtlsOZvJ1D$m`ddx3InC0nPiREf;royKa%I zyDF+H2JN;w>)}>ZIDPwVL5dFG>8YVrdxvs~+;pLVb}V1`%Vooqti-0^@RGW$G()SF21 zyVbD>ruM)mA16hSu5CXbF;K`wv_CyzoJUyH2I-mQ=W6Xmrb1_L z8rHnKkjTPMeE~}MUqWa%{gdqi*9Nv96E%*llULp{eR$K#L>JAF>Pt|qhpa1t!FE68 zoko&;kFBe-;g{^mK`Xv9j{_W1H@VpZ!c;`}idSE#UDhB{M*ha;xKe1&#-~+^Tzp&n_iulDmUNtT)3$_tje Date: Tue, 24 Jan 2017 10:39:54 -0500 Subject: [PATCH 30/39] Update history to reflect merge of #5815 [ci skip] --- History.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/History.markdown b/History.markdown index 776fd40b..c0d869eb 100644 --- a/History.markdown +++ b/History.markdown @@ -92,6 +92,7 @@ * Docs: add `match_regex` and `replace_regex` filters (#5799) * Got that diaper money? (#5810) * Sort content by popularity using Google Analytics (#5812) + * Rework CI doc to include multiple providers. (#5815) ## 3.3.1 / 2016-11-14 From b0a7c4df0abdb85bb01d03febfc81e6457105724 Mon Sep 17 00:00:00 2001 From: jekyllbot Date: Tue, 24 Jan 2017 10:41:13 -0500 Subject: [PATCH 31/39] Update history to reflect merge of #5690 [ci skip] --- History.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/History.markdown b/History.markdown index c0d869eb..fed14a91 100644 --- a/History.markdown +++ b/History.markdown @@ -93,6 +93,7 @@ * Got that diaper money? (#5810) * Sort content by popularity using Google Analytics (#5812) * Rework CI doc to include multiple providers. (#5815) + * Improve theme docs (#5690) ## 3.3.1 / 2016-11-14 From 770ef586f53b5efa9b3594586c2ce04ec365301b Mon Sep 17 00:00:00 2001 From: jekyllbot Date: Tue, 24 Jan 2017 10:45:27 -0500 Subject: [PATCH 32/39] Update history to reflect merge of #5811 [ci skip] --- History.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/History.markdown b/History.markdown index fed14a91..60156e55 100644 --- a/History.markdown +++ b/History.markdown @@ -94,6 +94,7 @@ * Sort content by popularity using Google Analytics (#5812) * Rework CI doc to include multiple providers. (#5815) * Improve theme docs (#5690) + * Add mention of classifier-reborn for LSI (#5811) ## 3.3.1 / 2016-11-14 From 6b08c14ccccc2cf292bd141661bcd3294af056e2 Mon Sep 17 00:00:00 2001 From: jekyllbot Date: Tue, 24 Jan 2017 12:51:25 -0500 Subject: [PATCH 33/39] Update history to reflect merge of #5802 [ci skip] --- History.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/History.markdown b/History.markdown index 60156e55..3595e48c 100644 --- a/History.markdown +++ b/History.markdown @@ -95,6 +95,7 @@ * Rework CI doc to include multiple providers. (#5815) * Improve theme docs (#5690) * Add mention of classifier-reborn for LSI (#5811) + * Added note about --blank flag (#5802) ## 3.3.1 / 2016-11-14 From ecdc8a5bf2436b78eb0f753b38ad2d8aad1348b7 Mon Sep 17 00:00:00 2001 From: Alexey Rogachev Date: Wed, 25 Jan 2017 15:22:26 +0600 Subject: [PATCH 34/39] Fixed inaccuracy in "Built-in permalink styles" docs [skip ci] Must be either: > Rather than typing `permalink: /:categories/:year/:month/:day/:title/`, you can just type `permalink: pretty`. or: > Rather than typing `permalink: /:categories/:year/:month/:day/:title.html`, you can just type `permalink: date`. I guess the former was meant to write because the latter was already mentioned in "Where to configure permalinks" section. --- docs/_docs/permalinks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_docs/permalinks.md b/docs/_docs/permalinks.md index 1bd88021..f0e16770 100644 --- a/docs/_docs/permalinks.md +++ b/docs/_docs/permalinks.md @@ -230,7 +230,7 @@ Although you can specify a custom permalink pattern using [template variables](#
-Rather than typing `permalink: /:categories/:year/:month/:day/:title/`, you can just type `permalink: date`. +Rather than typing `permalink: /:categories/:year/:month/:day/:title/`, you can just type `permalink: pretty`.
Specifying permalinks through the YAML Front Matter
From e56d8092982982622653007d31a742542b32c85a Mon Sep 17 00:00:00 2001 From: jekyllbot Date: Wed, 25 Jan 2017 07:29:43 -0500 Subject: [PATCH 35/39] Update history to reflect merge of #5819 [ci skip] --- History.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/History.markdown b/History.markdown index 3595e48c..6d840343 100644 --- a/History.markdown +++ b/History.markdown @@ -96,6 +96,7 @@ * Improve theme docs (#5690) * Add mention of classifier-reborn for LSI (#5811) * Added note about --blank flag (#5802) + * Fixed inaccuracy in "Built-in permalink styles" docs (#5819) ## 3.3.1 / 2016-11-14 From ef8779dbfd3c45d88dcd0e683f5b89ee36da62b7 Mon Sep 17 00:00:00 2001 From: Frank Taillandier Date: Wed, 25 Jan 2017 14:06:27 +0100 Subject: [PATCH 36/39] run codeclimate after success --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 30eb1fc5..66c85eaa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -45,3 +45,6 @@ addons: DA4vsRURfABU0fIhwYkQuZqEcA3d8TL36BZcGEshG6MQ2AmnYsmFiTcxqV5bmlElHEqQuT\ 5SUFXLafgZPBnL0qDwujQcHukID41sE=\ " +# regular test configuration +after_success: + - bundle exec codeclimate-test-reporter From 4b19e93f0905e45876d0add85ec65e42d354c1ac Mon Sep 17 00:00:00 2001 From: Joel Meyer-Hamme Date: Thu, 26 Jan 2017 16:02:08 +0000 Subject: [PATCH 37/39] use logger.info Imo running `--lsi` should use `Jekyll.logger.info`, so it can be made `--quiet`. --- lib/jekyll/related_posts.rb | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/lib/jekyll/related_posts.rb b/lib/jekyll/related_posts.rb index cde1742c..3526a73b 100644 --- a/lib/jekyll/related_posts.rb +++ b/lib/jekyll/related_posts.rb @@ -26,15 +26,15 @@ module Jekyll def build_index self.class.lsi ||= begin lsi = ClassifierReborn::LSI.new(:auto_rebuild => false) - display("Populating LSI...") + Jekyll.logger.info("Populating LSI...") site.posts.docs.each do |x| lsi.add_item(x) end - display("Rebuilding index...") + Jekyll.logger.info("Rebuilding index...") lsi.build_index - display("") + Jekyll.logger.info("") lsi end end @@ -46,11 +46,5 @@ module Jekyll def most_recent_posts @most_recent_posts ||= (site.posts.docs.reverse - [post]).first(10) end - - def display(output) - $stdout.print("\n") - $stdout.print(Jekyll.logger.formatted_topic(output)) - $stdout.flush - end end end From 4a781f23f3c0e3c02bbf6bdfffd726f6d01da453 Mon Sep 17 00:00:00 2001 From: jekyllbot Date: Thu, 26 Jan 2017 15:52:26 -0500 Subject: [PATCH 38/39] Update history to reflect merge of #5822 [ci skip] --- History.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/History.markdown b/History.markdown index 6d840343..30372e1c 100644 --- a/History.markdown +++ b/History.markdown @@ -19,6 +19,7 @@ * include: fix 'no implicit conversion of nil to String' (#5750) * Don't include the theme's includes_path if it is nil. (#5780) * test double slash when input = '/' (#5542) + * use logger.info for related posts (#5822) ### Site Enhancements From f0dcc9415b2a1a1a61143a6935ba616968e39475 Mon Sep 17 00:00:00 2001 From: jekyllbot Date: Thu, 26 Jan 2017 15:53:46 -0500 Subject: [PATCH 39/39] Update history to reflect merge of #5798 [ci skip] --- History.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/History.markdown b/History.markdown index 30372e1c..1348af78 100644 --- a/History.markdown +++ b/History.markdown @@ -64,6 +64,7 @@ * Bump htmlproofer (#5781) * Bump rubies we test against (#5784) * Bump rdoc to v5.0 (#5797) + * Bump codeclimate-test-reporter to v1.0.5 (#5798) ### Documentation