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+ is the Site
+base+ is the String path to the <source>
+dir+ is the String path between <source> and the file
+name+ is the String filename of the file

Returns <Page>



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.



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, set to ‘/’

Returns <String>



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

def dir
  @dir
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+ is the String path to the destination dir

Returns destination file path.



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

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:

  • (Boolean)


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

def html?
  output_ext == '.html'
end

#index?Boolean

Returns:

  • (Boolean)


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

def index?
  basename == 'index'
end

#inspectObject



120
121
122
# File 'lib/jekyll/page.rb', line 120

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 (Optional)

Returns <String>



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

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

#process(name) ⇒ Object

Extract information from the page filename

+name+ is the String filename of the page file

Returns nothing



72
73
74
75
# File 'lib/jekyll/page.rb', line 72

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+ is a Hash of {"name" => "layout"}
+site_payload+ is the site payload hash

Returns nothing



82
83
84
85
86
87
88
89
# File 'lib/jekyll/page.rb', line 82

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

  do_layout(payload, layouts)
end

#templateObject



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

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

#to_liquidObject



91
92
93
94
95
# File 'lib/jekyll/page.rb', line 91

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 <String>



57
58
59
60
61
62
63
64
65
66
# File 'lib/jekyll/page.rb', line 57

def url
  return permalink if permalink

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

#write(dest) ⇒ Object

Write the generated page file to the destination directory.

+dest+ is the String path to the destination dir

Returns nothing



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

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