TeFWiki、テキストファイルのWikiをElectronで作ってみる
Electronで物を作るのがマイブームなので、 テキストファイルのWikiを作ってみよう、と思い立つ。
名前はTeFWiki、Text File Wikiの略。
なんとなく使わない気もするのだけど、使わないという事を確認するために作っておこう。
コンセプト
- プレーンテキストのマークダウンファイル + WikiLink
- WikiNameに末尾に.mdをつけたファイルに保存
- ファイルシステムで使えない文字列とかは使わない、作り手に優しい仕様
- Electronで作る
レポジトリ
https://github.com/karino2/TeFWiki-Electron
思想
アプリよりも長くデータが生き残るように、データはすべてプレーンテキストで、フォルダごと移動や共有が出来るような形式にしたい。
という事でフォルダの下にプレーンテキストのmdファイルを置いてWikiLinkはlink名に.mdを付与したファイルとする。
複数環境の同期はGoogle Driveを使えばいいだろう。
アプリはそこそこ頑張って作る。PCではElectronで。
Android版はこのコンセプトが良さそうと思ったら、Google Drive APIを頑張って叩いて作る。 でも面倒なのであくまでElectron版をしばらく触って良さそうだったら。
開発日記
とりあえず時系列で足していく。
WikiLinkとマークダウン
markdown-itのwikilinksプラグインで最低限のことは出来そう。 これでリンクを作るのは良さそう。
リンクをたどる前に横取りをするのはどうするんだろう?
https://stackoverflow.com/questions/32402327/how-can-i-force-external-links-from-browser-window-to-open-in-a-default-browserを見る感じ、will-navigateを拾うのが良さそう?でもclassを拾いたいのだが、eventにsrcのelementは入っているかしら?
いや、プラグインのソースを読んでるとbaseURLとrelativeBaseURLを指定すればschemaを独自のに出来そうだな。 そうするとprotocolというのでハンドルする方が良いのかな?
うーむ、開いたあとの挙動を考えると、結局リンクは全部main.js側で処理して、Renderプロセス側は単なるビュワーとしておく方がクリーンな気がするな。 will-navigateを拾う事にしよう。
なんかmarkdown-it-wikilinksのシンタックスがnpmの説明のは古くてgithubの方の初期化のやり方が正解っぽいな。
will-navigateはevent soureは取れ無さそう。aタグのclickで対応する方がいいか。
wikilinksのバージョン
npm installで入る奴は古くて、kwvanderlindeさんのブランチのがlinkPatternとかが入っていて良さそう。
> npm i @kwvanderlinde/markdown-it-wikilinks
して、
const wikilinks = require('@kwvanderlinde/markdown-it-wikilinks')(options)
として使う。
windowサイズの保存
windowサイズを保存したいなぁ、でも書くの面倒くさいなぁ、と思ってたら、それを行うnpmパッケージが!
https://www.npmjs.com/package/electron-window-state
こんな小さな物までnpmになってるってすごいな。 という事でありがたく使わせてもらう。
サブディレクトリ対応
TeFWikiのサブディレクトリ対応 に移動。