diff --git a/lib/jekyll/convertible.rb b/lib/jekyll/convertible.rb index 8e9700b2..1d9ed313 100644 --- a/lib/jekyll/convertible.rb +++ b/lib/jekyll/convertible.rb @@ -153,6 +153,15 @@ module Jekyll !asset_file? end + # Checks if the layout specified in the document actually exists + # + # layout - the layout to check + # + # Returns true if the layout is invalid, false if otherwise + def invalid_layout?(layout) + !data["layout"].nil? && data["layout"] != "none" && layout.nil? && !(self.is_a? Jekyll::Excerpt) + end + # Recursively render layouts # # layouts - a list of the layouts @@ -163,6 +172,9 @@ module Jekyll def render_all_layouts(layouts, payload, info) # recursively render layouts layout = layouts[data["layout"]] + + Jekyll.logger.warn("Build Warning:", "Layout '#{data["layout"]}' requested in #{path} does not exist.") if invalid_layout? layout + used = Set.new([layout]) while layout diff --git a/lib/jekyll/renderer.rb b/lib/jekyll/renderer.rb index f918cc0d..25a1552c 100644 --- a/lib/jekyll/renderer.rb +++ b/lib/jekyll/renderer.rb @@ -92,6 +92,15 @@ module Jekyll raise e end + # Checks if the layout specified in the document actually exists + # + # layout - the layout to check + # + # Returns true if the layout is invalid, false if otherwise + def invalid_layout?(layout) + !document.data["layout"].nil? && layout.nil? + end + # Render layouts and place given content inside. # # content - the content to be placed in the layout @@ -101,6 +110,9 @@ module Jekyll def place_in_layouts(content, payload, info) output = content.dup layout = site.layouts[document.data["layout"]] + + Jekyll.logger.warn("Build Warning:", "Layout '#{document.data["layout"]}' requested in #{document.relative_path} does not exist.") if invalid_layout? layout + used = Set.new([layout]) while layout