関連ページ
吐き出し
- yuki から (9/12 時点で) ヒアリングした内容を tatsuya がまとめている
具体例
本文が
あのイーハトーヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモリーオ市、郊外のぎらぎらひかる草の波。
で、インラインコメントを「夏でも底に冷たさをもつ青いそら」に付けたいとする 非Markdownのプロダクトであれば、bodyを
あのイーハトーヴォのすきとおった風、<selected id="sel-1">夏でも底に冷たさをもつ青いそら</selected>、うつくしい森で飾られたモリーオ市、郊外のぎらぎらひかる草の波。
のようにして保存すれば、selected
エレメントをとりだしてなんらかの react component でレンダリングすればインラインコメントを制御できる
だが Markdown プロダクトではそうはいかない
そこで、revision.body
の素の Markdown とは別に、revision.markedBody
として別途
あのイーハトーヴォのすきとおった風、<selected id="sel-1">夏でも底に冷たさをもつ青いそら</selected>、うつくしい森で飾られたモリーオ市、郊外のぎらぎらひかる草の波。
という文字列を保存することにする
モデル
markedBody
という attribute をRevision
モデルに追加- markdown body にコメントのアンカー(タグでもなんでもいいが)を複数付加した全文を保存する
ロジック(ユースケース)
更新時はどうするのか
- 元の文書を仮に rev1 とする
- まだ
markedBody
は存在していない
- まだ
- インラインコメントを付ける
- rev1 の reivision に
markedBody
が作成される
- rev1 の reivision に
- 元の文書を更新して保存する -> rev2 になる
- rev1 の
body
と rev2 のbody
の diff をとる (これを仮に patch1-2 とする) - rev1 の
markedBody
に patch1-2 を適用し、コンフリクトが起きたら自動で解消する - コンフリクトした部分は全て rev2 を採用する
- rev1 の
上記を保存し、rev2 の markedBody
とする
フロントエンドの見せ方
markedBody
が存在する場合は、remark/rehype
で解析するときにそれを入力にし、インラインコメント部を react component でレンダリングする