diff --git a/lib/plugins/helper/open_graph.js b/lib/plugins/helper/open_graph.js index c4dad87ff3..bb228e90f9 100644 --- a/lib/plugins/helper/open_graph.js +++ b/lib/plugins/helper/open_graph.js @@ -2,7 +2,8 @@ const { parse, resolve } = require('url'); const { isMoment, isDate } = require('moment'); -const { encodeURL, htmlTag, stripHTML, escapeHTML } = require('hexo-util'); +const { prettyUrls, htmlTag, stripHTML, escapeHTML } = require('hexo-util'); + const localeMap = { 'en': 'en_US', 'de': 'de_DE', @@ -44,7 +45,7 @@ function openGraphHelper(options = {}) { let keywords = page.keywords || (page.tags && page.tags.length ? page.tags : undefined) || config.keywords; const title = options.title || page.title || config.title; const type = options.type || (this.is_post() ? 'article' : 'website'); - let url = options.url || this.url; + const url = prettyUrls(options.url || this.url, config.pretty_urls); const siteName = options.site_name || config.title; const twitterCard = options.twitter_card || 'summary'; const date = options.date !== false ? options.date || page.date : false; @@ -82,12 +83,6 @@ function openGraphHelper(options = {}) { result += og('og:type', type); result += og('og:title', title); - if (url) { - if (config.pretty_urls.trailing_index === false) { - url = url.replace(/index\.html$/, ''); - } - url = encodeURL(url); - } result += og('og:url', url); result += og('og:site_name', siteName); diff --git a/test/scripts/helpers/open_graph.js b/test/scripts/helpers/open_graph.js index 6e5b3779b0..8eace68ef0 100644 --- a/test/scripts/helpers/open_graph.js +++ b/test/scripts/helpers/open_graph.js @@ -117,7 +117,7 @@ describe('open_graph', () => { result.should.contain(meta({property: 'og:url', content: 'https://hexo.io/bar'})); }); - it('url - should not ends with index.html', () => { + it('url - pretty_urls.trailing_index', () => { hexo.config.pretty_urls.trailing_index = false; const result = openGraph.call({ page: {}, @@ -128,11 +128,47 @@ describe('open_graph', () => { const $ = cheerio.load(result); - $('meta[property="og:url"]').attr('content').endsWith('index.html').should.be.false; + $('meta[property="og:url"]').attr('content').endsWith('index.html').should.eql(false); hexo.config.pretty_urls.trailing_index = true; }); + it('url - pretty_urls.trailing_html', () => { + hexo.config.pretty_urls.trailing_html = false; + const result = openGraph.call({ + page: {}, + config: hexo.config, + is_post: isPost, + url: 'http://yoursite.com/page/about.html' + }); + + const $ = cheerio.load(result); + + $('meta[property="og:url"]').attr('content').endsWith('.html').should.eql(false); + + hexo.config.pretty_urls.trailing_html = true; + }); + + it('url - null pretty_urls', () => { + hexo.config.pretty_urls = null; + const url = 'http://yoursite.com/page/about.html'; + const result = openGraph.call({ + page: {}, + config: hexo.config, + is_post: isPost, + url + }); + + const $ = cheerio.load(result); + + $('meta[property="og:url"]').attr('content').should.eql(url); + + hexo.config.pretty_urls = { + trailing_index: true, + trailing_html: true + }; + }); + it('url - IDN', () => { const ctx = { page: {},