TiddlyWiki/Dev Quick Overview
TiddlyWiki - A quick Overviewを読む
TiddlyWikiはSingle Page Applicationだよ
- JavaScriptで書かれ、GUIはHTML5とCSS3で描画される
- だからアプリケーションはシンプルさを保つことができ、従来のWebアプリケーションのように状態をエミュレートする必要がない
データの扱い
- TiddlyWikiは外部のデータベースを使わず、JavaScript自体のデータ構造を使ってTiddlerをメモリ上に保存する
- 追加のコアモジュールがそれをHTMLの
div
要素にして永続化する - 単一のHTMLページにアプリのコードも保存できる
このへんが興味あるところ
どんな風になってるのかなあ
そこまで読めるかどうかわからないけど
- だからTiddlyWikiはオフラインでも使えるしnode.jsを使ってサーバ上で動くWebアプリとしても動く
- サーバ側でテキストに保存することもできるしクライアント側ではローカルのデータをサーバと同期することもできる
- すべてはTiddler
- アプリケーションのロジックは"application/javascript"とマークされたTiddlerに記録されている
- これらはCommonJS互換のモジュール
CommonJSってなんだ
JavaScriptの標準みたいなものか
ECMAScriptとは違うものなんだな
CommonJSのモジュールとES6のモジュール、みたいな記事がいっぱい出てきた
そういえばTiddlyWikiのJavaScriptはESのバージョンで言うとどのへんなんだろう
どこ見たらわかるの?
- 全体としてはモジュールTiddler、データTiddlerといくつかのJavaScript関数・オブジェクトが木になっている
-
マイクロカーネルが最初に起動していくつかのオブジェクトや関数を作ったら、残りの部分はモジュールTiddlerとしてロードする
-
"$tw.wiki"はTiddlerを管理するデータ構造や関数を提供する
$tw.wiki.addTiddlerとか.deleteTiddlerとか.eachとかがある
このへんを見てみたらわかるのかな
データの永続化
- デシリアライザはさまざまなソースからTiddlerをロードする
- 現在のDOMツリーから新しいTiddlerをロードしたりとか
- セーバ(Saver)はストア全体、またはTiddlyWikiアプリ全体を保存する
- シンクアダプターは単一のTiddlerをストアに読み込んだり保存したりする
- UIはWikiTextによって記述され、やはりTiddlerに記録される
- これらのTiddlerが更新されると、"Selective Update"とよばれるプロセスがUIを更新する
モジュール化
- おおきくわけて三つ
- ひとつめはTiddlerを扱う機能を提供するマイクロカーネル
- ふたつめはコア機能を提供するTiddler
- UI TiddlerとかウィジェットモジュールとかWikiTextパーザとかいろいろ
- これらはマイクロカーネルに対するプラグインとして提供される
- プラグイン内で提供されるTiddlerをShadowプラグインと呼ぶ
First, SecondはあるけどThirdがないなあ
みっつめはプラグイン?
基本要素としてのTiddler
- なんでもTiddlerなので、アプリケーションにはTiddlerを管理したり表示したりする機能があればいい
- プラグインによって機能を追加したり、なんなら既存のTiddlerやモジュールを置き換えたりしてまったく新しいTiddlyWikiベースのアプリを作ることもできる
Emacsみたいなものかもしれんね
TiddlerはTiddlyWikiの最小要素
- プレーンテキストでもWikiTextでもJavaScriptコードでもJSONコードでもSVGイメージでもバイナリデータだっていい
- JSONデータはさらにその中にTiddlerを持つことができ、複数のTiddlerを持つプラグインを作ることができる
- 内部的にはkey:valueペアを持つイミュータブルなオブジェクト
Tiddlerの使いみちはいろいろ
- アプリケーションのコード
- 設定値
- UIの状態を保存する変数
- Wikiページ
だから・・・
- TiddlyWikiのユーザはWikiを使うだけでアプリをカスタマイズできる
- Tiddlerはフィールドを持つことができて、Wikiページにメタデータをもたせることもできる
- TiddyWiki間はドラッグアンドドロップでデータをやりとりできる
WikiTextマークアップ
- WikiTextはTiddlyWikiアプリを書くためのマークアップ言語
- Markdownsをもとに、いくつかの機能を追加している
Markdownぽかったっけ?