Merge pull request #3871 from stevecrozz/3870_hook_trigger_interface_change

Merge pull request 3871
This commit is contained in:
Parker Moore 2015-08-23 12:55:00 -07:00
commit 8927898e1f
7 changed files with 26 additions and 27 deletions

View File

@ -144,6 +144,15 @@ module Jekyll
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.
# Asset files include CoffeeScript files and Sass/SCSS files.
#
@ -236,7 +245,7 @@ module Jekyll
#
# Returns nothing.
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'] } }
# render and transform content (this becomes the final content of the object)
@ -250,7 +259,7 @@ module Jekyll
self.output = content
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
# Write the generated page file to the destination directory.
@ -264,7 +273,7 @@ module Jekyll
File.open(path, 'wb') do |f|
f.write(output)
end
Jekyll::Hooks.trigger self, :post_write
Jekyll::Hooks.trigger hook_owner, :post_write, self
end
# Accessor for data properties by Liquid.

View File

@ -190,7 +190,7 @@ module Jekyll
f.write(output)
end
Jekyll::Hooks.trigger self, :post_write
Jekyll::Hooks.trigger :document, :post_write, self
end
# Returns merged option hash for File.read of self.site (if exists)

View File

@ -1,13 +1,5 @@
module Jekyll
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
# compatibility layer for octopress-hooks users
@ -88,19 +80,17 @@ module Jekyll
end
# interface for Jekyll core components to trigger hooks
def self.trigger(instance, event, *args)
owner_symbol = OWNER_MAP[instance.class]
def self.trigger(owner, event, *args)
# proceed only if there are hooks to call
return unless @registry[owner_symbol]
return unless @registry[owner_symbol][event]
return unless @registry[owner]
return unless @registry[owner][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
hooks.sort_by { |h| @hook_priority[h] }.each do |hook|
hook.call(instance, *args)
hook.call(*args)
end
end
end

View File

@ -36,7 +36,7 @@ module Jekyll
site.frontmatter_defaults.find(File.join(dir, name), type, key)
end
Jekyll::Hooks.trigger self, :post_init
Jekyll::Hooks.trigger :page, :post_init, self
end
# The generated directory into which the page will be placed

View File

@ -69,7 +69,7 @@ module Jekyll
populate_categories
populate_tags
Jekyll::Hooks.trigger self, :post_init
Jekyll::Hooks.trigger :post, :post_init, self
end
def published?

View File

@ -35,7 +35,7 @@ module Jekyll
"page" => document.to_liquid
}, site_payload || site.site_payload)
Jekyll::Hooks.trigger document, :pre_render, payload
Jekyll::Hooks.trigger :document, :pre_render, document, payload
info = {
filters: [Jekyll::Filters],

View File

@ -86,7 +86,7 @@ module Jekyll
raise ArgumentError, "limit_posts must be a non-negative number"
end
Jekyll::Hooks.trigger self, :after_reset
Jekyll::Hooks.trigger :site, :after_reset, self
end
# Load necessary libraries, plugins, converters, and generators.
@ -144,7 +144,7 @@ module Jekyll
def read
reader.read
limit_posts!
Jekyll::Hooks.trigger self, :post_read
Jekyll::Hooks.trigger :site, :post_read, self
end
# Run each of the Generators.
@ -164,13 +164,13 @@ module Jekyll
payload = site_payload
Jekyll::Hooks.trigger self, :pre_render, payload
Jekyll::Hooks.trigger :site, :pre_render, self, payload
collections.each do |label, collection|
collection.docs.each do |document|
if regenerator.regenerate?(document)
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
@ -199,7 +199,7 @@ module Jekyll
item.write(dest) if regenerator.regenerate?(item)
}
regenerator.write_metadata
Jekyll::Hooks.trigger self, :post_write
Jekyll::Hooks.trigger :site, :post_write, self
end
# Construct a Hash of Posts indexed by the specified Post attribute.