@peaceroad/markdown-it-renderer-image
v0.3.1
Published
A markdown-it plugin. This add width and height attributes to img elements.
Downloads
8
Readme
p7d-markdown-it-renderer-image
A markdown-it plugin. This add width and height attributes to img elements.
Use
import fs from 'fs'
import mdit from 'markdown-it'
import mditRendererImage from '@peaceroad/markdown-it-renderer-image'
const md = mdit().use(mditRendererImage);
const mdPat = '/tmp/markdown.md';
const mdCont = fs.readFileSync(mdPat, 'utf-8');
// ![The cat is sitting nearby.](cat.jpg "The photo taken by k_taka.")
console.log(md.render(mdCont, {mdPath: mdPat}));
// If /tmp/cat.jpg is exists:
// <p><img src="cat.jpg" alt="The cat is sitting nearby." title="The photo taken by k_taka." width="400" height="300"></p>
Or,
import fs from 'fs'
import mdit from 'markdown-it'
import mditRendererImage from '@peaceroad/markdown-it-renderer-image'
const mdPat = '/tmp/markdown.md';
const md = mdit().use(mditRendererImage, {mdPath: mdPat});
const mdCont = fs.readFileSync(mdPat, 'utf-8');
console.log(md.render(mdCont));
Option
Setting dpi by filename scale suffix
You can adjust the height and width attributes by using the option {scaleSuffix: true}
.
const md = mdit().use(mditRendererImage, {scaleSuffix: true});
console.log(md.render('![A cat.]([email protected])', {mdPath: mdPat}));
// <p><img src="[email protected]" alt="A cat." width="200" height="150"></p>
console.log(md.render('![A cat.](cat_300dpi.jpg)', {mdPath: mdPat}));
// <p><img src="cat_300dpi.jpg" alt="A cat." width="128" height="96"></p>
console.log(md.render('![A cat.](cat_300ppi.jpg)', {mdPath: mdPat}));
// <p><img src="cat_300ppi.jpg" alt="A cat." width="128" height="96"></p>
This is identified by imageFileName.match(/[@._-]([0-9]+)(x|dpi|ppi)$/)
Resizing layout image by title attribute
Option to resize based on the value of the title attribute: {resize: true}
const md = mdit().use(mditRendererImage, {resize: true});
console.log(md.render('![A cat.](cat.jpg "Resize:50%")', {mdPath: mdPat}));
// <p><img src="cat.jpg" alt="A cat." width="200" height="150"></p>
console.log(md.render('![A cat.](cat.jpg "リサイズ:50%")', {mdPath: mdPat}));
// <p><img src="cat.jpg" alt="A cat." width="200" height="150"></p>
console.log(md.render('![A cat.](cat.jpg "サイズ変更:50%")', {mdPath: mdPat}));
// <p><img src="cat.jpg" alt="A cat." width="200" height="150"></p>
console.log(md.render('![A cat.](cat.jpg "The photo taken by k_taka. The shown photo have been resized to 50%.")', {mdPath: mdPat}));
// <p><img src="cat.jpg" alt="A cat." title="The photo taken by k_taka. The shown photo have been resized to 50%." width="200" height="150"></p>
console.log(md.render('![Figure](cat.jpg "resize:320px")', {mdPath: mdPat}));
// <p><img src="cat.jpg" alt="Figure" title="resize:320px" width="320" height="240"></p>
console.log(md.render('![Figure]([email protected] "resize:320px"))', {mdPath: mdPat}));
// <p><img src="[email protected]" alt="Figure" title="resize:320px" width="320" height="240"></p>
This is identified by imgTitle.match(/(?:(?:(?:大きさ|サイズ)の?変更|リサイズ|resize(?:d to)?) *[::]? *([0-9]+)([%%]|px)|([0-9]+)([%%]|px)[にへ](?:(?:大きさ|サイズ)を?変更|リサイズ))/i)
If px
is specified, the numerical value is treated as the width after resizing.
Notice: Other Markdown extended notations may specify a caption in the title attribute. Therefore, think carefully about whether to enable this option.
Setting lazy load
By using {lazyLoad: true}
, it can have loading="lazy"
attribute.
const md = mdit.use(mditRendererImage, {lazyLoad: true});
console.log(md.render('![A cat.]([email protected])', {mdPath: mdPat}));
// <p><img src="cat.jpg" alt="A cat." loading="lazy" width="400" height="300"></p>
Setting async decode
By using {asyncDecode: true}
, it can have decoding="async"
attribute.
const md = mdit().use(mditRendererImage, {asyncDecode: true});
console.log(md.render('![A cat.]([email protected])', {mdPath: mdPat}));
// <p><img src="cat.jpg" alt="A cat." decoding="async" width="400" height="300"></p>
Check image extension
By default, the image (extension) that specifies the width and height is limited to png, jpg, jpeg, gif, webp, and svg [0.3.0+]. If you want to change this, modify the option setting {checkImgExtensions: 'png,jpg,jpeg,gif,webp,svg' }
.