Skip to content

Commit 1da9df7

Browse files
committed
Fix images
1 parent 7c82bcd commit 1da9df7

File tree

3 files changed

+42
-6
lines changed

3 files changed

+42
-6
lines changed

lib/fix_html.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,16 @@ const cheerio = require('cheerio')
44
const slugify = require('slugify')
55
const resolve = require('path').resolve
66
const dirname = require('path').dirname
7+
const relative = require('path').relative
78

89
/**
910
* Performs syntax highlighting and stuff.
1011
*/
1112

12-
module.exports = function fixHtml (html, fname, sources) {
13+
module.exports = function fixHtml (html, fname, sources, files) {
1314
const $ = cheerio.load(html)
1415
idify($)
15-
fixReferences($, fname, sources)
16+
fixReferences($, fname, sources, files)
1617
return $.html()
1718
}
1819

@@ -27,7 +28,7 @@ function idify ($) {
2728
})
2829
}
2930

30-
function fixReferences ($, fname, sources) {
31+
function fixReferences ($, fname, sources, files) {
3132
var base = dirname(fname)
3233

3334
$('[href], [src]').each(function () {
@@ -50,11 +51,11 @@ function fixReferences ($, fname, sources) {
5051
url = url.substr(1) // strip '/'
5152
}
5253

53-
if (!sources[url]) {
54+
if (!sources[url] && !files[url]) {
5455
throw new Error(`${fname}: Unknown reference '${origUrl}'`)
5556
}
5657

57-
url = sources[url]
58+
url = relative('/' + base, '/' + (sources[url] || url))
5859
$this.attr(attr, url)
5960
}
6061
}

lib/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ function renderMarkdown (files, ms, done) {
8989

9090
file._processed = true
9191
file.markdown = file.contents
92-
file.html = fixHtml(html, fname, sources)
92+
file.html = fixHtml(html, fname, sources, files)
9393
file.title = page.title
9494
file.source = page.source
9595
file.slug = page.slug

test/index/image_refs_test.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
const compile = require('../../index')()
2+
3+
describe('index/image refs:', function () {
4+
beforeEach(function (done) {
5+
// Mock metalsmith object
6+
var ms = {
7+
metadata () {
8+
return { docs: 'docs' }
9+
}
10+
}
11+
12+
this.files = {
13+
'docs/README.md': {
14+
contents: '* [Readme](/README.md)\n'
15+
},
16+
'README.md': {
17+
contents: '![](docs/images/screenshot.png)\n'
18+
},
19+
'docs/images/screenshot.png': {
20+
contents: '...'
21+
}
22+
}
23+
24+
compile(this.files, ms, (err) => {
25+
if (err) throw err
26+
done()
27+
})
28+
})
29+
30+
it('works', function () {
31+
expect(this.files['index.html'].contents).toEqual(
32+
'<p><img src="docs/images/screenshot.png" alt=""></p>\n'
33+
)
34+
})
35+
})

0 commit comments

Comments
 (0)