From e8b00fb6f2b2009bb766ffcb21b777e8b6b1bf8a Mon Sep 17 00:00:00 2001 From: Chris Frederick Date: Sat, 23 Aug 2014 14:50:55 +0900 Subject: [PATCH 1/3] Add the 'title' variable to collection permalinks --- lib/jekyll/document.rb | 3 ++- test/test_document.rb | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/jekyll/document.rb b/lib/jekyll/document.rb index 891610fa..61e62510 100644 --- a/lib/jekyll/document.rb +++ b/lib/jekyll/document.rb @@ -128,7 +128,8 @@ module Jekyll { collection: collection.label, path: cleaned_relative_path, - output_ext: Jekyll::Renderer.new(site, self).output_ext + output_ext: Jekyll::Renderer.new(site, self).output_ext, + title: basename(".*") } end diff --git a/test/test_document.rb b/test/test_document.rb index b352a050..994788db 100644 --- a/test/test_document.rb +++ b/test/test_document.rb @@ -186,6 +186,26 @@ class TestDocument < Test::Unit::TestCase end end + context "a document in a collection with custom permalinks" do + setup do + @site = Site.new(Jekyll.configuration({ + "collections" => { + "slides" => { + "output" => true, + "permalink" => "/slides/test/:title" + } + }, + "source" => source_dir, + "destination" => dest_dir + })) + @site.process + @document = @site.collections["slides"].docs[0] + end + + should "produce the right URL" do + assert_equal "/slides/test/example-slide-1", @document.url + end + end context "a static file in a collection" do setup do From cc4a0d17049e47d54713d4e37f4ea4a35228e6ac Mon Sep 17 00:00:00 2001 From: Chris Frederick Date: Tue, 26 Aug 2014 11:26:19 +0900 Subject: [PATCH 2/3] Change :title to :name --- lib/jekyll/document.rb | 2 +- test/test_document.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/jekyll/document.rb b/lib/jekyll/document.rb index 61e62510..a4bc6412 100644 --- a/lib/jekyll/document.rb +++ b/lib/jekyll/document.rb @@ -129,7 +129,7 @@ module Jekyll collection: collection.label, path: cleaned_relative_path, output_ext: Jekyll::Renderer.new(site, self).output_ext, - title: basename(".*") + name: basename(".*") } end diff --git a/test/test_document.rb b/test/test_document.rb index 994788db..68ca8d92 100644 --- a/test/test_document.rb +++ b/test/test_document.rb @@ -192,7 +192,7 @@ class TestDocument < Test::Unit::TestCase "collections" => { "slides" => { "output" => true, - "permalink" => "/slides/test/:title" + "permalink" => "/slides/test/:name" } }, "source" => source_dir, From a72706ace6059ab9290de566b548f85a445e7a6c Mon Sep 17 00:00:00 2001 From: Chris Frederick Date: Tue, 26 Aug 2014 11:46:01 +0900 Subject: [PATCH 3/3] Add Document#slug --- lib/jekyll/document.rb | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/jekyll/document.rb b/lib/jekyll/document.rb index a4bc6412..db471c32 100644 --- a/lib/jekyll/document.rb +++ b/lib/jekyll/document.rb @@ -45,6 +45,15 @@ module Jekyll File.basename(path, suffix) end + # The sluggified base filename of the document. + # + # Returns the base filename of the document in lowercase, with every + # sequence of spaces and non-alphanumeric characters replaced with a + # hyphen. + def slug + File.basename(path, ".*").downcase.gsub(/[\W\s]+/, '-') + end + # The extension name of the document. # # Returns the extension name of the document. @@ -129,7 +138,7 @@ module Jekyll collection: collection.label, path: cleaned_relative_path, output_ext: Jekyll::Renderer.new(site, self).output_ext, - name: basename(".*") + name: slug } end