add a class `FrontmatterDefaults` for handling of frontmatter defaults
This commit is contained in:
parent
3ccd8dad31
commit
b3fdaa9792
|
@ -31,6 +31,7 @@ require 'jekyll/core_ext'
|
||||||
require 'jekyll/stevenson'
|
require 'jekyll/stevenson'
|
||||||
require 'jekyll/deprecator'
|
require 'jekyll/deprecator'
|
||||||
require 'jekyll/configuration'
|
require 'jekyll/configuration'
|
||||||
|
require 'jekyll/frontmatter_defaults.rb'
|
||||||
require 'jekyll/site'
|
require 'jekyll/site'
|
||||||
require 'jekyll/convertible'
|
require 'jekyll/convertible'
|
||||||
require 'jekyll/url'
|
require 'jekyll/url'
|
||||||
|
|
|
@ -40,6 +40,8 @@ module Jekyll
|
||||||
|
|
||||||
'excerpt_separator' => "\n\n",
|
'excerpt_separator' => "\n\n",
|
||||||
|
|
||||||
|
'defaults' => [],
|
||||||
|
|
||||||
'maruku' => {
|
'maruku' => {
|
||||||
'use_tex' => false,
|
'use_tex' => false,
|
||||||
'use_divs' => false,
|
'use_divs' => false,
|
||||||
|
@ -217,6 +219,5 @@ module Jekyll
|
||||||
|
|
||||||
config
|
config
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
module Jekyll
|
||||||
|
class Configuration
|
||||||
|
class FrontmatterDefaults
|
||||||
|
def initialize(site)
|
||||||
|
@site = site
|
||||||
|
end
|
||||||
|
|
||||||
|
def find(path, type, setting)
|
||||||
|
value = nil
|
||||||
|
matching_sets(path, type).each do |set|
|
||||||
|
value = set['values'][setting] if set['values'].has_key?(setting)
|
||||||
|
end
|
||||||
|
value
|
||||||
|
end
|
||||||
|
|
||||||
|
def all(path, type)
|
||||||
|
defaults = {}
|
||||||
|
matching_sets(path, type).each do |set|
|
||||||
|
defaults.merge! set['values']
|
||||||
|
end
|
||||||
|
defaults
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def applies?(scope, path, type)
|
||||||
|
(scope['path'].empty? || path.starts_with?(scope['path'])) && (!scope.has_key?('type') || scope['type'] == type.to_s)
|
||||||
|
end
|
||||||
|
|
||||||
|
def valid?(set)
|
||||||
|
set['scope'].is_a?(Hash) && set['scope'].has_key?('path') && set['values'].is_a?(Hash)
|
||||||
|
end
|
||||||
|
|
||||||
|
def matching_sets(path, type)
|
||||||
|
valid_sets.select do |set|
|
||||||
|
applies?(set['scope'], path, type)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def valid_sets
|
||||||
|
sets = @site.config['defaults']
|
||||||
|
return [] unless sets.is_a?(Array)
|
||||||
|
|
||||||
|
sets.select do |set|
|
||||||
|
unless valid?(set)
|
||||||
|
Jekyll.logger.warn "Default:", "An invalid default set was found"
|
||||||
|
end
|
||||||
|
valid?(set)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -369,6 +369,10 @@ module Jekyll
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def frontmatter_defaults
|
||||||
|
@frontmatter_defaults ||= Configuration::FrontmatterDefaults.new(self)
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def has_yaml_header?(file)
|
def has_yaml_header?(file)
|
||||||
|
|
Loading…
Reference in New Issue