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

#content_type, #do_layout, #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

#siteObject

Returns the value of attribute site.



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

def site
  @site
end

Instance Method Details

#inspectObject



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

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



67
68
69
70
# File 'lib/jekyll/page.rb', line 67

def process(name)
  self.ext = File.extname(name)
  self.basename = name.split('.')[0..-2].first
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



77
78
79
80
# File 'lib/jekyll/page.rb', line 77

def render(layouts, site_payload)
  payload = {"page" => self.data}.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?
    "/:name/"
  else
    "/:name.html"
  end
end

#urlObject

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

Returns



57
58
59
60
61
# File 'lib/jekyll/page.rb', line 57

def url
  return permalink if permalink

  @url ||= (ext == '.html') ? template.gsub(':name', basename) : "/#{name}"
end

#write(dest_prefix, dest_suffix = nil) ⇒ Object

Write the generated page file to the destination directory. dest_prefix is the String path to the destination dir dest_suffix is a suffix path to the destination dir

Returns nothing



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/jekyll/page.rb', line 87

def write(dest_prefix, dest_suffix = nil)
  dest = File.join(dest_prefix, @dir)
  dest = File.join(dest, dest_suffix) if dest_suffix
  FileUtils.mkdir_p(dest)

  # The url needs to be unescaped in order to preserve the correct filename
  path = File.join(dest, CGI.unescape(self.url))
  if self.ext == '.html' && self.url[/\.html$/].nil?
    FileUtils.mkdir_p(path)
    path = File.join(path, "index.html")
  end

  File.open(path, 'w') do |f|
    f.write(self.output)
  end
end