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 dir is the String path between and the file name is the String filename of the file

Returns



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



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:



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

def html?
  output_ext == '.html'
end

#index?Boolean

Returns:



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



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 => "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



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