Merge pull request #3871 from stevecrozz/3870_hook_trigger_interface_change
Merge pull request 3871
This commit is contained in:
commit
8927898e1f
|
@ -144,6 +144,15 @@ module Jekyll
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# returns the owner symbol for hook triggering
|
||||||
|
def hook_owner
|
||||||
|
if is_a?(Post)
|
||||||
|
:post
|
||||||
|
elsif is_a?(Page)
|
||||||
|
:page
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Determine whether the document is an asset file.
|
# Determine whether the document is an asset file.
|
||||||
# Asset files include CoffeeScript files and Sass/SCSS files.
|
# Asset files include CoffeeScript files and Sass/SCSS files.
|
||||||
#
|
#
|
||||||
|
@ -236,7 +245,7 @@ module Jekyll
|
||||||
#
|
#
|
||||||
# Returns nothing.
|
# Returns nothing.
|
||||||
def do_layout(payload, layouts)
|
def do_layout(payload, layouts)
|
||||||
Jekyll::Hooks.trigger self, :pre_render, payload
|
Jekyll::Hooks.trigger hook_owner, :pre_render, self, payload
|
||||||
info = { :filters => [Jekyll::Filters], :registers => { :site => site, :page => payload['page'] } }
|
info = { :filters => [Jekyll::Filters], :registers => { :site => site, :page => payload['page'] } }
|
||||||
|
|
||||||
# render and transform content (this becomes the final content of the object)
|
# render and transform content (this becomes the final content of the object)
|
||||||
|
@ -250,7 +259,7 @@ module Jekyll
|
||||||
self.output = content
|
self.output = content
|
||||||
|
|
||||||
render_all_layouts(layouts, payload, info) if place_in_layout?
|
render_all_layouts(layouts, payload, info) if place_in_layout?
|
||||||
Jekyll::Hooks.trigger self, :post_render
|
Jekyll::Hooks.trigger hook_owner, :post_render, self
|
||||||
end
|
end
|
||||||
|
|
||||||
# Write the generated page file to the destination directory.
|
# Write the generated page file to the destination directory.
|
||||||
|
@ -264,7 +273,7 @@ module Jekyll
|
||||||
File.open(path, 'wb') do |f|
|
File.open(path, 'wb') do |f|
|
||||||
f.write(output)
|
f.write(output)
|
||||||
end
|
end
|
||||||
Jekyll::Hooks.trigger self, :post_write
|
Jekyll::Hooks.trigger hook_owner, :post_write, self
|
||||||
end
|
end
|
||||||
|
|
||||||
# Accessor for data properties by Liquid.
|
# Accessor for data properties by Liquid.
|
||||||
|
|
|
@ -190,7 +190,7 @@ module Jekyll
|
||||||
f.write(output)
|
f.write(output)
|
||||||
end
|
end
|
||||||
|
|
||||||
Jekyll::Hooks.trigger self, :post_write
|
Jekyll::Hooks.trigger :document, :post_write, self
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns merged option hash for File.read of self.site (if exists)
|
# Returns merged option hash for File.read of self.site (if exists)
|
||||||
|
|
|
@ -1,13 +1,5 @@
|
||||||
module Jekyll
|
module Jekyll
|
||||||
module Hooks
|
module Hooks
|
||||||
# Helps look up hooks from the registry by owner's class
|
|
||||||
OWNER_MAP = {
|
|
||||||
Jekyll::Site => :site,
|
|
||||||
Jekyll::Page => :page,
|
|
||||||
Jekyll::Post => :post,
|
|
||||||
Jekyll::Document => :document,
|
|
||||||
}.freeze
|
|
||||||
|
|
||||||
DEFAULT_PRIORITY = 20
|
DEFAULT_PRIORITY = 20
|
||||||
|
|
||||||
# compatibility layer for octopress-hooks users
|
# compatibility layer for octopress-hooks users
|
||||||
|
@ -88,19 +80,17 @@ module Jekyll
|
||||||
end
|
end
|
||||||
|
|
||||||
# interface for Jekyll core components to trigger hooks
|
# interface for Jekyll core components to trigger hooks
|
||||||
def self.trigger(instance, event, *args)
|
def self.trigger(owner, event, *args)
|
||||||
owner_symbol = OWNER_MAP[instance.class]
|
|
||||||
|
|
||||||
# proceed only if there are hooks to call
|
# proceed only if there are hooks to call
|
||||||
return unless @registry[owner_symbol]
|
return unless @registry[owner]
|
||||||
return unless @registry[owner_symbol][event]
|
return unless @registry[owner][event]
|
||||||
|
|
||||||
# hooks to call for this owner and event
|
# hooks to call for this owner and event
|
||||||
hooks = @registry[owner_symbol][event]
|
hooks = @registry[owner][event]
|
||||||
|
|
||||||
# sort and call hooks according to priority and load order
|
# sort and call hooks according to priority and load order
|
||||||
hooks.sort_by { |h| @hook_priority[h] }.each do |hook|
|
hooks.sort_by { |h| @hook_priority[h] }.each do |hook|
|
||||||
hook.call(instance, *args)
|
hook.call(*args)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -36,7 +36,7 @@ module Jekyll
|
||||||
site.frontmatter_defaults.find(File.join(dir, name), type, key)
|
site.frontmatter_defaults.find(File.join(dir, name), type, key)
|
||||||
end
|
end
|
||||||
|
|
||||||
Jekyll::Hooks.trigger self, :post_init
|
Jekyll::Hooks.trigger :page, :post_init, self
|
||||||
end
|
end
|
||||||
|
|
||||||
# The generated directory into which the page will be placed
|
# The generated directory into which the page will be placed
|
||||||
|
|
|
@ -69,7 +69,7 @@ module Jekyll
|
||||||
populate_categories
|
populate_categories
|
||||||
populate_tags
|
populate_tags
|
||||||
|
|
||||||
Jekyll::Hooks.trigger self, :post_init
|
Jekyll::Hooks.trigger :post, :post_init, self
|
||||||
end
|
end
|
||||||
|
|
||||||
def published?
|
def published?
|
||||||
|
|
|
@ -35,7 +35,7 @@ module Jekyll
|
||||||
"page" => document.to_liquid
|
"page" => document.to_liquid
|
||||||
}, site_payload || site.site_payload)
|
}, site_payload || site.site_payload)
|
||||||
|
|
||||||
Jekyll::Hooks.trigger document, :pre_render, payload
|
Jekyll::Hooks.trigger :document, :pre_render, document, payload
|
||||||
|
|
||||||
info = {
|
info = {
|
||||||
filters: [Jekyll::Filters],
|
filters: [Jekyll::Filters],
|
||||||
|
|
|
@ -86,7 +86,7 @@ module Jekyll
|
||||||
raise ArgumentError, "limit_posts must be a non-negative number"
|
raise ArgumentError, "limit_posts must be a non-negative number"
|
||||||
end
|
end
|
||||||
|
|
||||||
Jekyll::Hooks.trigger self, :after_reset
|
Jekyll::Hooks.trigger :site, :after_reset, self
|
||||||
end
|
end
|
||||||
|
|
||||||
# Load necessary libraries, plugins, converters, and generators.
|
# Load necessary libraries, plugins, converters, and generators.
|
||||||
|
@ -144,7 +144,7 @@ module Jekyll
|
||||||
def read
|
def read
|
||||||
reader.read
|
reader.read
|
||||||
limit_posts!
|
limit_posts!
|
||||||
Jekyll::Hooks.trigger self, :post_read
|
Jekyll::Hooks.trigger :site, :post_read, self
|
||||||
end
|
end
|
||||||
|
|
||||||
# Run each of the Generators.
|
# Run each of the Generators.
|
||||||
|
@ -164,13 +164,13 @@ module Jekyll
|
||||||
|
|
||||||
payload = site_payload
|
payload = site_payload
|
||||||
|
|
||||||
Jekyll::Hooks.trigger self, :pre_render, payload
|
Jekyll::Hooks.trigger :site, :pre_render, self, payload
|
||||||
|
|
||||||
collections.each do |label, collection|
|
collections.each do |label, collection|
|
||||||
collection.docs.each do |document|
|
collection.docs.each do |document|
|
||||||
if regenerator.regenerate?(document)
|
if regenerator.regenerate?(document)
|
||||||
document.output = Jekyll::Renderer.new(self, document, payload).run
|
document.output = Jekyll::Renderer.new(self, document, payload).run
|
||||||
Jekyll::Hooks.trigger document, :post_render
|
Jekyll::Hooks.trigger :document, :post_render, document
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -199,7 +199,7 @@ module Jekyll
|
||||||
item.write(dest) if regenerator.regenerate?(item)
|
item.write(dest) if regenerator.regenerate?(item)
|
||||||
}
|
}
|
||||||
regenerator.write_metadata
|
regenerator.write_metadata
|
||||||
Jekyll::Hooks.trigger self, :post_write
|
Jekyll::Hooks.trigger :site, :post_write, self
|
||||||
end
|
end
|
||||||
|
|
||||||
# Construct a Hash of Posts indexed by the specified Post attribute.
|
# Construct a Hash of Posts indexed by the specified Post attribute.
|
||||||
|
|
Loading…
Reference in New Issue