# Title: Directory Listing Plugin for Jekyll# Author: Simon Heimlicher http://simon.heimlicher.com# Description: Display list of pages and directories beneath current directory# Configuration: You can set default title in _config.yml as follows:# directory_listing_title: "Contents: "# directory_listing_prefix: "Contents of "## Syntax {% directory_listing Title of Listing %}## Example 1:# {% directory_listing Further reading: %}#require'pathname'moduleJekyllclassPagedefsource_path# File.join(@dir, @name).gsub(/^\/*/,'')File.join(@dir,@name).sub(%r{^/*},'')enddefparent@dir.sub(%r{^/*},'')endendclassIncludeListingTag<Liquid::TagincludeTemplateWrapperdefinitialize(tag_name,markup,tokens)@title=nil@file=nilifmarkup.strip=~/\s*lang:(\w+)/i@filetype=$1markup=markup.strip.sub(/lang:\w+/i,'')endifmarkup.strip=~/(.*)?(\s+|^)(\/*\S+)/i@title=$1||nil@file=$3endsuperenddefadd_item(page)ifpage.index?title=page.parentelsetitle=page.basenameend# Try to read title from source filesource_file=File.join(@source,page.source_path)ifFile.exists?(source_file)content=File.read(source_file)ifcontent=~/^(---\s*\n.*?\n?)^(---\s*$\n?)/mcontent=$POSTMATCHbegindata=YAML.load($1)rescue=>eputs"YAML Exception reading #{name}: #{e.message}"endendifdata['title']title=data['title']endelseputs"File not found: #{source_file}"ends="<li><a href=\"/#{page.parent}#{page.url}\">#{title}</a></li>"enddefrender(context)site=context.registers[:site]@source=site.sourcesite_pages=context.environments.first['site']['pages']@page=context.environments.first['page']@title=@page["title"]@url=@page["url"]@dir=@url.sub(%r{\A/?(.+?)/[^/]*\z},'\1')@title||=(context.registers[:site].config['directory_listing_title']||context.registers[:site].config['directory_listing_prefix']+@dir||@dir)html='<ul>'folders=[]pages=[]site_pages.eachdo|page|nextunlesspage.parent&&page.parent.match(%r{^#{@dir}(/[A-Za-z][^/]+)?$})ifpage.index?relative_dir=page.parent.match(%r{^#{@dir}/([A-Za-z][^/]+)$})ifrelative_dir&&relative_dir[1]html+=self.add_item(page)endelsifpage.parent==@dirhtml+=self.add_item(page)endendhtml+='</ul>'safe_wrap(html)endendendLiquid::Template.register_tag('directory_listing',Jekyll::IncludeListingTag)