diff --git a/bin/jekyll b/bin/jekyll index 309ffc91..c05d5dce 100755 --- a/bin/jekyll +++ b/bin/jekyll @@ -37,6 +37,7 @@ command :serve do |c| c.option '-w', '--watch', 'Watch for changes and rebuild' c.option '--lsi', 'Use LSI for improved related posts' + c.option '--drafts', 'Render posts in the _drafts folder' c.option '-p', '--port [PORT]', 'Port to listen on' c.option '-h', '--host [HOST]', 'Host to bind to' diff --git a/lib/jekyll/post.rb b/lib/jekyll/post.rb index 835f9a42..f94169b0 100644 --- a/lib/jekyll/post.rb +++ b/lib/jekyll/post.rb @@ -30,12 +30,12 @@ module Jekyll # site - The Site. # base - The String path to the dir containing the post file. # name - The String filename of the post file. - # categories - An Array of Strings for the categories for this post. + # subdir - The String path to the subdirectory. # # Returns the new Post. - def initialize(site, source, dir, name) + def initialize(site, source, dir, name, subdir = '_posts') @site = site - @base = File.join(source, dir, '_posts') + @base = File.join(source, dir, subdir) @name = name self.categories = dir.split('/').reject { |x| x.empty? } diff --git a/lib/jekyll/site.rb b/lib/jekyll/site.rb index 462da488..636045be 100644 --- a/lib/jekyll/site.rb +++ b/lib/jekyll/site.rb @@ -5,7 +5,7 @@ module Jekyll class Site attr_accessor :config, :layouts, :posts, :pages, :static_files, :categories, :exclude, :include, :source, :dest, :lsi, :pygments, - :permalink_style, :tags, :time, :future, :safe, :plugins, :limit_posts, + :permalink_style, :tags, :time, :future, :safe, :plugins, :limit_posts, :show_drafts, :keep_files attr_accessor :converters, :generators @@ -26,6 +26,7 @@ module Jekyll self.exclude = config['exclude'] || [] self.include = config['include'] || [] self.future = config['future'] + self.show_drafts = config['drafts'] || nil self.limit_posts = config['limit_posts'] || nil self.keep_files = config['keep_files'] || [] @@ -136,7 +137,19 @@ module Jekyll base = File.join(self.source, dir) entries = Dir.chdir(base) { filter_entries(Dir.entries('.')) } - self.read_posts(dir) + self.read_posts(dir,'_posts') + + if self.show_drafts + self.read_posts(dir,'_drafts') + end + + self.posts.sort! + + # limit the posts if :limit_posts option is set + if limit_posts + limit = self.posts.length < limit_posts ? self.posts.length : limit_posts + self.posts = self.posts[-limit, limit] + end entries.each do |f| f_abs = File.join(base, f) @@ -160,18 +173,19 @@ module Jekyll # Read all the files in //_posts and create a new Post # object with each one. # - # dir - The String relative path of the directory to read. + # dir - The String relative path of the directory to read. + # subdir - The String relative path of the subdirectory to read. # # Returns nothing. - def read_posts(dir) - base = File.join(self.source, dir, '_posts') + def read_posts(dir, subdir) + base = File.join(self.source, dir, subdir) return unless File.exists?(base) entries = Dir.chdir(base) { filter_entries(Dir['**/*']) } # first pass processes, but does not yet render post content entries.each do |f| if Post.valid?(f) - post = Post.new(self, self.source, dir, f) + post = Post.new(self, self.source, dir, f, subdir) if post.published && (self.future || post.date <= self.time) self.posts << post @@ -180,14 +194,6 @@ module Jekyll end end end - - self.posts.sort! - - # limit the posts if :limit_posts option is set - if limit_posts - limit = self.posts.length < limit_posts ? self.posts.length : limit_posts - self.posts = self.posts[-limit, limit] - end end # Run each of the Generators.