class Jekyll::Page
def destination(dest)
dest - The String path to the destination dir.
Obtain destination path.
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
def dir
permalink is absent, will be '/'
upon generation. This is derived from the permalink or, if
The generated directory into which the page will be placed
def dir url.end_with?("/") ? url : url_dir end
def excerpt
def excerpt return @excerpt if defined?(@excerpt) @excerpt = data["excerpt"] ? data["excerpt"].to_s : nil end
def excerpt_separator
def excerpt_separator @excerpt_separator ||= (data["excerpt_separator"] || site.config["excerpt_separator"]).to_s end
def generate_excerpt
def generate_excerpt return unless generate_excerpt? data["excerpt"] ||= Jekyll::PageExcerpt.new(self) end
def generate_excerpt?
def generate_excerpt? !excerpt_separator.empty? && instance_of?(Jekyll::Page) && html? end
def html?
def html? HTML_EXTENSIONS.include?(output_ext) end
def index?
def index? basename == "index" end
def initialize(site, base, dir, name)
dir - The String path between the source and the file.
base - The String path to the source.
site - The Site object.
Initialize a new Page.
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
def inspect
def inspect "#<#{self.class} @relative_path=#{relative_path.inspect}>" end
def path
The path to the source file
def path data.fetch("path") { relative_path } end
def permalink
body.
The full path and filename of the post. Defined in the YAML of the post
def permalink data.nil? ? nil : data["permalink"] end
def process(name)
NOTE: `String#gsub` removes all trailing periods (in comparison to `String#chomp`)
name - The String filename of the page file.
Extract information from the page filename.
def process(name) return unless name self.ext = File.extname(name) self.basename = name[0..-ext.length - 1].gsub(%r!\.*\z!, "") end
def relative_path
def relative_path @relative_path ||= PathManager.join(@dir, @name).delete_prefix("/") end
def render(layouts, site_payload)
site_payload - The site payload Hash.
layouts - The Hash of {"name" => "layout"}.
Add any necessary layouts to this post
def render(layouts, site_payload) site_payload["page"] = to_liquid site_payload["paginator"] = pager.to_liquid do_layout(site_payload, layouts) end
def template
The template of the permalink.
def template if !html? "/:path/:basename:output_ext" elsif index? "/:path/" else Utils.add_permalink_suffix("/:path/:basename", site.permalink_style) end end
def trigger_hooks(hook_name, *args)
def trigger_hooks(hook_name, *args) Jekyll::Hooks.trigger :pages, hook_name, self, *args end
def url
The generated relative url of this page. e.g. /about.html.
def url @url ||= URL.new( :template => template, :placeholders => url_placeholders, :permalink => permalink ).to_s end
def url_dir
def url_dir @url_dir ||= begin value = File.dirname(url) value.end_with?("/") ? value : "#{value}/" end end
def url_placeholders
Returns a hash of URL placeholder names (as symbols) mapping to the
def url_placeholders { :path => @dir, :basename => basename, :output_ext => output_ext, } end
def write?
def write? true end