Class: Jekyll::Page

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Convertible

#converter, #do_layout, #output_ext, #read_yaml, #to_s, #transform

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.



17
18
19
20
21
22
23
24
25
# File 'lib/jekyll/page.rb', line 17

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

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

Instance Attribute Details

#basenameObject

Returns the value of attribute basename.



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

def basename
  @basename
end

#contentObject

Returns the value of attribute content.



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

def content
  @content
end

#dataObject

Returns the value of attribute data.



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

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.



32
33
34
# File 'lib/jekyll/page.rb', line 32

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

#extObject

Returns the value of attribute ext.



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

def ext
  @ext
end

#nameObject

Returns the value of attribute name.



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

def name
  @name
end

#outputObject

Returns the value of attribute output.



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

def output
  @output
end

#pagerObject

Returns the value of attribute pager.



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

def pager
  @pager
end

#siteObject

Returns the value of attribute site.



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

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.



117
118
119
120
121
122
123
# File 'lib/jekyll/page.rb', line 117

def destination(dest)
  # The url needs to be unescaped in order to preserve the correct
  # filename.
  path = File.join(dest, @dir, CGI.unescape(self.url))
  path = File.join(path, "index.html") if self.url =~ /\/$/
  path
end

#html?Boolean

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

Returns:

  • (Boolean)


144
145
146
# File 'lib/jekyll/page.rb', line 144

def html?
  output_ext == '.html'
end

#index?Boolean

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

Returns:

  • (Boolean)


149
150
151
# File 'lib/jekyll/page.rb', line 149

def index?
  basename == 'index'
end

#inspectObject

Returns the object as a debug String.



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

def inspect
  "#<Jekyll:Page @name=#{self.name.inspect}>"
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.



40
41
42
# File 'lib/jekyll/page.rb', line 40

def permalink
  self.data && self.data['permalink']
end

#process(name) ⇒ Object

Extract information from the page filename.

name - The String filename of the page file.

Returns nothing.



83
84
85
86
# File 'lib/jekyll/page.rb', line 83

def process(name)
  self.ext = File.extname(name)
  self.basename = name[0 .. -self.ext.length-1]
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.



94
95
96
97
98
99
100
101
# File 'lib/jekyll/page.rb', line 94

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

  do_layout(payload, layouts)
end

#templateObject

The template of the permalink.

Returns the template String.



47
48
49
50
51
52
53
# File 'lib/jekyll/page.rb', line 47

def template
  if self.site.permalink_style == :pretty && !index? && html?
    "/:basename/"
  else
    "/:basename:output_ext"
  end
end

#to_liquidObject

Convert this Page’s data to a Hash suitable for use by Liquid.

Returns the Hash representation of this Page.



106
107
108
109
110
# File 'lib/jekyll/page.rb', line 106

def to_liquid
  self.data.deep_merge({
    "url"        => File.join(@dir, self.url),
    "content"    => self.content })
end

#urlObject

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

Returns the String url.



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/jekyll/page.rb', line 58

def url
  return @url if @url

  url = if permalink
    permalink
  else
    {
      "basename"   => self.basename,
      "output_ext" => self.output_ext,
    }.inject(template) { |result, token|
      result.gsub(/:#{token.first}/, token.last)
    }.gsub(/\/\//, "/")
  end

  # sanitize url
  @url = url.split('/').reject{ |part| part =~ /^\.+$/ }.join('/')
  @url += "/" if url =~ /\/$/
  @url
end

#write(dest) ⇒ Object

Write the generated page file to the destination directory.

dest - The String path to the destination dir.

Returns nothing.



130
131
132
133
134
135
136
# File 'lib/jekyll/page.rb', line 130

def write(dest)
  path = destination(dest)
  FileUtils.mkdir_p(File.dirname(path))
  File.open(path, 'w') do |f|
    f.write(self.output)
  end
end