jekyll-template 0.12.0 → 0.12.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/jekyll/template/version.rb +1 -1
- data/lib/jekyll/template.rb +97 -34
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e7036c6985df3bba0f3906dd8f67cf904b367ea
|
4
|
+
data.tar.gz: 9b7177cbde9aaa97865393ddf9bbfa142f55fec4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 472ef5e24287a64670d487977968092a37d7d40eed1e9c4539331b5ee76374412d61090dc86f0dc3c322181dc7d8927508180852f738f7bdff9976aeb96fc2a3
|
7
|
+
data.tar.gz: de8b2f6cda23fcc9655011d2c9ab7b232065dbb481300b0185c7cd18549e2d59f279ee33e6383ddcb63a5c0c83fe3a8367589d89bfdb2263e5e96438f42bed47
|
data/lib/jekyll/template.rb
CHANGED
@@ -19,7 +19,6 @@ module Jekyll
|
|
19
19
|
def initialize(tag_name, markup, tokens)
|
20
20
|
super
|
21
21
|
@root_path = false
|
22
|
-
@template_content = false
|
23
22
|
|
24
23
|
# @template_name = markup
|
25
24
|
if markup =~ Syntax
|
@@ -53,6 +52,8 @@ module Jekyll
|
|
53
52
|
# - supports custom attributes to be used in template
|
54
53
|
def render(context)
|
55
54
|
content = super
|
55
|
+
# Set the root_path
|
56
|
+
@root_path = context.registers[:site].source
|
56
57
|
# Remove leading whitespace
|
57
58
|
# content = content.lstrip
|
58
59
|
compressor = HtmlCompressor::Compressor.new({
|
@@ -63,7 +64,13 @@ module Jekyll
|
|
63
64
|
:remove_comments => true
|
64
65
|
})
|
65
66
|
site = context.registers[:site]
|
66
|
-
|
67
|
+
|
68
|
+
add_template_to_dependency(site, @template_name, context)
|
69
|
+
template_obj = load_cached_template(@template_name, context)
|
70
|
+
template_data = template_obj["data"]
|
71
|
+
update_attributes(template_data)
|
72
|
+
|
73
|
+
template = template_obj["template"]
|
67
74
|
|
68
75
|
# Define the default template attributes
|
69
76
|
# Source:
|
@@ -73,20 +80,18 @@ module Jekyll
|
|
73
80
|
context["template"] = Hash.new
|
74
81
|
|
75
82
|
# Parse and extend template's front-matter with content front-matter
|
76
|
-
|
83
|
+
content_data = get_front_matter(content)
|
84
|
+
update_attributes(content_data)
|
85
|
+
|
86
|
+
# Remove front matter
|
87
|
+
content = strip_front_matter(content)
|
77
88
|
|
78
89
|
# Setting template attributes from @attributes
|
79
90
|
# This allows for @attributes to be used within the template as
|
80
91
|
# {{ template.atttribute_name }}
|
81
92
|
if @attributes
|
82
93
|
@attributes.each do |key, value|
|
83
|
-
|
84
|
-
if value.instance_of? Liquid::VariableLookup
|
85
|
-
# val = value.name
|
86
|
-
val = context.evaluate(value)
|
87
|
-
else
|
88
|
-
val = context.evaluate(value)
|
89
|
-
end
|
94
|
+
val = context.evaluate(value)
|
90
95
|
context["template"][key] = val
|
91
96
|
|
92
97
|
# Adjust sanitize if parse: html
|
@@ -103,18 +108,13 @@ module Jekyll
|
|
103
108
|
unless @sanitize
|
104
109
|
converter = site.find_converter_instance(::Jekyll::Converters::Markdown)
|
105
110
|
content = content.to_s.unindent
|
106
|
-
|
111
|
+
content = converter.convert(content)
|
107
112
|
else
|
108
|
-
|
109
|
-
end
|
110
|
-
|
111
|
-
# handling empty content
|
112
|
-
if @content.empty?
|
113
|
-
@content = "<!-- Template: #{ @template_name } -->"
|
113
|
+
content = content.to_s.unindent
|
114
114
|
end
|
115
115
|
|
116
116
|
# setting the template content
|
117
|
-
context["template"]["content"] =
|
117
|
+
context["template"]["content"] = content
|
118
118
|
|
119
119
|
# rendering the template with the content
|
120
120
|
@output = template.render( context )
|
@@ -122,20 +122,61 @@ module Jekyll
|
|
122
122
|
@output = compressor.compress(@output)
|
123
123
|
end
|
124
124
|
|
125
|
+
def update_attributes(data)
|
126
|
+
if data
|
127
|
+
@attributes = @attributes.merge(data)
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
# add_template_to_dependency(site, path, context)
|
132
|
+
# source: https://github.com/jekyll/jekyll/blob/e509cf2139d1a7ee11090b09721344608ecf48f6/lib/jekyll/tags/include.rb
|
133
|
+
def add_template_to_dependency(site, path, context)
|
134
|
+
if context.registers[:page] && context.registers[:page].key?("path")
|
135
|
+
site.regenerator.add_dependency(
|
136
|
+
site.in_source_dir(context.registers[:page]["path"]),
|
137
|
+
path
|
138
|
+
)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
# load_cached_template(path, context)
|
143
|
+
# source: https://github.com/jekyll/jekyll/blob/e509cf2139d1a7ee11090b09721344608ecf48f6/lib/jekyll/tags/include.rb
|
144
|
+
def load_cached_template(path, context)
|
145
|
+
context.registers[:cached_templates] ||= {}
|
146
|
+
cached_templates = context.registers[:cached_templates]
|
147
|
+
|
148
|
+
if cached_templates.key?(path)
|
149
|
+
cached_templates[path]
|
150
|
+
else
|
151
|
+
begin
|
152
|
+
template = load_template(context)
|
153
|
+
cached_templates[path] = template
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
# get_template_path(path)
|
159
|
+
# Returns: A full file path of the template
|
160
|
+
# @param path { string }
|
161
|
+
def get_template_path(path)
|
162
|
+
# default template path
|
163
|
+
dir = @root_path.to_s
|
164
|
+
view = "_templates/" + path.to_s
|
165
|
+
File.join(dir, view).to_s
|
166
|
+
end
|
167
|
+
|
125
168
|
# get_template_content(template)
|
126
169
|
# Description: Opens, reads, and returns template content as string.
|
127
170
|
# Returns: Template content
|
128
171
|
# @param template { string }
|
129
172
|
def get_template_content(template)
|
130
|
-
|
131
|
-
view = "_templates/" + template
|
132
|
-
file_path = File.join(@root_path, view)
|
173
|
+
file_path = get_template_path(template)
|
133
174
|
path = File.read(file_path.strip)
|
134
175
|
# returns template content
|
135
176
|
path
|
136
177
|
end
|
137
178
|
|
138
|
-
# load_template(
|
179
|
+
# load_template(context)
|
139
180
|
# Description: Extends Liquid's default load_template method. Also provides
|
140
181
|
# extra enhancements:
|
141
182
|
# - parses and sets template front-matter content
|
@@ -143,15 +184,23 @@ module Jekyll
|
|
143
184
|
def load_template(context)
|
144
185
|
# Set the root_path
|
145
186
|
@root_path = context.registers[:site].source
|
187
|
+
file_path = get_template_path(@template_name)
|
188
|
+
file = context.registers[:site]
|
189
|
+
.liquid_renderer
|
190
|
+
.file(file_path)
|
146
191
|
# Set the template_content
|
147
|
-
|
148
|
-
# Parse front matter
|
149
|
-
@template_content = parse_front_matter(@template_content)
|
192
|
+
template_content = get_template_content(@template_name)
|
150
193
|
|
151
|
-
|
152
|
-
|
194
|
+
template_obj = Hash.new
|
195
|
+
data = get_front_matter(template_content)
|
196
|
+
content = strip_front_matter(template_content)
|
197
|
+
|
198
|
+
if template_content
|
199
|
+
template_obj["data"] = data
|
200
|
+
template_obj["template"] = file.parse(content)
|
201
|
+
template_obj
|
153
202
|
else
|
154
|
-
raise Liquid::SyntaxError, "Could not find #{
|
203
|
+
raise Liquid::SyntaxError, "Could not find #{file_path} in your templates"
|
155
204
|
end
|
156
205
|
end
|
157
206
|
|
@@ -173,22 +222,36 @@ module Jekyll
|
|
173
222
|
content
|
174
223
|
end
|
175
224
|
|
176
|
-
#
|
177
|
-
#
|
178
|
-
# Returns: Template content, with front-matter removed.
|
225
|
+
# get_front_matter(content)
|
226
|
+
# Returns: A hash of data parsed from the content's YAML
|
179
227
|
# @param content { string }
|
180
|
-
def
|
228
|
+
def get_front_matter(content)
|
181
229
|
# Strip leading white-spaces
|
182
230
|
content = unindent(content)
|
183
|
-
|
231
|
+
data = Hash.new
|
184
232
|
if content =~ YAML_FRONT_MATTER_REGEXP
|
185
233
|
front_matter = Regexp.last_match(0)
|
186
234
|
# Push YAML data to the template's attributes
|
187
235
|
values = SafeYAML.load(front_matter)
|
188
236
|
# Set YAML data to @attributes
|
189
237
|
values.each do |key, value|
|
190
|
-
|
238
|
+
data[key] = value
|
191
239
|
end
|
240
|
+
# Returns data
|
241
|
+
data
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
# strip_front_matter(content)
|
246
|
+
# Description: Removes the YAML front-matter content.
|
247
|
+
# Returns: Template content, with front-matter removed.
|
248
|
+
# @param content { string }
|
249
|
+
def strip_front_matter(content)
|
250
|
+
# Strip leading white-spaces
|
251
|
+
content = unindent(content)
|
252
|
+
|
253
|
+
if content =~ YAML_FRONT_MATTER_REGEXP
|
254
|
+
front_matter = Regexp.last_match(0)
|
192
255
|
# Returns content with stripped front-matter
|
193
256
|
content = content.gsub(front_matter, "")
|
194
257
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-template
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.12.
|
4
|
+
version: 0.12.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ItsJonQ
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-02-
|
11
|
+
date: 2017-02-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|