Skip to content

Commit 1b16845

Browse files
committed
Added configuration for having images resolve to root-relative paths.
If rootRelativeImageURL is false (default), current behaviour remains the same. If rootRelativeImageURL is true, images with root-relative URLs would be rendered exactly as specified. E.g. ![](/assets/image.png) --> <img src="/assets/image.png" /> If rootRelativeImageURL is a string, that would be treated as the path to which root-relative image paths resolve. E.g.: config: { rootRelativeImageURL: "docs" } ![](/assets/image.png) --> <img src="/docs/assets/image.png" />
1 parent d70b914 commit 1b16845

File tree

3 files changed

+29
-6
lines changed

3 files changed

+29
-6
lines changed

src/core/config.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ export default function(vm) {
3535
crossOriginLinks: [],
3636
relativePath: false,
3737
topMargin: 0,
38+
rootRelativeImageURL: false,
3839
},
3940
typeof window.$docsify === 'function'
4041
? window.$docsify(vm)
@@ -79,6 +80,10 @@ export default function(vm) {
7980
config.name = '';
8081
}
8182

83+
if (config.rootRelativeImageURL === true) {
84+
config.rootRelativeImageURL = '';
85+
}
86+
8287
window.$docsify = config;
8388

8489
return config;

src/core/render/compiler.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ export class Compiler {
6868
this.linkRel =
6969
this.linkTarget === '_blank' ? config.externalLinkRel || 'noopener' : '';
7070
this.contentBase = router.getBasePath();
71+
this.rootRelativeImageURL = config.rootRelativeImageURL;
7172

7273
const renderer = this._initRenderer();
7374
this.heading = renderer.heading;
@@ -193,7 +194,13 @@ export class Compiler {
193194

194195
_initRenderer() {
195196
const renderer = new marked.Renderer();
196-
const { linkTarget, linkRel, router, contentBase } = this;
197+
const {
198+
linkTarget,
199+
linkRel,
200+
router,
201+
contentBase,
202+
rootRelativeImageURL,
203+
} = this;
197204
const _self = this;
198205
const origin = {};
199206

@@ -237,7 +244,12 @@ export class Compiler {
237244
compilerClass: _self,
238245
});
239246
origin.paragraph = paragraphCompiler({ renderer });
240-
origin.image = imageCompiler({ renderer, contentBase, router });
247+
origin.image = imageCompiler({
248+
renderer,
249+
contentBase,
250+
router,
251+
rootRelativeImageURL,
252+
});
241253
origin.list = taskListCompiler({ renderer });
242254
origin.listitem = taskListItemCompiler({ renderer });
243255

src/core/render/compiler/image.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,12 @@ import {
66
getParentPath,
77
} from '../../router/util';
88

9-
export const imageCompiler = ({ renderer, contentBase, router }) =>
9+
export const imageCompiler = ({
10+
renderer,
11+
contentBase,
12+
router,
13+
rootRelativeImageURL,
14+
}) =>
1015
(renderer.image = (href, title, text) => {
1116
let url = href;
1217
let attrs = [];
@@ -40,9 +45,10 @@ export const imageCompiler = ({ renderer, contentBase, router }) =>
4045
}
4146

4247
if (!isAbsolutePath(href)) {
43-
url = isPathRootRelative(href)
44-
? getPath(contentBase, href)
45-
: getPath(contentBase, getParentPath(router.getCurrentPath()), href);
48+
url =
49+
isPathRootRelative(href) && rootRelativeImageURL !== false
50+
? getPath('/' + String(rootRelativeImageURL), href)
51+
: getPath(contentBase, getParentPath(router.getCurrentPath()), href);
4652
}
4753

4854
if (attrs.length > 0) {

0 commit comments

Comments
 (0)