class Jekyll::Page

Constants

ATTRIBUTES_FOR_LIQUID

Attributes for Liquid templates

HTML_EXTENSIONS

A set of extensions that are considered HTML or HTML-like so we should not alter them, this includes .xhtml through XHTM5.

Attributes

basename[RW]
content[RW]
data[RW]
dir[W]
ext[RW]
extname[RW]
name[RW]
output[RW]
pager[RW]
site[RW]

Public Class Methods

new(site, base, dir, name) click to toggle source

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.

# File lib/jekyll/page.rb, line 37
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

Public Instance Methods

destination(dest) click to toggle source

Obtain destination path.

dest - The String path to the destination dir.

Returns the destination file path String.

# File lib/jekyll/page.rb, line 153
def destination(dest)
  @destination ||= {}
  @destination[dest] ||= begin
    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
end
dir() click to toggle source

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.

# File lib/jekyll/page.rb, line 64
def dir
  url.end_with?("/") ? url : url_dir
end
excerpt() click to toggle source
# File lib/jekyll/page.rb, line 190
def excerpt
  return @excerpt if defined?(@excerpt)

  @excerpt = data["excerpt"] ? data["excerpt"].to_s : nil
end
excerpt_separator() click to toggle source
# File lib/jekyll/page.rb, line 186
def excerpt_separator
  @excerpt_separator ||= (data["excerpt_separator"] || site.config["excerpt_separator"]).to_s
end
generate_excerpt?() click to toggle source
# File lib/jekyll/page.rb, line 196
def generate_excerpt?
  !excerpt_separator.empty? && instance_of?(Jekyll::Page) && html?
end
html?() click to toggle source

Returns the Boolean of whether this Page is HTML or not.

# File lib/jekyll/page.rb, line 169
def html?
  HTML_EXTENSIONS.include?(output_ext)
end
index?() click to toggle source

Returns the Boolean of whether this Page is an index file or not.

# File lib/jekyll/page.rb, line 174
def index?
  basename == "index"
end
inspect() click to toggle source

Returns the object as a debug String.

# File lib/jekyll/page.rb, line 164
def inspect
  "#<#{self.class} @relative_path=#{relative_path.inspect}>"
end
path() click to toggle source

The path to the source file

Returns the path to the source file

# File lib/jekyll/page.rb, line 139
def path
  data.fetch("path") { relative_path }
end
process(name) click to toggle source

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.

# File lib/jekyll/page.rb, line 116
def process(name)
  return unless name

  self.ext = File.extname(name)
  self.basename = name[0..-ext.length - 1].gsub(%r!\.*\z!, "")
end
relative_path() click to toggle source

The path to the page source file, relative to the site source

# File lib/jekyll/page.rb, line 144
def relative_path
  @relative_path ||= PathManager.join(@dir, @name).delete_prefix("/")
end
render(layouts, site_payload) click to toggle source

Add any necessary layouts to this post

layouts - The Hash of {“name” => “layout”}. site_payload - The site payload Hash.

Returns String rendered page.

# File lib/jekyll/page.rb, line 129
def render(layouts, site_payload)
  site_payload["page"] = to_liquid
  site_payload["paginator"] = pager.to_liquid

  do_layout(site_payload, layouts)
end
template() click to toggle source

The template of the permalink.

Returns the template String.

# File lib/jekyll/page.rb, line 79
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) click to toggle source
# File lib/jekyll/page.rb, line 178
def trigger_hooks(hook_name, *args)
  Jekyll::Hooks.trigger :pages, hook_name, self, *args
end
url() click to toggle source

The generated relative url of this page. e.g. /about.html.

Returns the String url.

# File lib/jekyll/page.rb, line 92
def url
  @url ||= URL.new(
    :template     => template,
    :placeholders => url_placeholders,
    :permalink    => permalink
  ).to_s
end
url_placeholders() click to toggle source

Returns a hash of URL placeholder names (as symbols) mapping to the desired placeholder replacements. For details see “url.rb”

# File lib/jekyll/page.rb, line 102
def url_placeholders
  {
    :path       => @dir,
    :basename   => basename,
    :output_ext => output_ext,
  }
end
write?() click to toggle source
# File lib/jekyll/page.rb, line 182
def write?
  true
end

Private Instance Methods

generate_excerpt() click to toggle source
# File lib/jekyll/page.rb, line 202
def generate_excerpt
  return unless generate_excerpt?

  data["excerpt"] ||= Jekyll::PageExcerpt.new(self)
end
url_dir() click to toggle source
# File lib/jekyll/page.rb, line 208
def url_dir
  @url_dir ||= begin
    value = File.dirname(url)
    value.end_with?("/") ? value : "#{value}/"
  end
end