世界を旅して暮らしたい放浪エンジニアブログ

markdown-it-containerを利用してmarkdownの投稿内にmessage boxを用意する

Nuxt.js + markdownで作成している本ブログの投稿内にmessage boxを用意します。既に@nuxtjs/markdownitが導入されていますので、markdown-itのプラグインとなるmarkdown-it-containerを利用していきます

[ 目次 ]

はじめに

こんにちは、香港に住んでいるWEBデベロッパーのなかむ(@nakanakamu0828)です。

今回は、本ブログの投稿内にmessage boxを用意します。既に@nuxtjs/markdownitが導入されていますので、markdown-itのプラグインとなるmarkdown-it-containerを利用していきます。

markdown-it/markdown-it-container

@nuxtjs/markdownit 導入の記事は、vue-markdown をやめて nuxtjs/markdownit を利用する をご確認ください。

本ブログでは、CSSフレームワークとしてbulmaを利用しています。

https://bulma.io/documentation/components/message/

こちらのページのmessageのスタイルでboxを作っていきます。

markdown-it-containerのインストール

■ npmを利用する場合

$ npm install markdown-it-container --save

■ yarnを利用する場合

$ yarn add markdown-it-container

nuxt.config.jsの修正

markdownitの設定部分を修正していきます。

■ 修正前

markdownit: {
  injected: true, // $mdを利用してmarkdownをhtmlにレンダリングする
  breaks: true, // 改行コードを<br>に変換する
  html: true, // HTML タグを有効にする
  linkify: true, // URLに似たテキストをリンクに自動変換する
  typography: true,  // 言語に依存しないきれいな 置換 + 引用符 を有効にします。
  use: [
    'markdown-it-toc' // 目次を作るためのライブラリ。別途インストールが必要
  ]
}

■ 修正後

markdownit: {
  preset: 'default',
  injected: true,
  breaks: true,
  use: [
    // ### markdown-it-containerの設定 ###
    ['markdown-it-container', 'warning', {

      validate: function(params) {
        return params.trim().match(/^message\s+(.*)$/);
      },
    
      render: function (tokens, idx) {
        var m = tokens[idx].info.trim().match(/^message\s+(.*)$/);
    
        if (tokens[idx].nesting === 1) {
          return '<div class="message ' + md.utils.escapeHtml(m[1]) + '"><div class="message-body">';
    
        } else {
          return '</div></div>\n';
        }
      }
    }],
    // ### ここまで ###
    'markdown-it-toc'
  ]
},

利用方法

markdown内に以下のように記述することでmessage boxが作成できます。

::: message is-primary
Primary
:::

::: message is-info
Info
:::

::: message is-success
Success
:::

::: message is-warning
Warning
:::

::: message is-danger
Danger
:::

レンダリングされるHTMLは以下です。

<div class="message is-primary">
  <div class="message-body">
    <p>Primary</p>
  </div>
</div>

<div class="message is-info">
  <div class="message-body">
    <p>Info</p>
  </div>
</div>

<div class="message is-success">
  <div class="message-body">
    <p>Success</p>
  </div>
</div>

<div class="message is-warning">
  <div class="message-body">
    <p>Warning</p>
  </div>
</div>

<div class="message is-danger">
  <div class="message-body">
    <p>Danger</p>
  </div>
</div>

サンプル

Primary

Info

Success

Warning

Danger

前のページ

次のページ

Profile

なかむ🇭🇰Webデベロッパー

なかむ🇭🇰Webデベロッパー

香港在住4年目になるWEBエンジニアのなかむです。 現在は、LaravelやRailsを利用したWEB開発を中心にエンジニアをしています。 顧客は全て日本の企業になります。リモート開発にて各企業様の支援を行なっております

プロフィール詳細はこちら

Latest Posts