Skip to content

Commit 358ae2b

Browse files
committed
Fix image references
1 parent 1da9df7 commit 358ae2b

File tree

4 files changed

+65
-14
lines changed

4 files changed

+65
-14
lines changed

lib/index.js

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ module.exports = function (options) {
4141
*/
4242

4343
function buildIndex (files, ms, done) {
44-
var docs = ms.metadata().docs || 'docs'
44+
const docs = ms.metadata().docs || 'docs'
45+
const docsExpr = new RegExp('^' + docs + '/')
4546

4647
if (!files[`${docs}/README.md`]) {
4748
var err = new Error(`Table of contents not found ('${docs}/README.md')`)
@@ -51,6 +52,16 @@ function buildIndex (files, ms, done) {
5152
var toc = tocify(files[`${docs}/README.md`].contents.toString(), files, { docs })
5253
var indexes = indexify(toc, { docs })
5354

55+
// hax: add sources for images too
56+
Object.keys(files).forEach((fname) => {
57+
const file = files[fname]
58+
const newName = fname.replace(docsExpr, '')
59+
if (newName !== fname && !fname.match(/\.md$/)) {
60+
file.newName = newName
61+
indexes.sources[fname] = newName
62+
}
63+
})
64+
5465
verifyIndex(indexes.index, files)
5566

5667
files['toc.json'] = { contents: JSON.stringify(toc, null, 2) + '\n' }
@@ -106,9 +117,6 @@ function renderMarkdown (files, ms, done) {
106117
*/
107118

108119
function cleanFiles (files, ms, done) {
109-
const docs = ms.metadata().docs || 'docs'
110-
const docsExpr = new RegExp('^' + docs + '/')
111-
112120
// rename any old files
113121
each(files, (file, fname) => {
114122
// leave those that was processed
@@ -121,9 +129,9 @@ function cleanFiles (files, ms, done) {
121129
}
122130

123131
// rename docs/images/pic.png => images/pic.png
124-
const newName = fname.replace(docsExpr, '')
125-
if (newName !== fname) {
126-
files[newName] = files[fname]
132+
// (`newName` is left by an earlier step)
133+
if (file.newName) {
134+
files[file.newName] = files[fname]
127135
delete files[fname]
128136
}
129137
})

test/index/fix_refs_test.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,9 @@ describe('index/fix refs:', function () {
1111

1212
this.files = {
1313
'docs/README.md': {
14-
contents: [
15-
'# toc',
16-
'',
17-
'* [Readme](/README.md)',
18-
'* [Getting started](/docs/getting-started.md)'
19-
].join('\n') + '\n'
14+
contents:
15+
'* [Readme](/README.md)\n' +
16+
'* [Getting started](/docs/getting-started.md)\n'
2017
},
2118
'README.md': {
2219
contents: '[getting started](docs/getting-started.md)'

test/index/image_refs_test.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,18 @@ describe('index/image refs:', function () {
2929

3030
it('works', function () {
3131
expect(this.files['index.html'].contents).toEqual(
32-
'<p><img src="docs/images/screenshot.png" alt=""></p>\n'
32+
'<p><img src="images/screenshot.png" alt=""></p>\n'
3333
)
3434
})
35+
36+
it('adds to sources', function () {
37+
expect(JSON.parse(this.files['sources.json'].contents)).toEqual({
38+
'README.md': 'index.html',
39+
'docs/images/screenshot.png': 'images/screenshot.png'
40+
})
41+
})
42+
43+
it('preserves the image', function () {
44+
expect(this.files['images/screenshot.png']).toExist()
45+
})
3546
})

test/index/unused_md_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/unused md files:', 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)'
15+
},
16+
'README.md': {
17+
contents: '[getting started](docs/getting-started.md)'
18+
},
19+
'docs/getting-started.md': {
20+
contents: 'hi'
21+
}
22+
}
23+
24+
compile(this.files, ms, (err) => {
25+
if (err) throw err
26+
done()
27+
})
28+
})
29+
30+
it('removes unprocessed .md files', function () {
31+
expect(Object.keys(this.files)).toEqual([
32+
'toc.json', 'index.json', 'sources.json', 'index.html'
33+
])
34+
})
35+
})

0 commit comments

Comments
 (0)