kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

TiddlyWiki/Dev - Core Application (5)

TiddlyWiki Core Applicationの続き

トランスクルージョンとテキスト参照

TextReferenceとスペースなしの一単語として書いてあるからテキストリファレンスと書いたほうが雰囲気が出るだろうか

テキスト参照

  • テキスト参照は指定されたTiddlerのフィールドの内容を間接的に参照する記法
  • <tiddlertitle>とか<tiddlertitle>!!<fieldname>とか!!<fieldname>のように指定する
  • テキストを取得するには、getTextReferenceを使う

トランスクルージョン

  • トランスクルージョンは、他のTiddlerの内容をインクルードすること

インクルージョンと言わずわざわざトランスクルージョンという名前をつけたのはなぜだろう
インクルードするよりも何かがすごいってことだと思うんだけれども

  • トランスクルードウィジェットが対象のTiddlerをパーズしてその結果のノードを現在のパーズノードに付け加える
  • カレントTiddlerは変更されない
  • これによってテキスト参照付きのTiddlerをテンプレートとして利用することができる
  • ListWidgetもテンプレートの考え方を用いている
  • Wiki全体をダウンロードするときは、すべてのTiddlerのリストにテンプレートを適用してHTMLファイルにする

そんなことまでできるとはテンプレート恐るべし

ルートウィジェットレンダリングスタートアップ
コアプラグインがTiddlerやWikiTextからどうやってUIを構築するか

  • スタートアップでrootwidget.jsはベースウィジェットインスタンスを生成する
  • このウィジェット$tw.rootWidgetでグローバルに参照可能であり、ブラウザウィンドウのDOM(document)に対応している
  • 生成直後はルートウィジェットは子ウィジェットを持たず、いくつかの基本的なイベントハンドラを提供する
    • tm-notify、tm-save-wiki、tm-auto-save-wiki、tm-download-fileなど
  • ルートウィジェットがロードされると、次は$:/core/modules/startup/render.jsがトランスクルードウィジェットを作る
  • このウィジェットは$:/core/ui/PageTamplateの内容を含み、ブラウザのDOMに関連付けられている
  • トランスクルードウィジェットを表示する関数が実行され、トランスクルードウィジェットの更新を行う関数をリスナーに登録する
  • $:/core/ui/PageTamplateをを使い、WikiTextで書かれたTiddlerのみからTiddlyWikiのUIが構築される

  • Open Wiki Pageのリストは、開いているTiddlerのリストを$:/StoryListフィールドに持ち、tm-navigate等のイベントを扱うNavigatorウィジェットによって実現されている

  • $:/core/ui/PageTemplateにトランスクルードされたストーリーTiddlerは、Listウィジェットを用いて$:/StoryListに含まれるTiddlerをトランスクルードする

  • tm-close-tiddlerタイプのイベントが発生すると、指定されたTiddlerが$:/StoryListから削除される

 

Core Applicationおわり