使う側に固有の部品と CSS を、その場所の文書にだけ当てる手順
共通の部品に無い自分の場所だけの部品と見た目を、文書に使うときに実行する。 当たるのは、固有の部品と CSS を読んだページの文書と、同じ設定ファイルで書き出した文書だけ。
init に --js を付けるnpx github:shuhei1101/mdmark#v{版} init --js
extensions/example.js と、JavaScript も点検する tsconfig.json が置かれる。
package.json は置かれない。
詳細は 雛形を置く。
// @ts-check と JSDoc で型を付ける// @ts-check
// 型は、使う版の dist/ の index.d.ts を ../mdmark/ に置いて読む
/**
* `<!-- milestones -->` の範囲の部品の定義を、段取りの一覧に描く拡張
* @type {import("../mdmark/index.js").MdmarkExtension}
*/
const extension = {
name: "milestones",
directive: "milestones",
load: async () => ({
draw(slot, value) {
const definition = /** @type */ (value.definition);
const title = document.createElement("strong");
title.textContent = definition.title;
const list = document.createElement("ol");
for (const item of definition.items) {
const li = document.createElement("li");
li.textContent = item;
list.append(li);
}
slot.className = "team-milestones";
slot.replaceChildren(title, list);
},
}),
};
export default extension;
JavaScript は変換せずにそのまま配る。
draw の value.definition は、印の範囲に置いた json のコードブロックを読んだ値。
形を確かめたいときは、拡張に schema を渡す(拡張を登録する)。
theme.css に書く.team-milestones {
border: 1px solid var(--mdmark-color-border);
border-radius: var(--mdmark-radius);
padding: 0.75rem 1rem;
}
.mdmark {
--mdmark-color-diagram-llm: #be185d;
}
固有の部品の見た目と、共通の部品の CSS 変数の上書きを書く。
theme.css は @layer で囲まない。
変数の一覧は テーマの CSS 変数。
tsc を流す配布物を読み込むタグと同じタグの dist/ にある index.d.ts と、それが読み込む .d.ts を、mdmark/ に置く。
npx tsc --noEmit
型に合う JavaScript は、誤り 0 件で終了コード 0 になる。 型に合わない行は、ファイルと行を出して終了コードが 0 以外になる。
extensions/milestones.js(14,7): error TS2322: Type 'number' is not assignable to type 'string'.
点検はファイルを書き換えず、JavaScript も出さない。 直して、誤りが 0 件になるまで流す。 mdmark の版を上げたときも、型定義を置き直して流す。
import { registerExtension, mount } from "https://cdn.jsdelivr.net/gh/shuhei1101/mdmark@{タグ}/dist/index.js";
import milestones from "/extensions/milestones.js";
registerExtension(milestones);
mount(document.querySelector("#doc"), { markdown });
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/shuhei1101/mdmark@{タグ}/dist/index.css">
<link rel="stylesheet" href="/theme.css">
theme.css は mdmark の CSS の後に、層の外で読む。
mount と update の前に registerExtension を呼ぶ。
theme: theme.css
extensions: [extensions/milestones.js]
mdmark export と mdmark build が、設定の theme と extensions を書き出した HTML に埋める。
手順は 文書を書き出す。
<!-- milestones -->
```json
{ "title": "立ち上げの段取り", "items": ["窓口を決める", "返信の型を作る", "担当者に配る"] }
```
<!-- /milestones -->
| 文書 | 固有の部品 | 固有の CSS |
|---|---|---|
registerExtension を呼び、CSS を読んだページで描いた文書 |
描かれる | 当たる |
| 同じ設定ファイルで書き出した文書 | 描かれる | 当たる |
| 読んでいない別のページや別の設定の文書 | 印が知らない印として取り除かれ、何も描かれず、定義の JSON も出ない | 当たらない。共通の部品は mdmark の既定の色のまま |
文書に書いた <script> はどの文書でも動かない。
即時。ページを読み込み直すと、登録と CSS が効く。
書き出すときは、export・build をやり直す。
固有の部品の場所に、定義の題と項目が出ている。 定義の JSON の文字は出ていない。
getComputedStyle(document.querySelector(".team-milestones")).borderTopWidth
1px が出る。
--mdmark-color-diagram-llm を上書きしたとき、LLM の箱の色が変わっている。
固有の部品を読まないページで同じ文書を描く。 固有の部品の場所には何も描かれず、フロー図の色は mdmark の既定のままで、本文は描かれる。
npx tsc --noEmit が誤り 0 件で終了コード 0 になる。
registerExtension の呼び出しと <link>(書き出すときは設定の theme・extensions)を消す。
配った JavaScript と CSS のファイルは別に消す。