JP Coders

Published on

Markdownでクラスを追加できるようにする #markdown-it

Markdownでは様々なHTMLのためのタグが使えますが、その中でもクラスタグ(class)を使用する方法についてです。Node.jsのパッケージライブラリ、markdown-it-containerを使用してMarkdown クラスタグ(class)タグを使用可能にします。

markdown-it-containerでMarkdownでCSSクラスを追加できるようにしたりします。

導入

まずは、markdown-it-containerをインストールします。

npm install markdown-it-container --save
https://yuis.xsrv.jp/data/0wUwaA3EBb0D3j8SOceVdHqHvraze5qz.pngmarkdown-it-container - npm

以下は、markdown-it-containerを使用して、MarkdownでCSSクラスを追加できるようにした例です。


var md = require('markdown-it')();

md.use(require('markdown-it-container'), 'spoiler', {

  validate: function(params) {
    return params.trim().match(/^spoiler\s+(.*)$/);
  },

  render: function (tokens, idx) {
    var m = tokens[idx].info.trim().match(/^spoiler\s+(.*)$/);

    if (tokens[idx].nesting === 1) {
      // opening tag
      return '<details><summary>' + m[1] + '</summary>\n';

    } else {
      // closing tag
      return '</details>\n';
    }
  }
});

md.use(require('markdown-it-container'), 'class', {

  validate: function(params) {
    return params.trim().match(/^class\s+(.*)$/);
  },

  render: function (tokens, idx) {
    var m = tokens[idx].info.trim().match(/^class\s+(.*)$/);

    if (tokens[idx].nesting === 1) {
      // opening tag
      return `<div class="${m[1]}">\n`;

    } else {
      // closing tag
      return '</div>\n';
    }
  }
});

console.log("\n");

console.log(md.render('::: spoiler click me\n*contentcontent*\n:::\n'));
console.log(md.render('::: spoiler \n*contentcontent*\n:::\n'));
console.log(md.render('::: spoiler\n*contentcontent*\n:::\n'));

console.log(md.render('::: class warning\n*contentcontent*\n:::\n'));
console.log(md.render('::: class info\n*contentcontent*\n:::\n'));

console.log(md.render('::: class note gray\n*contentcontent*\n:::\n'));

console.log(md.render('::: class note gray\n# hoge \n## hogehoge \n\something\n:::\n'));

解説

上記のコードはまず、markdown-it-containerを使用して、spoilerという名前のタグを作成しています。

https://yuis.xsrv.jp/images/ss/ShareX_ScreenShot_59e6eb12-2d3f-471b-a070-f35ae935e2c3.png

これにより、MarkdownでCSSクラスを追加できるようになります。

以下のように、:classを使用して、クラスを追加できます。

<details><summary>click me</summary>
<em>contentcontent</em>
</details>

::: spoiler
<em>contentcontent</em>
:::

::: spoiler
<em>contentcontent</em>
:::

<div class="warning">
<em>contentcontent</em>
</div>

<div class="info">
<em>contentcontent</em>
</div>

<div class="note gray">
<em>contentcontent</em>
</div>

<div class="note gray">
<h1>hoge</h1>
<h2>hogehoge</h2>
something
</div>
Authors
  • avatar
  • Name
  • 情報技術者 / Z世代プログラマー / 米大学院にてデータサイエンスを学ぶ

  • ITプロフェッショナルとして活動しています。React.js等のモダンなウェブ制作・アプリ開発を得意としており、Java・Python・Rust等のプログラミング言語を用いたソフトウェア開発全般を行っています。

お手伝いできますか? 🤝

他の方法でのご連絡をご希望ですか?
web制作ご依頼受付中

本記事で掲載している情報やコードは執筆時点のものであり、動作を保証するものではありません。 自己責任のもと、プログラムの実行や情報の利用にあたってはご注意ください。


本記事には提携する企業の広告が含まれる場合があります。