octopress-ink 1.0.0.alpha.22 → 1.0.0.alpha.23
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/octopress-ink.rb +1 -0
- data/lib/octopress-ink/assets/config.rb +2 -2
- data/lib/octopress-ink/helpers/path.rb +29 -1
- data/lib/octopress-ink/helpers/var.rb +7 -5
- data/lib/octopress-ink/jekyll/hooks.rb +20 -0
- data/lib/octopress-ink/tags.rb +1 -0
- data/lib/octopress-ink/tags/include.rb +2 -0
- data/lib/octopress-ink/tags/render.rb +62 -0
- data/lib/octopress-ink/version.rb +1 -1
- data/test/_config.yml +1 -0
- data/test/expected/test_tags/head.html +1 -1
- data/test/expected/test_tags/include.html +4 -0
- data/test/expected/test_tags/render.html +30 -0
- data/test/site/test_tags/include.html +4 -0
- data/test/site/test_tags/render.html +30 -0
- data/test/source/test_render/_f.html +1 -0
- data/test/source/test_render/_var.html +1 -0
- data/test/source/test_tags/_test_render.md +4 -0
- data/test/source/test_tags/include.html +4 -0
- data/test/source/test_tags/render.html +32 -0
- data/test/test.rb +1 -1
- metadata +15 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 37ae1d79d24dfabbbe224a384bc2867a41911996
|
4
|
+
data.tar.gz: 1b2b6d06f7877c7387482c6516ed2947f67144e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5c703a3ce89c9e3f2551b09d3baec20c96945200ae6a9b94e330183cfaac09f33b520a41b34a69097ed3d5621e98a62c8c63f79ace419896125a5450ebad63f
|
7
|
+
data.tar.gz: fe8902c99f7f4bba176594b9aa6da57cd1d1969b70706033f9e94e4f3e03643b6d4c1d1f407a36d98741e23d86dd2bda596974bbcfeb0addb3265d58667c1143
|
data/lib/octopress-ink.rb
CHANGED
@@ -28,6 +28,7 @@ Liquid::Template.register_tag('include', Octopress::Tags::IncludeTag)
|
|
28
28
|
Liquid::Template.register_tag('assign', Octopress::Tags::AssignTag)
|
29
29
|
Liquid::Template.register_tag('capture', Octopress::Tags::CaptureTag)
|
30
30
|
Liquid::Template.register_tag('return', Octopress::Tags::ReturnTag)
|
31
|
+
Liquid::Template.register_tag('render', Octopress::Tags::RenderTag)
|
31
32
|
Liquid::Template.register_tag('octopress_js', Octopress::Tags::JavascriptTag)
|
32
33
|
Liquid::Template.register_tag('octopress_css', Octopress::Tags::StylesheetTag)
|
33
34
|
Liquid::Template.register_tag('content_for', Octopress::Tags::ContentForBlock)
|
@@ -24,12 +24,12 @@ module Octopress
|
|
24
24
|
if @plugin.type != 'local_plugin'
|
25
25
|
default = plugin_path
|
26
26
|
if exists? default
|
27
|
-
config = YAML
|
27
|
+
config = YAML.safe_load(File.open(default))
|
28
28
|
end
|
29
29
|
end
|
30
30
|
override = user_path(site)
|
31
31
|
if exists? override
|
32
|
-
config = config.deep_merge YAML
|
32
|
+
config = config.deep_merge YAML.safe_load(File.open(override))
|
33
33
|
end
|
34
34
|
config
|
35
35
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Octopress
|
2
2
|
module Helpers
|
3
3
|
module Path
|
4
|
-
FILE = /(\S+)(\s
|
4
|
+
FILE = /(\S+)(\s.*)/
|
5
5
|
def self.parse(markup, context)
|
6
6
|
if markup =~ FILE
|
7
7
|
(context[$1].nil? ? $1 : context[$1]) + $2
|
@@ -9,6 +9,34 @@ module Octopress
|
|
9
9
|
markup
|
10
10
|
end
|
11
11
|
end
|
12
|
+
|
13
|
+
# Allow paths to begin from the directory of the context page or
|
14
|
+
# have absolute paths
|
15
|
+
#
|
16
|
+
# Input:
|
17
|
+
# - file: "file.html"
|
18
|
+
# - context: A Jekyll context object
|
19
|
+
#
|
20
|
+
# Returns the full path to a file
|
21
|
+
#
|
22
|
+
def self.expand(file, context)
|
23
|
+
root = context.registers[:site].source
|
24
|
+
|
25
|
+
# If local file, e.g. ./somefile
|
26
|
+
if file =~ /^\.\/(.+)/
|
27
|
+
local_dir = File.dirname context.registers[:page]['path']
|
28
|
+
File.join root, local_dir, $1
|
29
|
+
|
30
|
+
# If absolute or relative to a user directory, e.g. /Users/Bob/somefile or ~/somefile
|
31
|
+
elsif file =~ /^[\/~]/
|
32
|
+
Pathname.new(file).expand_path
|
33
|
+
|
34
|
+
# Otherwise, assume relative to site root
|
35
|
+
else
|
36
|
+
File.join root, file
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
12
40
|
end
|
13
41
|
end
|
14
42
|
end
|
@@ -20,9 +20,7 @@ module Octopress
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def self.get_value(vars, context)
|
23
|
-
|
24
|
-
vars = $1 + evaluate_ternary($2, $3, $4, context) + $5
|
25
|
-
end
|
23
|
+
vars = evaluate_ternary(vars, context)
|
26
24
|
vars = vars.strip.gsub(/ or /, ' || ')
|
27
25
|
vars = vars.split(/ \|\| /).map { |v|
|
28
26
|
Liquid::Variable.new(v.strip).render(context)
|
@@ -31,8 +29,12 @@ module Octopress
|
|
31
29
|
vars.empty? ? nil : vars.first
|
32
30
|
end
|
33
31
|
|
34
|
-
def self.evaluate_ternary(
|
35
|
-
|
32
|
+
def self.evaluate_ternary(markup, context)
|
33
|
+
if markup =~ TERNARY
|
34
|
+
$1 + (Conditional.parse("if #{$2}", context) ? $3 : $4) + $5
|
35
|
+
else
|
36
|
+
markup
|
37
|
+
end
|
36
38
|
end
|
37
39
|
|
38
40
|
end
|
@@ -11,4 +11,24 @@ module Jekyll
|
|
11
11
|
do_layout_orig(payload, layouts)
|
12
12
|
end
|
13
13
|
end
|
14
|
+
|
15
|
+
# Create a new page class to allow partials to trigger Jekyll Page Hooks.
|
16
|
+
class ConvertiblePage
|
17
|
+
include Convertible
|
18
|
+
|
19
|
+
attr_accessor :name, :content, :site, :ext, :output, :data
|
20
|
+
|
21
|
+
def initialize(site, name, content)
|
22
|
+
@site = site
|
23
|
+
@name = name
|
24
|
+
@ext = File.extname(name)
|
25
|
+
@content = content
|
26
|
+
@data = { layout: "no_layout" } # hack
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
def render(payload)
|
31
|
+
do_layout(payload, { no_layout: nil })
|
32
|
+
end
|
33
|
+
end
|
14
34
|
end
|
data/lib/octopress-ink/tags.rb
CHANGED
@@ -3,6 +3,7 @@ module Octopress
|
|
3
3
|
autoload :IncludeTag, 'octopress-ink/tags/include'
|
4
4
|
autoload :AssignTag, 'octopress-ink/tags/assign'
|
5
5
|
autoload :ReturnTag, 'octopress-ink/tags/return'
|
6
|
+
autoload :RenderTag, 'octopress-ink/tags/render'
|
6
7
|
autoload :CaptureTag, 'octopress-ink/tags/capture'
|
7
8
|
autoload :JavascriptTag, 'octopress-ink/tags/javascript'
|
8
9
|
autoload :StylesheetTag, 'octopress-ink/tags/stylesheet'
|
@@ -11,6 +11,7 @@ module Octopress
|
|
11
11
|
def render(context)
|
12
12
|
markup = Helpers::Conditional.parse(@markup, context)
|
13
13
|
return unless markup
|
14
|
+
markup = Helpers::Var.evaluate_ternary(markup, context)
|
14
15
|
markup = Helpers::Path.parse(markup, context)
|
15
16
|
|
16
17
|
include_tag = Jekyll::Tags::IncludeTag.new('include', markup, [])
|
@@ -29,6 +30,7 @@ module Octopress
|
|
29
30
|
context['include'] = include_tag.parse_params(context)
|
30
31
|
partial.render!(context)
|
31
32
|
}.strip
|
33
|
+
|
32
34
|
# Otherwise, use Jekyll's default include tag
|
33
35
|
else
|
34
36
|
include_tag.render(context).strip
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Octopress
|
2
|
+
module Tags
|
3
|
+
class RenderTag < Liquid::Tag
|
4
|
+
SYNTAX = /(\S+)(.+)/
|
5
|
+
|
6
|
+
def initialize(tag_name, markup, tokens)
|
7
|
+
super
|
8
|
+
@og_markup = @markup = markup
|
9
|
+
if markup =~ /^(\s*raw\s)?(.+?)(\sraw\s*)?$/
|
10
|
+
@markup = $2
|
11
|
+
@raw = true unless $1.nil? and $3.nil?
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def render(context)
|
16
|
+
markup = Helpers::Conditional.parse(@markup, context)
|
17
|
+
return unless markup
|
18
|
+
markup = Helpers::Var.evaluate_ternary(markup, context)
|
19
|
+
markup = Helpers::Path.parse(markup, context)
|
20
|
+
|
21
|
+
content = read(markup, context)
|
22
|
+
|
23
|
+
if content =~ /\A-{3}(.+[^\A])-{3}\n(.+)/m
|
24
|
+
local_vars = YAML.safe_load($1.strip)
|
25
|
+
content = $2.strip
|
26
|
+
end
|
27
|
+
|
28
|
+
return content if @raw
|
29
|
+
|
30
|
+
include_tag = Jekyll::Tags::IncludeTag.new('include', markup, [])
|
31
|
+
|
32
|
+
partial = Liquid::Template.parse(content)
|
33
|
+
content = context.stack {
|
34
|
+
context['include'] = include_tag.parse_params(context)
|
35
|
+
context['page'] = context['page'].deep_merge(local_vars) if local_vars
|
36
|
+
partial.render!(context)
|
37
|
+
}.strip
|
38
|
+
|
39
|
+
parse_convertible(content, context)
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
def read(markup, context)
|
44
|
+
path = markup.match(SYNTAX)[1]
|
45
|
+
@path = Helpers::Path.expand(path, context)
|
46
|
+
begin
|
47
|
+
Pathname.new(@path).read
|
48
|
+
rescue
|
49
|
+
raise IOError.new "Render failed: {% #{@tag_name} #{@og_markup}%}. The file '#{path}' could not be found at #{@path}."
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def parse_convertible(content, context)
|
54
|
+
page = Jekyll::ConvertiblePage.new(context.registers[:site], @path, content)
|
55
|
+
page.render({})
|
56
|
+
page.output.strip
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
data/test/_config.yml
CHANGED
@@ -20,6 +20,10 @@ Yo Dawg, I heard you like includes. → Yo Dawg, I heard you like includes.
|
|
20
20
|
'' → ''
|
21
21
|
Yo Dawg, I heard you like includes. → Yo Dawg, I heard you like includes.
|
22
22
|
|
23
|
+
## Ternary include
|
24
|
+
, I heard you like includes. → , I heard you like includes.
|
25
|
+
Testing Include → Testing Include
|
26
|
+
|
23
27
|
## Theme Include override
|
24
28
|
include from theme override → include from theme override
|
25
29
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
## Simple render
|
8
|
+
Testing Render → Testing Render
|
9
|
+
Testing Render whatever → Testing Render whatever
|
10
|
+
|
11
|
+
## File name stored in variable
|
12
|
+
Testing Render → Testing Render
|
13
|
+
|
14
|
+
## Post conditional render
|
15
|
+
'' → ''
|
16
|
+
Testing Render → Testing Render
|
17
|
+
|
18
|
+
## Test Variables
|
19
|
+
kittens → kittens
|
20
|
+
|
21
|
+
## Ternary include
|
22
|
+
kittens → kittens
|
23
|
+
Testing Render → Testing Render
|
24
|
+
|
25
|
+
## Render markdown with local vars
|
26
|
+
<p><strong>page vars</strong></p> → <p><strong>page vars</strong></p>
|
27
|
+
|
28
|
+
## Render raw
|
29
|
+
Testing Render {{ include.var }} → Testing Render {{ include.var }}
|
30
|
+
|
@@ -20,6 +20,10 @@ Yo Dawg, I heard you like includes. → Yo Dawg, I heard you like includes.
|
|
20
20
|
'' → ''
|
21
21
|
Yo Dawg, I heard you like includes. → Yo Dawg, I heard you like includes.
|
22
22
|
|
23
|
+
## Ternary include
|
24
|
+
, I heard you like includes. → , I heard you like includes.
|
25
|
+
Testing Include → Testing Include
|
26
|
+
|
23
27
|
## Theme Include override
|
24
28
|
include from theme override → include from theme override
|
25
29
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
## Simple render
|
8
|
+
Testing Render → Testing Render
|
9
|
+
Testing Render whatever → Testing Render whatever
|
10
|
+
|
11
|
+
## File name stored in variable
|
12
|
+
Testing Render → Testing Render
|
13
|
+
|
14
|
+
## Post conditional render
|
15
|
+
'' → ''
|
16
|
+
Testing Render → Testing Render
|
17
|
+
|
18
|
+
## Test Variables
|
19
|
+
kittens → kittens
|
20
|
+
|
21
|
+
## Ternary include
|
22
|
+
kittens → kittens
|
23
|
+
Testing Render → Testing Render
|
24
|
+
|
25
|
+
## Render markdown with local vars
|
26
|
+
<p><strong>page vars</strong></p> → <p><strong>page vars</strong></p>
|
27
|
+
|
28
|
+
## Render raw
|
29
|
+
Testing Render {{ include.var }} → Testing Render {{ include.var }}
|
30
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
Testing Render {{ include.var }}
|
@@ -0,0 +1 @@
|
|
1
|
+
{% assign bar = site.render_test %}{{ bar }}
|
@@ -23,6 +23,10 @@ Yo Dawg, I heard you like includes. → {% include theme:greet.html greeting="Yo
|
|
23
23
|
'' → '{% include theme:greet.html greeting="Yo Dawg" unless some_bool %}'
|
24
24
|
Yo Dawg, I heard you like includes. → {% include theme:greet.html greeting="Yo Dawg" if some_bool %}
|
25
25
|
|
26
|
+
## Ternary include
|
27
|
+
, I heard you like includes. → {% include (false ? foo.html : theme:greet.html) %}
|
28
|
+
Testing Include → {% include (some_bool ? foo.html : theme:greet.html) %}
|
29
|
+
|
26
30
|
## Theme Include override
|
27
31
|
include from theme override → {% include theme:bar.html %}
|
28
32
|
|
@@ -0,0 +1,32 @@
|
|
1
|
+
---
|
2
|
+
layout: nil
|
3
|
+
---
|
4
|
+
{% assign file = 'test_render/_f.html' %}
|
5
|
+
{% assign file2 = 'test_render/_var.html' %}
|
6
|
+
{% assign relative = './_test_render.md' %}
|
7
|
+
{% assign some_bool = true %}
|
8
|
+
{% assign test_var = 'variable' %}
|
9
|
+
|
10
|
+
## Simple render
|
11
|
+
Testing Render → {% render test_render/_f.html %}
|
12
|
+
Testing Render whatever → {% render test_render/_f.html var="whatever" %}
|
13
|
+
|
14
|
+
## File name stored in variable
|
15
|
+
Testing Render → {% render file %}
|
16
|
+
|
17
|
+
## Post conditional render
|
18
|
+
'' → '{% render file unless true %}'
|
19
|
+
Testing Render → {% render file if some_bool %}
|
20
|
+
|
21
|
+
## Test Variables
|
22
|
+
kittens → {% render test_render/_var.html %}
|
23
|
+
|
24
|
+
## Ternary include
|
25
|
+
kittens → {% render (false ? file : file2) %}
|
26
|
+
Testing Render → {% render (some_bool ? file : file2) %}
|
27
|
+
|
28
|
+
## Render markdown with local vars
|
29
|
+
<p><strong>page vars</strong></p> → {% render relative %}
|
30
|
+
|
31
|
+
## Render raw
|
32
|
+
{% raw %}Testing Render {{ include.var }}{% endraw %} → {% render raw file %}
|
data/test/test.rb
CHANGED
@@ -39,7 +39,7 @@ end
|
|
39
39
|
build
|
40
40
|
|
41
41
|
def test_tags(dir)
|
42
|
-
tags = %w{content_for footer head include scripts assign capture wrap}
|
42
|
+
tags = %w{content_for footer head include scripts assign capture wrap render}
|
43
43
|
tags.each { |file| test("test_tags/#{file}.html", dir) }
|
44
44
|
end
|
45
45
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: octopress-ink
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.alpha.
|
4
|
+
version: 1.0.0.alpha.23
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brandon Mathis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -124,6 +124,7 @@ files:
|
|
124
124
|
- lib/octopress-ink/tags/head.rb
|
125
125
|
- lib/octopress-ink/tags/include.rb
|
126
126
|
- lib/octopress-ink/tags/javascript.rb
|
127
|
+
- lib/octopress-ink/tags/render.rb
|
127
128
|
- lib/octopress-ink/tags/return.rb
|
128
129
|
- lib/octopress-ink/tags/scripts.rb
|
129
130
|
- lib/octopress-ink/tags/stylesheet.rb
|
@@ -161,6 +162,7 @@ files:
|
|
161
162
|
- test/expected/test_tags/footer.html
|
162
163
|
- test/expected/test_tags/head.html
|
163
164
|
- test/expected/test_tags/include.html
|
165
|
+
- test/expected/test_tags/render.html
|
164
166
|
- test/expected/test_tags/scripts.html
|
165
167
|
- test/expected/test_tags/wrap.html
|
166
168
|
- test/sass_compact/stylesheets/all-e10f647557c9d610df6df40a458bc823.css
|
@@ -185,6 +187,7 @@ files:
|
|
185
187
|
- test/site/test_tags/footer.html
|
186
188
|
- test/site/test_tags/head.html
|
187
189
|
- test/site/test_tags/include.html
|
190
|
+
- test/site/test_tags/render.html
|
188
191
|
- test/site/test_tags/return.html
|
189
192
|
- test/site/test_tags/scripts.html
|
190
193
|
- test/site/test_tags/wrap.html
|
@@ -232,12 +235,16 @@ files:
|
|
232
235
|
- test/source/test_layouts/plugin_layout.html
|
233
236
|
- test/source/test_layouts/theme.html
|
234
237
|
- test/source/test_layouts/theme_override.html
|
238
|
+
- test/source/test_render/_f.html
|
239
|
+
- test/source/test_render/_var.html
|
240
|
+
- test/source/test_tags/_test_render.md
|
235
241
|
- test/source/test_tags/assign.html
|
236
242
|
- test/source/test_tags/capture.html
|
237
243
|
- test/source/test_tags/content_for.html
|
238
244
|
- test/source/test_tags/footer.html
|
239
245
|
- test/source/test_tags/head.html
|
240
246
|
- test/source/test_tags/include.html
|
247
|
+
- test/source/test_tags/render.html
|
241
248
|
- test/source/test_tags/return.html
|
242
249
|
- test/source/test_tags/scripts.html
|
243
250
|
- test/source/test_tags/wrap.html
|
@@ -297,6 +304,7 @@ test_files:
|
|
297
304
|
- test/expected/test_tags/footer.html
|
298
305
|
- test/expected/test_tags/head.html
|
299
306
|
- test/expected/test_tags/include.html
|
307
|
+
- test/expected/test_tags/render.html
|
300
308
|
- test/expected/test_tags/scripts.html
|
301
309
|
- test/expected/test_tags/wrap.html
|
302
310
|
- test/sass_compact/stylesheets/all-e10f647557c9d610df6df40a458bc823.css
|
@@ -321,6 +329,7 @@ test_files:
|
|
321
329
|
- test/site/test_tags/footer.html
|
322
330
|
- test/site/test_tags/head.html
|
323
331
|
- test/site/test_tags/include.html
|
332
|
+
- test/site/test_tags/render.html
|
324
333
|
- test/site/test_tags/return.html
|
325
334
|
- test/site/test_tags/scripts.html
|
326
335
|
- test/site/test_tags/wrap.html
|
@@ -368,12 +377,16 @@ test_files:
|
|
368
377
|
- test/source/test_layouts/plugin_layout.html
|
369
378
|
- test/source/test_layouts/theme.html
|
370
379
|
- test/source/test_layouts/theme_override.html
|
380
|
+
- test/source/test_render/_f.html
|
381
|
+
- test/source/test_render/_var.html
|
382
|
+
- test/source/test_tags/_test_render.md
|
371
383
|
- test/source/test_tags/assign.html
|
372
384
|
- test/source/test_tags/capture.html
|
373
385
|
- test/source/test_tags/content_for.html
|
374
386
|
- test/source/test_tags/footer.html
|
375
387
|
- test/source/test_tags/head.html
|
376
388
|
- test/source/test_tags/include.html
|
389
|
+
- test/source/test_tags/render.html
|
377
390
|
- test/source/test_tags/return.html
|
378
391
|
- test/source/test_tags/scripts.html
|
379
392
|
- test/source/test_tags/wrap.html
|