fix(link): Fixing link tag to non-indexed destination
This commit is contained in:
		
							parent
							
								
									2d10770f3e
								
							
						
					
					
						commit
						366c9e10b4
					
				@ -34,6 +34,9 @@ module Jekyll
 | 
			
		||||
 | 
			
		||||
      Configurator.warn_of_deprecated_options
 | 
			
		||||
 | 
			
		||||
      # Register our own tags to overwrite the default tags
 | 
			
		||||
      Liquid::Template.register_tag('link', JekyllAlgoliaLink)
 | 
			
		||||
 | 
			
		||||
      if Configurator.dry_run?
 | 
			
		||||
        Logger.log('W:==== THIS IS A DRY RUN ====')
 | 
			
		||||
        Logger.log('W:  - No records will be pushed to your index')
 | 
			
		||||
@ -71,6 +74,8 @@ module Jekyll
 | 
			
		||||
      # tests
 | 
			
		||||
      attr_writer :collections
 | 
			
		||||
 | 
			
		||||
      attr_reader :original_site_files
 | 
			
		||||
 | 
			
		||||
      # Public: Overwriting the parent method
 | 
			
		||||
      #
 | 
			
		||||
      # This will prepare the website, gathering all files, excluding the one we
 | 
			
		||||
@ -143,6 +148,12 @@ module Jekyll
 | 
			
		||||
      # Public: Removing non-indexable Pages, Posts and Documents from the
 | 
			
		||||
      # internals
 | 
			
		||||
      def keep_only_indexable_files
 | 
			
		||||
        @original_site_files = {
 | 
			
		||||
          pages: @pages,
 | 
			
		||||
          collections: @collections,
 | 
			
		||||
          static_files: @static_file
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        @pages = indexable_list(@pages)
 | 
			
		||||
 | 
			
		||||
        # Applying to each collections
 | 
			
		||||
@ -195,3 +206,33 @@ module Jekyll
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
# The default `link` tag allow to link to a specific page, using its relative
 | 
			
		||||
# path. Because we might not be indexing the destination of the link, we might
 | 
			
		||||
# not have the representation of the page in our data. If that happens, the
 | 
			
		||||
# `link` tag fails.
 | 
			
		||||
#
 | 
			
		||||
# To fix that we'll overwrite the default `link` tag to loop over a backup copy
 | 
			
		||||
# of the original files (before we clean it for indexing)
 | 
			
		||||
class JekyllAlgoliaLink < Jekyll::Tags::Link
 | 
			
		||||
  def render(context)
 | 
			
		||||
    original_files = context.registers[:site].original_site_files
 | 
			
		||||
 | 
			
		||||
    original_files[:pages].each do |page|
 | 
			
		||||
      return page.url if page.relative_path == @relative_path
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    original_files[:collections].each do |collection|
 | 
			
		||||
      collection.each do |item|
 | 
			
		||||
        return item.url if item.relative_path == @relative_path
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    original_files[:static_files].each do |asset|
 | 
			
		||||
      return asset.url if asset.relative_path == @relative_path
 | 
			
		||||
      return asset.url if asset.relative_path == "/#{@relative_path}"
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    '/'
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user