jekyll-plus 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE.txt +21 -21
- data/README.md +209 -77
- data/exe/jekyll+ +56 -0
- data/lib/jekyll-plus.rb +28 -2
- data/lib/jekyll-plus/version.rb +3 -3
- data/lib/jekyll/commands/extract_theme.rb +152 -0
- data/lib/jekyll/commands/new_site.rb +260 -0
- data/lib/jekyll/{templates/site_template/.gitignore → site_template/.gitignore.erb} +0 -0
- data/lib/jekyll/{templates/classic_template → site_template}/Gemfile.erb +9 -5
- data/lib/jekyll/{templates/site_template → site_template}/_config.yml.erb +15 -5
- data/lib/jekyll/{templates/site_template → site_template}/_posts/0000-00-00-welcome-to-jekyll.md.erb +2 -0
- data/lib/jekyll/{templates/site_template/about.md → site_template/about.md.erb} +4 -0
- data/lib/jekyll/{templates/site_template/index.md → site_template/index.html.erb} +1 -0
- data/lib/patches/idempotent_jekyll_config.rb +41 -0
- data/lib/patches/jekyll_watcher.rb +59 -0
- data/lib/patches/listen_windows_adapter.rb +8 -0
- data/lib/patches/mercenary_presenter.rb +38 -0
- metadata +46 -38
- data/lib/jekyll/commands/new.rb +0 -190
- data/lib/jekyll/templates/classic_template/_config.yml.erb +0 -37
- data/lib/jekyll/templates/classic_template/theme_folders/_includes/disqus_comments.html +0 -20
- data/lib/jekyll/templates/classic_template/theme_folders/_includes/footer.html +0 -46
- data/lib/jekyll/templates/classic_template/theme_folders/_includes/google-analytics.html +0 -11
- data/lib/jekyll/templates/classic_template/theme_folders/_includes/head.html +0 -16
- data/lib/jekyll/templates/classic_template/theme_folders/_includes/header.html +0 -27
- data/lib/jekyll/templates/classic_template/theme_folders/_includes/icon-github.html +0 -1
- data/lib/jekyll/templates/classic_template/theme_folders/_includes/icon-github.svg +0 -1
- data/lib/jekyll/templates/classic_template/theme_folders/_includes/icon-twitter.html +0 -1
- data/lib/jekyll/templates/classic_template/theme_folders/_includes/icon-twitter.svg +0 -1
- data/lib/jekyll/templates/classic_template/theme_folders/_layouts/default.html +0 -20
- data/lib/jekyll/templates/classic_template/theme_folders/_layouts/home.html +0 -25
- data/lib/jekyll/templates/classic_template/theme_folders/_layouts/page.html +0 -14
- data/lib/jekyll/templates/classic_template/theme_folders/_layouts/post.html +0 -18
- data/lib/jekyll/templates/classic_template/theme_folders/_sass/_base.scss +0 -198
- data/lib/jekyll/templates/classic_template/theme_folders/_sass/_layout.scss +0 -237
- data/lib/jekyll/templates/classic_template/theme_folders/_sass/_syntax-highlighting.scss +0 -71
- data/lib/jekyll/templates/classic_template/theme_folders/assets/main.scss +0 -47
- data/lib/jekyll/templates/site_template/Gemfile.erb +0 -24
@@ -0,0 +1,38 @@
|
|
1
|
+
module Mercenary
|
2
|
+
class Presenter
|
3
|
+
attr_accessor :command
|
4
|
+
|
5
|
+
def options_presentation
|
6
|
+
return nil unless command_options_presentation || parent_command_options_presentation
|
7
|
+
[command_options_presentation.cyan, parent_command_options_presentation].join("\n\n").rstrip
|
8
|
+
end
|
9
|
+
|
10
|
+
def parent_command_options_presentation
|
11
|
+
return nil unless command.parent
|
12
|
+
Presenter.new(command.parent).command_options_presentation
|
13
|
+
end
|
14
|
+
|
15
|
+
# adapted from https://github.com/jekyll/mercenary/pull/44
|
16
|
+
def command_options_presentation
|
17
|
+
return nil if command.options.empty?
|
18
|
+
command_options = command.options
|
19
|
+
command_options -= command.parent.options unless command.parent.nil?
|
20
|
+
command_options.map(&:to_s).join("\n")
|
21
|
+
end
|
22
|
+
|
23
|
+
def command_header
|
24
|
+
header = "\n#{command.identity}"
|
25
|
+
header << " -- #{command.description}" if command.description
|
26
|
+
header
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class Option
|
31
|
+
def formatted_switches
|
32
|
+
[
|
33
|
+
switches.first.rjust(10),
|
34
|
+
switches.last.ljust(20)
|
35
|
+
].join(", ").gsub(/ , /, ' ').gsub(/, /, ' ')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-plus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ashwin Maroli
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-02-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -16,28 +16,48 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '3.
|
19
|
+
version: '3.4'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '3.
|
26
|
+
version: '3.4'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: jekyll-data
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
45
|
- - "~>"
|
32
46
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1.
|
47
|
+
version: '1.14'
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 1.14.3
|
34
51
|
type: :development
|
35
52
|
prerelease: false
|
36
53
|
version_requirements: !ruby/object:Gem::Requirement
|
37
54
|
requirements:
|
38
55
|
- - "~>"
|
39
56
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1.
|
57
|
+
version: '1.14'
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 1.14.3
|
41
61
|
- !ruby/object:Gem::Dependency
|
42
62
|
name: rake
|
43
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,56 +73,44 @@ dependencies:
|
|
53
73
|
- !ruby/object:Gem::Version
|
54
74
|
version: '10.0'
|
55
75
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
76
|
+
name: cucumber
|
57
77
|
requirement: !ruby/object:Gem::Requirement
|
58
78
|
requirements:
|
59
79
|
- - "~>"
|
60
80
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
81
|
+
version: '2.1'
|
62
82
|
type: :development
|
63
83
|
prerelease: false
|
64
84
|
version_requirements: !ruby/object:Gem::Requirement
|
65
85
|
requirements:
|
66
86
|
- - "~>"
|
67
87
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
88
|
+
version: '2.1'
|
69
89
|
description:
|
70
90
|
email:
|
71
91
|
- ashmaroli@gmail.com
|
72
|
-
executables:
|
92
|
+
executables:
|
93
|
+
- jekyll+
|
73
94
|
extensions: []
|
74
95
|
extra_rdoc_files: []
|
75
96
|
files:
|
76
97
|
- LICENSE.txt
|
77
98
|
- README.md
|
99
|
+
- exe/jekyll+
|
78
100
|
- lib/jekyll-plus.rb
|
79
101
|
- lib/jekyll-plus/version.rb
|
80
|
-
- lib/jekyll/commands/
|
81
|
-
- lib/jekyll/
|
82
|
-
- lib/jekyll/
|
83
|
-
- lib/jekyll/
|
84
|
-
- lib/jekyll/
|
85
|
-
- lib/jekyll/
|
86
|
-
- lib/jekyll/
|
87
|
-
- lib/jekyll/
|
88
|
-
- lib/
|
89
|
-
- lib/
|
90
|
-
- lib/
|
91
|
-
- lib/
|
92
|
-
- lib/jekyll/templates/classic_template/theme_folders/_layouts/default.html
|
93
|
-
- lib/jekyll/templates/classic_template/theme_folders/_layouts/home.html
|
94
|
-
- lib/jekyll/templates/classic_template/theme_folders/_layouts/page.html
|
95
|
-
- lib/jekyll/templates/classic_template/theme_folders/_layouts/post.html
|
96
|
-
- lib/jekyll/templates/classic_template/theme_folders/_sass/_base.scss
|
97
|
-
- lib/jekyll/templates/classic_template/theme_folders/_sass/_layout.scss
|
98
|
-
- lib/jekyll/templates/classic_template/theme_folders/_sass/_syntax-highlighting.scss
|
99
|
-
- lib/jekyll/templates/classic_template/theme_folders/assets/main.scss
|
100
|
-
- lib/jekyll/templates/site_template/.gitignore
|
101
|
-
- lib/jekyll/templates/site_template/Gemfile.erb
|
102
|
-
- lib/jekyll/templates/site_template/_config.yml.erb
|
103
|
-
- lib/jekyll/templates/site_template/_posts/0000-00-00-welcome-to-jekyll.md.erb
|
104
|
-
- lib/jekyll/templates/site_template/about.md
|
105
|
-
- lib/jekyll/templates/site_template/index.md
|
102
|
+
- lib/jekyll/commands/extract_theme.rb
|
103
|
+
- lib/jekyll/commands/new_site.rb
|
104
|
+
- lib/jekyll/site_template/.gitignore.erb
|
105
|
+
- lib/jekyll/site_template/Gemfile.erb
|
106
|
+
- lib/jekyll/site_template/_config.yml.erb
|
107
|
+
- lib/jekyll/site_template/_posts/0000-00-00-welcome-to-jekyll.md.erb
|
108
|
+
- lib/jekyll/site_template/about.md.erb
|
109
|
+
- lib/jekyll/site_template/index.html.erb
|
110
|
+
- lib/patches/idempotent_jekyll_config.rb
|
111
|
+
- lib/patches/jekyll_watcher.rb
|
112
|
+
- lib/patches/listen_windows_adapter.rb
|
113
|
+
- lib/patches/mercenary_presenter.rb
|
106
114
|
homepage: https://github.com/ashmaroli/jekyll-plus
|
107
115
|
licenses:
|
108
116
|
- MIT
|
@@ -124,8 +132,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
124
132
|
version: '0'
|
125
133
|
requirements: []
|
126
134
|
rubyforge_project:
|
127
|
-
rubygems_version: 2.6.
|
135
|
+
rubygems_version: 2.6.10
|
128
136
|
signing_key:
|
129
137
|
specification_version: 4
|
130
|
-
summary:
|
138
|
+
summary: A tool to simplify Jekyll experience with theme-gems.
|
131
139
|
test_files: []
|
data/lib/jekyll/commands/new.rb
DELETED
@@ -1,190 +0,0 @@
|
|
1
|
-
require "erb"
|
2
|
-
|
3
|
-
module Jekyll
|
4
|
-
class Commands::New < Command
|
5
|
-
class << self
|
6
|
-
def init_with_program(prog)
|
7
|
-
end
|
8
|
-
|
9
|
-
def process(args, options = {})
|
10
|
-
@verbose = options["verbose"]
|
11
|
-
|
12
|
-
raise ArgumentError, "You must specify a path." if args.empty?
|
13
|
-
|
14
|
-
# extract capitalized blog title from the argument(s) when a 'path'
|
15
|
-
# to the new site has been provided.
|
16
|
-
# e.g. jekyll new work/blogs/exploring ruby would install a blog
|
17
|
-
# titled 'Exploring Ruby' at path ~/work/blogs/exploring ruby
|
18
|
-
blog_title = extract_title args
|
19
|
-
blog_path = File.expand_path(args.join(" "), Dir.pwd)
|
20
|
-
FileUtils.mkdir_p blog_path
|
21
|
-
|
22
|
-
if preserve_source_location?(blog_path, options)
|
23
|
-
Jekyll.logger.abort_with "Conflict:",
|
24
|
-
"#{blog_path} exists and is not empty."
|
25
|
-
end
|
26
|
-
|
27
|
-
create_site blog_title, blog_path, options
|
28
|
-
end
|
29
|
-
|
30
|
-
#
|
31
|
-
# private methods
|
32
|
-
#
|
33
|
-
|
34
|
-
private
|
35
|
-
|
36
|
-
# join the arguments given, with a whitespace; replace backslashes, if any
|
37
|
-
# with a forward slash; split the string into an array again and select the
|
38
|
-
# last entry.
|
39
|
-
# Further split the entry along a single whitespace, and map to a new array
|
40
|
-
# after capitalizing the split-entries. Join them again with a whitespace
|
41
|
-
# to form the final title string.
|
42
|
-
def extract_title(args)
|
43
|
-
a = args.join(" ").tr("\\", "/").split("/").last
|
44
|
-
a.split.map(&:capitalize).join(" ")
|
45
|
-
end
|
46
|
-
|
47
|
-
def initialized_post_name
|
48
|
-
"_posts/#{Time.now.strftime("%Y-%m-%d")}-welcome-to-jekyll.md"
|
49
|
-
end
|
50
|
-
|
51
|
-
def initialize_git(path)
|
52
|
-
Jekyll.logger.info "Initialising:", File.join(path, ".git") if @verbose
|
53
|
-
Dir.chdir(path) { `git init` }
|
54
|
-
end
|
55
|
-
|
56
|
-
def user_name
|
57
|
-
name ||= `git config user.name`.chomp
|
58
|
-
name.empty? ? "Github User" : name
|
59
|
-
end
|
60
|
-
|
61
|
-
def user_email
|
62
|
-
email ||= `git config user.email`.chomp
|
63
|
-
email.empty? ? "your-email@domain.com" : email
|
64
|
-
end
|
65
|
-
|
66
|
-
def preserve_source_location?(path, options)
|
67
|
-
!options["force"] && !Dir["#{path}/**/*"].empty?
|
68
|
-
end
|
69
|
-
|
70
|
-
def create_site(title, path, options)
|
71
|
-
if options["blank"] && options["verbose"]
|
72
|
-
create_blank_site path
|
73
|
-
else
|
74
|
-
create_sample_files path
|
75
|
-
add_supporting_files title, path, options
|
76
|
-
end
|
77
|
-
after_install title, path, options
|
78
|
-
end
|
79
|
-
|
80
|
-
def create_blank_site(path)
|
81
|
-
Dir.chdir(path) do
|
82
|
-
FileUtils.mkdir(%w(_layouts _posts _drafts))
|
83
|
-
FileUtils.touch("index.html")
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
def create_sample_files(path)
|
88
|
-
Jekyll.logger.info "" if @verbose
|
89
|
-
initialize_git path
|
90
|
-
FileUtils.mkdir_p(File.expand_path("_posts", path))
|
91
|
-
source = site_template
|
92
|
-
|
93
|
-
static_files = %w(index.md about.md .gitignore)
|
94
|
-
static_files.each do |file|
|
95
|
-
write_file(file, template(file, source), path)
|
96
|
-
end
|
97
|
-
write_file(initialized_post_name, template(scaffold_path, source), path)
|
98
|
-
end
|
99
|
-
|
100
|
-
# adds Gemfile and _config.yml
|
101
|
-
# additionally creates (updated) SCAFFOLD DIRECTORIES of a Jekyll Theme at
|
102
|
-
# blog_path when the `--classic` switch is used.
|
103
|
-
def add_supporting_files(title, path, options)
|
104
|
-
if options["classic"]
|
105
|
-
source = classic_template
|
106
|
-
Jekyll.logger.info "Creating:", "Classic directories and files" if @verbose
|
107
|
-
FileUtils.cp_r "#{classic_directories}/.", path
|
108
|
-
else
|
109
|
-
source = site_template
|
110
|
-
end
|
111
|
-
create_config_file title, path, source
|
112
|
-
write_file("Gemfile", template("Gemfile.erb", source), path)
|
113
|
-
Jekyll.logger.info "" if @verbose
|
114
|
-
end
|
115
|
-
|
116
|
-
# create _config.yml pre-populated with blog-title, and author's name & email
|
117
|
-
# using information from the user's .gitconfig
|
118
|
-
def create_config_file(title, path, source)
|
119
|
-
@blog_title = title
|
120
|
-
@user_name = user_name
|
121
|
-
@user_email = user_email
|
122
|
-
config_template = File.expand_path("_config.yml.erb", source)
|
123
|
-
config_copy = ERB.new(File.read(config_template)).result(binding)
|
124
|
-
|
125
|
-
Jekyll.logger.info "Creating:", File.join(path, "_config.yml") if @verbose
|
126
|
-
File.open(File.expand_path("_config.yml", path), "w") do |f|
|
127
|
-
f.write(config_copy)
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
def write_file(filename, contents, path)
|
132
|
-
full_path = File.expand_path(filename, path)
|
133
|
-
Jekyll.logger.info "Creating:", full_path if @verbose
|
134
|
-
File.write(full_path, contents)
|
135
|
-
end
|
136
|
-
|
137
|
-
def template(filename, source)
|
138
|
-
erb ||= ThemeBuilder::ERBRenderer.new(self)
|
139
|
-
erb.render(File.read(File.expand_path(filename, source)))
|
140
|
-
end
|
141
|
-
|
142
|
-
def site_template
|
143
|
-
File.expand_path("../templates/site_template", File.dirname(__FILE__))
|
144
|
-
end
|
145
|
-
|
146
|
-
def classic_template
|
147
|
-
File.expand_path("../templates/classic_template", File.dirname(__FILE__))
|
148
|
-
end
|
149
|
-
|
150
|
-
def classic_directories
|
151
|
-
File.join(classic_template, "theme_folders")
|
152
|
-
end
|
153
|
-
|
154
|
-
def scaffold_path
|
155
|
-
"_posts/0000-00-00-welcome-to-jekyll.md.erb"
|
156
|
-
end
|
157
|
-
|
158
|
-
# After a new blog has been installed, print a success notification and then
|
159
|
-
# automatically execute bundle install from within the new blog dir unless
|
160
|
-
# the user opts to generate a classic Jekyll blog or a blank blog or skip
|
161
|
-
# 'bundle install' using the `--skip-bundle` switch
|
162
|
-
def after_install(title, path, options)
|
163
|
-
if options["classic"]
|
164
|
-
Jekyll.logger.info "New classic jekyll site installed in #{path.cyan}."
|
165
|
-
elsif options["blank"]
|
166
|
-
Jekyll.logger.info "New blank jekyll site installed in #{path.cyan}."
|
167
|
-
else
|
168
|
-
Jekyll.logger.info "New jekyll site #{title.cyan} installed in #{path.cyan}."
|
169
|
-
end
|
170
|
-
|
171
|
-
Jekyll.logger.info "Bundle install skipped." if options["skip-bundle"]
|
172
|
-
unless options["classic"] || options["blank"] || options["skip-bundle"]
|
173
|
-
bundle_install path
|
174
|
-
end
|
175
|
-
end
|
176
|
-
|
177
|
-
def bundle_install(path)
|
178
|
-
Jekyll::External.require_with_graceful_fail "bundler"
|
179
|
-
Jekyll.logger.info "Running bundle install in #{path.cyan}..."
|
180
|
-
Dir.chdir(path) do
|
181
|
-
if ENV["CI"]
|
182
|
-
system("bundle", "install", "--quiet")
|
183
|
-
else
|
184
|
-
system("bundle", "install")
|
185
|
-
end
|
186
|
-
end
|
187
|
-
end
|
188
|
-
end
|
189
|
-
end
|
190
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
# Welcome to Jekyll!
|
2
|
-
#
|
3
|
-
# This config file is meant for settings that affect your whole blog, values
|
4
|
-
# which you are expected to set up once and rarely edit after that. If you find
|
5
|
-
# yourself editing this file very often, consider using Jekyll's data files
|
6
|
-
# feature for the data you need to update frequently.
|
7
|
-
#
|
8
|
-
# For technical reasons, this file is *NOT* reloaded automatically when you use
|
9
|
-
# 'bundle exec jekyll serve'. If you change this file, please restart the server process.
|
10
|
-
|
11
|
-
# Site settings
|
12
|
-
# These are used to personalize your new site. If you look in the HTML files,
|
13
|
-
# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on.
|
14
|
-
# You can create any custom variable you would like, and they will be accessible
|
15
|
-
# in the templates via {{ site.myvariable }}.
|
16
|
-
|
17
|
-
title: your awesome title
|
18
|
-
email: your-email@domain.com
|
19
|
-
# the ">" below means to ignore newlines until "baseurl:"
|
20
|
-
description: >
|
21
|
-
Write an awesome description for your new site here. You can edit this
|
22
|
-
line in _config.yml. It will appear in your document head meta (for
|
23
|
-
Google search results) and in your feed.xml site description.
|
24
|
-
baseurl: "" # the subpath of your site, e.g. /blog
|
25
|
-
url: "" # the base hostname & protocol for your site, e.g. http://example.com
|
26
|
-
twitter_username: jekyllrb
|
27
|
-
github_username: jekyll
|
28
|
-
|
29
|
-
# Build settings
|
30
|
-
markdown: kramdown
|
31
|
-
# uncomment (and edit) the line below when using a theme
|
32
|
-
# theme: minima
|
33
|
-
gems:
|
34
|
-
- jekyll-feed
|
35
|
-
exclude:
|
36
|
-
- Gemfile
|
37
|
-
- Gemfile.lock
|
@@ -1,20 +0,0 @@
|
|
1
|
-
{% if page.comments != false and jekyll.environment == "production" %}
|
2
|
-
|
3
|
-
<div id="disqus_thread"></div>
|
4
|
-
<script>
|
5
|
-
var disqus_config = function () {
|
6
|
-
this.page.url = '{{ page.url | absolute_url }}';
|
7
|
-
this.page.identifier = '{{ page.url | absolute_url }}';
|
8
|
-
};
|
9
|
-
|
10
|
-
(function() {
|
11
|
-
var d = document, s = d.createElement('script');
|
12
|
-
|
13
|
-
s.src = 'https://{{ site.disqus.shortname }}.disqus.com/embed.js';
|
14
|
-
|
15
|
-
s.setAttribute('data-timestamp', +new Date());
|
16
|
-
(d.head || d.body).appendChild(s);
|
17
|
-
})();
|
18
|
-
</script>
|
19
|
-
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a></noscript>
|
20
|
-
{% endif %}
|