diff --git a/lib/jekyll/convertible.rb b/lib/jekyll/convertible.rb index 1a3558df..d91a31e8 100644 --- a/lib/jekyll/convertible.rb +++ b/lib/jekyll/convertible.rb @@ -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. diff --git a/lib/jekyll/document.rb b/lib/jekyll/document.rb index 045bdacb..da07a995 100644 --- a/lib/jekyll/document.rb +++ b/lib/jekyll/document.rb @@ -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) diff --git a/lib/jekyll/hooks.rb b/lib/jekyll/hooks.rb index d01cae4c..98ea263f 100644 --- a/lib/jekyll/hooks.rb +++ b/lib/jekyll/hooks.rb @@ -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 diff --git a/lib/jekyll/page.rb b/lib/jekyll/page.rb index f9040da8..431878b2 100644 --- a/lib/jekyll/page.rb +++ b/lib/jekyll/page.rb @@ -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 diff --git a/lib/jekyll/post.rb b/lib/jekyll/post.rb index 252cca42..62973d1d 100644 --- a/lib/jekyll/post.rb +++ b/lib/jekyll/post.rb @@ -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? diff --git a/lib/jekyll/renderer.rb b/lib/jekyll/renderer.rb index e491328b..b79cb6a7 100644 --- a/lib/jekyll/renderer.rb +++ b/lib/jekyll/renderer.rb @@ -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], diff --git a/lib/jekyll/site.rb b/lib/jekyll/site.rb index a1ea8644..78d4db8b 100644 --- a/lib/jekyll/site.rb +++ b/lib/jekyll/site.rb @@ -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.