Support for image paths relative to the page's directory (#466)
Merge pull request 466
This commit is contained in:
parent
7d1d478c0b
commit
1980476395
|
@ -61,13 +61,17 @@ module Jekyll
|
|||
|
||||
def absolute_url
|
||||
return unless raw_path
|
||||
return @absolute_url if defined? @absolute_url
|
||||
@absolute_url ||= build_absolute_path
|
||||
end
|
||||
|
||||
@absolute_url = if raw_path.is_a?(String) && absolute_url?(raw_path) == false
|
||||
filters.absolute_url raw_path
|
||||
else
|
||||
raw_path
|
||||
end
|
||||
def build_absolute_path
|
||||
return raw_path unless raw_path.is_a?(String) && absolute_url?(raw_path) == false
|
||||
return filters.absolute_url(raw_path) if raw_path.start_with?("/")
|
||||
|
||||
page_dir = @page["url"]
|
||||
page_dir = File.dirname(page_dir) unless page_dir.end_with?("/")
|
||||
|
||||
filters.absolute_url File.join(page_dir, raw_path)
|
||||
end
|
||||
|
||||
def filters
|
||||
|
|
|
@ -415,7 +415,7 @@ RSpec.describe Jekyll::SeoTag::Drop do
|
|||
end
|
||||
|
||||
context "image" do
|
||||
let(:image) { "foo.png" }
|
||||
let(:image) { "/foo.png" }
|
||||
let(:page_meta) { { "image" => image } }
|
||||
|
||||
it "returns a Drop" do
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
RSpec.describe Jekyll::SeoTag::ImageDrop do
|
||||
let(:config) { { "title" => "site title" } }
|
||||
let(:image) { nil }
|
||||
let(:page_meta) { { "image" => image } }
|
||||
let(:page_meta) { { "image" => image, "dir" => "foo" } }
|
||||
let(:page) { make_page(page_meta) }
|
||||
let(:site) { make_site(config) }
|
||||
let(:context) { make_context(:page => page, :site => site) }
|
||||
|
@ -14,8 +14,34 @@ RSpec.describe Jekyll::SeoTag::ImageDrop do
|
|||
Jekyll.logger.log_level = :error
|
||||
end
|
||||
|
||||
context "with image as a string" do
|
||||
context "with a post object" do
|
||||
let(:image) { "image.png" }
|
||||
let(:page_meta) { { "image" => image, "date" => "2017-01-01" } }
|
||||
let(:page) { make_post(page_meta) }
|
||||
|
||||
it "returns the image url relative to the post directory" do
|
||||
expect(subject["path"]).to eql("/2017/01/01/image.png")
|
||||
end
|
||||
end
|
||||
|
||||
context "with image as a relative path" do
|
||||
let(:image) { "image.png" }
|
||||
|
||||
it "returns the image with the page dir prepended" do
|
||||
expect(subject["path"]).to eql("/foo/image.png")
|
||||
end
|
||||
|
||||
context "with site.url" do
|
||||
let(:config) { { "url" => "http://example.com" } }
|
||||
|
||||
it "makes the path absolute" do
|
||||
expect(subject["path"]).to eql("http://example.com/foo/image.png")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "with image as an absolute path" do
|
||||
let(:image) { "/image.png" }
|
||||
|
||||
it "returns the image" do
|
||||
expect(subject["path"]).to eql("/image.png")
|
||||
|
@ -30,7 +56,7 @@ RSpec.describe Jekyll::SeoTag::ImageDrop do
|
|||
end
|
||||
|
||||
context "with a URL-escaped path" do
|
||||
let(:image) { "some image.png" }
|
||||
let(:image) { "/some image.png" }
|
||||
|
||||
it "URL-escapes the image" do
|
||||
expect(subject["path"]).to eql("/some%20image.png")
|
||||
|
@ -39,8 +65,8 @@ RSpec.describe Jekyll::SeoTag::ImageDrop do
|
|||
end
|
||||
|
||||
context "with image as a hash" do
|
||||
context "with a path" do
|
||||
let(:image) { { "path" => "image.png" } }
|
||||
context "with an absolute path" do
|
||||
let(:image) { { "path" => "/image.png" } }
|
||||
|
||||
it "returns the image" do
|
||||
expect(subject["path"]).to eql("/image.png")
|
||||
|
@ -48,7 +74,7 @@ RSpec.describe Jekyll::SeoTag::ImageDrop do
|
|||
end
|
||||
|
||||
context "with facebook" do
|
||||
let(:image) { { "facebook" => "image.png" } }
|
||||
let(:image) { { "facebook" => "/image.png" } }
|
||||
|
||||
it "returns the image" do
|
||||
expect(subject["path"]).to eql("/image.png")
|
||||
|
@ -56,7 +82,7 @@ RSpec.describe Jekyll::SeoTag::ImageDrop do
|
|||
end
|
||||
|
||||
context "with twitter" do
|
||||
let(:image) { { "twitter" => "image.png" } }
|
||||
let(:image) { { "twitter" => "/image.png" } }
|
||||
|
||||
it "returns the image" do
|
||||
expect(subject["path"]).to eql("/image.png")
|
||||
|
|
|
@ -113,8 +113,8 @@ RSpec.describe Jekyll::SeoTag::JSONLDDrop do
|
|||
end
|
||||
|
||||
context "image" do
|
||||
context "with image as a string" do
|
||||
let(:image) { "image" }
|
||||
context "with image as an absolute path" do
|
||||
let(:image) { "/image" }
|
||||
|
||||
it "returns the image as a string" do
|
||||
expect(subject).to have_key("image")
|
||||
|
@ -124,7 +124,7 @@ RSpec.describe Jekyll::SeoTag::JSONLDDrop do
|
|||
end
|
||||
|
||||
context "with image as a hash" do
|
||||
let(:image) { { "path" => "image", "height" => 5, "width" => 10 } }
|
||||
let(:image) { { "path" => "/image", "height" => 5, "width" => 10 } }
|
||||
|
||||
it "returns the image as a hash" do
|
||||
expect(subject).to have_key("image")
|
||||
|
|
|
@ -31,7 +31,7 @@ CONFIG_DEFAULTS = {
|
|||
}.freeze
|
||||
|
||||
def make_page(options = {})
|
||||
page = Jekyll::Page.new site, CONFIG_DEFAULTS["source"], "", "page.md"
|
||||
page = Jekyll::Page.new site, CONFIG_DEFAULTS["source"], options.delete("dir") || "", "page.md"
|
||||
page.data = options
|
||||
page
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue