containers.js 957 B

12345678910111213141516171819202122232425262728
  1. /* eslint-disable @typescript-eslint/no-var-requires */
  2. const mdContainer = require('markdown-it-container');
  3. module.exports = md => {
  4. md.use(mdContainer, 'demo', {
  5. validate(params) {
  6. return params.trim().match(/^demo\s*(.*)$/);
  7. },
  8. render(tokens, idx) {
  9. const m = tokens[idx].info.trim().match(/^demo\s*(.*)$/);
  10. if (tokens[idx].nesting === 1) {
  11. const description = m && m.length > 1 ? m[1] : '';
  12. /*
  13. tokens是一个数组,里面是块级容器里面所有md代码的code,按照一定规则分割,例如
  14. tokens[idx].type === 'fence'意味着被```包裹的东西
  15. */
  16. const content = tokens[idx + 1].type === 'fence' ? tokens[idx + 1].content : '';
  17. return `<demo-block>
  18. ${description ? `<div>${md.render(description)}</div>` : ''}
  19. `;
  20. }
  21. return '</demo-block>';
  22. }
  23. });
  24. md.use(mdContainer, 'tip');
  25. md.use(mdContainer, 'warning');
  26. };