背景
Redmineでは、テキストをMarkdown、または、textileのいずれかでパースし、表示できる。
Markdownの方が資料数が多く、また、他システム移行性が高いことから、Markdown記法を利用したい。
しかし、textileには文字色指定記法(%{color: red}target%
)が存在する一方、Markdownには存在しない。
MarkdownはInner HTMLを許容することから、spanタグによる文字色指定(<span style="color: red">target</span>
)を試みた。
しかし、文字色指定に失敗した。
RedmineでMarkdownでのパースを指定した場合に、文字色指定を有効化したい。
環境
- Redmine: 4.0.4-stable
暫定対処
REDMINE_DIR/lib/redmine/wiki_formatting/markdown/formatter.rb
における、
Redmine::WikiFormatting::Markdown::HTML
クラス初期化時に、:filter_html => false
を指定すればよい。
Redmine::WikiFormatting::Markdown::HTML.new(
+ :filter_html => false,
- :filter_html => true,
:hard_wrap => true
)
ただし、上記方法では全HTMLがフィルタされない。このため、XSSのリスクが高まることに注意が必要。
上記方法の適用は利用ユーザを限定できる場合にとどめておくべきである。
恒久対処案
RedmineのはMarkdown formatterにRedcarpetを採用している。
Redcarpetに手を加え、textileの文字色指定記法を取り込んだ独自フォーマッタを作れば、
HTMLはフィルタしつつ、文字色指定も実現できるだろう。
補足
Redmine.orgのMarkdown formattingに関するWikiページでstyleタグが有効であるかのように記載されているため、
著者の環境による問題である可能性も考えられる。
参考
- Allow "style" tag in Markdown formatter
- Markdownフォーマッタ内でstyleタグが使えないというのチケット。起票が2018年でそこから未更新。