Class: JekyllDefaultLayout::Generator
- Inherits:
-
Jekyll::Generator
- Object
- Jekyll::Generator
- JekyllDefaultLayout::Generator
- Defined in:
- lib/jekyll-default-layout/generator.rb
Overview
Injects front matter defaults to set default layouts, if they exist
Instance Attribute Summary collapse
-
#site ⇒ Object
Returns the value of attribute site.
Instance Method Summary collapse
- #collection?(document) ⇒ Boolean
-
#documents ⇒ Object
rubocop:enable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity.
- #generate(site) ⇒ Object
- #html?(document) ⇒ Boolean
-
#html_pages_enabled? ⇒ Boolean
HTML pages are only given a default layout when the user opts in via
jekyll-default-layout: { html_pages: true }in _config.yml. - #index?(document) ⇒ Boolean
-
#initialize(site) ⇒ Generator
constructor
A new instance of Generator.
-
#layout_exists?(layout) ⇒ Boolean
Does the given layout exist for the site?.
-
#layout_for(document) ⇒ Object
What layout is appropriate for this document, if any rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity.
-
#layout_specified?(document) ⇒ Boolean
Has the user already specified a default for this layout? Note: We must use
to_liquid, and not data, to ensure front matter defaults. - #markdown?(document) ⇒ Boolean
- #markdown_converter ⇒ Object
- #page?(document) ⇒ Boolean
- #post?(document) ⇒ Boolean
- #should_set_layout?(document) ⇒ Boolean
Constructor Details
#initialize(site) ⇒ Generator
Returns a new instance of Generator.
11 12 13 |
# File 'lib/jekyll-default-layout/generator.rb', line 11 def initialize(site) @site = site end |
Instance Attribute Details
#site ⇒ Object
Returns the value of attribute site.
6 7 8 |
# File 'lib/jekyll-default-layout/generator.rb', line 6 def site @site end |
Instance Method Details
#collection?(document) ⇒ Boolean
88 89 90 |
# File 'lib/jekyll-default-layout/generator.rb', line 88 def collection?(document) document.is_a?(Jekyll::Document) && !post?(document) end |
#documents ⇒ Object
rubocop:enable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
72 73 74 |
# File 'lib/jekyll-default-layout/generator.rb', line 72 def documents [site.pages, site.collections.values.map(&:docs)].flatten end |
#generate(site) ⇒ Object
15 16 17 18 19 20 21 22 |
# File 'lib/jekyll-default-layout/generator.rb', line 15 def generate(site) @site = site documents.each do |document| next unless should_set_layout?(document) document.data["layout"] = layout_for(document) end end |
#html?(document) ⇒ Boolean
44 45 46 |
# File 'lib/jekyll-default-layout/generator.rb', line 44 def html?(document) document.extname == ".html" end |
#html_pages_enabled? ⇒ Boolean
HTML pages are only given a default layout when the user opts in via
jekyll-default-layout: { html_pages: true } in _config.yml.
50 51 52 53 |
# File 'lib/jekyll-default-layout/generator.rb', line 50 def html_pages_enabled? config = site.config["jekyll-default-layout"] config.is_a?(Hash) && config["html_pages"] == true end |
#index?(document) ⇒ Boolean
92 93 94 |
# File 'lib/jekyll-default-layout/generator.rb', line 92 def index?(document) document.url == "/" end |
#layout_exists?(layout) ⇒ Boolean
Does the given layout exist for the site?
30 31 32 |
# File 'lib/jekyll-default-layout/generator.rb', line 30 def layout_exists?(layout) !site.layouts[layout].nil? end |
#layout_for(document) ⇒ Object
What layout is appropriate for this document, if any rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/jekyll-default-layout/generator.rb', line 57 def layout_for(document) if index?(document) && layout_exists?("home") "home" elsif page?(document) && layout_exists?("page") "page" elsif post?(document) && layout_exists?("post") "post" elsif collection?(document) && layout_exists?(document.collection.label) document.collection.label elsif layout_exists?("default") "default" end end |
#layout_specified?(document) ⇒ Boolean
Has the user already specified a default for this layout?
Note: We must use to_liquid, and not data, to ensure front matter defaults
36 37 38 |
# File 'lib/jekyll-default-layout/generator.rb', line 36 def layout_specified?(document) document.to_liquid.key? "layout" end |
#markdown?(document) ⇒ Boolean
40 41 42 |
# File 'lib/jekyll-default-layout/generator.rb', line 40 def markdown?(document) markdown_converter.matches(document.extname) end |
#markdown_converter ⇒ Object
76 77 78 |
# File 'lib/jekyll-default-layout/generator.rb', line 76 def markdown_converter @markdown_converter ||= site.find_converter_instance(Jekyll::Converters::Markdown) end |
#page?(document) ⇒ Boolean
84 85 86 |
# File 'lib/jekyll-default-layout/generator.rb', line 84 def page?(document) document.is_a?(Jekyll::Page) end |
#post?(document) ⇒ Boolean
80 81 82 |
# File 'lib/jekyll-default-layout/generator.rb', line 80 def post?(document) document.is_a?(Jekyll::Document) && document.collection.label == "posts" end |
#should_set_layout?(document) ⇒ Boolean
24 25 26 27 |
# File 'lib/jekyll-default-layout/generator.rb', line 24 def should_set_layout?(document) !layout_specified?(document) && (markdown?(document) || (html?(document) && html_pages_enabled?)) end |