#3870 trigger hooks by owner symbol
This commit is contained in:
		
							parent
							
								
									3e29aaf785
								
							
						
					
					
						commit
						7c4f319442
					
				| 
						 | 
				
			
			@ -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.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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?
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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],
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue