Send to your Kindle ***[[:i/URLクエリーに置くデータ]] [#i23dcd1f] クエリー文字列にはよそに貼れるデータだけを。 年月が経っても有効なものを。 RIGHT:[[:t/URI]] RIGHT:[[:t/Wiki]] [[:t/実装]] [[フレームワーク/WikiEngine]]の実装案。 #contents *全体 [#lef8be41] **フレームワーク/WikiEngine [#e202a9a0] → [[フレームワーク/WikiEngine#be46ac08,WikiEngineとは]] ***流れ [#m93df905] +利用者 → フレームワーク/Webアプリケーション クライアントアプリとユーザーエージェントの役目。リクエスト。 +フレームワーク/Webアプリケーション → フレームワーク/WikiEngine クエリーの解析、セッションの用意など。 → [[:i/プロトタイピング#d19defef,フレームワーク間の関係]] +フレームワーク/WikiEngine → ページと要素 %%セッションページなど%%ページ/要素のための環境を用意。ページが持つWikiTextからページ/要素の生成。 +ページ → ページ/要素 ページでやること。 +ページ/要素(各種機能) 各ページ/要素でやること。 +… +フレームワーク/WikiEngine → フレームワーク/Webアプリケーション → 利用者 レスポンスをデコレーションしてそれぞれふさわしい形式にして。 → [[:i/プロトタイピング#d19defef,フレームワーク間の関係]] ***実装案 [#z799ea9d] [[X]] RIGHT:[[:t/Wiki]] [[:t/X]] [[:t/実装]] *ユースケースを実行するとき [#w473ca8d] **[[ユースケース]] [#vb5876c1] ユースケースは機能拡張の中にもあるクラス。 プラグインの呼び出しに権限判定を付けるならユースケースクラスも必要。 ユースケース内で権限判定をするのでページを扱うということ。ページの扱いはフレームワーク/WikiEngineでやること。 %%ユースケースはビュー(ページ)との関係が強いのでフレームワーク/WebアプリケーションではなくWikiEngineにする。%%フレームワーク/Webアプリケーションでもいい。 ***[[:i/ユースケーススコープ]] [#tf96b817] Controller = Usecase その中だけで有効なデータ。 → [[:i/クラス別のセッションデータ]] ***[[:/ユースケースチェイン]] [#b756a37d] → [[:/リクエスト時に選べるビュー]] リクエストとレスポンスの分離。 …を一般化して複数のユースケースを連鎖させられるように。 **認証 [#xbe291c5] フレームワーク/Webアプリケーション → フレームワーク/WikiEngine → [[フレームワーク/Webアプリケーションでやること,フレームワーク/WikiEngine]] ***[[:t/利用者]]と[[:t/アカウント]]の利用 [#w754de3e] → [[:i/ログインはWebフレームワーク、ユーザー管理はWikiフレームワーク]] フレームワークで扱うのはログイン(認証)と、権限(錠と鍵)の整合判定。 RIGHT:[[:t/Web]] [[:t/Wiki]] [[:t/ログイン]] *ページ構築時 [#u7adde9a] → [[ページ]] **呼び出すページを特定する [#x70f9df8] ***順不同パス [#w537315c] → [[ページ/名前]] **ページ/属性の用意 [#g83e2d6c] → [[ページ/属性]] 属性の継承を行なうのはページの役割。 今のところ[[:/ページ/裏]]では継承なし。 **ページの復帰/構築 [#u6fd46c3] 記法(notation) → ページ/要素 ページを構築する方法。 ***[[:i/名前の同一視#sa0f0121]] [#s515ccc6] 括弧書き記法はビルトインのページ/要素。 RIGHT:[[:t/ビルトイン]] [[:t/要素]] ***ページ名もセレクターで [#k6d7222d] **[[記法]] [#a1753617] ***記法の仕組み [#w848fd97] [[:t/機能]]とその実装である[[:t/要素]]、それを呼び出す[[:t/記法]]。 → [[:i/変換ルールはページ内で定義]] → [[:i/記法の書式]] RIGHT:[[:t/記法]] [[:t/要素]] [[:t/機能]] ***記法の優先順位 [#w0db0d4e] 優先順位は表やリスト記法で特定のページに記述。 記述順が優先順。 正規表現→ページ/要素を複数記述。正規表現にもページ/要素にも重複があっていい。そうしたほうが設定しやすいし優先順位があるので解決できる。 RIGHT:[[:t/記法]] [[:t/管理]] [[:t/データアクセス]] [[:t/API]] ***WikiTextから得られるページ/要素 [#i327c2f7] -Notations [[ページ/要素]]を表す記法 -AutoLink [[自動リンク]]も記法。動的記法。 -Semantics WikiTextを独占しない/消費しない記法 → [[:i/検索用テキストを作るならページ要素で]] -Plains WikiText中の記法になっていない部分 RIGHT:[[:t/記法]] [[:t/要素]] [[:t/リンク]] [[:t/検索]] ***[[:i/Tokenize対象はNotationText]] [#fed7ca6f] NotationText解析・ページ/要素構築の仕組みを変更。 *ページ構築後、要素を呼び出すとき [#r72a8c66] ページ → ページ/要素 ページ/要素 → ページ/要素 → … → [[ページ/要素]] **要素指定はセレクター/全てURIで [#dc8493ae] ページ → ページ/要素 ページ/要素 → ページ/要素 → … 連携相手になるページ/要素を指定する方法。 ***参照記法は不要 [#zf9a4c9e] 全てURIで。埋め込みで使えれば参照記法は不要。 RIGHT:[[:t/URI]] [[:t/埋め込み]] [[:t/要素]] ***[[:i/API向けパーマリンク]] [#k60b745d] 全てURIで参照するための仕組み。 InterWikiName、InterIncludeでも使うのでUI(=API)。 RIGHT:[[:t/URI]] [[:t/API]] [[:t/パーマリンク]] **ページ/要素の導入と呼び出す仕組み [#b3132b75] ***プラグイン [#i6d4c004] プラグインの仕組みはフレームワーク/WikiEngineのもの。 最も多いのはページ/要素のプラグイン。 → [[:i/プラグインは既存クラスのプラグイン版]] RIGHT:[[:t/プラグイン]] [[:t/管理]] ***[[:/プラグインが使えるフック]] [#hd18a058] 不要。 要素が動くトリガーは状況に依らない。状況次第なのはそれ以降の要素内の処理。つまり要素次第。 RIGHT:[[:t/要素]] [[:t/開発]] **ページ/要素に提供するもの [#v26d9026] フレームワーク/WikiEngineの主な機能は、利用者がページ/要素を扱えるようにすることと、ページ/要素を動作させること。 ***[[:i/ページ要素間の連携方法]] [#o15b3863] ***[[:i/要素に書き込む方法]] [#l9138c6d] ***[[:i/クラス別のセッションデータ]] [#i668dee7] セッションをクラス間連携に使用するルール。 フレームワークの中で制御するので、個々の要素は値名と値を用意するだけ。簡単不自由なI/F. → [[フレームワーク/WikiEngineでやること,ページ要素間の連携方法]] RIGHT:[[:t/API]] [[:t/セッション]] [[:t/Wiki]] [[:t/セッション]] ***[[:i/要素のインスタンスID]] [#b1ca6fdf] getElementById()のようなAPIに必要。 RIGHT:[[:t/データアクセス]] [[:t/要素]] [[:t/実装]] ***[[:i/ページのイテレーター]] [#vad5bbbb] ページ/要素のスキャンはVisitorパターン。その中でページ/要素のイテレーター(とは言ってもページ/要素の機能)を使っている。 例えば検索にヒットしてページのプレビューテキスト取得に。 (要素でなく)ページのイテレーターならPage/Factoryが提供するといい。いろいろな順番で。ページ間に構造はないのでページ内容は反映しなくていい。イテレーターになる。 RIGHT:[[:t/ページ]] [[:t/API]] [[:t/要素]] ***[[:i/要素がページに記述されたとき、Chain of Responsibilityで?]] [#bc5af990] →すべての要素がResponsibilityになる。ネスト構造になっている要素は親要素から子要素が呼ばれるのでChainではある。 ページに記述されてないとき(リクエストのクエリー文字列に記述されたとき)も同じ処理になるよう工夫。 →[[:i/要素がページに記述されたとき、Chain of Responsibilityで]] **レンダリング [#l2cc9409] ページ → ページ/要素 ページ/要素 → ページ/要素 → … 形式変換/データコンテキスト反映。 フレームワーク/WikiEngine → フレームワーク/Webアプリケーション ***[[:i/フレームワーク/WikiEngineからの出力をレスポンスにする]] [#v2df05ce] ***[[:i/ToWikitextはそのまま返す]] [#z1837b75] ToGenericNotationText() ***[[:i/URLクエリーに置くデータ]] [#i23dcd1f] クエリー文字列にはよそに貼れるデータだけを。 年月が経っても有効なものを。 RIGHT:[[:t/URI]] ***[[:i/ページタイトルにビュー別接頭辞]] [#l759d331] 閲覧時には無印なのがポイント。コピペで再利用しやすくなる。 RIGHT:[[:t/閲覧]] ***レスポンスのコンテキスト [#mdf4e733] ページもページ/要素もコンテキスト別の出力をする。 そのページの出力形式はHTTPリクエストで決める。 → [[:/ユースケースチェイン]] 出力付きユースケースの出力形式をリクエストで指定。 履歴をHTMLで/NotationTextで/印刷用HTMLで…。 実装は… 履歴ビューをページ/要素で構築してからコンテキスト別変換。 差分の+ーマークもページ/要素で付けてからコンテキスト別変換。 ---- 編集ビューのRSS形式などもできる。 *ページができあがってから [#f18d722b] **ページの組み合わせ [#xca978d2] ページを複数組み合わせて1つのHTMLページを作る。 ***[[下位展開]] [#u989dc3a] ビューの問題。閲覧時以外にもページを扱う場面ならどこでも起こる。 RIGHT:[[:t/ビュー]] [[:t/UI]] ***[[:i/スタイルシートをページから生成]] [#be33d4d8] データアクセス可能なのは埋め込み解決後のページ。 埋め込み前にアクセスできても煩わしいだけ。 WikiでWiki自身の設定を。 RIGHT:[[:t/設定]] [[:t/スタイル]] [[:t/埋め込み]] [[:t/データアクセス]] ***[[:/負荷軽減のため編集後の更新処理を分割]] [#y453f2be] [[検索:永続化システム]]([[検索:永続化クラス]])で実装。 RIGHT:[[:t/編集]] [[:t/負荷]] [[:t/永続化]] *ユースケース別 [#m53937ee] **編集/削除 [#bad9852a] 削除は編集の一種。 ***[[:Done/ページ削除のUI]] [#fcf50a8a] 編集と削除には編集/承認を要する。モデレーション期間。 *あとで [#f83f441b] -[[履歴]]