From 544e399b3b402ca1414e47dc857c772d25df9eb0 Mon Sep 17 00:00:00 2001 From: MAEDA Go Date: Sun, 18 Oct 2026 16:15:41 +0900 Subject: [PATCH 1/2] Describe Mermaid diagrams in the wiki syntax help pages --- .../help/mermaid_flowchart_decision.png | Bin 0 -> 31768 bytes .../images/help/mermaid_flowchart_simple.png | Bin 0 -> 6270 bytes app/assets/stylesheets/wiki_syntax.css | 1 + .../en/wiki_syntax_common_mark.html.erb | 3 ++ .../wiki_syntax_detailed_common_mark.html.erb | 32 ++++++++++++++++++ .../ja/wiki_syntax_common_mark.html.erb | 3 ++ .../wiki_syntax_detailed_common_mark.html.erb | 32 ++++++++++++++++++ .../en/wiki_syntax_detailed_textile.html.erb | 32 ++++++++++++++++++ .../textile/en/wiki_syntax_textile.html.erb | 3 ++ .../ja/wiki_syntax_detailed_textile.html.erb | 32 ++++++++++++++++++ .../textile/ja/wiki_syntax_textile.html.erb | 3 ++ 11 files changed, 141 insertions(+) create mode 100644 app/assets/images/help/mermaid_flowchart_decision.png create mode 100644 app/assets/images/help/mermaid_flowchart_simple.png diff --git a/app/assets/images/help/mermaid_flowchart_decision.png b/app/assets/images/help/mermaid_flowchart_decision.png new file mode 100644 index 0000000000000000000000000000000000000000..f009dfefef85f412ed3114d6741a7974cb09470b GIT binary patch literal 31768 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 KCz6gCd;SkVHk6hC literal 0 HcmV?d00001 diff --git a/app/assets/images/help/mermaid_flowchart_simple.png b/app/assets/images/help/mermaid_flowchart_simple.png new file mode 100644 index 0000000000000000000000000000000000000000..b5562103c3c6e85337c449bcec25f9f729eacf64 GIT binary patch literal 6270 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 GgZ>ZyIN%om literal 0 HcmV?d00001 diff --git a/app/assets/stylesheets/wiki_syntax.css b/app/assets/stylesheets/wiki_syntax.css index 1cad8ff6e..a48f7f404 100644 --- a/app/assets/stylesheets/wiki_syntax.css +++ b/app/assets/stylesheets/wiki_syntax.css @@ -57,6 +57,7 @@ table th .syntax-pre:before { } table td { background-color: var(--oc-gray-0); block-size: 2em; vertical-align: middle;} table td code { font-size: 1.2em; } +table td img { max-width: 100%; } table td h1 { font-size: 1.8em; text-align: start; } table td h2 { font-size: 1.4em; text-align: start; } table td h3 { font-size: 1.2em; text-align: start; } diff --git a/app/views/help/wiki_syntax/common_mark/en/wiki_syntax_common_mark.html.erb b/app/views/help/wiki_syntax/common_mark/en/wiki_syntax_common_mark.html.erb index a0e7f005d..6a884e8f2 100644 --- a/app/views/help/wiki_syntax/common_mark/en/wiki_syntax_common_mark.html.erb +++ b/app/views/help/wiki_syntax/common_mark/en/wiki_syntax_common_mark.html.erb @@ -30,6 +30,9 @@ +Mermaid diagrams (" target="_blank">more) +```mermaid
flowchart LR
  A[Start] --> B[End]
```<%= image_tag("help/mermaid_flowchart_simple.png", width: 360, alt: "Flowchart from Start to End") %> + Line breaks and Paragraphs An empty line

creates
a new paragraph.

An empty line

creates a new paragraph.

End a line with a backslash\
or two spaces to insert a manual line break.

End a line with a backslash
or two spaces to insert a manual line break.

diff --git a/app/views/help/wiki_syntax/common_mark/en/wiki_syntax_detailed_common_mark.html.erb b/app/views/help/wiki_syntax/common_mark/en/wiki_syntax_detailed_common_mark.html.erb index 3f9793eba..92b48f135 100644 --- a/app/views/help/wiki_syntax/common_mark/en/wiki_syntax_detailed_common_mark.html.erb +++ b/app/views/help/wiki_syntax/common_mark/en/wiki_syntax_detailed_common_mark.html.erb @@ -26,6 +26,7 @@
  • Macros
  • Code highlighting
  • +
  • Mermaid diagrams
  • Raw HTML
  • Alerts
  • @@ -346,6 +347,37 @@ It can be expanded by clicking a link. end +

    Mermaid diagrams

    + +

    Code blocks written in the mermaid language are rendered as diagrams, such as flowcharts, sequence diagrams and Gantt charts, by Mermaid.js. Please refer to the Mermaid syntax reference for the available diagrams and their syntax.

    + +

    Mermaid.js is not bundled with Redmine, and diagrams are rendered only if the administrator has installed it. Otherwise, the code is displayed as a plain code block.

    + +

    You can draw a diagram at any place that supports wiki formatting using this syntax:

    + +
    +```mermaid
    +  Place your diagram definition here.
    +```
    +
    + +

    Example:

    + +
    +```mermaid
    +flowchart LR
    +  A[New issue] --> B{Reproducible?}
    +  B -->|Yes| C[Fix]
    +  B -->|No| D[Close]
    +```
    +
    + +

    yields

    + +<%= image_tag("help/mermaid_flowchart_decision.png", width: 635, alt: "Flowchart: a new issue is fixed if it is reproducible, and closed otherwise") %> + +

    A rendered diagram can be downloaded as a PNG image.

    +

    Raw HTML

    You may use raw HTML for more complex formatting tasks, i.e. complex tables with cells spanning multiple rows or columns:

    diff --git a/app/views/help/wiki_syntax/common_mark/ja/wiki_syntax_common_mark.html.erb b/app/views/help/wiki_syntax/common_mark/ja/wiki_syntax_common_mark.html.erb index 2e6c1314e..053fcb8c2 100644 --- a/app/views/help/wiki_syntax/common_mark/ja/wiki_syntax_common_mark.html.erb +++ b/app/views/help/wiki_syntax/common_mark/ja/wiki_syntax_common_mark.html.erb @@ -30,6 +30,9 @@ +Mermaidによる図 (" target="_blank">詳細) +```mermaid
    flowchart LR
      A[Start] --> B[End]
    ```<%= image_tag("help/mermaid_flowchart_simple.png", width: 360, alt: "StartからEndへのフローチャート") %> + 改行と段落 空行は

    新しい段落を
    作ります

    空行は

    新しい段落を作ります

    バックスラッシュで終わる行\
    または半角スペース2個で改行を挿入します

    バックスラッシュで終わる行
    または空白2個で改行を挿入します

    diff --git a/app/views/help/wiki_syntax/common_mark/ja/wiki_syntax_detailed_common_mark.html.erb b/app/views/help/wiki_syntax/common_mark/ja/wiki_syntax_detailed_common_mark.html.erb index 83ce78646..d6bb3c245 100644 --- a/app/views/help/wiki_syntax/common_mark/ja/wiki_syntax_detailed_common_mark.html.erb +++ b/app/views/help/wiki_syntax/common_mark/ja/wiki_syntax_detailed_common_mark.html.erb @@ -26,6 +26,7 @@
  • マクロ
  • コードハイライト
  • +
  • Mermaidによる図
  • HTMLを直接使用する
  • アラートボックス
  • @@ -346,6 +347,37 @@ To go live, all you need to add is a database and a web server. end +

    Mermaidによる図

    + +

    言語に mermaid を指定したコードブロックは、Mermaid.js によってフローチャート・シーケンス図・ガントチャートなどの図として表示されます。利用できる図の種類と記法は Mermaidの記法リファレンス を参照してください。

    + +

    Mermaid.js はRedmineには同梱されておらず、管理者がインストールした場合にのみ図が表示されます。インストールされていない場合は通常のコードブロックとして表示されます。

    + +

    Wiki記法に対応している箇所であればどこでも以下の記述により図を描くことができます:

    + +
    +```mermaid
    +  Place your diagram definition here.
    +```
    +
    + +

    表示例:

    + +
    +```mermaid
    +flowchart LR
    +  A[New issue] --> B{Reproducible?}
    +  B -->|Yes| C[Fix]
    +  B -->|No| D[Close]
    +```
    +
    + +

    以下のようになります

    + +<%= image_tag("help/mermaid_flowchart_decision.png", width: 635, alt: "New issueがReproducible?ならFix、そうでなければCloseに進むフローチャート") %> + +

    表示された図はPNG画像としてダウンロードできます。

    +

    HTMLを直接使用する

    複数の行や列がが結合している表のような複雑なフォーマットを記述したいときはMarkdown記法を使わずHTMLを直接書くこともできます。

    diff --git a/app/views/help/wiki_syntax/textile/en/wiki_syntax_detailed_textile.html.erb b/app/views/help/wiki_syntax/textile/en/wiki_syntax_detailed_textile.html.erb index ff262a401..7af7fd094 100644 --- a/app/views/help/wiki_syntax/textile/en/wiki_syntax_detailed_textile.html.erb +++ b/app/views/help/wiki_syntax/textile/en/wiki_syntax_detailed_textile.html.erb @@ -27,6 +27,7 @@
  • Macros
  • Code highlighting
  • +
  • Mermaid diagrams
  • Links

    @@ -351,5 +352,36 @@ It can be expanded by clicking a link. end end + +

    Mermaid diagrams

    + +

    Code blocks written in the mermaid language are rendered as diagrams, such as flowcharts, sequence diagrams and Gantt charts, by Mermaid.js. Please refer to the Mermaid syntax reference for the available diagrams and their syntax.

    + +

    Mermaid.js is not bundled with Redmine, and diagrams are rendered only if the administrator has installed it. Otherwise, the code is displayed as a plain code block.

    + +

    You can draw a diagram at any place that supports wiki formatting using this syntax:

    + +
    +<pre><code class="mermaid">
    +  Place your diagram definition here.
    +</code></pre>
    +
    + +

    Example:

    + +
    +<pre><code class="mermaid">
    +flowchart LR
    +  A[New issue] --> B{Reproducible?}
    +  B -->|Yes| C[Fix]
    +  B -->|No| D[Close]
    +</code></pre>
    +
    + +

    yields

    + +<%= image_tag("help/mermaid_flowchart_decision.png", width: 635, alt: "Flowchart: a new issue is fixed if it is reproducible, and closed otherwise") %> + +

    A rendered diagram can be downloaded as a PNG image.

    diff --git a/app/views/help/wiki_syntax/textile/en/wiki_syntax_textile.html.erb b/app/views/help/wiki_syntax/textile/en/wiki_syntax_textile.html.erb index f02d5ac45..083e2637e 100644 --- a/app/views/help/wiki_syntax/textile/en/wiki_syntax_textile.html.erb +++ b/app/views/help/wiki_syntax/textile/en/wiki_syntax_textile.html.erb @@ -32,6 +32,9 @@ +Mermaid diagrams (" target="_blank">more) +<pre><code class="mermaid">
    flowchart LR
      A[Start] --> B[End]
    </code></pre><%= image_tag("help/mermaid_flowchart_simple.png", width: 360, alt: "Flowchart from Start to End") %> + Lists <%= image_tag("jstoolbar/list.svg", { alt: "Unordered list" }) %>* Item 1
    ** Sub
    * Item 2
    • Item 1
      • Sub
    • Item 2
    <%= image_tag("jstoolbar/list-numbers.svg", { alt: "Ordered list" }) %># Item 1
    ## Sub
    # Item 2
    1. Item 1
      1. Sub
    2. Item 2
    diff --git a/app/views/help/wiki_syntax/textile/ja/wiki_syntax_detailed_textile.html.erb b/app/views/help/wiki_syntax/textile/ja/wiki_syntax_detailed_textile.html.erb index 5a6008c89..79a1e85dd 100644 --- a/app/views/help/wiki_syntax/textile/ja/wiki_syntax_detailed_textile.html.erb +++ b/app/views/help/wiki_syntax/textile/ja/wiki_syntax_detailed_textile.html.erb @@ -27,6 +27,7 @@
  • マクロ
  • コードハイライト
  • +
  • Mermaidによる図
  • リンク

    @@ -351,5 +352,36 @@ To go live, all you need to add is a database and a web server. end end + +

    Mermaidによる図

    + +

    言語に mermaid を指定したコードブロックは、Mermaid.js によってフローチャート・シーケンス図・ガントチャートなどの図として表示されます。利用できる図の種類と記法は Mermaidの記法リファレンス を参照してください。

    + +

    Mermaid.js はRedmineには同梱されておらず、管理者がインストールした場合にのみ図が表示されます。インストールされていない場合は通常のコードブロックとして表示されます。

    + +

    Wiki記法に対応している箇所であればどこでも以下の記述により図を描くことができます:

    + +
    +<pre><code class="mermaid">
    +  Place your diagram definition here.
    +</code></pre>
    +
    + +

    表示例:

    + +
    +<pre><code class="mermaid">
    +flowchart LR
    +  A[New issue] --> B{Reproducible?}
    +  B -->|Yes| C[Fix]
    +  B -->|No| D[Close]
    +</code></pre>
    +
    + +

    以下のようになります

    + +<%= image_tag("help/mermaid_flowchart_decision.png", width: 635, alt: "New issueがReproducible?ならFix、そうでなければCloseに進むフローチャート") %> + +

    表示された図はPNG画像としてダウンロードできます。

    diff --git a/app/views/help/wiki_syntax/textile/ja/wiki_syntax_textile.html.erb b/app/views/help/wiki_syntax/textile/ja/wiki_syntax_textile.html.erb index 35cbaf948..93db952a4 100644 --- a/app/views/help/wiki_syntax/textile/ja/wiki_syntax_textile.html.erb +++ b/app/views/help/wiki_syntax/textile/ja/wiki_syntax_textile.html.erb @@ -32,6 +32,9 @@ +Mermaidによる図 (" target="_blank">詳細) +<pre><code class="mermaid">
    flowchart LR
      A[Start] --> B[End]
    </code></pre><%= image_tag("help/mermaid_flowchart_simple.png", width: 360, alt: "StartからEndへのフローチャート") %> + リスト <%= image_tag("jstoolbar/list.svg", { alt: "リスト" }) %>* 項目1
    ** 下位階層の項目
    * 項目2
    • 項目1
      • 下位階層の項目
    • 項目2
    <%= image_tag("jstoolbar/list-numbers.svg", { alt: "順序付きリスト" }) %># 項目1
    ## 下位階層の項目
    # 項目2
    1. 項目1
      1. 下位階層の項目
    2. 項目2
    -- 2.55.0