Class: Jekyll::Page

Inherits:
Object
  • Object
show all
Includes:
Convertible
Defined in:
lib/jekyll/page.rb

Constant Summary collapse

ATTRIBUTES_FOR_LIQUID =

Attributes for Liquid templates

%w[
content
dir
name
path
url

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Convertible

#[], #asset_file?, #coffeescript_file?, #converters, #do_layout, #invalid_layout?, #merged_file_read_opts, #output_ext, #place_in_layout?, #published?, #read_yaml, #render_all_layouts, #render_liquid, #render_with_liquid?, #sass_file?, #to_liquid, #to_s, #transform, #type, #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.


25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/jekyll/page.rb', line 25

def initialize(site, base, dir, name)
  @site = site
  @base = base
  @dir  = dir
  @name = name


  process(name)
  read_yaml(File.join(base, dir), name)

  data.default_proc = proc do |hash, key|
    site.frontmatter_defaults.find(File.join(dir, name), type, key)
  end
end

Instance Attribute Details

#basenameObject

Returns the value of attribute basename


7
8
9
# File 'lib/jekyll/page.rb', line 7

def basename
  @basename
end

#contentObject

Returns the value of attribute content


8
9
10
# File 'lib/jekyll/page.rb', line 8

def content
  @content
end

#dataObject

Returns the value of attribute data


8
9
10
# File 'lib/jekyll/page.rb', line 8

def data
  @data
end

#dirObject

The generated directory into which the page will be placed upon generation. This is derived from the permalink or, if permalink is absent, we be '/'

Returns the String destination directory.


45
46
47
# File 'lib/jekyll/page.rb', line 45

def dir
  url[-1, 1] == '/' ? url : File.dirname(url)
end

#extObject

Returns the value of attribute ext


7
8
9
# File 'lib/jekyll/page.rb', line 7

def ext
  @ext
end

#nameObject

Returns the value of attribute name


7
8
9
# File 'lib/jekyll/page.rb', line 7

def name
  @name
end

#outputObject

Returns the value of attribute output


8
9
10
# File 'lib/jekyll/page.rb', line 8

def output
  @output
end

#pagerObject

Returns the value of attribute pager


6
7
8
# File 'lib/jekyll/page.rb', line 6

def pager
  @pager
end

#siteObject

Returns the value of attribute site


6
7
8
# File 'lib/jekyll/page.rb', line 6

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.


138
139
140
141
142
143
# File 'lib/jekyll/page.rb', line 138

def destination(dest)
  path = site.in_dest_dir(dest, URL.unescape_path(url))
  path = File.join(path, "index.html") if url.end_with?("/")
  path << output_ext unless path.end_with?(output_ext)
  path
end

#html?Boolean

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

Returns:

  • (Boolean)

151
152
153
# File 'lib/jekyll/page.rb', line 151

def html?
  output_ext == '.html'
end

#index?Boolean

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

Returns:

  • (Boolean)

156
157
158
# File 'lib/jekyll/page.rb', line 156

def index?
  basename == 'index'
end

#inspectObject

Returns the object as a debug String.


146
147
148
# File 'lib/jekyll/page.rb', line 146

def inspect
  "#<Jekyll:Page @name=#{name.inspect}>"
end

#pathObject

The path to the source file

Returns the path to the source file


124
125
126
# File 'lib/jekyll/page.rb', line 124

def path
  data.fetch('path') { relative_path.sub(/\A\//, '') }
end

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.


53
54
55
56
57
58
59
60
# File 'lib/jekyll/page.rb', line 53

def permalink
  return nil if data.nil? || data['permalink'].nil?
  if site.config['relative_permalinks']
    File.join(@dir, data['permalink'])
  else
    data['permalink']
  end
end

#process(name) ⇒ Object

Extract information from the page filename.

name - The String filename of the page file.

Returns nothing.


101
102
103
104
# File 'lib/jekyll/page.rb', line 101

def process(name)
  self.ext = File.extname(name)
  self.basename = name[0 .. -ext.length - 1]
end

#relative_pathObject

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


129
130
131
# File 'lib/jekyll/page.rb', line 129

def relative_path
  File.join(*[@dir, @name].map(&:to_s).reject(&:empty?))
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 nothing.


112
113
114
115
116
117
118
119
# File 'lib/jekyll/page.rb', line 112

def render(layouts, site_payload)
  payload = Utils.deep_merge_hashes({
    "page" => to_liquid,
    'paginator' => pager.to_liquid
  }, site_payload)

  do_layout(payload, layouts)
end

#templateObject

The template of the permalink.

Returns the template String.


65
66
67
68
69
70
71
72
73
# File 'lib/jekyll/page.rb', line 65

def template
  if !html?
    "/:path/:basename:output_ext"
  elsif index?
    "/:path/"
  else
    Utils.add_permalink_suffix("/:path/:basename", site.permalink_style)
  end
end

#urlObject

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

Returns the String url.


78
79
80
81
82
83
84
# File 'lib/jekyll/page.rb', line 78

def url
  @url ||= URL.new({
    :template => template,
    :placeholders => url_placeholders,
    :permalink => permalink
  }).to_s
end

#url_placeholdersObject

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


88
89
90
91
92
93
94
# File 'lib/jekyll/page.rb', line 88

def url_placeholders
  {
    :path       => @dir,
    :basename   => basename,
    :output_ext => output_ext
  }
end

160
161
162
# File 'lib/jekyll/page.rb', line 160

def uses_relative_permalinks
  permalink && !@dir.empty? && site.config['relative_permalinks']
end