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のサブディレクトリ対応 に移動。