Class: Jekyll::Page
Direct Known Subclasses
Constant Summary collapse
- ATTRIBUTES_FOR_LIQUID =
Attributes for Liquid templates
%w( content dir excerpt name path url ).freeze
- HTML_EXTENSIONS =
A set of extensions that are considered HTML or HTML-like so we should not alter them, this includes .xhtml through XHTM5.
%w( .html .xhtml .htm ).freeze
Instance Attribute Summary collapse
-
#basename ⇒ Object
Returns the value of attribute basename.
-
#content ⇒ Object
Returns the value of attribute content.
-
#data ⇒ Object
Returns the value of attribute data.
-
#dir ⇒ Object
The generated directory into which the page will be placed upon generation.
-
#ext ⇒ Object
(also: #extname)
Returns the value of attribute ext.
-
#name ⇒ Object
Returns the value of attribute name.
-
#output ⇒ Object
Returns the value of attribute output.
-
#pager ⇒ Object
Returns the value of attribute pager.
-
#site ⇒ Object
Returns the value of attribute site.
Instance Method Summary collapse
-
#destination(dest) ⇒ Object
Obtain destination path.
- #excerpt ⇒ Object
- #excerpt_separator ⇒ Object
- #generate_excerpt? ⇒ Boolean
-
#html? ⇒ Boolean
Returns the Boolean of whether this Page is HTML or not.
-
#index? ⇒ Boolean
Returns the Boolean of whether this Page is an index file or not.
-
#initialize(site, base, dir, name) ⇒ Page
constructor
Initialize a new Page.
-
#inspect ⇒ Object
Returns the object as a debug String.
-
#path ⇒ Object
The path to the source file.
-
#permalink ⇒ Object
The full path and filename of the post.
-
#process(name) ⇒ Object
Extract information from the page filename.
-
#relative_path ⇒ Object
The path to the page source file, relative to the site source.
-
#render(layouts, site_payload) ⇒ Object
Add any necessary layouts to this post.
-
#template ⇒ Object
The template of the permalink.
- #trigger_hooks(hook_name, *args) ⇒ Object
-
#url ⇒ Object
The generated relative url of this page.
-
#url_placeholders ⇒ Object
Returns a hash of URL placeholder names (as symbols) mapping to the desired placeholder replacements.
- #write? ⇒ Boolean
Methods included from Convertible
#[], #asset_file?, #coffeescript_file?, #converters, #do_layout, #hook_owner, #invalid_layout?, #output_ext, #place_in_layout?, #published?, #read_yaml, #render_all_layouts, #render_liquid, #render_with_liquid?, #renderer, #sass_file?, #to_liquid, #to_s, #transform, #type, #validate_data!, #validate_permalink!, #write
Constructor Details
#initialize(site, base, dir, name) ⇒ Page
Initialize a new Page.
site - The Site object. base - The String path to the source. dir - The String path between the source and the file. name - The String filename of the file.
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/jekyll/page.rb', line 39 def initialize(site, base, dir, name) @site = site @base = base @dir = dir @name = name @path = if site.in_theme_dir(base) == base # we're in a theme site.in_theme_dir(base, dir, name) else site.in_source_dir(base, dir, name) end process(name) read_yaml(PathManager.join(base, dir), name) generate_excerpt if site.config["page_excerpts"] data.default_proc = proc do |_, key| site.frontmatter_defaults.find(relative_path, type, key) end Jekyll::Hooks.trigger :pages, :post_init, self end |
Instance Attribute Details
#basename ⇒ Object
Returns the value of attribute basename
9 10 11 |
# File 'lib/jekyll/page.rb', line 9 def basename @basename end |
#content ⇒ Object
Returns the value of attribute content
10 11 12 |
# File 'lib/jekyll/page.rb', line 10 def content @content end |
#data ⇒ Object
Returns the value of attribute data
10 11 12 |
# File 'lib/jekyll/page.rb', line 10 def data @data end |
#dir ⇒ Object
The generated directory into which the page will be placed upon generation. This is derived from the permalink or, if permalink is absent, will be '/'
Returns the String destination directory.
66 67 68 69 70 71 72 73 |
# File 'lib/jekyll/page.rb', line 66 def dir if url.end_with?("/") url else url_dir = File.dirname(url) url_dir.end_with?("/") ? url_dir : "#{url_dir}/" end end |
#ext ⇒ Object Also known as: extname
Returns the value of attribute ext
9 10 11 |
# File 'lib/jekyll/page.rb', line 9 def ext @ext end |
#name ⇒ Object
Returns the value of attribute name
9 10 11 |
# File 'lib/jekyll/page.rb', line 9 def name @name end |
#output ⇒ Object
Returns the value of attribute output
10 11 12 |
# File 'lib/jekyll/page.rb', line 10 def output @output end |
#pager ⇒ Object
Returns the value of attribute pager
8 9 10 |
# File 'lib/jekyll/page.rb', line 8 def pager @pager end |
#site ⇒ Object
Returns the value of attribute site
8 9 10 |
# File 'lib/jekyll/page.rb', line 8 def site @site end |
Instance Method Details
#destination(dest) ⇒ Object
Obtain destination path.
dest - The String path to the destination dir.
Returns the destination file path String.
158 159 160 161 162 163 |
# File 'lib/jekyll/page.rb', line 158 def destination(dest) path = site.in_dest_dir(dest, URL.unescape_path(url)) path = File.join(path, "index") if url.end_with?("/") path << output_ext unless path.end_with? output_ext path end |
#excerpt ⇒ Object
192 193 194 195 196 |
# File 'lib/jekyll/page.rb', line 192 def excerpt return @excerpt if defined?(@excerpt) @excerpt = data["excerpt"]&.to_s end |
#excerpt_separator ⇒ Object
188 189 190 |
# File 'lib/jekyll/page.rb', line 188 def excerpt_separator @excerpt_separator ||= (data["excerpt_separator"] || site.config["excerpt_separator"]).to_s end |
#generate_excerpt? ⇒ Boolean
198 199 200 |
# File 'lib/jekyll/page.rb', line 198 def generate_excerpt? !excerpt_separator.empty? && self.class == Jekyll::Page && html? end |
#html? ⇒ Boolean
Returns the Boolean of whether this Page is HTML or not.
171 172 173 |
# File 'lib/jekyll/page.rb', line 171 def html? HTML_EXTENSIONS.include?(output_ext) end |
#index? ⇒ Boolean
Returns the Boolean of whether this Page is an index file or not.
176 177 178 |
# File 'lib/jekyll/page.rb', line 176 def index? basename == "index" end |
#inspect ⇒ Object
Returns the object as a debug String.
166 167 168 |
# File 'lib/jekyll/page.rb', line 166 def inspect "#<#{self.class} @relative_path=#{relative_path.inspect}>" end |
#path ⇒ Object
The path to the source file
Returns the path to the source file
144 145 146 |
# File 'lib/jekyll/page.rb', line 144 def path data.fetch("path") { relative_path } end |
#permalink ⇒ Object
The full path and filename of the post. Defined in the YAML of the post body.
Returns the String permalink or nil if none has been set.
79 80 81 |
# File 'lib/jekyll/page.rb', line 79 def permalink data.nil? ? nil : data["permalink"] end |
#process(name) ⇒ Object
Extract information from the page filename.
name - The String filename of the page file.
NOTE: `String#gsub` removes all trailing periods (in comparison to `String#chomp`) Returns nothing.
123 124 125 126 |
# File 'lib/jekyll/page.rb', line 123 def process(name) self.ext = File.extname(name) self.basename = name[0..-ext.length - 1].gsub(%r!\.*\z!, "") end |
#relative_path ⇒ Object
The path to the page source file, relative to the site source
149 150 151 |
# File 'lib/jekyll/page.rb', line 149 def relative_path @relative_path ||= File.join(*[@dir, @name].map(&:to_s).reject(&:empty?)).sub(%r!\A/!, "") end |
#render(layouts, site_payload) ⇒ Object
Add any necessary layouts to this post
layouts - The Hash of => “layout”. site_payload - The site payload Hash.
Returns String rendered page.
134 135 136 137 138 139 |
# File 'lib/jekyll/page.rb', line 134 def render(layouts, site_payload) site_payload["page"] = to_liquid site_payload["paginator"] = pager.to_liquid do_layout(site_payload, layouts) end |
#template ⇒ Object
The template of the permalink.
Returns the template String.
86 87 88 89 90 91 92 93 94 |
# File 'lib/jekyll/page.rb', line 86 def template if !html? "/:path/:basename:output_ext" elsif index? "/:path/" else Utils.add_permalink_suffix("/:path/:basename", site.permalink_style) end end |
#trigger_hooks(hook_name, *args) ⇒ Object
180 181 182 |
# File 'lib/jekyll/page.rb', line 180 def trigger_hooks(hook_name, *args) Jekyll::Hooks.trigger :pages, hook_name, self, *args end |
#url ⇒ Object
The generated relative url of this page. e.g. /about.html.
Returns the String url.
99 100 101 102 103 104 105 |
# File 'lib/jekyll/page.rb', line 99 def url @url ||= URL.new( :template => template, :placeholders => url_placeholders, :permalink => permalink ).to_s end |
#url_placeholders ⇒ Object
Returns a hash of URL placeholder names (as symbols) mapping to the desired placeholder replacements. For details see “url.rb”
109 110 111 112 113 114 115 |
# File 'lib/jekyll/page.rb', line 109 def url_placeholders { :path => @dir, :basename => basename, :output_ext => output_ext, } end |
#write? ⇒ Boolean
184 185 186 |
# File 'lib/jekyll/page.rb', line 184 def write? true end |