16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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
|
# File 'lib/nanoc/helpers/rendering.rb', line 16
def render(identifier, other_assigns = {}, &block)
layout_view = @layouts[identifier]
layout_view ||= @layouts[identifier.__nanoc_cleaned_identifier]
raise Nanoc::Core::Errors::UnknownLayout.new(identifier) if layout_view.nil?
layout = layout_view._unwrap
dependency_tracker = @config._context.dependency_tracker
dependency_tracker.bounce(layout, raw_content: true)
captured_content = block_given? ? capture(&block) : nil
assigns = {
content: captured_content,
item: @item,
item_rep: @item_rep,
rep: @item_rep,
items: @items,
layout: layout_view,
layouts: @layouts,
config: @config,
}.merge(other_assigns)
filter_name_and_args = @config._context.compilation_context.filter_name_and_args_for_layout(layout)
filter_name = filter_name_and_args.name
filter_args = filter_name_and_args.args
raise Nanoc::Core::Errors::CannotDetermineFilter.new(layout.identifier) if filter_name.nil?
filter_class = Nanoc::Filter.named!(filter_name)
filter = filter_class.new(assigns)
content = layout.content
arg = content.binary? ? content.filename : content.string
result = filter.setup_and_run(arg, filter_args)
if block_given?
erbout = eval('_erbout', block.binding)
erbout << result
''
else
result
end
end
|