diff --git a/History.txt b/History.txt index f8572aa2..0762edb9 100644 --- a/History.txt +++ b/History.txt @@ -4,6 +4,7 @@ * Generation for a specific time (#59) * site.time allocated on render not per site_payload invocation (#59) * pages now present in the site payload and can be used through the site.pages and site.html_pages variables + * generate phase added to site#process and pagination is now a generator * Bug Fixes * Render highlighted code for non markdown/textile pages (#116) * Expand source to full path so includes work anywhere (#101) diff --git a/lib/jekyll/page.rb b/lib/jekyll/page.rb index 12544e7d..20e52f5f 100644 --- a/lib/jekyll/page.rb +++ b/lib/jekyll/page.rb @@ -3,7 +3,7 @@ module Jekyll class Page include Convertible - attr_accessor :site + attr_accessor :site, :pager attr_accessor :name, :ext, :basename, :dir attr_accessor :data, :content, :output @@ -81,7 +81,8 @@ module Jekyll # Returns nothing def render(layouts, site_payload) payload = { - "page" => self.to_liquid + "page" => self.to_liquid, + 'paginator' => pager.to_liquid }.deep_merge(site_payload) do_layout(payload, layouts) diff --git a/lib/jekyll/pager.rb b/lib/jekyll/pager.rb index b4e73161..b759a2a8 100644 --- a/lib/jekyll/pager.rb +++ b/lib/jekyll/pager.rb @@ -30,7 +30,7 @@ module Jekyll @next_page = @page != @total_pages ? @page + 1 : nil end - def to_hash + def to_liquid { 'page' => page, 'per_page' => per_page, diff --git a/lib/jekyll/site.rb b/lib/jekyll/site.rb index e43d0b89..4315e2cb 100644 --- a/lib/jekyll/site.rb +++ b/lib/jekyll/site.rb @@ -92,13 +92,14 @@ module Jekyll end # Do the actual work of processing the site and generating the - # real deal. Now has 4 phases; reset, read, render, write. This allows + # real deal. 5 phases; reset, read, generate, render, write. This allows # rendering to have full site payload available. # # Returns nothing def process self.reset self.read + self.generate self.render self.write end @@ -154,12 +155,8 @@ module Jekyll post.render(self.layouts, site_payload) end - self.pages.dup.each do |page| - if Pager.pagination_enabled?(self.config, page.name) - paginate(page) - else - page.render(self.layouts, site_payload) - end + self.pages.each do |page| + page.render(self.layouts, site_payload) end self.categories.values.map { |ps| ps.sort! { |a, b| b <=> a} } @@ -254,6 +251,12 @@ module Jekyll end end + def generate + self.pages.dup.each do |page| + paginate(page) if Pager.pagination_enabled?(self.config, page.name) + end + end + # Paginates the blog's posts. Renders the index.html file into paginated # directories, ie: page2/index.html, page3/index.html, etc and adds more # site-wide data. @@ -273,11 +276,11 @@ module Jekyll pager = Pager.new(self.config, num_page, all_posts, pages) if num_page > 1 newpage = Page.new(self, self.source, page.dir, page.name) - newpage.render(self.layouts, site_payload.merge({'paginator' => pager.to_hash})) + newpage.pager = pager newpage.dir = File.join(page.dir, "page#{num_page}") self.pages << newpage else - page.render(self.layouts, site_payload.merge({'paginator' => pager.to_hash})) + page.pager = pager end end end