テスト 2

ためしにハイブリッド入力で全体を Markdown の記述にしてみる。以下、本文のフォーマットを Markdown(テキストエリア) にしていたときのものをコピペ。わりといける感じかな。


markdown で記述できるようにしたので書き込んでみる。

見出しのテスト

どうなるか。

この状態でも html 変換後の内容で draftlint ロジックが稼働するはず。

しないかな?しました。

目次のテスト

目次も HTML 変換後のものが動作するはず。

見出し 1

テスト。

見出し 2

テスト。

テーブル

簡単なテーブルを記述してみる。

項目 1 項目 2項目 3
abcabcabc     1000   70
ABCABCABC     500   1000
あいうえお 2200   90

普通にテキストフィールドで markdown 記述してもそうだけど、コードブロック内でテーブルを編集するのはちょっと面倒。

画像

画像を gfm の書式で貼り付け。

ev car

HTML の書き換え処理も入っているのでそれなりで表示される。

埋め込み

とりあえず CodePen でテストしていたスライドを埋め込み。全画面は動作しないが、設定がおかしい?

コード

import unified, { Processor, FrozenProcessor } from 'unified';
import rehypeParse from 'rehype-parse';
import rehypeMinifyWhitespace from 'rehype-minify-whitespace';
import rehypeStringify from 'rehype-stringify';
import rehypeSanitize from 'rehype-sanitize';
import merge from 'deepmerge';
import gh from 'hast-util-sanitize/lib/github.json';
import { Schema } from 'hast-util-sanitize';
import cheerio from 'cheerio';
import { TocItems, HtmlToc } from '../types/pageTypes';
import { processorMarkdownToHtml } from './markdown';


export function processorHtml() {
  return unified().use(rehypeParse, { fragment: true });
}


const schema = merge(gh, {
  tagNames: ['picture', 'source', 'iframe'],
  attributes: {
    source: ['srcSet', 'sizes'],
    img: ['alt', 'srcSet', 'sizes', 'className'],
    code: ['className'],
    span: ['className'],
    iframe: [
      'height',
      'style',
      'scrolling',
      'title',
      'src',
      'frameborder',
      'loading',
      'allowtransparency',
      'allowfullscreen'
    ]
  }
});


function normalizeProcessor(processor: Processor): FrozenProcessor {
  return processor
    .use(rehypeMinifyWhitespace)
    .use(rehypeSanitize, (schema as unknown) as Schema)
    .use(rehypeStringify)
    .freeze();
}


export async function normalizedHtml(
  processor: Processor,
  html: string
): Promise<string> {
  return await new Promise((resolve, reject) => {
    normalizeProcessor(processor).process(html, (err, file) => {
      if (err) {
        console.error(err);
        reject(err);
      }
      resolve(String(file));
    });
  });
}

その他

赤色になるかな。

サニタイズで spanstyle 属性を許可する必要がありました。

引用はもスタイルが適用されるはず。 どんな感じかなと。

おわり。