bridgetown-core 0.15.0.beta1 → 0.16.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +14 -0
- data/bridgetown-core.gemspec +2 -0
- data/lib/bridgetown-core.rb +6 -1
- data/lib/bridgetown-core/commands/concerns/actions.rb +54 -21
- data/lib/bridgetown-core/commands/console.rb +12 -2
- data/lib/bridgetown-core/commands/serve.rb +5 -0
- data/lib/bridgetown-core/concerns/data_accessible.rb +19 -0
- data/lib/bridgetown-core/concerns/layout_placeable.rb +17 -0
- data/lib/bridgetown-core/concerns/liquid_renderable.rb +20 -0
- data/lib/bridgetown-core/concerns/publishable.rb +10 -0
- data/lib/bridgetown-core/concerns/site/configurable.rb +62 -31
- data/lib/bridgetown-core/concerns/site/content.rb +88 -29
- data/lib/bridgetown-core/concerns/site/extensible.rb +15 -12
- data/lib/bridgetown-core/concerns/site/processable.rb +12 -10
- data/lib/bridgetown-core/concerns/site/renderable.rb +23 -4
- data/lib/bridgetown-core/concerns/site/writable.rb +16 -2
- data/lib/bridgetown-core/concerns/validatable.rb +59 -0
- data/lib/bridgetown-core/configuration.rb +1 -0
- data/lib/bridgetown-core/converter.rb +34 -0
- data/lib/bridgetown-core/converters/erb_templates.rb +61 -0
- data/lib/bridgetown-core/converters/markdown.rb +6 -23
- data/lib/bridgetown-core/converters/smartypants.rb +0 -10
- data/lib/bridgetown-core/document.rb +8 -52
- data/lib/bridgetown-core/drops/document_drop.rb +9 -1
- data/lib/bridgetown-core/drops/page_drop.rb +1 -1
- data/lib/bridgetown-core/errors.rb +2 -0
- data/lib/bridgetown-core/excerpt.rb +5 -7
- data/lib/bridgetown-core/filters.rb +2 -0
- data/lib/bridgetown-core/layout.rb +24 -1
- data/lib/bridgetown-core/liquid_renderer/file.rb +1 -4
- data/lib/bridgetown-core/liquid_renderer/file_system.rb +1 -1
- data/lib/bridgetown-core/page.rb +36 -42
- data/lib/bridgetown-core/plugin_manager.rb +27 -13
- data/lib/bridgetown-core/regenerator.rb +1 -1
- data/lib/bridgetown-core/renderer.rb +41 -15
- data/lib/bridgetown-core/ruby_template_view.rb +84 -0
- data/lib/bridgetown-core/tags/class_map.rb +90 -0
- data/lib/bridgetown-core/tags/include.rb +2 -0
- data/lib/bridgetown-core/tags/render_content.rb +14 -2
- data/lib/bridgetown-core/tags/webpack_path.rb +48 -16
- data/lib/bridgetown-core/utils.rb +44 -0
- data/lib/bridgetown-core/version.rb +2 -2
- data/lib/site_template/bridgetown.config.yml +5 -3
- data/lib/site_template/package.json +1 -0
- data/lib/site_template/src/_components/{footer.html → footer.liquid} +0 -0
- data/lib/site_template/src/_components/{head.html → head.liquid} +0 -0
- data/lib/site_template/src/_components/{navbar.html → navbar.liquid} +0 -0
- data/lib/site_template/src/_layouts/default.html +1 -1
- data/lib/site_template/webpack.config.js +3 -3
- metadata +41 -6
- data/lib/bridgetown-core/concerns/convertible.rb +0 -238
@@ -2,6 +2,20 @@
|
|
2
2
|
|
3
3
|
module Bridgetown
|
4
4
|
class Converter < Plugin
|
5
|
+
class << self
|
6
|
+
attr_accessor :extname_list
|
7
|
+
|
8
|
+
# Converters can provide one or more extensions they accept. Examples:
|
9
|
+
#
|
10
|
+
# * `input :erb`
|
11
|
+
# * `input %i(xls xlsx)`
|
12
|
+
def input(extnames)
|
13
|
+
extnames = Array(extnames)
|
14
|
+
self.extname_list ||= []
|
15
|
+
self.extname_list += extnames.map { |e| ".#{e.to_s.downcase}" }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
5
19
|
# Public: Get or set the highlighter prefix. When an argument is specified,
|
6
20
|
# the prefix will be set. If no argument is specified, the current prefix
|
7
21
|
# will be returned.
|
@@ -37,6 +51,26 @@ module Bridgetown
|
|
37
51
|
@config = config
|
38
52
|
end
|
39
53
|
|
54
|
+
# Does the given extension match this converter's list of acceptable extensions?
|
55
|
+
#
|
56
|
+
# @param [String] ext
|
57
|
+
# The file's extension (including the dot)
|
58
|
+
#
|
59
|
+
# @return [Boolean] Whether the extension matches one in the list
|
60
|
+
def matches(ext)
|
61
|
+
(self.class.extname_list || []).include?(ext.downcase)
|
62
|
+
end
|
63
|
+
|
64
|
+
# You can override this in Converter subclasses as needed. Default is ".html"
|
65
|
+
#
|
66
|
+
# @param [String] ext
|
67
|
+
# The extension of the original file
|
68
|
+
#
|
69
|
+
# @return [String] The output file extension (including the dot)
|
70
|
+
def output_ext(_ext)
|
71
|
+
".html"
|
72
|
+
end
|
73
|
+
|
40
74
|
# Get the highlighter prefix.
|
41
75
|
#
|
42
76
|
# Returns the String prefix.
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "tilt/erb"
|
4
|
+
require "active_support/core_ext/hash/keys"
|
5
|
+
|
6
|
+
module Bridgetown
|
7
|
+
class ERBView < RubyTemplateView
|
8
|
+
include ERB::Util
|
9
|
+
|
10
|
+
def partial(partial_name, options = {})
|
11
|
+
options.merge!(options[:locals]) if options[:locals]
|
12
|
+
|
13
|
+
partial_segments = partial_name.split("/")
|
14
|
+
partial_segments.last.sub!(%r!^!, "_")
|
15
|
+
partial_name = partial_segments.join("/")
|
16
|
+
|
17
|
+
Tilt::ERBTemplate.new(
|
18
|
+
site.in_source_dir(site.config[:partials_dir], "#{partial_name}.erb"),
|
19
|
+
trim: "<>-",
|
20
|
+
outvar: "@_erbout"
|
21
|
+
).render(self, options)
|
22
|
+
end
|
23
|
+
|
24
|
+
def markdownify
|
25
|
+
previous_buffer_state = @_erbout
|
26
|
+
@_erbout = +""
|
27
|
+
result = yield
|
28
|
+
@_erbout = previous_buffer_state
|
29
|
+
|
30
|
+
content = Bridgetown::Utils.reindent_for_markdown(result)
|
31
|
+
converter = site.find_converter_instance(Bridgetown::Converters::Markdown)
|
32
|
+
md_output = converter.convert(content).strip
|
33
|
+
@_erbout << md_output
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
module Converters
|
38
|
+
class ERBTemplates < Converter
|
39
|
+
input :erb
|
40
|
+
|
41
|
+
# Logic to do the content conversion.
|
42
|
+
#
|
43
|
+
# content - String content of file (without front matter).
|
44
|
+
#
|
45
|
+
# Returns a String of the converted content.
|
46
|
+
def convert(content, convertible)
|
47
|
+
erb_view = Bridgetown::ERBView.new(convertible)
|
48
|
+
|
49
|
+
erb_renderer = Tilt::ERBTemplate.new(trim: "<>-", outvar: "@_erbout") { content }
|
50
|
+
|
51
|
+
if convertible.is_a?(Bridgetown::Layout)
|
52
|
+
erb_renderer.render(erb_view) do
|
53
|
+
convertible.current_document_output
|
54
|
+
end
|
55
|
+
else
|
56
|
+
erb_renderer.render(erb_view)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -8,6 +8,12 @@ module Bridgetown
|
|
8
8
|
highlighter_prefix "\n"
|
9
9
|
highlighter_suffix "\n"
|
10
10
|
|
11
|
+
def initialize(config = {})
|
12
|
+
super
|
13
|
+
|
14
|
+
self.class.input @config["markdown_ext"].split(",")
|
15
|
+
end
|
16
|
+
|
11
17
|
def setup
|
12
18
|
return if @setup ||= false
|
13
19
|
|
@@ -51,25 +57,6 @@ module Bridgetown
|
|
51
57
|
self.class.constants - [:KramdownParser, :PRIORITIES]
|
52
58
|
end
|
53
59
|
|
54
|
-
# Does the given extension match this converter's list of acceptable extensions?
|
55
|
-
# Takes one argument: the file's extension (including the dot).
|
56
|
-
#
|
57
|
-
# ext - The String extension to check.
|
58
|
-
#
|
59
|
-
# Returns true if it matches, false otherwise.
|
60
|
-
def matches(ext)
|
61
|
-
extname_list.include?(ext.downcase)
|
62
|
-
end
|
63
|
-
|
64
|
-
# Public: The extension to be given to the output file (including the dot).
|
65
|
-
#
|
66
|
-
# ext - The String extension or original file.
|
67
|
-
#
|
68
|
-
# Returns The String output file extension.
|
69
|
-
def output_ext(_ext)
|
70
|
-
".html"
|
71
|
-
end
|
72
|
-
|
73
60
|
# Logic to do the content conversion.
|
74
61
|
#
|
75
62
|
# content - String content of file (without front matter).
|
@@ -82,10 +69,6 @@ module Bridgetown
|
|
82
69
|
end
|
83
70
|
end
|
84
71
|
|
85
|
-
def extname_list
|
86
|
-
@extname_list ||= @config["markdown_ext"].split(",").map! { |e| ".#{e.downcase}" }
|
87
|
-
end
|
88
|
-
|
89
72
|
private
|
90
73
|
|
91
74
|
def custom_processor
|
@@ -30,16 +30,6 @@ module Bridgetown
|
|
30
30
|
@config[:input] = :SmartyPants
|
31
31
|
end
|
32
32
|
|
33
|
-
# Does the given extension match this converter's list of acceptable extensions?
|
34
|
-
# Takes one argument: the file's extension (including the dot).
|
35
|
-
#
|
36
|
-
# ext - The String extension to check.
|
37
|
-
#
|
38
|
-
# Returns true if it matches, false otherwise.
|
39
|
-
def matches(_ext)
|
40
|
-
false
|
41
|
-
end
|
42
|
-
|
43
33
|
# Public: The extension to be given to the output file (including the dot).
|
44
34
|
#
|
45
35
|
# ext - The String extension or original file.
|
@@ -2,8 +2,12 @@
|
|
2
2
|
|
3
3
|
module Bridgetown
|
4
4
|
class Document
|
5
|
-
include Comparable
|
6
5
|
extend Forwardable
|
6
|
+
include DataAccessible
|
7
|
+
include Comparable
|
8
|
+
include LayoutPlaceable
|
9
|
+
include LiquidRenderable
|
10
|
+
include Publishable
|
7
11
|
|
8
12
|
attr_reader :path, :site, :extname, :collection, :type
|
9
13
|
attr_accessor :content, :output
|
@@ -95,6 +99,9 @@ module Bridgetown
|
|
95
99
|
@relative_path ||= path.sub("#{site.collections_path}/", "")
|
96
100
|
end
|
97
101
|
|
102
|
+
# FIXME: spinning up a new Renderer object just to get an extension
|
103
|
+
# seems excessive
|
104
|
+
#
|
98
105
|
# The output extension of the document.
|
99
106
|
#
|
100
107
|
# Returns the output extension
|
@@ -143,38 +150,6 @@ module Bridgetown
|
|
143
150
|
YAML_FILE_EXTS.include?(extname)
|
144
151
|
end
|
145
152
|
|
146
|
-
# TODO: Depricated
|
147
|
-
# Used to determine CoffeeScript and Sass/SCSS files.
|
148
|
-
def asset_file?
|
149
|
-
false
|
150
|
-
end
|
151
|
-
|
152
|
-
# Determine whether the file should be rendered with Liquid.
|
153
|
-
#
|
154
|
-
# Returns false if the document is either an asset file or a yaml file,
|
155
|
-
# or if the document doesn't contain any Liquid Tags or Variables,
|
156
|
-
# true otherwise.
|
157
|
-
def render_with_liquid?
|
158
|
-
return false if data["render_with_liquid"] == false
|
159
|
-
|
160
|
-
!(yaml_file? || !Utils.has_liquid_construct?(content))
|
161
|
-
end
|
162
|
-
|
163
|
-
# Determine whether the file should be rendered with a layout.
|
164
|
-
#
|
165
|
-
# Returns true if the Front Matter specifies that `layout` is set to `none`.
|
166
|
-
def no_layout?
|
167
|
-
data["layout"] == "none"
|
168
|
-
end
|
169
|
-
|
170
|
-
# Determine whether the file should be placed into layouts.
|
171
|
-
#
|
172
|
-
# Returns false if the document is set to `layouts: none`, or is either an
|
173
|
-
# asset file or a yaml file. Returns true otherwise.
|
174
|
-
def place_in_layout?
|
175
|
-
!(asset_file? || yaml_file? || no_layout?)
|
176
|
-
end
|
177
|
-
|
178
153
|
# The URL template where the document would be accessible.
|
179
154
|
#
|
180
155
|
# Returns the URL template for the document.
|
@@ -209,10 +184,6 @@ module Bridgetown
|
|
209
184
|
).to_s
|
210
185
|
end
|
211
186
|
|
212
|
-
def [](key)
|
213
|
-
data[key]
|
214
|
-
end
|
215
|
-
|
216
187
|
# The full path to the output file.
|
217
188
|
#
|
218
189
|
# base_directory - the base path of the output directory
|
@@ -243,14 +214,6 @@ module Bridgetown
|
|
243
214
|
trigger_hooks(:post_write)
|
244
215
|
end
|
245
216
|
|
246
|
-
# Whether the file is published or not, as indicated in YAML front-matter
|
247
|
-
#
|
248
|
-
# Returns 'false' if the 'published' key is specified in the
|
249
|
-
# YAML front-matter and is 'false'. Otherwise returns 'true'.
|
250
|
-
def published?
|
251
|
-
!(data.key?("published") && data["published"] == false)
|
252
|
-
end
|
253
|
-
|
254
217
|
# Read in the file and assign the content and data based on the file contents.
|
255
218
|
# Merge the frontmatter of the file with the frontmatter default
|
256
219
|
# values
|
@@ -287,13 +250,6 @@ module Bridgetown
|
|
287
250
|
"#<#{self.class} #{relative_path} collection=#{collection.label}>"
|
288
251
|
end
|
289
252
|
|
290
|
-
# The string representation for this document.
|
291
|
-
#
|
292
|
-
# Returns the content of the document
|
293
|
-
def to_s
|
294
|
-
output || content || "NO CONTENT"
|
295
|
-
end
|
296
|
-
|
297
253
|
# Compare this document against another document.
|
298
254
|
# Comparison is a comparison between the 2 paths of the documents.
|
299
255
|
#
|
@@ -12,7 +12,15 @@ module Bridgetown
|
|
12
12
|
mutable false
|
13
13
|
|
14
14
|
def_delegator :@obj, :relative_path, :path
|
15
|
-
def_delegators :@obj,
|
15
|
+
def_delegators :@obj,
|
16
|
+
:id,
|
17
|
+
:output,
|
18
|
+
:content,
|
19
|
+
:to_s,
|
20
|
+
:relative_path,
|
21
|
+
:url,
|
22
|
+
:date,
|
23
|
+
:related_posts
|
16
24
|
|
17
25
|
private def_delegator :@obj, :data, :fallback_data
|
18
26
|
|
@@ -3,6 +3,7 @@
|
|
3
3
|
module Bridgetown
|
4
4
|
class Excerpt
|
5
5
|
extend Forwardable
|
6
|
+
include LiquidRenderable
|
6
7
|
|
7
8
|
attr_accessor :doc
|
8
9
|
attr_accessor :content, :ext
|
@@ -81,19 +82,16 @@ module Bridgetown
|
|
81
82
|
end
|
82
83
|
|
83
84
|
def output
|
84
|
-
@output
|
85
|
+
@output || (
|
86
|
+
Renderer.new(doc.site, self, site.site_payload).run
|
87
|
+
@output
|
88
|
+
)
|
85
89
|
end
|
86
90
|
|
87
91
|
def place_in_layout?
|
88
92
|
false
|
89
93
|
end
|
90
94
|
|
91
|
-
def render_with_liquid?
|
92
|
-
return false if data["render_with_liquid"] == false
|
93
|
-
|
94
|
-
!(yaml_file? || !Utils.has_liquid_construct?(content))
|
95
|
-
end
|
96
|
-
|
97
95
|
protected
|
98
96
|
|
99
97
|
# Internal: Extract excerpt from the content
|
@@ -30,6 +30,7 @@ module Bridgetown
|
|
30
30
|
).convert(input.to_s)
|
31
31
|
end
|
32
32
|
|
33
|
+
# TODO: This should be removed, there is no Sass converter
|
33
34
|
# Convert a Sass string into CSS output.
|
34
35
|
#
|
35
36
|
# input - The Sass String to convert.
|
@@ -41,6 +42,7 @@ module Bridgetown
|
|
41
42
|
).convert(input)
|
42
43
|
end
|
43
44
|
|
45
|
+
# TODO: This should be removed, there is no Scss converter
|
44
46
|
# Convert a Scss string into CSS output.
|
45
47
|
#
|
46
48
|
# input - The Scss String to convert.
|
@@ -2,7 +2,9 @@
|
|
2
2
|
|
3
3
|
module Bridgetown
|
4
4
|
class Layout
|
5
|
-
include
|
5
|
+
include DataAccessible
|
6
|
+
include LiquidRenderable
|
7
|
+
include Validatable
|
6
8
|
|
7
9
|
# Gets the Site object.
|
8
10
|
attr_reader :site
|
@@ -25,6 +27,12 @@ module Bridgetown
|
|
25
27
|
# Gets/Sets the content of this layout.
|
26
28
|
attr_accessor :content
|
27
29
|
|
30
|
+
# Gets/Sets the current document (for layout-compatible converters)
|
31
|
+
attr_accessor :current_document
|
32
|
+
|
33
|
+
# Gets/Sets the document output (for layout-compatible converters)
|
34
|
+
attr_accessor :current_document_output
|
35
|
+
|
28
36
|
# Initialize a new Layout.
|
29
37
|
#
|
30
38
|
# site - The Site.
|
@@ -51,6 +59,14 @@ module Bridgetown
|
|
51
59
|
read_yaml(base, name)
|
52
60
|
end
|
53
61
|
|
62
|
+
# The inspect string for this document.
|
63
|
+
# Includes the relative path and the collection label.
|
64
|
+
#
|
65
|
+
# Returns the inspect string for this document.
|
66
|
+
def inspect
|
67
|
+
"#<#{self.class} #{@path}>"
|
68
|
+
end
|
69
|
+
|
54
70
|
# Extract information from the layout filename.
|
55
71
|
#
|
56
72
|
# name - The String filename of the layout file.
|
@@ -59,5 +75,12 @@ module Bridgetown
|
|
59
75
|
def process(name)
|
60
76
|
self.ext = File.extname(name)
|
61
77
|
end
|
78
|
+
|
79
|
+
# Provide this Layout's data to a Hash suitable for use by Liquid.
|
80
|
+
#
|
81
|
+
# Returns the Hash representation of this Layout.
|
82
|
+
def to_liquid
|
83
|
+
data
|
84
|
+
end
|
62
85
|
end
|
63
86
|
end
|
@@ -10,11 +10,8 @@ module Bridgetown
|
|
10
10
|
|
11
11
|
def parse(content)
|
12
12
|
measure_time do
|
13
|
-
# Remove extraneous indentation for rendercontent tags
|
14
|
-
processed_content = content.gsub(%r!^[ \t]+{%-? rendercontent!, "{% rendercontent")
|
15
|
-
|
16
13
|
@renderer.cache[@filename] ||= Liquid::Template.parse(
|
17
|
-
|
14
|
+
content, line_numbers: true
|
18
15
|
)
|
19
16
|
end
|
20
17
|
@template = @renderer.cache[@filename]
|
data/lib/bridgetown-core/page.rb
CHANGED
@@ -2,7 +2,11 @@
|
|
2
2
|
|
3
3
|
module Bridgetown
|
4
4
|
class Page
|
5
|
-
include
|
5
|
+
include DataAccessible
|
6
|
+
include LayoutPlaceable
|
7
|
+
include LiquidRenderable
|
8
|
+
include Publishable
|
9
|
+
include Validatable
|
6
10
|
|
7
11
|
attr_writer :dir
|
8
12
|
attr_accessor :site, :pager
|
@@ -11,15 +15,6 @@ module Bridgetown
|
|
11
15
|
|
12
16
|
alias_method :extname, :ext
|
13
17
|
|
14
|
-
# Attributes for Liquid templates
|
15
|
-
ATTRIBUTES_FOR_LIQUID = %w(
|
16
|
-
content
|
17
|
-
dir
|
18
|
-
name
|
19
|
-
path
|
20
|
-
url
|
21
|
-
).freeze
|
22
|
-
|
23
18
|
# A set of extensions that are considered HTML or HTML-like so we
|
24
19
|
# should not alter them, this includes .xhtml through XHTM5.
|
25
20
|
|
@@ -73,18 +68,6 @@ module Bridgetown
|
|
73
68
|
end
|
74
69
|
end
|
75
70
|
|
76
|
-
# For backwards-compatibility in subclasses that do not redefine
|
77
|
-
# the `:to_liquid` method, stash existing definition under a new name
|
78
|
-
#
|
79
|
-
# TODO: Remove in Bridgetown 5.0
|
80
|
-
alias_method :legacy_to_liquid, :to_liquid
|
81
|
-
private :legacy_to_liquid
|
82
|
-
|
83
|
-
# Private
|
84
|
-
# Subclasses can choose to optimize their `:to_liquid` method by wrapping
|
85
|
-
# it around this definition.
|
86
|
-
#
|
87
|
-
# TODO: Remove in Bridgetown 5.0
|
88
71
|
def liquid_drop
|
89
72
|
@liquid_drop ||= begin
|
90
73
|
defaults = site.frontmatter_defaults.all(relative_path, type)
|
@@ -94,15 +77,12 @@ module Bridgetown
|
|
94
77
|
Drops::PageDrop.new(self)
|
95
78
|
end
|
96
79
|
end
|
97
|
-
private :liquid_drop
|
98
80
|
|
99
81
|
# Public
|
100
82
|
#
|
101
83
|
# Liquid representation of current page
|
102
|
-
|
103
|
-
|
104
|
-
def to_liquid(attrs = nil)
|
105
|
-
self.class == Bridgetown::Page ? liquid_drop : legacy_to_liquid(attrs)
|
84
|
+
def to_liquid
|
85
|
+
liquid_drop
|
106
86
|
end
|
107
87
|
|
108
88
|
# The full path and filename of the post. Defined in the YAML of the post
|
@@ -158,19 +138,6 @@ module Bridgetown
|
|
158
138
|
self.basename = name[0..-ext.length - 1].gsub(%r!\.*\z!, "")
|
159
139
|
end
|
160
140
|
|
161
|
-
# Add any necessary layouts to this post
|
162
|
-
#
|
163
|
-
# layouts - The Hash of {"name" => "layout"}.
|
164
|
-
# site_payload - The site payload Hash.
|
165
|
-
#
|
166
|
-
# Returns String rendered page.
|
167
|
-
def render(layouts, site_payload)
|
168
|
-
site_payload["page"] = to_liquid
|
169
|
-
site_payload["paginator"] = pager.to_liquid
|
170
|
-
|
171
|
-
do_layout(site_payload, layouts)
|
172
|
-
end
|
173
|
-
|
174
141
|
# The path to the source file
|
175
142
|
#
|
176
143
|
# Returns the path to the source file
|
@@ -180,7 +147,17 @@ module Bridgetown
|
|
180
147
|
|
181
148
|
# The path to the page source file, relative to the site source
|
182
149
|
def relative_path
|
183
|
-
@relative_path ||= File.join(*[@dir, @name].map(&:to_s).reject(&:empty?)).
|
150
|
+
@relative_path ||= File.join(*[@dir, @name].map(&:to_s).reject(&:empty?)).delete_prefix("/")
|
151
|
+
end
|
152
|
+
|
153
|
+
# FIXME: spinning up a new Renderer object just to get an extension
|
154
|
+
# seems excessive
|
155
|
+
#
|
156
|
+
# The output extension of the page.
|
157
|
+
#
|
158
|
+
# Returns the output extension
|
159
|
+
def output_ext
|
160
|
+
@output_ext ||= Bridgetown::Renderer.new(site, self).output_ext
|
184
161
|
end
|
185
162
|
|
186
163
|
# Obtain destination path.
|
@@ -195,9 +172,22 @@ module Bridgetown
|
|
195
172
|
path
|
196
173
|
end
|
197
174
|
|
175
|
+
# Write the generated page file to the destination directory.
|
176
|
+
#
|
177
|
+
# dest - The String path to the destination dir.
|
178
|
+
#
|
179
|
+
# Returns nothing.
|
180
|
+
def write(dest)
|
181
|
+
path = destination(dest)
|
182
|
+
FileUtils.mkdir_p(File.dirname(path))
|
183
|
+
Bridgetown.logger.debug "Writing:", path
|
184
|
+
File.write(path, output, mode: "wb")
|
185
|
+
Bridgetown::Hooks.trigger :pages, :post_write, self
|
186
|
+
end
|
187
|
+
|
198
188
|
# Returns the object as a debug String.
|
199
189
|
def inspect
|
200
|
-
"#<#{self.class}
|
190
|
+
"#<#{self.class} #{relative_path}>"
|
201
191
|
end
|
202
192
|
|
203
193
|
# Returns the Boolean of whether this Page is HTML or not.
|
@@ -214,6 +204,10 @@ module Bridgetown
|
|
214
204
|
Bridgetown::Hooks.trigger :pages, hook_name, self, *args
|
215
205
|
end
|
216
206
|
|
207
|
+
def type
|
208
|
+
:pages
|
209
|
+
end
|
210
|
+
|
217
211
|
def write?
|
218
212
|
true
|
219
213
|
end
|