Class: Jekyll::Page

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

Direct Known Subclasses

PageWithoutAFile

Constant Summary collapse

ATTRIBUTES_FOR_LIQUID =

Attributes for Liquid templates

%w(
  content
  dir
  name
  path
  url
).freeze
HTML_EXTENSIONS =

A set of extensions that are considered HTML or HTML-like so we should not alter them, this includes .xhtml through XHTM5.

%w(
  .html
  .xhtml
  .htm
).freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Convertible

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

[View source]

38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/ngage/jekyll/page.rb', line 38

def initialize(site, base, dir, name)
  @site = site
  @base = base
  @dir  = dir
  @name = name
  @path = if site.in_theme_dir(base) == base # we're in a theme
            site.in_theme_dir(base, dir, name)
          else
            site.in_source_dir(base, dir, name)
          end

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

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

  Jekyll::Hooks.trigger :pages, :post_init, self
end

Instance Attribute Details

#basenameObject

Returns the value of attribute basename.


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

def basename
  @basename
end

#contentObject

Returns the value of attribute content.


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

def content
  @content
end

#dataObject

Returns the value of attribute data.


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

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, will be ‘/’

Returns the String destination directory.


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

def dir
  if url.end_with?("/")
    url
  else
    url_dir = File.dirname(url)
    url_dir.end_with?("/") ? url_dir : "#{url_dir}/"
  end
end

#extObject Also known as: extname

Returns the value of attribute ext.


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

def ext
  @ext
end

#nameObject

Returns the value of attribute name.


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

def name
  @name
end

#outputObject

Returns the value of attribute output.


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

def output
  @output
end

#pagerObject

Returns the value of attribute pager.


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

def pager
  @pager
end

#siteObject

Returns the value of attribute site.


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

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.

[View source]

155
156
157
158
159
160
# File 'lib/ngage/jekyll/page.rb', line 155

def destination(dest)
  path = site.in_dest_dir(dest, URL.unescape_path(url))
  path = File.join(path, "index") 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)
[View source]

168
169
170
# File 'lib/ngage/jekyll/page.rb', line 168

def html?
  HTML_EXTENSIONS.include?(output_ext)
end

#index?Boolean

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

Returns:

  • (Boolean)
[View source]

173
174
175
# File 'lib/ngage/jekyll/page.rb', line 173

def index?
  basename == "index"
end

#inspectObject

Returns the object as a debug String.

[View source]

163
164
165
# File 'lib/ngage/jekyll/page.rb', line 163

def inspect
  "#<#{self.class} @name=#{name.inspect}>"
end

#pathObject

The path to the source file

Returns the path to the source file

[View source]

141
142
143
# File 'lib/ngage/jekyll/page.rb', line 141

def path
  data.fetch("path") { relative_path }
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.

[View source]

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

def permalink
  data.nil? ? nil : data["permalink"]
end

#process(name) ⇒ Object

Extract information from the page filename.

name - The String filename of the page file.

Returns nothing.

[View source]

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

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

[View source]

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

def relative_path
  File.join(*[@dir, @name].map(&:to_s).reject(&:empty?)).sub(%r!\A\/!, "")
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 String rendered page.

[View source]

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

def render(layouts, site_payload)
  site_payload["page"] = to_liquid
  site_payload["paginator"] = pager.to_liquid

  do_layout(site_payload, layouts)
end

#templateObject

The template of the permalink.

Returns the template String.

[View source]

84
85
86
87
88
89
90
91
92
# File 'lib/ngage/jekyll/page.rb', line 84

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

#trigger_hooks(hook_name, *args) ⇒ Object

[View source]

177
178
179
# File 'lib/ngage/jekyll/page.rb', line 177

def trigger_hooks(hook_name, *args)
  Jekyll::Hooks.trigger :pages, hook_name, self, *args
end

#urlObject

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

Returns the String url.

[View source]

97
98
99
100
101
102
103
# File 'lib/ngage/jekyll/page.rb', line 97

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”

[View source]

107
108
109
110
111
112
113
# File 'lib/ngage/jekyll/page.rb', line 107

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

#write?Boolean

Returns:

  • (Boolean)
[View source]

181
182
183
# File 'lib/ngage/jekyll/page.rb', line 181

def write?
  true
end