Module: Nanoc3::Helpers::Rendering
- Includes:
- Capturing
- Defined in:
- lib/nanoc3/helpers/rendering.rb
Overview
Provides functionality for rendering layouts as partials.
Instance Method Summary
-
- (String) render(identifier, other_assigns = {}, &block)
Returns a string containing the rendered given layout.
Methods included from Capturing
Instance Method Details
- (String) render(identifier, other_assigns = {}, &block)
Returns a string containing the rendered given layout.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/nanoc3/helpers/rendering.rb', line 36 def render(identifier, other_assigns={}, &block) # Find layout layout = @site.layouts.find { |l| l.identifier == identifier.cleaned_identifier } raise Nanoc3::Errors::UnknownLayout.new(identifier.cleaned_identifier) if layout.nil? # Capture content, if any captured_content = block_given? ? capture(&block) : nil # Get assigns assigns = { :content => captured_content, :item => @item, :item_rep => @item_rep, :items => @items, :layout => layout, :layouts => @layouts, :config => @config, :site => @site }.merge(other_assigns) # Get filter name filter_name, filter_args = @site.compiler.filter_for_layout(layout) raise Nanoc3::Errors::CannotDetermineFilter.new(layout.identifier) if filter_name.nil? # Get filter class filter_class = Nanoc3::Filter.named(filter_name) raise Nanoc3::Errors::UnknownFilter.new(filter_name) if filter_class.nil? # Create filter filter = filter_class.new(assigns) # Layout @site.compiler.stack.push(layout) result = filter.run(layout.raw_content, filter_args) @site.compiler.stack.pop # Append to erbout if we have a block if block_given? erbout = eval('_erbout', block.binding) erbout << result end # Done result end |