Merge branch 'master' into themes
* master: (58 commits) Update history to reflect merge of #4792 [ci skip] Update history to reflect merge of #4793 [ci skip] Update history to reflect merge of #4804 [ci skip] Update history to reflect merge of #4754 [ci skip] Update history to reflect merge of #4813 [ci skip] Added missing single quote on rsync client side command Add v3.0.4 and v3.1.3 to the history. Fixed typo Add jekyll-autoprefixer plugin Explicitly require Filters rather than implicitly. Update history to reflect merge of #4786 [ci skip] Update history to reflect merge of #4789 [ci skip] updates example domain in config template Globalize Jekyll's Filters. Update JRuby to 9.0.5.0; Drop the double digit test. Update Rack-Jekyll Heroku deployment blog post url convertible: use Document::YAML_FRONT_MATTER_REGEXP to parse transformable files Update history to reflect merge of #4734 [ci skip] Update history to reflect merge of #4478 [ci skip] Fix rubocop warning. ...
This commit is contained in:
commit
42cc2445a5
|
@ -6,8 +6,8 @@ Hi there! Interested in contributing to Jekyll? We'd love your help. Jekyll is a
|
||||||
|
|
||||||
* If you have a question about using Jekyll, start a discussion on [Jekyll Talk](https://talk.jekyllrb.com).
|
* If you have a question about using Jekyll, start a discussion on [Jekyll Talk](https://talk.jekyllrb.com).
|
||||||
* If you think you've found a bug within a Jekyll plugin, open an issue in that plugin's repository.
|
* If you think you've found a bug within a Jekyll plugin, open an issue in that plugin's repository.
|
||||||
* If you think you've found a bug within Jekyll itself, [open an issue](https://github.com/jekyll/jekyll/issues/new)
|
* If you think you've found a bug within Jekyll itself, [open an issue](https://github.com/jekyll/jekyll/issues/new).
|
||||||
* More resources are listed on our [Help page](https://jekyllrb.com/help/)
|
* More resources are listed on our [Help page](https://jekyllrb.com/help/).
|
||||||
|
|
||||||
## Ways to contribute
|
## Ways to contribute
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ Whether you're a developer, a designer, or just a Jekyll devotee, there are lots
|
||||||
|
|
||||||
* The more information, the better. Make judicious use of the pull request body. Describe what changes were made, why you made them, and what impact they will have for users.
|
* The more information, the better. Make judicious use of the pull request body. Describe what changes were made, why you made them, and what impact they will have for users.
|
||||||
|
|
||||||
* Pull request are easy and fun. If this is your first pull request, it may help to [understand GitHub Flow](https://guides.github.com/introduction/flow/)
|
* Pull request are easy and fun. If this is your first pull request, it may help to [understand GitHub Flow](https://guides.github.com/introduction/flow/).
|
||||||
|
|
||||||
* If you're submitting a code contribution, be sure to read the [code contributions](#code-contributions) section below.
|
* If you're submitting a code contribution, be sure to read the [code contributions](#code-contributions) section below.
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ Whether you're a developer, a designer, or just a Jekyll devotee, there are lots
|
||||||
|
|
||||||
Many small changes can be made entirely through the github.com web interface.
|
Many small changes can be made entirely through the github.com web interface.
|
||||||
|
|
||||||
1. Navigate to the file within [`jekyll/jekyll`](https://github.com/jekyll/jekyll) that you'd like to edit
|
1. Navigate to the file within [`jekyll/jekyll`](https://github.com/jekyll/jekyll) that you'd like to edit.
|
||||||
2. Click the pencil icon in the top right corner to edit the file
|
2. Click the pencil icon in the top right corner to edit the file
|
||||||
3. Make your proposed changes
|
3. Make your proposed changes
|
||||||
4. Click "Propose file change"
|
4. Click "Propose file change"
|
||||||
|
@ -48,13 +48,13 @@ That's it! You'll be automatically subscribed to receive updates as others revie
|
||||||
|
|
||||||
### Submitting a pull request via Git command line
|
### Submitting a pull request via Git command line
|
||||||
|
|
||||||
1. Fork the project by clicking "Fork" in the top right corner of [`jekyll/jekyll`](https://github.com/jekyll/jekyll)
|
1. Fork the project by clicking "Fork" in the top right corner of [`jekyll/jekyll`](https://github.com/jekyll/jekyll).
|
||||||
2. Clone the repository lcoally `git clone https://github.com/<you-username>/jekyll`
|
2. Clone the repository locally `git clone https://github.com/<you-username>/jekyll`.
|
||||||
3. Create a new, descriptively named branch to contain your change ( `git checkout -b my-awesome-feature` ).
|
3. Create a new, descriptively named branch to contain your change ( `git checkout -b my-awesome-feature` ).
|
||||||
4. Hack away, add tests. Not necessarily in that order.
|
4. Hack away, add tests. Not necessarily in that order.
|
||||||
5. Make sure everything still passes by running `script/cibuild` (see [the tests section](#running-tests-locally) below)
|
5. Make sure everything still passes by running `script/cibuild` (see [the tests section](#running-tests-locally) below)
|
||||||
6. Push the branch up ( `git push origin my-awesome-feature` ).
|
6. Push the branch up ( `git push origin my-awesome-feature` ).
|
||||||
7. Create a pull request by visiting https://github.com/<your-username>/jekyll/ and following the instructions at the top of the screen.
|
7. Create a pull request by visiting `https://github.com/<your-username>/jekyll` and following the instructions at the top of the screen.
|
||||||
|
|
||||||
## Proposing updates to the documentation
|
## Proposing updates to the documentation
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ If your contribution changes any Jekyll behavior, make sure to update the docume
|
||||||
|
|
||||||
#### Tests
|
#### Tests
|
||||||
|
|
||||||
* If you're creating a small fix or patch to an existing feature, a simple test if more than enough. You can usually copy/paste from an existing example in the `tests` folder, but if you need to can find out about our tests suites [Shoulda](https://github.com/thoughtbot/shoulda/tree/master) and [RSpec-Mocks](https://github.com/rspec/rspec-mocks).
|
* If you're creating a small fix or patch to an existing feature, a simple test is more than enough. You can usually copy/paste from an existing example in the `tests` folder, but if you need you can find out about our tests suites [Shoulda](https://github.com/thoughtbot/shoulda/tree/master) and [RSpec-Mocks](https://github.com/rspec/rspec-mocks).
|
||||||
|
|
||||||
* If it's a brand new feature, create a new [Cucumber](https://github.com/cucumber/cucumber/) feature, reusing existing steps where appropriate.
|
* If it's a brand new feature, create a new [Cucumber](https://github.com/cucumber/cucumber/) feature, reusing existing steps where appropriate.
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ rvm:
|
||||||
- &ruby1 2.3.0
|
- &ruby1 2.3.0
|
||||||
- &ruby2 2.2.4
|
- &ruby2 2.2.4
|
||||||
- &ruby3 2.1.8
|
- &ruby3 2.1.8
|
||||||
- &jruby jruby-9.0.4.0
|
- &jruby jruby-9.0.5.0
|
||||||
- &rhead ruby-head
|
- &rhead ruby-head
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
|
|
2
Gemfile
2
Gemfile
|
@ -1,7 +1,7 @@
|
||||||
source "https://rubygems.org"
|
source "https://rubygems.org"
|
||||||
gemspec :name => "jekyll"
|
gemspec :name => "jekyll"
|
||||||
|
|
||||||
gem "rake", "~> 10.1"
|
gem "rake", "~> 11.0"
|
||||||
group :development do
|
group :development do
|
||||||
gem "launchy", "~> 2.3"
|
gem "launchy", "~> 2.3"
|
||||||
gem "rubocop", :branch => :master, :github => "bbatsov/rubocop"
|
gem "rubocop", :branch => :master, :github => "bbatsov/rubocop"
|
||||||
|
|
|
@ -18,6 +18,9 @@
|
||||||
* Adds `link` Liquid tag to make generation of URL's easier (#4624)
|
* Adds `link` Liquid tag to make generation of URL's easier (#4624)
|
||||||
* Allow static files to be symlinked in unsafe mode or non-prod environments (#4640)
|
* Allow static files to be symlinked in unsafe mode or non-prod environments (#4640)
|
||||||
* Add `:after_init` hook & add `Site#config=` to make resetting config easy (#4703)
|
* Add `:after_init` hook & add `Site#config=` to make resetting config easy (#4703)
|
||||||
|
* DocumentDrop: add `#<=>` which sorts by date (falling back to path) (#4741)
|
||||||
|
* Add a where_exp filter for filtering by expression (#4478)
|
||||||
|
* Globalize Jekyll's Filters. (#4792)
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
|
@ -29,6 +32,9 @@
|
||||||
* Ensures related_posts are only set for a post (#4620)
|
* Ensures related_posts are only set for a post (#4620)
|
||||||
* EntryFilter#special?: ignore filenames which begin with '~' (#4491)
|
* EntryFilter#special?: ignore filenames which begin with '~' (#4491)
|
||||||
* Cleaner: `keep_files` should only apply to the beginning of paths, not substrings with index > 0 (#3849)
|
* Cleaner: `keep_files` should only apply to the beginning of paths, not substrings with index > 0 (#3849)
|
||||||
|
* Use SSLEnable instead of EnableSSL and make URL HTTPS. (#4693)
|
||||||
|
* convertible: use Document::YAML_FRONT_MATTER_REGEXP to parse transformable files (#4786)
|
||||||
|
* Example in the site template should be IANA-approved example.com (#4793)
|
||||||
|
|
||||||
### Development Fixes
|
### Development Fixes
|
||||||
|
|
||||||
|
@ -37,6 +43,10 @@
|
||||||
* Unify method for copying special files from repo to site (#4601)
|
* Unify method for copying special files from repo to site (#4601)
|
||||||
* Refresh the contributing file (#4596)
|
* Refresh the contributing file (#4596)
|
||||||
* change smartify doc from copy/paste of mardownify doc (#4653)
|
* change smartify doc from copy/paste of mardownify doc (#4653)
|
||||||
|
* Update Rake & disable warnings when running tests (#4720)
|
||||||
|
* Fix many warnings (#4537)
|
||||||
|
* Don't blindly assume the last system when determining "open" cmd (#4717)
|
||||||
|
* Fix "locally" typo in contributing documentation (#4756)
|
||||||
|
|
||||||
### Site Enhancements
|
### Site Enhancements
|
||||||
|
|
||||||
|
@ -58,6 +68,23 @@
|
||||||
* Add jekyll-paspagon plugin (#4700)
|
* Add jekyll-paspagon plugin (#4700)
|
||||||
* Bold-italicize note in assets documentation about needing yaml front matter (#4706)
|
* Bold-italicize note in assets documentation about needing yaml front matter (#4706)
|
||||||
* Highlight the `script/` calls in the Contributing documentation (#4712)
|
* Highlight the `script/` calls in the Contributing documentation (#4712)
|
||||||
|
* Add Hawkins to the list of third-party plugins (#4755)
|
||||||
|
* Fix a typo in pagination doc (#4763)
|
||||||
|
* Switch second GitHub Pages link to HTTPS (#4760)
|
||||||
|
* Explain data file format requirements more clearly in documentation (#4781)
|
||||||
|
* Add jekyll-i18n_tags to list of third-party plugins (#4775)
|
||||||
|
* Remove Leonard Lamprecht's website from Sites page (#4771)
|
||||||
|
* Updates documentation for collections to include `date` property (#4769)
|
||||||
|
* Added an explicit rerun note to configuration.md, defaults section (#4734)
|
||||||
|
* Update Rack-Jekyll Heroku deployment blog post url (#4789)
|
||||||
|
* Added missing single quote on rsync client side command (#4813)
|
||||||
|
* Organize Form Platforms-as-a-Service into unified list & add FormSpree.io (#4754)
|
||||||
|
* Fixed typo on Configuration page (#4804)
|
||||||
|
|
||||||
|
## 3.1.3 / 2016-04-18
|
||||||
|
|
||||||
|
* Fix defaults for Documents to lookup defaults based on `relative_path` instead of `url` (#4807)
|
||||||
|
* Use SSLEnable instead of EnableSSL and make URL HTTPS (WEBrick) (#4693)
|
||||||
|
|
||||||
## 3.1.2 / 2016-02-19
|
## 3.1.2 / 2016-02-19
|
||||||
|
|
||||||
|
@ -206,6 +233,11 @@
|
||||||
* Add Contentful Extension to list of third-party plugins (#4390)
|
* Add Contentful Extension to list of third-party plugins (#4390)
|
||||||
* Correct Minor spelling error (#4394)
|
* Correct Minor spelling error (#4394)
|
||||||
|
|
||||||
|
## 3.0.4 / 2016-04-18
|
||||||
|
|
||||||
|
* Fix defaults for Documents to lookup defaults based on `relative_path` instead of `url` (#4806)
|
||||||
|
* Configuration: allow users to specify a `collections.posts.permalink` directly without `permalink` clobbering it (#4753)
|
||||||
|
|
||||||
## 3.0.3 / 2016-02-08
|
## 3.0.3 / 2016-02-08
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
|
@ -45,7 +45,6 @@ module Jekyll
|
||||||
autoload :Errors, 'jekyll/errors'
|
autoload :Errors, 'jekyll/errors'
|
||||||
autoload :Excerpt, 'jekyll/excerpt'
|
autoload :Excerpt, 'jekyll/excerpt'
|
||||||
autoload :External, 'jekyll/external'
|
autoload :External, 'jekyll/external'
|
||||||
autoload :Filters, 'jekyll/filters'
|
|
||||||
autoload :FrontmatterDefaults, 'jekyll/frontmatter_defaults'
|
autoload :FrontmatterDefaults, 'jekyll/frontmatter_defaults'
|
||||||
autoload :Hooks, 'jekyll/hooks'
|
autoload :Hooks, 'jekyll/hooks'
|
||||||
autoload :Layout, 'jekyll/layout'
|
autoload :Layout, 'jekyll/layout'
|
||||||
|
@ -78,6 +77,7 @@ module Jekyll
|
||||||
require 'jekyll/generator'
|
require 'jekyll/generator'
|
||||||
require 'jekyll/command'
|
require 'jekyll/command'
|
||||||
require 'jekyll/liquid_extensions'
|
require 'jekyll/liquid_extensions'
|
||||||
|
require "jekyll/filters"
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
# Public: Tells you which Jekyll environment you are building in so you can skip tasks
|
# Public: Tells you which Jekyll environment you are building in so you can skip tasks
|
||||||
|
|
|
@ -116,26 +116,24 @@ module Jekyll
|
||||||
|
|
||||||
private
|
private
|
||||||
def server_address(server, opts)
|
def server_address(server, opts)
|
||||||
address = server.config[:BindAddress]
|
"%{prefix}://%{address}:%{port}%{baseurl}" % {
|
||||||
baseurl = "#{opts["baseurl"]}/" if opts["baseurl"]
|
:prefix => server.config[:SSLEnable] ? "https" : "http",
|
||||||
port = server.config[:Port]
|
:baseurl => opts["baseurl"] ? "#{opts["baseurl"]}/" : "",
|
||||||
|
:address => server.config[:BindAddress],
|
||||||
"http://#{address}:#{port}#{baseurl}"
|
:port => server.config[:Port]
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
||||||
private
|
private
|
||||||
def launch_browser(server, opts)
|
def launch_browser(server, opts)
|
||||||
command =
|
address = server_address(server, opts)
|
||||||
if Utils::Platforms.windows?
|
return system "start", address if Utils::Platforms.windows?
|
||||||
"start"
|
return system "xdg-open", address if Utils::Platforms.linux?
|
||||||
elsif Utils::Platforms.osx?
|
return system "open", address if Utils::Platforms.osx?
|
||||||
"open"
|
Jekyll.logger.error "Refusing to launch browser; " \
|
||||||
else
|
"Platform launcher unknown."
|
||||||
"xdg-open"
|
|
||||||
end
|
|
||||||
system command, server_address(server, opts)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Keep in our area with a thread or detach the server as requested
|
# Keep in our area with a thread or detach the server as requested
|
||||||
|
@ -185,7 +183,7 @@ module Jekyll
|
||||||
source_certificate = Jekyll.sanitized_path(opts[:JekyllOptions]["source"], opts[:JekyllOptions]["ssl_cert"])
|
source_certificate = Jekyll.sanitized_path(opts[:JekyllOptions]["source"], opts[:JekyllOptions]["ssl_cert"])
|
||||||
opts[:SSLCertificate] = OpenSSL::X509::Certificate.new(File.read(source_certificate))
|
opts[:SSLCertificate] = OpenSSL::X509::Certificate.new(File.read(source_certificate))
|
||||||
opts[:SSLPrivateKey ] = OpenSSL::PKey::RSA.new(File.read(source_key))
|
opts[:SSLPrivateKey ] = OpenSSL::PKey::RSA.new(File.read(source_key))
|
||||||
opts[:EnableSSL] = true
|
opts[:SSLEnable] = true
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
@ -149,7 +149,7 @@ module Jekyll
|
||||||
Jekyll.logger.info "Configuration file:", file
|
Jekyll.logger.info "Configuration file:", file
|
||||||
next_config
|
next_config
|
||||||
rescue SystemCallError
|
rescue SystemCallError
|
||||||
if @default_config_file
|
if @default_config_file ||= nil
|
||||||
Jekyll.logger.warn "Configuration file:", "none"
|
Jekyll.logger.warn "Configuration file:", "none"
|
||||||
{}
|
{}
|
||||||
else
|
else
|
||||||
|
|
|
@ -8,7 +8,9 @@ module Jekyll
|
||||||
#
|
#
|
||||||
# Returns the String prefix.
|
# Returns the String prefix.
|
||||||
def self.highlighter_prefix(highlighter_prefix = nil)
|
def self.highlighter_prefix(highlighter_prefix = nil)
|
||||||
@highlighter_prefix = highlighter_prefix if highlighter_prefix
|
if !defined?(@highlighter_prefix) || !highlighter_prefix.nil?
|
||||||
|
@highlighter_prefix = highlighter_prefix
|
||||||
|
end
|
||||||
@highlighter_prefix
|
@highlighter_prefix
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -20,7 +22,9 @@ module Jekyll
|
||||||
#
|
#
|
||||||
# Returns the String suffix.
|
# Returns the String suffix.
|
||||||
def self.highlighter_suffix(highlighter_suffix = nil)
|
def self.highlighter_suffix(highlighter_suffix = nil)
|
||||||
@highlighter_suffix = highlighter_suffix if highlighter_suffix
|
if !defined?(@highlighter_suffix) || !highlighter_suffix.nil?
|
||||||
|
@highlighter_suffix = highlighter_suffix
|
||||||
|
end
|
||||||
@highlighter_suffix
|
@highlighter_suffix
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ module Jekyll
|
||||||
safe true
|
safe true
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
return if @setup
|
return if @setup ||= false
|
||||||
unless (@parser = get_processor)
|
unless (@parser = get_processor)
|
||||||
Jekyll.logger.error "Invalid Markdown processor given:", @config["markdown"]
|
Jekyll.logger.error "Invalid Markdown processor given:", @config["markdown"]
|
||||||
Jekyll.logger.info "", "Custom processors are not loaded in safe mode" if @config["safe"]
|
Jekyll.logger.info "", "Custom processors are not loaded in safe mode" if @config["safe"]
|
||||||
|
|
|
@ -18,6 +18,7 @@ module Jekyll
|
||||||
Jekyll::External.require_with_graceful_fail "kramdown"
|
Jekyll::External.require_with_graceful_fail "kramdown"
|
||||||
@main_fallback_highlighter = config["highlighter"] || "rouge"
|
@main_fallback_highlighter = config["highlighter"] || "rouge"
|
||||||
@config = config["kramdown"] || {}
|
@config = config["kramdown"] || {}
|
||||||
|
@highlighter = nil
|
||||||
setup
|
setup
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ module Jekyll
|
||||||
begin
|
begin
|
||||||
self.content = File.read(site.in_source_dir(base, name),
|
self.content = File.read(site.in_source_dir(base, name),
|
||||||
Utils.merged_file_read_opts(site, opts))
|
Utils.merged_file_read_opts(site, opts))
|
||||||
if content =~ /\A(---\s*\n.*?\n?)^((---|\.\.\.)\s*$\n?)/m
|
if content =~ Document::YAML_FRONT_MATTER_REGEXP
|
||||||
self.content = $POSTMATCH
|
self.content = $POSTMATCH
|
||||||
self.data = SafeYAML.load(Regexp.last_match(1))
|
self.data = SafeYAML.load(Regexp.last_match(1))
|
||||||
end
|
end
|
||||||
|
|
|
@ -20,6 +20,13 @@ module Jekyll
|
||||||
fallback_data['excerpt'].to_s
|
fallback_data['excerpt'].to_s
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def <=>(other)
|
||||||
|
return nil unless other.is_a? DocumentDrop
|
||||||
|
cmp = self['date'] <=> other['date']
|
||||||
|
cmp = self['path'] <=> other['path'] if cmp.nil? || cmp == 0
|
||||||
|
cmp
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
def_delegator :@obj, :data, :fallback_data
|
def_delegator :@obj, :data, :fallback_data
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
require 'uri'
|
require 'uri'
|
||||||
require 'json'
|
require 'json'
|
||||||
require 'date'
|
require 'date'
|
||||||
|
require 'liquid'
|
||||||
|
|
||||||
module Jekyll
|
module Jekyll
|
||||||
module Filters
|
module Filters
|
||||||
|
@ -225,6 +226,26 @@ module Jekyll
|
||||||
input.select { |object| Array(item_property(object, property)).map(&:to_s).include?(value.to_s) }
|
input.select { |object| Array(item_property(object, property)).map(&:to_s).include?(value.to_s) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Filters an array of objects against an expression
|
||||||
|
#
|
||||||
|
# input - the object array
|
||||||
|
# variable - the variable to assign each item to in the expression
|
||||||
|
# expression - a Liquid comparison expression passed in as a string
|
||||||
|
#
|
||||||
|
# Returns the filtered array of objects
|
||||||
|
def where_exp(input, variable, expression)
|
||||||
|
return input unless input.is_a?(Enumerable)
|
||||||
|
input = input.values if input.is_a?(Hash) # FIXME
|
||||||
|
|
||||||
|
condition = parse_condition(expression)
|
||||||
|
@context.stack do
|
||||||
|
input.select do |object|
|
||||||
|
@context[variable] = object
|
||||||
|
condition.evaluate(@context)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Sort an array of objects
|
# Sort an array of objects
|
||||||
#
|
#
|
||||||
# input - the object array
|
# input - the object array
|
||||||
|
@ -363,5 +384,25 @@ module Jekyll
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Parse a string to a Liquid Condition
|
||||||
|
def parse_condition(exp)
|
||||||
|
parser = Liquid::Parser.new(exp)
|
||||||
|
left_expr = parser.expression
|
||||||
|
operator = parser.consume?(:comparison)
|
||||||
|
condition =
|
||||||
|
if operator
|
||||||
|
Liquid::Condition.new(left_expr, operator, parser.expression)
|
||||||
|
else
|
||||||
|
Liquid::Condition.new(left_expr)
|
||||||
|
end
|
||||||
|
parser.consume(:end_of_string)
|
||||||
|
|
||||||
|
condition
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Liquid::Template.register_filter(
|
||||||
|
Jekyll::Filters
|
||||||
|
)
|
||||||
|
|
|
@ -94,8 +94,8 @@ module Jekyll
|
||||||
return true if !scope.key?('path') || scope['path'].empty?
|
return true if !scope.key?('path') || scope['path'].empty?
|
||||||
|
|
||||||
scope_path = Pathname.new(scope['path'])
|
scope_path = Pathname.new(scope['path'])
|
||||||
Pathname.new(sanitize_path(path)).ascend do |path|
|
Pathname.new(sanitize_path(path)).ascend do |ascended_path|
|
||||||
if path.to_s == scope_path.to_s
|
if ascended_path.to_s == scope_path.to_s
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -60,7 +60,7 @@ module Jekyll
|
||||||
#
|
#
|
||||||
# Returns the safety Boolean.
|
# Returns the safety Boolean.
|
||||||
def self.safe(safe = nil)
|
def self.safe(safe = nil)
|
||||||
if safe
|
if !defined?(@safe) || !safe.nil?
|
||||||
@safe = safe
|
@safe = safe
|
||||||
end
|
end
|
||||||
@safe || false
|
@safe || false
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
module Jekyll
|
module Jekyll
|
||||||
class Regenerator
|
class Regenerator
|
||||||
attr_reader :site, :metadata, :cache
|
attr_reader :site, :metadata, :cache
|
||||||
|
attr_accessor :disabled
|
||||||
|
private :disabled, :disabled=
|
||||||
|
|
||||||
def initialize(site)
|
def initialize(site)
|
||||||
@site = site
|
@site = site
|
||||||
|
@ -115,7 +117,7 @@ module Jekyll
|
||||||
#
|
#
|
||||||
# Returns nothing.
|
# Returns nothing.
|
||||||
def add_dependency(path, dependency)
|
def add_dependency(path, dependency)
|
||||||
return if metadata[path].nil? || @disabled
|
return if metadata[path].nil? || disabled
|
||||||
|
|
||||||
unless metadata[path]["deps"].include? dependency
|
unless metadata[path]["deps"].include? dependency
|
||||||
metadata[path]["deps"] << dependency
|
metadata[path]["deps"] << dependency
|
||||||
|
@ -144,8 +146,8 @@ module Jekyll
|
||||||
#
|
#
|
||||||
# Returns a Boolean (true for disabled, false for enabled).
|
# Returns a Boolean (true for disabled, false for enabled).
|
||||||
def disabled?
|
def disabled?
|
||||||
@disabled = !site.incremental? if @disabled.nil?
|
self.disabled = !site.incremental? if disabled.nil?
|
||||||
@disabled
|
disabled
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
@ -52,7 +52,6 @@ module Jekyll
|
||||||
document.trigger_hooks(:pre_render, payload)
|
document.trigger_hooks(:pre_render, payload)
|
||||||
|
|
||||||
info = {
|
info = {
|
||||||
:filters => [Jekyll::Filters],
|
|
||||||
:registers => { :site => site, :page => payload['page'] }
|
:registers => { :site => site, :page => payload['page'] }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ description: > # this means to ignore newlines until "baseurl:"
|
||||||
line in _config.yml. It will appear in your document head meta (for
|
line in _config.yml. It will appear in your document head meta (for
|
||||||
Google search results) and in your feed.xml site description.
|
Google search results) and in your feed.xml site description.
|
||||||
baseurl: "" # the subpath of your site, e.g. /blog
|
baseurl: "" # the subpath of your site, e.g. /blog
|
||||||
url: "http://yourdomain.com" # the base hostname & protocol for your site
|
url: "http://example.com" # the base hostname & protocol for your site
|
||||||
twitter_username: jekyllrb
|
twitter_username: jekyllrb
|
||||||
github_username: jekyll
|
github_username: jekyll
|
||||||
|
|
||||||
|
|
|
@ -317,6 +317,16 @@ file, each document has the following attributes:
|
||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p><code>date</code></p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>
|
||||||
|
The date of the document's collection.
|
||||||
|
</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -435,7 +435,7 @@ Using [YAML Front Matter](../frontmatter/) is one way that you can specify confi
|
||||||
|
|
||||||
Often times, you will find that you are repeating a lot of configuration options. Setting the same layout in each file, adding the same category - or categories - to a post, etc. You can even add custom variables like author names, which might be the same for the majority of posts on your blog.
|
Often times, you will find that you are repeating a lot of configuration options. Setting the same layout in each file, adding the same category - or categories - to a post, etc. You can even add custom variables like author names, which might be the same for the majority of posts on your blog.
|
||||||
|
|
||||||
Instead of repeating this configuration each time you create a new post or page, Jekyll provides a way to set these defaults in the site configuration. To do this, you can specify site-wide defaults using the `defaults` key in the `_config.yml` file in your projects root directory.
|
Instead of repeating this configuration each time you create a new post or page, Jekyll provides a way to set these defaults in the site configuration. To do this, you can specify site-wide defaults using the `defaults` key in the `_config.yml` file in your project's root directory.
|
||||||
|
|
||||||
The `defaults` key holds an array of scope/values pairs that define what defaults should be set for a particular file path, and optionally, a file type in that path.
|
The `defaults` key holds an array of scope/values pairs that define what defaults should be set for a particular file path, and optionally, a file type in that path.
|
||||||
|
|
||||||
|
@ -450,6 +450,18 @@ defaults:
|
||||||
layout: "default"
|
layout: "default"
|
||||||
{% endhighlight %}
|
{% endhighlight %}
|
||||||
|
|
||||||
|
<div class="note info">
|
||||||
|
<h5>Please stop and rerun `jekyll serve` command.</h5>
|
||||||
|
<p>
|
||||||
|
The <code>_config.yml</code> master configuration file contains global configurations
|
||||||
|
and variable definitions that are read once at execution time. Changes made to <code>_config.yml</code>
|
||||||
|
during automatic regeneration are not loaded until the next execution.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Note <a href="../datafiles">Data Files</a> are included and reloaded during automatic regeneration.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
Here, we are scoping the `values` to any file that exists in the scopes path. Since the path is set as an empty string, it will apply to **all files** in your project. You probably don't want to set a layout on every file in your project - like css files, for example - so you can also specify a `type` value under the `scope` key.
|
Here, we are scoping the `values` to any file that exists in the scopes path. Since the path is set as an empty string, it will apply to **all files** in your project. You probably don't want to set a layout on every file in your project - like css files, for example - so you can also specify a `type` value under the `scope` key.
|
||||||
|
|
||||||
{% highlight yaml %}
|
{% highlight yaml %}
|
||||||
|
|
|
@ -230,4 +230,4 @@ 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.
|
fix or [ask for help][4] if you run into trouble and need some help.
|
||||||
|
|
||||||
[3]: https://github.com/jekyll/jekyll/edit/master/site/_docs/continuous-integration.md
|
[3]: https://github.com/jekyll/jekyll/edit/master/site/_docs/continuous-integration.md
|
||||||
[4]: http://jekyllrb.com/help/
|
[4]: https://jekyllrb.com/help/
|
||||||
|
|
|
@ -11,8 +11,8 @@ Hi there! Interested in contributing to Jekyll? We'd love your help. Jekyll is a
|
||||||
|
|
||||||
* If you have a question about using Jekyll, start a discussion on [Jekyll Talk](https://talk.jekyllrb.com).
|
* If you have a question about using Jekyll, start a discussion on [Jekyll Talk](https://talk.jekyllrb.com).
|
||||||
* If you think you've found a bug within a Jekyll plugin, open an issue in that plugin's repository.
|
* If you think you've found a bug within a Jekyll plugin, open an issue in that plugin's repository.
|
||||||
* If you think you've found a bug within Jekyll itself, [open an issue](https://github.com/jekyll/jekyll/issues/new)
|
* If you think you've found a bug within Jekyll itself, [open an issue](https://github.com/jekyll/jekyll/issues/new).
|
||||||
* More resources are listed on our [Help page](https://jekyllrb.com/help/)
|
* More resources are listed on our [Help page](https://jekyllrb.com/help/).
|
||||||
|
|
||||||
## Ways to contribute
|
## Ways to contribute
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ Whether you're a developer, a designer, or just a Jekyll devotee, there are lots
|
||||||
|
|
||||||
* The more information, the better. Make judicious use of the pull request body. Describe what changes were made, why you made them, and what impact they will have for users.
|
* The more information, the better. Make judicious use of the pull request body. Describe what changes were made, why you made them, and what impact they will have for users.
|
||||||
|
|
||||||
* Pull request are easy and fun. If this is your first pull request, it may help to [understand GitHub Flow](https://guides.github.com/introduction/flow/)
|
* Pull request are easy and fun. If this is your first pull request, it may help to [understand GitHub Flow](https://guides.github.com/introduction/flow/).
|
||||||
|
|
||||||
* If you're submitting a code contribution, be sure to read the [code contributions](#code-contributions) section below.
|
* If you're submitting a code contribution, be sure to read the [code contributions](#code-contributions) section below.
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ Whether you're a developer, a designer, or just a Jekyll devotee, there are lots
|
||||||
|
|
||||||
Many small changes can be made entirely through the github.com web interface.
|
Many small changes can be made entirely through the github.com web interface.
|
||||||
|
|
||||||
1. Navigate to the file within [`jekyll/jekyll`](https://github.com/jekyll/jekyll) that you'd like to edit
|
1. Navigate to the file within [`jekyll/jekyll`](https://github.com/jekyll/jekyll) that you'd like to edit.
|
||||||
2. Click the pencil icon in the top right corner to edit the file
|
2. Click the pencil icon in the top right corner to edit the file
|
||||||
3. Make your proposed changes
|
3. Make your proposed changes
|
||||||
4. Click "Propose file change"
|
4. Click "Propose file change"
|
||||||
|
@ -53,13 +53,13 @@ That's it! You'll be automatically subscribed to receive updates as others revie
|
||||||
|
|
||||||
### Submitting a pull request via Git command line
|
### Submitting a pull request via Git command line
|
||||||
|
|
||||||
1. Fork the project by clicking "Fork" in the top right corner of [`jekyll/jekyll`](https://github.com/jekyll/jekyll)
|
1. Fork the project by clicking "Fork" in the top right corner of [`jekyll/jekyll`](https://github.com/jekyll/jekyll).
|
||||||
2. Clone the repository lcoally `git clone https://github.com/<you-username>/jekyll`
|
2. Clone the repository locally `git clone https://github.com/<you-username>/jekyll`.
|
||||||
3. Create a new, descriptively named branch to contain your change ( `git checkout -b my-awesome-feature` ).
|
3. Create a new, descriptively named branch to contain your change ( `git checkout -b my-awesome-feature` ).
|
||||||
4. Hack away, add tests. Not necessarily in that order.
|
4. Hack away, add tests. Not necessarily in that order.
|
||||||
5. Make sure everything still passes by running `script/cibuild` (see [the tests section](#running-tests-locally) below)
|
5. Make sure everything still passes by running `script/cibuild` (see [the tests section](#running-tests-locally) below)
|
||||||
6. Push the branch up ( `git push origin my-awesome-feature` ).
|
6. Push the branch up ( `git push origin my-awesome-feature` ).
|
||||||
7. Create a pull request by visiting https://github.com/<your-username>/jekyll/ and following the instructions at the top of the screen.
|
7. Create a pull request by visiting `https://github.com/<your-username>/jekyll` and following the instructions at the top of the screen.
|
||||||
|
|
||||||
## Proposing updates to the documentation
|
## Proposing updates to the documentation
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ If your contribution changes any Jekyll behavior, make sure to update the docume
|
||||||
|
|
||||||
#### Tests
|
#### Tests
|
||||||
|
|
||||||
* If you're creating a small fix or patch to an existing feature, a simple test if more than enough. You can usually copy/paste from an existing example in the `tests` folder, but if you need to can find out about our tests suites [Shoulda](https://github.com/thoughtbot/shoulda/tree/master) and [RSpec-Mocks](https://github.com/rspec/rspec-mocks).
|
* If you're creating a small fix or patch to an existing feature, a simple test is more than enough. You can usually copy/paste from an existing example in the `tests` folder, but if you need you can find out about our tests suites [Shoulda](https://github.com/thoughtbot/shoulda/tree/master) and [RSpec-Mocks](https://github.com/rspec/rspec-mocks).
|
||||||
|
|
||||||
* If it's a brand new feature, create a new [Cucumber](https://github.com/cucumber/cucumber/) feature, reusing existing steps where appropriate.
|
* If it's a brand new feature, create a new [Cucumber](https://github.com/cucumber/cucumber/) feature, reusing existing steps where appropriate.
|
||||||
|
|
||||||
|
|
|
@ -21,8 +21,8 @@ Plugins/themes can also leverage Data Files to set configuration variables.
|
||||||
|
|
||||||
As explained on the [directory structure](../structure/) page, the `_data`
|
As explained on the [directory structure](../structure/) page, the `_data`
|
||||||
folder is where you can store additional data for Jekyll to use when generating
|
folder is where you can store additional data for Jekyll to use when generating
|
||||||
your site. These files must be YAML files
|
your site. These files must be YAML, JSON, or CSV files (using either
|
||||||
(using either the `.yml`, `.yaml`, `.json` or `csv` extension) and they will be
|
the `.yml`, `.yaml`, `.json` or `.csv` extension), and they will be
|
||||||
accessible via `site.data`.
|
accessible via `site.data`.
|
||||||
|
|
||||||
## Example: List of members
|
## Example: List of members
|
||||||
|
|
|
@ -142,7 +142,7 @@ Add the `deploy` script to the site source folder:
|
||||||
{% highlight bash %}
|
{% highlight bash %}
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
rsync -crvz --rsh=ssh -p2222' --delete-after --delete-excluded <folder> <user>@<site>:
|
rsync -crvz --rsh='ssh -p2222' --delete-after --delete-excluded <folder> <user>@<site>:
|
||||||
{% endhighlight %}
|
{% endhighlight %}
|
||||||
|
|
||||||
Command line parameters are:
|
Command line parameters are:
|
||||||
|
@ -186,7 +186,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).
|
[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://blog.crowdint.com/2010/08/02/instant-blog-using-jekyll-and-heroku.html) 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
|
## Jekyll-Admin for Rails
|
||||||
|
|
||||||
|
|
|
@ -858,6 +858,7 @@ LESS.js files during generation.
|
||||||
- [Jekyll Flickr Plugin](https://github.com/lawmurray/indii-jekyll-flickr) by [Lawrence Murray](http://www.indii.org): Embeds Flickr photosets (albums) as a gallery of thumbnails, with lightbox links to larger images.
|
- [Jekyll Flickr Plugin](https://github.com/lawmurray/indii-jekyll-flickr) by [Lawrence Murray](http://www.indii.org): Embeds Flickr photosets (albums) as a gallery of thumbnails, with lightbox links to larger images.
|
||||||
- [jekyll-figure](https://github.com/paulrobertlloyd/jekyll-figure): A liquid tag for Jekyll that generates `<figure>` elements.
|
- [jekyll-figure](https://github.com/paulrobertlloyd/jekyll-figure): A liquid tag for Jekyll that generates `<figure>` elements.
|
||||||
- [Jekyll Video Embed](https://github.com/eug/jekyll-video-embed): It provides several tags to easily embed videos (e.g. Youtube, Vimeo, UStream and Ted Talks)
|
- [Jekyll Video Embed](https://github.com/eug/jekyll-video-embed): It provides several tags to easily embed videos (e.g. Youtube, Vimeo, UStream and Ted Talks)
|
||||||
|
- [jekyll-i18n_tags](https://github.com/KrzysiekJ/jekyll-i18n_tags): Translate your templates.
|
||||||
|
|
||||||
#### Collections
|
#### Collections
|
||||||
|
|
||||||
|
@ -898,6 +899,8 @@ LESS.js files during generation.
|
||||||
- [Jekyll Deploy](https://github.com/vwochnik/jekyll-deploy): Adds a `deploy` sub-command to Jekyll.
|
- [Jekyll Deploy](https://github.com/vwochnik/jekyll-deploy): Adds a `deploy` sub-command to Jekyll.
|
||||||
- [Official Contentful Jekyll Plugin](https://github.com/contentful/jekyll-contentful-data-import): Adds a `contentful` sub-command to Jekyll to import data from Contentful.
|
- [Official Contentful Jekyll Plugin](https://github.com/contentful/jekyll-contentful-data-import): Adds a `contentful` sub-command to Jekyll to import data from Contentful.
|
||||||
- [jekyll-paspagon](https://github.com/KrzysiekJ/jekyll-paspagon): Sell your posts in various formats for cryptocurrencies.
|
- [jekyll-paspagon](https://github.com/KrzysiekJ/jekyll-paspagon): Sell your posts in various formats for cryptocurrencies.
|
||||||
|
- [Hawkins](https://github.com/awood/hawkins): Adds a `liveserve` sub-command to Jekyll that incorporates [LiveReload](http://livereload.com/) into your pages while you preview them. No more hitting the refresh button in your browser!
|
||||||
|
- [Jekyll Autoprefixer](https://github.com/vwochnik/jekyll-autoprefixer): Autoprefixer integration for Jekyll
|
||||||
|
|
||||||
#### Editors
|
#### Editors
|
||||||
|
|
||||||
|
|
|
@ -16,8 +16,10 @@ Jekyll’s growing use is producing a wide variety of tutorials, frameworks, ext
|
||||||
|
|
||||||
### Integrations
|
### Integrations
|
||||||
|
|
||||||
- [Use FormKeep as a backend for forms (contact forms, hiring forms, etc.)](https://formkeep.com/guides/how-to-make-a-contact-form-in-jekyll?utm_source=github&utm_medium=jekyll-docs&utm_campaign=contact-form-jekyll)
|
- Use a saas service as a backend for forms (contact forms, hiring forms, etc.)
|
||||||
- [Use Simple Form to add a simple contact form](http://getsimpleform.com/)
|
- [Formspree (also open source)](http://formspree.io/)
|
||||||
|
- [FormKeep](https://formkeep.com/guides/how-to-make-a-contact-form-in-jekyll?utm_source=github&utm_medium=jekyll-docs&utm_campaign=contact-form-jekyll)
|
||||||
|
- [Simple Form](http://getsimpleform.com/)
|
||||||
- [Jekyll Bootstrap](http://jekyllbootstrap.com), 0 to Blog in 3 minutes. Provides detailed explanations, examples, and helper-code to make getting started with Jekyll easier.
|
- [Jekyll Bootstrap](http://jekyllbootstrap.com), 0 to Blog in 3 minutes. Provides detailed explanations, examples, and helper-code to make getting started with Jekyll easier.
|
||||||
- [Integrating Twitter with Jekyll](http://www.justkez.com/integrating-twitter-with-jekyll/)
|
- [Integrating Twitter with Jekyll](http://www.justkez.com/integrating-twitter-with-jekyll/)
|
||||||
> “Having migrated Justkez.com to be based on Jekyll, I was pondering how I might include my recent twitterings on the front page of the site. In the WordPress world, this would have been done via a plugin which may or may not have hung the loading of the page, might have employed caching, but would certainly have had some overheads. … Not in Jekyll.”
|
> “Having migrated Justkez.com to be based on Jekyll, I was pondering how I might include my recent twitterings on the front page of the site. In the WordPress world, this would have been done via a plugin which may or may not have hung the loading of the page, might have employed caching, but would certainly have had some overheads. … Not in Jekyll.”
|
||||||
|
|
|
@ -14,8 +14,6 @@ learning purposes.
|
||||||
([source](https://github.com/github/training-kit))
|
([source](https://github.com/github/training-kit))
|
||||||
- [Rasmus Andersson](http://rsms.me/)
|
- [Rasmus Andersson](http://rsms.me/)
|
||||||
([source](https://github.com/rsms/rsms.github.com))
|
([source](https://github.com/rsms/rsms.github.com))
|
||||||
- [Leonard Lamprecht](http://leo.im)
|
|
||||||
([source](https://github.com/leo/leo.github.io))
|
|
||||||
|
|
||||||
If you would like to explore more examples, you can find a list of sites
|
If you would like to explore more examples, you can find a list of sites
|
||||||
and their sources on the ["Sites" page in the Jekyll wiki][jekyll-sites].
|
and their sources on the ["Sites" page in the Jekyll wiki][jekyll-sites].
|
||||||
|
|
|
@ -88,6 +88,22 @@ common tasks easier.
|
||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p class="name"><strong>Where Expression</strong></p>
|
||||||
|
<p>Select all the objects in an array where the expression is true.</p>
|
||||||
|
</td>
|
||||||
|
<td class="align-center">
|
||||||
|
<p>
|
||||||
|
<code class="filter">{% raw %}{{ site.members | where_exp:"item",
|
||||||
|
"item.graduation_year == 2014" }}{% endraw %}</code>
|
||||||
|
<code class="filter">{% raw %}{{ site.members | where_exp:"item",
|
||||||
|
"item.graduation_year < 2014" }}{% endraw %}</code>
|
||||||
|
<code class="filter">{% raw %}{{ site.members | where_exp:"item",
|
||||||
|
"item.projects contains 'foo'" }}{% endraw %}</code>
|
||||||
|
</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<p class="name"><strong>Group By</strong></p>
|
<p class="name"><strong>Group By</strong></p>
|
||||||
|
|
|
@ -353,7 +353,7 @@ following is a reference of the available data.
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><p><code>paginator.total_pages</code></p></td>
|
<td><p><code>paginator.total_pages</code></p></td>
|
||||||
<td><p>Total number of Pages.</p></td>
|
<td><p>Total number of pages.</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><p><code>paginator.page</code></p></td>
|
<td><p><code>paginator.page</code></p></td>
|
||||||
|
|
|
@ -79,7 +79,7 @@ overview: true
|
||||||
<div class="pane-content">
|
<div class="pane-content">
|
||||||
<h2 class="center-on-mobiles"><strong>Free hosting</strong> with GitHub Pages</h2>
|
<h2 class="center-on-mobiles"><strong>Free hosting</strong> with GitHub Pages</h2>
|
||||||
<p>Sick of dealing with hosting companies? <a href="https://pages.github.com/">GitHub Pages</a> are <em>powered by Jekyll</em>, so you can easily deploy your site using GitHub for free—<a href="https://help.github.com/articles/about-supported-custom-domains/">custom domain name</a> and all.</p>
|
<p>Sick of dealing with hosting companies? <a href="https://pages.github.com/">GitHub Pages</a> are <em>powered by Jekyll</em>, so you can easily deploy your site using GitHub for free—<a href="https://help.github.com/articles/about-supported-custom-domains/">custom domain name</a> and all.</p>
|
||||||
<a href="http://pages.github.com/">Learn more about GitHub Pages →</a>
|
<a href="https://pages.github.com/">Learn more about GitHub Pages →</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="clear"></div>
|
<div class="clear"></div>
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
$stdout.puts "# -------------------------------------------------------------"
|
||||||
|
$stdout.puts "# SPECS AND TESTS ARE RUNNING WITH WARNINGS OFF."
|
||||||
|
$stdout.puts "# SEE: https://github.com/Shopify/liquid/issues/730"
|
||||||
|
$stdout.puts "# SEE: https://github.com/jekyll/jekyll/issues/4719"
|
||||||
|
$stdout.puts "# -------------------------------------------------------------"
|
||||||
|
$VERBOSE = nil
|
||||||
|
|
||||||
def jruby?
|
def jruby?
|
||||||
defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
|
defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
|
||||||
end
|
end
|
||||||
|
|
|
@ -110,7 +110,7 @@ class TestCommandsServe < JekyllUnitTest
|
||||||
"ssl_key" => "bar"
|
"ssl_key" => "bar"
|
||||||
})
|
})
|
||||||
|
|
||||||
assert result[:EnableSSL]
|
assert result[:SSLEnable]
|
||||||
assert_equal result[:SSLPrivateKey ], "c2"
|
assert_equal result[:SSLPrivateKey ], "c2"
|
||||||
assert_equal result[:SSLCertificate], "c1"
|
assert_equal result[:SSLCertificate], "c1"
|
||||||
end
|
end
|
||||||
|
|
|
@ -37,7 +37,7 @@ class TestConvertible < JekyllUnitTest
|
||||||
out = capture_stderr do
|
out = capture_stderr do
|
||||||
@convertible.read_yaml(@base, 'exploit_front_matter.erb')
|
@convertible.read_yaml(@base, 'exploit_front_matter.erb')
|
||||||
end
|
end
|
||||||
refute_match /undefined class\/module DoesNotExist/, out
|
refute_match(/undefined class\/module DoesNotExist/, out)
|
||||||
end
|
end
|
||||||
|
|
||||||
should "not parse if there is encoding error in file" do
|
should "not parse if there is encoding error in file" do
|
||||||
|
|
|
@ -158,7 +158,7 @@ class TestFilters < JekyllUnitTest
|
||||||
end
|
end
|
||||||
|
|
||||||
should "format a time with xmlschema" do
|
should "format a time with xmlschema" do
|
||||||
assert_match /2014-05-10T00:10:07/, @filter.date_to_xmlschema(@time_as_numeric)
|
assert_match(/2014-05-10T00:10:07/, @filter.date_to_xmlschema(@time_as_numeric))
|
||||||
end
|
end
|
||||||
|
|
||||||
should "format a time according to RFC-822" do
|
should "format a time according to RFC-822" do
|
||||||
|
@ -354,6 +354,64 @@ class TestFilters < JekyllUnitTest
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "where_exp filter" do
|
||||||
|
should "return any input that is not an array" do
|
||||||
|
assert_equal "some string", @filter.where_exp("some string", "la", "le")
|
||||||
|
end
|
||||||
|
|
||||||
|
should "filter objects in a hash appropriately" do
|
||||||
|
hash = {"a"=>{"color"=>"red"}, "b"=>{"color"=>"blue"}}
|
||||||
|
assert_equal 1, @filter.where_exp(hash, "item", "item.color == 'red'").length
|
||||||
|
assert_equal [{"color"=>"red"}], @filter.where_exp(hash, "item", "item.color == 'red'")
|
||||||
|
end
|
||||||
|
|
||||||
|
should "filter objects appropriately" do
|
||||||
|
assert_equal 2, @filter.where_exp(@array_of_objects, "item", "item.color == 'red'").length
|
||||||
|
end
|
||||||
|
|
||||||
|
should "stringify during comparison for compatibility with liquid parsing" do
|
||||||
|
hash = {
|
||||||
|
"The Words" => {"rating" => 1.2, "featured" => false},
|
||||||
|
"Limitless" => {"rating" => 9.2, "featured" => true},
|
||||||
|
"Hustle" => {"rating" => 4.7, "featured" => true},
|
||||||
|
}
|
||||||
|
|
||||||
|
results = @filter.where_exp(hash, "item", "item.featured == true")
|
||||||
|
assert_equal 2, results.length
|
||||||
|
assert_equal 9.2, results[0]["rating"]
|
||||||
|
assert_equal 4.7, results[1]["rating"]
|
||||||
|
|
||||||
|
results = @filter.where_exp(hash, "item", "item.rating == 4.7")
|
||||||
|
assert_equal 1, results.length
|
||||||
|
assert_equal 4.7, results[0]["rating"]
|
||||||
|
end
|
||||||
|
|
||||||
|
should "filter with other operators" do
|
||||||
|
assert_equal [3, 4, 5], @filter.where_exp([ 1, 2, 3, 4, 5 ], "n", "n >= 3")
|
||||||
|
end
|
||||||
|
|
||||||
|
objects = [
|
||||||
|
{ "id" => "a", "groups" => [1, 2] },
|
||||||
|
{ "id" => "b", "groups" => [2, 3] },
|
||||||
|
{ "id" => "c" },
|
||||||
|
{ "id" => "d", "groups" => [1, 3] }
|
||||||
|
]
|
||||||
|
should "filter with the contains operator over arrays" do
|
||||||
|
results = @filter.where_exp(objects, "obj", "obj.groups contains 1")
|
||||||
|
assert_equal 2, results.length
|
||||||
|
assert_equal "a", results[0]["id"]
|
||||||
|
assert_equal "d", results[1]["id"]
|
||||||
|
end
|
||||||
|
|
||||||
|
should "filter with the contains operator over hash keys" do
|
||||||
|
results = @filter.where_exp(objects, "obj", "obj contains 'groups'")
|
||||||
|
assert_equal 3, results.length
|
||||||
|
assert_equal "a", results[0]["id"]
|
||||||
|
assert_equal "b", results[1]["id"]
|
||||||
|
assert_equal "d", results[2]["id"]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context "sort filter" do
|
context "sort filter" do
|
||||||
should "raise Exception when input is nil" do
|
should "raise Exception when input is nil" do
|
||||||
err = assert_raises ArgumentError do
|
err = assert_raises ArgumentError do
|
||||||
|
|
|
@ -91,7 +91,7 @@ class TestNewCommand < JekyllUnitTest
|
||||||
should 'force created folder' do
|
should 'force created folder' do
|
||||||
capture_stdout { Jekyll::Commands::New.process(@args) }
|
capture_stdout { Jekyll::Commands::New.process(@args) }
|
||||||
output = capture_stdout { Jekyll::Commands::New.process(@args, '--force') }
|
output = capture_stdout { Jekyll::Commands::New.process(@args, '--force') }
|
||||||
assert_match /New jekyll site installed in/, output
|
assert_match(/New jekyll site installed in/, output)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -232,13 +232,13 @@ class TestSite < JekyllUnitTest
|
||||||
context 'error handling' do
|
context 'error handling' do
|
||||||
should "raise if destination is included in source" do
|
should "raise if destination is included in source" do
|
||||||
assert_raises Jekyll::Errors::FatalException do
|
assert_raises Jekyll::Errors::FatalException do
|
||||||
site = Site.new(site_configuration('destination' => source_dir))
|
Site.new(site_configuration('destination' => source_dir))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
should "raise if destination is source" do
|
should "raise if destination is source" do
|
||||||
assert_raises Jekyll::Errors::FatalException do
|
assert_raises Jekyll::Errors::FatalException do
|
||||||
site = Site.new(site_configuration('destination' => File.join(source_dir, "..")))
|
Site.new(site_configuration('destination' => File.join(source_dir, "..")))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -520,7 +520,6 @@ class TestSite < JekyllUnitTest
|
||||||
contacts_html = @site.pages.find { |p| p.name == "contacts.html" }
|
contacts_html = @site.pages.find { |p| p.name == "contacts.html" }
|
||||||
@site.process
|
@site.process
|
||||||
|
|
||||||
source = @site.in_source_dir(contacts_html.path)
|
|
||||||
dest = File.expand_path(contacts_html.destination(@site.dest))
|
dest = File.expand_path(contacts_html.destination(@site.dest))
|
||||||
mtime1 = File.stat(dest).mtime.to_i # first run must generate dest file
|
mtime1 = File.stat(dest).mtime.to_i # first run must generate dest file
|
||||||
|
|
||||||
|
|
|
@ -149,7 +149,7 @@ CONTENT
|
||||||
end
|
end
|
||||||
|
|
||||||
should "not cause a markdown error" do
|
should "not cause a markdown error" do
|
||||||
refute_match /markdown\-html\-error/, @result
|
refute_match(/markdown\-html\-error/, @result)
|
||||||
end
|
end
|
||||||
|
|
||||||
should "render markdown with pygments" do
|
should "render markdown with pygments" do
|
||||||
|
@ -442,7 +442,7 @@ CONTENT
|
||||||
end
|
end
|
||||||
|
|
||||||
should "not cause an error" do
|
should "not cause an error" do
|
||||||
refute_match /markdown\-html\-error/, @result
|
refute_match(/markdown\-html\-error/, @result)
|
||||||
end
|
end
|
||||||
|
|
||||||
should "have the url to the \"complex\" post from 2008-11-21" do
|
should "have the url to the \"complex\" post from 2008-11-21" do
|
||||||
|
@ -466,7 +466,7 @@ CONTENT
|
||||||
end
|
end
|
||||||
|
|
||||||
should "not cause an error" do
|
should "not cause an error" do
|
||||||
refute_match /markdown\-html\-error/, @result
|
refute_match(/markdown\-html\-error/, @result)
|
||||||
end
|
end
|
||||||
|
|
||||||
should "have the url to the \"complex\" post from 2008-11-21" do
|
should "have the url to the \"complex\" post from 2008-11-21" do
|
||||||
|
@ -600,7 +600,8 @@ title: Include symlink
|
||||||
CONTENT
|
CONTENT
|
||||||
create_post(content, {'permalink' => 'pretty', 'source' => source_dir, 'destination' => dest_dir, 'read_posts' => true, 'safe' => true })
|
create_post(content, {'permalink' => 'pretty', 'source' => source_dir, 'destination' => dest_dir, 'read_posts' => true, 'safe' => true })
|
||||||
end
|
end
|
||||||
refute_match /SYMLINK TEST/, @result
|
@result ||= ''
|
||||||
|
refute_match(/SYMLINK TEST/, @result)
|
||||||
end
|
end
|
||||||
|
|
||||||
should "not expose the existence of symlinked files" do
|
should "not expose the existence of symlinked files" do
|
||||||
|
@ -877,7 +878,8 @@ title: Include symlink
|
||||||
CONTENT
|
CONTENT
|
||||||
create_post(content, {'permalink' => 'pretty', 'source' => source_dir, 'destination' => dest_dir, 'read_posts' => true, 'safe' => true })
|
create_post(content, {'permalink' => 'pretty', 'source' => source_dir, 'destination' => dest_dir, 'read_posts' => true, 'safe' => true })
|
||||||
end
|
end
|
||||||
refute_match /SYMLINK TEST/, @result
|
@result ||= ''
|
||||||
|
refute_match(/SYMLINK TEST/, @result)
|
||||||
end
|
end
|
||||||
|
|
||||||
should "not expose the existence of symlinked files" do
|
should "not expose the existence of symlinked files" do
|
||||||
|
|
|
@ -63,12 +63,12 @@ class TestURL < JekyllUnitTest
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
site.read
|
site.read
|
||||||
doc = site.collections["methods"].docs.find do |doc|
|
matching_doc = site.collections["methods"].docs.find do |doc|
|
||||||
doc.relative_path == "_methods/escape-+ #%20[].md"
|
doc.relative_path == "_methods/escape-+ #%20[].md"
|
||||||
end
|
end
|
||||||
assert_equal '/methods/escape-+-20/escape-20.html', URL.new(
|
assert_equal '/methods/escape-+-20/escape-20.html', URL.new(
|
||||||
:template => '/methods/:title/:name:output_ext',
|
:template => '/methods/:title/:name:output_ext',
|
||||||
:placeholders => doc.url_placeholders
|
:placeholders => matching_doc.url_placeholders
|
||||||
).to_s
|
).to_s
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue