jekyll 1.1.2 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of jekyll might be problematic. Click here for more details.

Files changed (75) hide show
  1. checksums.yaml +6 -14
  2. data/History.markdown +71 -0
  3. data/README.markdown +13 -3
  4. data/Rakefile +11 -2
  5. data/bin/jekyll +6 -5
  6. data/features/permalinks.feature +20 -0
  7. data/features/site_data.feature +6 -0
  8. data/features/step_definitions/jekyll_steps.rb +1 -1
  9. data/jekyll.gemspec +8 -3
  10. data/lib/jekyll.rb +3 -1
  11. data/lib/jekyll/cleaner.rb +73 -0
  12. data/lib/jekyll/commands/doctor.rb +40 -2
  13. data/lib/jekyll/commands/new.rb +2 -2
  14. data/lib/jekyll/commands/serve.rb +10 -3
  15. data/lib/jekyll/configuration.rb +14 -1
  16. data/lib/jekyll/converters/markdown.rb +1 -1
  17. data/lib/jekyll/converters/markdown/kramdown_parser.rb +4 -8
  18. data/lib/jekyll/converters/markdown/rdiscount_parser.rb +3 -1
  19. data/lib/jekyll/convertible.rb +14 -4
  20. data/lib/jekyll/core_ext.rb +0 -8
  21. data/lib/jekyll/deprecator.rb +13 -9
  22. data/lib/jekyll/generators/pagination.rb +1 -1
  23. data/lib/jekyll/page.rb +33 -34
  24. data/lib/jekyll/post.rb +48 -51
  25. data/lib/jekyll/site.rb +11 -50
  26. data/lib/jekyll/stevenson.rb +1 -1
  27. data/lib/jekyll/tags/include.rb +19 -13
  28. data/lib/jekyll/url.rb +67 -0
  29. data/lib/site_template/_layouts/default.html +20 -22
  30. data/site/_config.yml +3 -1
  31. data/site/_includes/docs_contents.html +50 -50
  32. data/site/_includes/docs_contents_mobile.html +25 -25
  33. data/site/_includes/footer.html +1 -1
  34. data/site/_includes/primary-nav-items.html +3 -3
  35. data/site/_includes/section_nav.html +2 -2
  36. data/site/_includes/top.html +1 -1
  37. data/site/_posts/2013-05-08-jekyll-1-0-1-released.markdown +1 -1
  38. data/site/_posts/2013-05-12-jekyll-1-0-2-released.markdown +1 -1
  39. data/site/_posts/2013-06-07-jekyll-1-0-3-released.markdown +1 -1
  40. data/site/_posts/2013-07-14-jekyll-1-1-0-released.markdown +2 -2
  41. data/site/_posts/2013-07-24-jekyll-1-1-1-released.markdown +4 -4
  42. data/site/_posts/2013-07-25-jekyll-1-0-4-released.markdown +7 -7
  43. data/site/_posts/2013-07-25-jekyll-1-1-2-released.markdown +6 -6
  44. data/site/_posts/2013-09-06-jekyll-1-2-0-released.markdown +23 -0
  45. data/site/css/normalize.css +1 -504
  46. data/site/docs/configuration.md +46 -6
  47. data/site/docs/contributing.md +3 -3
  48. data/site/docs/deployment-methods.md +2 -2
  49. data/site/docs/frontmatter.md +2 -2
  50. data/site/docs/github-pages.md +2 -2
  51. data/site/docs/history.md +265 -265
  52. data/site/docs/index.md +1 -1
  53. data/site/docs/installation.md +4 -4
  54. data/site/docs/migrations.md +14 -11
  55. data/site/docs/pages.md +1 -1
  56. data/site/docs/pagination.md +1 -1
  57. data/site/docs/permalinks.md +2 -2
  58. data/site/docs/plugins.md +18 -10
  59. data/site/docs/posts.md +9 -8
  60. data/site/docs/resources.md +2 -2
  61. data/site/docs/sites.md +1 -1
  62. data/site/docs/structure.md +9 -9
  63. data/site/docs/templates.md +4 -3
  64. data/site/docs/troubleshooting.md +11 -3
  65. data/site/docs/usage.md +8 -3
  66. data/site/docs/variables.md +7 -7
  67. data/site/feed.xml +1 -1
  68. data/site/index.html +3 -3
  69. data/test/source/_posts/2013-08-01-mkdn-extension.mkdn +0 -0
  70. data/test/test_configuration.rb +14 -0
  71. data/test/test_excerpt.rb +16 -0
  72. data/test/test_generated_site.rb +1 -1
  73. data/test/test_post.rb +7 -0
  74. data/test/test_url.rb +28 -0
  75. metadata +27 -21
@@ -1,5 +1,3 @@
1
- require 'set'
2
-
3
1
  module Jekyll
4
2
  class Site
5
3
  attr_accessor :config, :layouts, :posts, :pages, :static_files,
@@ -15,20 +13,14 @@ module Jekyll
15
13
  def initialize(config)
16
14
  self.config = config.clone
17
15
 
18
- self.safe = config['safe']
16
+ %w[safe lsi pygments baseurl exclude include future show_drafts limit_posts keep_files].each do |opt|
17
+ self.send("#{opt}=", config[opt])
18
+ end
19
+
19
20
  self.source = File.expand_path(config['source'])
20
21
  self.dest = File.expand_path(config['destination'])
21
22
  self.plugins = plugins_path
22
- self.lsi = config['lsi']
23
- self.pygments = config['pygments']
24
- self.baseurl = config['baseurl']
25
23
  self.permalink_style = config['permalink'].to_sym
26
- self.exclude = config['exclude']
27
- self.include = config['include']
28
- self.future = config['future']
29
- self.show_drafts = config['show_drafts']
30
- self.limit_posts = config['limit_posts']
31
- self.keep_files = config['keep_files']
32
24
 
33
25
  self.reset
34
26
  self.setup
@@ -228,43 +220,7 @@ module Jekyll
228
220
  #
229
221
  # Returns nothing.
230
222
  def cleanup
231
- # all files and directories in destination, including hidden ones
232
- dest_files = Set.new
233
- Dir.glob(File.join(self.dest, "**", "*"), File::FNM_DOTMATCH) do |file|
234
- if self.keep_files.length > 0
235
- dest_files << file unless file =~ /\/\.{1,2}$/ || file =~ keep_file_regex
236
- else
237
- dest_files << file unless file =~ /\/\.{1,2}$/
238
- end
239
- end
240
-
241
- # files to be written
242
- files = Set.new
243
- each_site_file { |item| files << item.destination(self.dest) }
244
-
245
- # adding files' parent directories
246
- dirs = Set.new
247
- files.each { |file| dirs << File.dirname(file) }
248
- files.merge(dirs)
249
-
250
- # files that are replaced by dirs should be deleted
251
- files_to_delete = Set.new
252
- dirs.each { |dir| files_to_delete << dir if File.file?(dir) }
253
-
254
- obsolete_files = dest_files - files + files_to_delete
255
- FileUtils.rm_rf(obsolete_files.to_a)
256
- end
257
-
258
- # Private: creates a regular expression from the keep_files array
259
- #
260
- # Examples
261
- # ['.git','.svn'] creates the following regex: /\/(\.git|\/.svn)/
262
- #
263
- # Returns the regular expression
264
- def keep_file_regex
265
- or_list = self.keep_files.join("|")
266
- pattern = "\/(#{or_list.gsub(".", "\.")})"
267
- Regexp.new pattern
223
+ site_cleaner.cleanup!
268
224
  end
269
225
 
270
226
  # Write static files, pages, and posts.
@@ -310,7 +266,8 @@ module Jekyll
310
266
  # "tags" - The Hash of tag values and Posts.
311
267
  # See Site#post_attr_hash for type info.
312
268
  def site_payload
313
- {"site" => self.config.merge({
269
+ {"jekyll" => { "version" => Jekyll::VERSION },
270
+ "site" => self.config.merge({
314
271
  "time" => self.time,
315
272
  "posts" => self.posts.sort { |a, b| b <=> a },
316
273
  "pages" => self.pages,
@@ -422,5 +379,9 @@ module Jekyll
422
379
  limit = self.posts.length < limit_posts ? self.posts.length : limit_posts
423
380
  self.posts = self.posts[-limit, limit]
424
381
  end
382
+
383
+ def site_cleaner
384
+ @site_cleaner ||= Cleaner.new(self)
385
+ end
425
386
  end
426
387
  end
@@ -74,7 +74,7 @@ module Jekyll
74
74
  #
75
75
  # Returns the formatted message
76
76
  def message(topic, message)
77
- formatted_topic(topic) + message.gsub(/\s+/, ' ')
77
+ formatted_topic(topic) + message.to_s.gsub(/\s+/, ' ')
78
78
  end
79
79
 
80
80
  # Public: Format the topic
@@ -51,6 +51,20 @@ eos
51
51
  def render(context)
52
52
  includes_dir = File.join(context.registers[:site].source, '_includes')
53
53
 
54
+ if error = validate_file(includes_dir)
55
+ return error
56
+ end
57
+
58
+ source = File.read(File.join(includes_dir, @file))
59
+ partial = Liquid::Template.parse(source)
60
+
61
+ context.stack do
62
+ context['include'] = parse_params(context) if @params
63
+ partial.render(context)
64
+ end
65
+ end
66
+
67
+ def validate_file(includes_dir)
54
68
  if File.symlink?(includes_dir)
55
69
  return "Includes directory '#{includes_dir}' cannot be a symlink"
56
70
  end
@@ -59,19 +73,11 @@ eos
59
73
  return "Include file '#{@file}' contains invalid characters or sequences"
60
74
  end
61
75
 
62
- Dir.chdir(includes_dir) do
63
- choices = Dir['**/*'].reject { |x| File.symlink?(x) }
64
- if choices.include?(@file)
65
- source = File.read(@file)
66
- partial = Liquid::Template.parse(source)
67
-
68
- context.stack do
69
- context['include'] = parse_params(context) if @params
70
- partial.render(context)
71
- end
72
- else
73
- "Included file '#{@file}' not found in _includes directory"
74
- end
76
+ file = File.join(includes_dir, @file)
77
+ if !File.exists?(file)
78
+ return "Included file #{@file} not found in _includes directory"
79
+ elsif File.symlink?(file)
80
+ return "The included file '_includes/#{@file}' should not be a symlink"
75
81
  end
76
82
  end
77
83
  end
@@ -0,0 +1,67 @@
1
+ # Public: Methods that generate a URL for a resource such as a Post or a Page.
2
+ #
3
+ # Examples
4
+ #
5
+ # URL.new({
6
+ # :template => /:categories/:title.html",
7
+ # :placeholders => {:categories => "ruby", :title => "something"}
8
+ # }).to_s
9
+ #
10
+ module Jekyll
11
+ class URL
12
+
13
+ # options - One of :permalink or :template must be supplied.
14
+ # :template - The String used as template for URL generation,
15
+ # for example "/:path/:basename:output_ext", where
16
+ # a placeholder is prefixed with a colon.
17
+ # :placeholders - A hash containing the placeholders which will be
18
+ # replaced when used inside the template. E.g.
19
+ # { "year" => Time.now.strftime("%Y") } would replace
20
+ # the placeholder ":year" with the current year.
21
+ # :permalink - If supplied, no URL will be generated from the
22
+ # template. Instead, the given permalink will be
23
+ # used as URL.
24
+ def initialize(options)
25
+ @template = options[:template]
26
+ @placeholders = options[:placeholders] || {}
27
+ @permalink = options[:permalink]
28
+
29
+ if (@template || @permalink).nil?
30
+ raise ArgumentError, "One of :template or :permalink must be supplied."
31
+ end
32
+ end
33
+
34
+ # The generated relative URL of the resource
35
+ #
36
+ # Returns the String URL
37
+ def to_s
38
+ sanitize_url(@permalink || generate_url)
39
+ end
40
+
41
+ # Internal: Generate the URL by replacing all placeholders with their
42
+ # respective values
43
+ #
44
+ # Returns the _unsanitizied_ String URL
45
+ def generate_url
46
+ @placeholders.inject(@template) do |result, token|
47
+ result.gsub(/:#{token.first}/, token.last)
48
+ end
49
+ end
50
+
51
+ # Returns a sanitized String URL
52
+ def sanitize_url(in_url)
53
+ # Remove all double slashes
54
+ url = in_url.gsub(/\/\//, "/")
55
+
56
+ # Remove every URL segment that consists solely of dots
57
+ url = url.split('/').reject{ |part| part =~ /^\.+$/ }.join('/')
58
+
59
+ # Append a trailing slash to the URL if the unsanitized URL had one
60
+ url += "/" if in_url =~ /\/$/
61
+
62
+ # Always add a leading slash
63
+ url.gsub!(/\A([^\/])/, '/\1')
64
+ url
65
+ end
66
+ end
67
+ end
@@ -15,32 +15,30 @@
15
15
  </head>
16
16
  <body>
17
17
 
18
- <div class="container">
19
- <div class="site">
20
- <div class="header">
21
- <h1 class="title"><a href="/">{{ site.name }}</a></h1>
22
- <a class="extra" href="/">home</a>
23
- </div>
18
+ <div class="site">
19
+ <div class="header">
20
+ <h1 class="title"><a href="/">{{ site.name }}</a></h1>
21
+ <a class="extra" href="/">home</a>
22
+ </div>
24
23
 
25
- {{ content }}
24
+ {{ content }}
26
25
 
27
- <div class="footer">
28
- <div class="contact">
29
- <p>
30
- Your Name<br />
31
- What You Are<br />
32
- your@email.com
33
- </p>
34
- </div>
35
- <div class="contact">
36
- <p>
37
- <a href="http://github.com/yourusername/">github.com/yourusername</a><br />
38
- <a href="http://twitter.com/yourusername/">twitter.com/yourusername</a><br />
39
- </p>
40
- </div>
26
+ <div class="footer">
27
+ <div class="contact">
28
+ <p>
29
+ Your Name<br />
30
+ What You Are<br />
31
+ you@example.com
32
+ </p>
33
+ </div>
34
+ <div class="contact">
35
+ <p>
36
+ <a href="https://github.com/yourusername">github.com/yourusername</a><br />
37
+ <a href="https://twitter.com/yourusername">twitter.com/yourusername</a><br />
38
+ </p>
41
39
  </div>
42
40
  </div>
43
- </div> <!-- /container -->
41
+ </div>
44
42
 
45
43
  </body>
46
44
  </html>
@@ -1,4 +1,6 @@
1
1
  pygments: true
2
2
  relative_permalinks: false
3
3
  gauges_id: 503c5af6613f5d0f19000027
4
- permalink: /news/:year/:month/:day/:title
4
+ permalink: /news/:year/:month/:day/:title/
5
+ excerpt_separator: noifniof3nioaniof3nioafafinoafnoif
6
+ repository: https://github.com/mojombo/jekyll
@@ -2,95 +2,95 @@
2
2
  <aside>
3
3
  <h4>Getting Started</h4>
4
4
  <ul>
5
- <li class="{% if page.title == "Welcome" %}current{% endif %}">
6
- <a href="{{ site.url }}/docs/home">Welcome</a>
5
+ <li class="{% if page.title == 'Welcome' %}current{% endif %}">
6
+ <a href="{{ site.url }}/docs/home/">Welcome</a>
7
7
  </li>
8
- <li class="{% if page.title == "Quick-start guide" %}current{% endif %}">
9
- <a href="{{ site.url }}/docs/quickstart">Quick-start guide</a>
8
+ <li class="{% if page.title == 'Quick-start guide' %}current{% endif %}">
9
+ <a href="{{ site.url }}/docs/quickstart/">Quick-start guide</a>
10
10
  </li>
11
- <li class="{% if page.title == "Installation" %}current{% endif %}">
12
- <a href="{{ site.url }}/docs/installation">Installation</a>
11
+ <li class="{% if page.title == 'Installation' %}current{% endif %}">
12
+ <a href="{{ site.url }}/docs/installation/">Installation</a>
13
13
  </li>
14
- <li class="{% if page.title == "Basic Usage" %}current{% endif %}">
15
- <a href="{{ site.url }}/docs/usage">Basic Usage</a>
14
+ <li class="{% if page.title == 'Basic Usage' %}current{% endif %}">
15
+ <a href="{{ site.url }}/docs/usage/">Basic Usage</a>
16
16
  </li>
17
- <li class="{% if page.title == "Directory structure" %}current{% endif %}">
18
- <a href="{{ site.url }}/docs/structure">Directory structure</a>
17
+ <li class="{% if page.title == 'Directory structure' %}current{% endif %}">
18
+ <a href="{{ site.url }}/docs/structure/">Directory structure</a>
19
19
  </li>
20
- <li class="{% if page.title == "Configuration" %}current{% endif %}">
21
- <a href="{{ site.url }}/docs/configuration">Configuration</a>
20
+ <li class="{% if page.title == 'Configuration' %}current{% endif %}">
21
+ <a href="{{ site.url }}/docs/configuration/">Configuration</a>
22
22
  </li>
23
23
  </ul>
24
24
  <h4>Your Content</h4>
25
25
  <ul>
26
- <li class="{% if page.title == "Front-matter" %}current{% endif %}">
27
- <a href="{{ site.url }}/docs/frontmatter">Front-matter</a>
26
+ <li class="{% if page.title == 'Front-matter' %}current{% endif %}">
27
+ <a href="{{ site.url }}/docs/frontmatter/">Front-matter</a>
28
28
  </li>
29
- <li class="{% if page.title == "Writing posts" %}current{% endif %}">
30
- <a href="{{ site.url }}/docs/posts">Writing posts</a>
29
+ <li class="{% if page.title == 'Writing posts' %}current{% endif %}">
30
+ <a href="{{ site.url }}/docs/posts/">Writing posts</a>
31
31
  </li>
32
- <li class="{% if page.title == "Working with drafts" %}current{% endif %}">
33
- <a href="{{ site.url }}/docs/drafts">Working with drafts</a>
32
+ <li class="{% if page.title == 'Working with drafts' %}current{% endif %}">
33
+ <a href="{{ site.url }}/docs/drafts/">Working with drafts</a>
34
34
  </li>
35
- <li class="{% if page.title == "Creating pages" %}current{% endif %}">
36
- <a href="{{ site.url }}/docs/pages">Creating pages</a>
35
+ <li class="{% if page.title == 'Creating pages' %}current{% endif %}">
36
+ <a href="{{ site.url }}/docs/pages/">Creating pages</a>
37
37
  </li>
38
- <li class="{% if page.title == "Variables" %}current{% endif %}">
39
- <a href="{{ site.url }}/docs/variables">Variables</a>
38
+ <li class="{% if page.title == 'Variables' %}current{% endif %}">
39
+ <a href="{{ site.url }}/docs/variables/">Variables</a>
40
40
  </li>
41
- <li class="{% if page.title == "Blog migrations" %}current{% endif %}">
42
- <a href="{{ site.url }}/docs/migrations">Blog migrations</a>
41
+ <li class="{% if page.title == 'Blog migrations' %}current{% endif %}">
42
+ <a href="{{ site.url }}/docs/migrations/">Blog migrations</a>
43
43
  </li>
44
44
  </ul>
45
45
  <h4>Customization</h4>
46
46
  <ul>
47
- <li class="{% if page.title == "Templates" %}current{% endif %}">
48
- <a href="{{ site.url }}/docs/templates">Templates</a>
47
+ <li class="{% if page.title == 'Templates' %}current{% endif %}">
48
+ <a href="{{ site.url }}/docs/templates/">Templates</a>
49
49
  </li>
50
- <li class="{% if page.title == "Permalinks" %}current{% endif %}">
51
- <a href="{{ site.url }}/docs/permalinks">Permalinks</a>
50
+ <li class="{% if page.title == 'Permalinks' %}current{% endif %}">
51
+ <a href="{{ site.url }}/docs/permalinks/">Permalinks</a>
52
52
  </li>
53
- <li class="{% if page.title == "Pagination" %}current{% endif %}">
54
- <a href="{{ site.url }}/docs/pagination">Pagination</a>
53
+ <li class="{% if page.title == 'Pagination' %}current{% endif %}">
54
+ <a href="{{ site.url }}/docs/pagination/">Pagination</a>
55
55
  </li>
56
- <li class="{% if page.title == "Plugins" %}current{% endif %}">
57
- <a href="{{ site.url }}/docs/plugins">Plugins</a>
56
+ <li class="{% if page.title == 'Plugins' %}current{% endif %}">
57
+ <a href="{{ site.url }}/docs/plugins/">Plugins</a>
58
58
  </li>
59
- <li class="{% if page.title == "Extras" %}current{% endif %}">
60
- <a href="{{ site.url }}/docs/extras">Extras</a>
59
+ <li class="{% if page.title == 'Extras' %}current{% endif %}">
60
+ <a href="{{ site.url }}/docs/extras/">Extras</a>
61
61
  </li>
62
62
  </ul>
63
63
  <h4>Deployment</h4>
64
64
  <ul>
65
- <li class="{% if page.title == "GitHub Pages" %}current{% endif %}">
66
- <a href="{{ site.url }}/docs/github-pages">GitHub Pages</a>
65
+ <li class="{% if page.title == 'GitHub Pages' %}current{% endif %}">
66
+ <a href="{{ site.url }}/docs/github-pages/">GitHub Pages</a>
67
67
  </li>
68
- <li class="{% if page.title == "Deployment methods" %}current{% endif %}">
69
- <a href="{{ site.url }}/docs/deployment-methods">Other methods</a>
68
+ <li class="{% if page.title == 'Deployment methods' %}current{% endif %}">
69
+ <a href="{{ site.url }}/docs/deployment-methods/">Other methods</a>
70
70
  </li>
71
71
  </ul>
72
72
  <h4>Miscellaneous</h4>
73
73
  <ul>
74
- <li class="{% if page.title == "Troubleshooting" %}current{% endif %}">
75
- <a href="{{ site.url }}/docs/troubleshooting">Troubleshooting</a>
74
+ <li class="{% if page.title == 'Troubleshooting' %}current{% endif %}">
75
+ <a href="{{ site.url }}/docs/troubleshooting/">Troubleshooting</a>
76
76
  </li>
77
- <li class="{% if page.title == "Sites using Jekyll" %}current{% endif %}">
78
- <a href="{{ site.url }}/docs/sites">Sites using Jekyll</a>
77
+ <li class="{% if page.title == 'Sites using Jekyll' %}current{% endif %}">
78
+ <a href="{{ site.url }}/docs/sites/">Sites using Jekyll</a>
79
79
  </li>
80
- <li class="{% if page.title == "Resources" %}current{% endif %}">
81
- <a href="{{ site.url }}/docs/resources">Resources</a>
80
+ <li class="{% if page.title == 'Resources' %}current{% endif %}">
81
+ <a href="{{ site.url }}/docs/resources/">Resources</a>
82
82
  </li>
83
- <li class="{% if page.title == "Upgrading" %}current{% endif %}">
84
- <a href="{{ site.url }}/docs/upgrading">Upgrading</a>
83
+ <li class="{% if page.title == 'Upgrading' %}current{% endif %}">
84
+ <a href="{{ site.url }}/docs/upgrading/">Upgrading</a>
85
85
  </li>
86
86
  </ul>
87
87
  <h4>Meta</h4>
88
88
  <ul>
89
- <li class="{% if page.title == "Contributing" %}current{% endif %}">
90
- <a href="{{ site.url }}/docs/contributing">Contributing</a>
89
+ <li class="{% if page.title == 'Contributing' %}current{% endif %}">
90
+ <a href="{{ site.url }}/docs/contributing/">Contributing</a>
91
91
  </li>
92
- <li class="{% if page.title == "History" %}current{% endif %}">
93
- <a href="{{ site.url }}/docs/history">History</a>
92
+ <li class="{% if page.title == 'History' %}current{% endif %}">
93
+ <a href="{{ site.url }}/docs/history/">History</a>
94
94
  </li>
95
95
  </ul>
96
96
  </aside>
@@ -2,41 +2,41 @@
2
2
  <select onchange="if (this.value) window.location.href=this.value">
3
3
  <option value="">Navigate the docs…</option>
4
4
  <optgroup label="Getting started">
5
- <option value="{{ site.url }}/docs/home">Welcome</option>
6
- <option value="{{ site.url }}/docs/quickstart">Quick-start guide</option>
7
- <option value="{{ site.url }}/docs/installation">Installation</option>
8
- <option value="{{ site.url }}/docs/usage">Basic Usage</option>
9
- <option value="{{ site.url }}/docs/structure">Directory structure</option>
10
- <option value="{{ site.url }}/docs/configuration">Configuration</option>
5
+ <option value="{{ site.url }}/docs/home/">Welcome</option>
6
+ <option value="{{ site.url }}/docs/quickstart/">Quick-start guide</option>
7
+ <option value="{{ site.url }}/docs/installation/">Installation</option>
8
+ <option value="{{ site.url }}/docs/usage/">Basic Usage</option>
9
+ <option value="{{ site.url }}/docs/structure/">Directory structure</option>
10
+ <option value="{{ site.url }}/docs/configuration/">Configuration</option>
11
11
  </optgroup>
12
12
  <optgroup label="Your Content">
13
- <option value="{{ site.url }}/docs/frontmatter">Front-matter</option>
14
- <option value="{{ site.url }}/docs/posts">Writing posts</option>
15
- <option value="{{ site.url }}/docs/drafts">Working with drafts</option>
16
- <option value="{{ site.url }}/docs/pages">Creating pages</option>
17
- <option value="{{ site.url }}/docs/variables">Variables</option>
18
- <option value="{{ site.url }}/docs/migrations">Blog migrations</option>
13
+ <option value="{{ site.url }}/docs/frontmatter/">Front-matter</option>
14
+ <option value="{{ site.url }}/docs/posts/">Writing posts</option>
15
+ <option value="{{ site.url }}/docs/drafts/">Working with drafts</option>
16
+ <option value="{{ site.url }}/docs/pages/">Creating pages</option>
17
+ <option value="{{ site.url }}/docs/variables/">Variables</option>
18
+ <option value="{{ site.url }}/docs/migrations/">Blog migrations</option>
19
19
  </optgroup>
20
20
  <optgroup label="Customization">
21
- <option value="{{ site.url }}/docs/templates">Templates</option>
22
- <option value="{{ site.url }}/docs/permalinks">Permalinks</option>
23
- <option value="{{ site.url }}/docs/pagination">Pagination</option>
24
- <option value="{{ site.url }}/docs/plugins">Plugins</option>
25
- <option value="{{ site.url }}/docs/extras">Extras</option>
21
+ <option value="{{ site.url }}/docs/templates/">Templates</option>
22
+ <option value="{{ site.url }}/docs/permalinks/">Permalinks</option>
23
+ <option value="{{ site.url }}/docs/pagination/">Pagination</option>
24
+ <option value="{{ site.url }}/docs/plugins/">Plugins</option>
25
+ <option value="{{ site.url }}/docs/extras/">Extras</option>
26
26
  </optgroup>
27
27
  <optgroup label="Deployment">
28
- <option value="{{ site.url }}/docs/github-pages">GitHub Pages</option>
29
- <option value="{{ site.url }}/docs/deployment-methods">Other methods</option>
28
+ <option value="{{ site.url }}/docs/github-pages/">GitHub Pages</option>
29
+ <option value="{{ site.url }}/docs/deployment-methods/">Other methods</option>
30
30
  </optgroup>
31
31
  <optgroup label="Miscellaneous">
32
- <option value="{{ site.url }}/docs/troubleshooting">Troubleshooting</option>
33
- <option value="{{ site.url }}/docs/sites">Sites using Jekyll</option>
34
- <option value="{{ site.url }}/docs/resources">Resources</option>
35
- <option value="{{ site.url }}/docs/upgrading">Upgrading</option>
32
+ <option value="{{ site.url }}/docs/troubleshooting/">Troubleshooting</option>
33
+ <option value="{{ site.url }}/docs/sites/">Sites using Jekyll</option>
34
+ <option value="{{ site.url }}/docs/resources/">Resources</option>
35
+ <option value="{{ site.url }}/docs/upgrading/">Upgrading</option>
36
36
  </optgroup>
37
37
  <optgroup label="Meta">
38
- <option value="{{ site.url }}/docs/contributing">Contributing</option>
39
- <option value="{{ site.url }}/docs/history">History</option>
38
+ <option value="{{ site.url }}/docs/contributing/">Contributing</option>
39
+ <option value="{{ site.url }}/docs/history/">History</option>
40
40
  </optgroup>
41
41
  </select>
42
42
  </div>