• 追加された行はこの色です。
  • 削除された行はこの色です。
RIGHT:&tag(ページ,思い付き,実装,設計,コード,目次);
RIGHT:[[:t/ページ]] [[☆]]

詳細な設計→Page
Wikiはページの集約。利用者はページ/内容にしか興味はない。
Wikiの情報もデータもすべてページに記録する。ページは[[永続化]]する。

*目次 [#t94a8d59]
#contents
→ [[ページでやること]]
→ [[X/Page>X#g329967c]]

----
#lsx(new=true);

*関連 [#l71ba1cd]
#lsx(tag=ページ,new=true,except=^ページ(/.*)?$)
#contents

[[検索:ページ]]
*ページ [#g90e2d85]

*ページ周辺のタグ [#yc4ea82b]
#tag(0,ページ)
**ページとは [#x0bbed95]

*ページとは [#qe624dec]
RIGHT:[[:t/ページ]] [[:t/フィルタリング]] [[:t/拡張]] [[:t/アクセス権]] [[:t/リダイレクト]]
ページは情報を持ち、アクセス制御をするもの。アクセス制御するので見る者によって与える情報を変えることになる。見る者とは利用者、他のページ/要素、よそのシステム。
ページ/名前 × アクセス制御 → 情報。書き込むときは逆方向。

→[[Page]]
アクセス制御を表すのは権限。情報を表すのはページ/要素。
つまり、ページ/名前 × ページ/要素 × 権限を対応付けるのがWiki。

ページは再帰構造のデータベース。''MVCのModelの中核。MVCのViewでもある。''
ページがMまたはVに属するのではなく、ページの中にMとVが存在する。
wikiは1つのページ。
*思い付き [#o96998b0]

-仕様が大きくなりそう
ページの仕様は分割する必要がありそう?
***メタファー [#pf679adc]
ページはいろいろなアプリケーションやサービスにも見られるもの。情報を記録するものと見たり、商品として見たり。

-Wikiのページにはファイルと同様にアクセス許可リスト、日付、読み専用などの属性、パスなどがある。
ページはファイルやデータベースに例えることができる。利用者が書いたことを記録してアクセス制御をするもの。そのページを集めたのがWiki。どのページに何を書いてどれとどれをリンクするかがWikiの構造。現在では情報は検索で探すものになっているので構造は重要でないとされているが、構造も情報のひとつなので、利用しない手はない。
***型 [#e26eed04]
ページには型がある。ページ/型を設定すればHTMLを直接書いたり、各種記法のレンダリング後(HTML)を貼っただけのページも利用可能。
→ [[:i/HTML許可ページ]]
→ [[:i/HTML書き込み]]

-章を1ページにすれば使い回しや情報集約のために分ける作業が減る。
**Wiki構築をページで [#g3e22770]
Wiki構築をページで。
他のWikiEngineでのプラグイン。
管理者のみページ/型:HTMLを使えるようにするには属性値に「ページ/型をHTMLにできる」といった値を設定可能にする。運用の問題。
→ [[:Done/ページ型/スレッド/データコンテキスト/記法定義まとめ#o051e5a4]]
*** 権限を独占できる [#h9e1af1f]
ページの作成者には以降の編集を自分だけで行なう権利がある。
全ての利用者には権限があって、その権限で編集可能なページがある。
→ [[:i/俺のモノは俺のモノ]]

RIGHT:[[:t/組み立て]]

-ページにはアクセス権、日付、読み専用属性、パスなどがある。
-章を1ページにすれば使い回しや情報集約のために分ける作業が減る。

APIでページ内の表をレコード単位で読み出しするようなことができれば実現しやすい。
**アクセス権は引き継がれる [#cfbd8cd4]
自動生成ページは元のページ(入力されたページ)すべてのアクセス権を引き継ぐ。
アクセス権の合成ルールが必要。
† [[#te598c37]]
**ページの構造 [#mcaa3b41]

RIGHT:[[:t/アクセス権]]
ページの内容(本文)はページ/要素だけ。要素間ではネストするけど、ページ内にページは現れない。
下位展開では名前に共通部分があるページをまとまりと''見なして''レイアウト上で並べるだけ。ページ間のつながりではない。明示的リンクでページ間の関連性を示すことはできる。自動検出ではない関連性。

%%自動生成ページの実装次第。他の要素には影響しない。%%
すべてのページで上位のアクセス権を引き継ぐようにすれば、アクセス制御が簡単。利用者を増やしても既存グループに追加、ページを増やしても既存ページの下位に追加すれば新しい設定は不要。
**%%Wikiは1ページが1つの板%% [#g198eae4]
-%%この範囲で検索%%
-%%書き込み%%
-%%削除%%
%%などを。%%
***ページの組み合わせ方 [#r1272a4d]
ページの組み合わせがWiki。でもページ──Wikiまでの間にも組み合わせはある。
よそのWikiEngineと同じく各ページには固有のページ名がある。でも同じページに複数の版があったりして…それらを列挙すると全部で4つの名前が必要になる。

%%※利用者登録も?WikiFarmとは違う?%%
**HTML許可ページ [#ac7869e0]
ブログパーツなど、サイトに貢献する人だけが作れるページ。
HTMLタグなどが閲覧ページまで残る。
:外部名4区分|
利用者に見えるほうのページ名。(もう一方は内部名)
4区分とはスペース/[[ページ/名前]]/見解/版(統一感がない。統一感を出す別名…名前空間?ウィキ名?/項目名/見解名/版名)

作った後は(ページの機能を利用して)他のページに埋め込んだりできる。
ページ/名前はページ内容から自動生成。ページ内容の一部をページ名にする。
実体は版。外部名を完全に決めないとページを特定できないということ。

**ヘッダーの使い道 [#s9cf9fc3]
版のリストが[[ページ/履歴]]。
版名以外を特定しなければページ/履歴は得られないということ。

%%**自由欄%%
%%適宜、動的要素を表示する部分。ページの先頭に表示。WikiNotationで位置が指定されているときはそこ(だけ)に表示。RIGHT:[[:t/属性]]%%
→ヘッダー。つまり通常のページを埋め込みリンクで埋め込むだけ。
動的かどうかはプラグインによるのでここでは考慮しない。
ページ/名前のほかにWeb上でのページタイトル(<title>...</title>)もある。これもページ/内容の見出し要素から自動的に生成される。

内容は…
-(管理者からではなく)システムからのメッセージ
リンクやボタンなども含む。
-検索に適合した部分リスト
前後の数文字、数行を含めて表示。
ページ内リンクも生成して。ページ内にはアンカーを埋め込んで。
† [[#afb81108]]
*** [[:i/ページ本文も属性のひとつ]] [#i76b1baa]

…などを章として追加。
*実装 [#t1357f32]

**構成 [#cdc266b6]
#ref(ページ/layout.png,310x310)
ページヘッダー、内容、ページフッターは連結して1つのページとして閲覧時展開。

ページヘッダーにページ見出し(ページ名とEditボタン)やタグリンク一覧(そのページ名を表すメタシンボル付き)を置く。
**ページとは [#aea8d8cd]
RIGHT:[[:t/自動生成ページ]] [[:t/テンプレート]] [[:t/属性]]
**ページを操作するためのUI [#seca03a4]
ページの管理は名前で行なう。名前の変更でページの移動や削除まで実施できる。そういうわけで(編集作業のために)閲覧中のページ名をコピペしやすくする必要がある。

ページは…
-データ保存場所
-保持しているデータや関連情報を提供する
-利用者から送られてきたクエリーのうち、自身に関する部分だけは解釈できる
→これはフレームワークに。他のクラスにおいても同じ。
-%%入れ子関係になっている場合、親になるページインスタンスから属性を受け継ぐ%%
→入れ子にはしない。埋め込みリンクで閲覧時にそう見えるようにするだけ。でも下位にあるページは属性を継承できる。
名前さえあれば内容がなくてもページは存在できる。存在しないページを閲覧すると「書いて」ではなく空のページ(と関連情報)が見られる。この点はよそのWikiと違う点。



***ページの削除方法 [#bc67cd19]
ページの削除も編集で。ページ名を(空)にすれば削除手続きになる。削除は編集なので、編集と同様に編集/承認が必要。その後実際の削除が行なわれる。(とは言っても(空)を示す最新版が作られるだけ)




† [[#m7402a92]]
**UIになるページ [#i4d79437]
UI化するページ/要素。
特定のページ/型を持つページ有効。→ [[:i/UI要素]]

**UIになるページ/テンプレート [#template]
閲覧時に適用されるテンプレートはヘッダー/フッター/常設メニューを作るのに使う。
***入力用のテンプレート [#cda4734d]
複数のUI要素を集めたテンプレートは「入力用テンプレート」とも呼べる。別名「フォームテンプレート」。閲覧ビューでの編集UI(その場編集のUI)としても利用する。
† [[:i/UI要素]]
† [[:i/テンプレートは制限するものではない]]

***ページの元にするためのテンプレート [#b94b7db5]
† [[:i/増殖するページ]]
利用者がページ/作成をリクエストするほか、ログが増えるときにも使われる。投稿時に適用されるテンプレートなので、適用後はドキュメントに混ざって再利用はできなくなる。

***複数ページをまとめる枠 [#ibe8d757]
下位展開時の枠や、複数のユースケースを一度に呼ばれたときの枠も「テンプレート」と呼んでいるけど「レイアウト」にしたほうが良さそう。複数のビューを1つのWebページにする。枠/枠1つぶんのリクエストはそれぞれ別。枠の数だけリクエストしてもらう。
† [[:i/ヘッダーの使い道]]
† [[:/ユースケースチェイン]]
† [[ヘッダー]]
***テンプレートや見解をクライアントに合わせて差し替えれば多言語対応に。 [#z0e59289]
テンプレートにも見解がある??
† [[:i/Webページのテンプレートは特定のページに書く]]

† [[#a6ce55e1]]
**Wiki構築のためのページ [#rc051169]
管理者によるカスタマイズ。ページを作ることで実現できるように。

カスタマイズの手順。
+ プラグインを導入。プラグインではないページ/要素(ビルトイン要素)もある。
+ その設定(特定のページ)を書き換える。
+ プラグイン/ビルトイン要素をページ上に配置。

--------------------------------------------------

- 設定もページに書くという発想。設定以外でも使えるように汎用化して[[データアクセス]]になった。
† [[:i/Wiki構築をページで]]
† [[:i/ページ主体の設計]]
- 設定はそれを使うページ/要素やフレームワーク/WikiEngineの機能次第。
- (コンテンツではなく)設定を書くページは隠しページにする。
† [[隠しページ]]



***いろいろなカスタマイズ [#customize]
- 公開範囲のカスタマイズ。権限設定で利用者を制限。Wikiがどう使われるかを決められる。
- 記法のカスタマイズ。既存記法の別表記(シンタックスシュガー)を追加可能。
- スタイルのカスタマイズ。テンプレートと属性/継承を使ってWiki内の一部分のスタイル変更。
- 各種テンプレートのカスタマイズ。
† [[ページ#template]]
- ページはデータベース→永続的な情報はなんでもページ化→利用者もページ化。
† [[:i/利用者のページ化]]
ページの移動が利用者の異動。移動で上位ページが変われば(属性/継承によって)その利用者のロールや権限も変わる。
***カスタマイズの動機になる情報を載せるページ [#b0075388]
† [[:i/機能/分析]]
MediaWikiでの''特別ページ''のように管理に役立つ情報を載せるページ。%%(ユーティリティページ)%%

分析ページは通常のページと実装が異なっていても、ページとして扱えるようにしたい。そのため呼び出し方を統一する。ページ名指定でページを参照すれば分析結果が通常のページの形式で分かるように。多くの場合、テンプレートを埋め込んだりするのでページ/要素として実装する。それを配置したページが分析ページ。管理者に作ってもらう。情報を記録する必要があるならページに記録する。† [[:i/ログはページに記録]]

[[:i/ページの重さ]]も特別ページの1つ。
Wikiの可視化。概要把握の機能とその表示。

[[:i/最近更新されたページ]]も特別ページ。実体がページ/要素で、その出力が動的なページリスト。


† [[#pfc0f372]]
**ページを実装するには [#s2e64fa6]
ページ自体の機能は永続化くらい。豊富な機能はページ/要素に委譲したり、ページを扱う側で実装。
[[ページでやること]]と[[X/Page>X#g329967c]]はページクラスの仕様。

† [[#v0cd5027]]

----

ページは…
-読まれる
-書かれる
-自動的に書かれる
-自動的に読まれる
ページに書かれた設定をプログラムが参照するとき。
-名前を持つ
-ID(内部名)を持つ
ページは情報をページ/要素の入れ子にして保持する。永続化の対象はページ(と含まれるページ/要素)だけ。情報を生かすのはページ/要素自身とそれを使う側の問題なのでページは個々の要素を区別しない。ページが持つ機能は「NotationText(記法を使ったテキスト)←→ページ/要素」の相互変換と保持と参照くらい。

ページ/要素→NotationTextのとき、ページ/型が「ページ/要素」を表す値のとき、データコンテキストに合った変換を行なう。「行なう」と言ってもページが行なうのはページ/要素にデータコンテキストの型を伝えるくらい。
- ページ/要素を表す値は application/x-X-document とか application/prs.X.document といった感じにして。
- データコンテキストのうち、記法を使ったテキスト(NotationText)を表す値は text/x-wikicreole, text/x-markdown, text/x-web-markdown, ... など。
-- その他のデータコンテキスト型は text/csv, ... など。

ページ/要素←NotationTextのときの変換はNotationTextで使われている記法系とページ/要素次第。ページ自体は介入しない。

***ページとページ/要素 [#x3a5c2d4]
主体はページ/要素が持つ情報(利用者が書いたこと)。それを組み合わせるのがページ。ページを組み合わせるのがWiki。ページ/要素が中心。

ページ間に上下関係があったり要素間に構造があったりするものの、利用者からのリクエストパラメーターはそれを解釈できる要素が直接解釈する。中間にあるオブジェクトは受け渡しするだけ。リクエスト→要素→レスポンス。構造無視。要素は単独でWebアプリのように振る舞う。

Xのモデル層にはページとページ/要素くらいしかない。永続化するのはこれらのオブジェクトくらい。(よそのアプリと連携するためのモデルクラスはできるかも知れない。)ページとページ/要素は同一視できないものの共通点はある([[:i/ページは要素でもある]])。例えばデータコンテキストに応じる機能。ページ/要素と[[:i/ページにtoJsonを]]実装して、いずれでもJSON形式を作れるようにする。インターフェイスを共通にする??

***ページの用途 [#r8dc39d3]
Wikiの構成要素としての使われ方
[[:i/属性と内容]]の実態は同じ。[[:i/ページ内容と属性領域の違い]]は操作に必要な権限。いずれも実体はページ。
[[:i/権限を判定するケース]]はページが関わるところ全てと、ユースケース。つまりいたるところ。権限の参照を速くすれば高速化できそう。

利用者からの使われ方/用途は決めていない。「何を書き込まれるか」と書き込みから生じた要素の実装次第なので定義不可。ページを操作するAPIは用意するけど用途は未定義。
利用者にとってのページ(UI上で見えるページ)は複数のページの集約。ページ/内容、ページ/属性、ページ/裏、ページ/権限。さらに内容はドキュメント/スレッド1/スレッド1-1/スレッド2/…と分かれている。いずれも実体は独立したページ。
***ページの上下関係 [#z0b442cd]
1つの上位ページで複数の下位ページをまとめることができる。ただページ/名前に共通部分を作るだけ。ページ間に関連なし・名前だけつながりのネスト構造。オブジェクト間はつながっていない。

ページを上下関係でまとめるとページ/属性の継承(属性/継承)や下位展開の対象になる。

下位のあるページは[[下位展開]]でまとめて表示可能。上下関係はページ名に含まれる単語数で分かる。→ [[順不同パス#i8d1b64a]] "1つ上/1つ下"
下位展開時の表示順序はページ/属性で(だいたい)決まる。
† [[:i/ページと他オブジェクトとの関わり合い]]
† [[:/セクションをやめてページのネストで]]

上下関係で最上位にあるのはルートページ。
:ルートページ|
…は全てのページの上位に位置するページ。
…は全てのページに共通する名前 ''/'' を持つ(だけの)ページということ。
…の階層レベルは0。単語1つでレベル1。
*** [[:i/なんでもページに記録]] [#v091f421]
***ほか [#adb264af]
- [[:i/ページを保存するときはオブジェクトだけ]]。NotationTextは要素が分担して永続化する。ページ/要素を記法と切り離す。
- [[:i/ページタイトルにビュー別接頭辞]]を入れておくと、ブラウザーの履歴検索でも役立つ。
- [[:i/ページの1行目は特別]]で、ページ/名前の元になる。ページタイトルになるのは最初の見出し。ページ/内容に全てを含める。コピペ1回でページ作成可能に。→ [[:Done/ページ名とページタイトルの書き方]]
- [[:i/プロトタイピング]]には以前行なったページの実装がある。
- → [[:Done/ページ型/スレッド/データコンテキスト/記法定義まとめ]]

***関連 [#la4f5879]
ページ関連のアイデア目録。
- 全てURIで
- 外部名(4区分)
- 内部名(パーマリンク)
- リンク
-- リンクラベル
-- リンク先
--- 内部リンク/外部リンク
内部リンクは「全てURIで」
スキーマが特別
- 永続化
-- データストア
-- 版はデータストアのもの
- ほか、ページ構造に関わるクラス
- ユースケース
- ページ/要素とセレクター
-- データコンテキスト
-- 記法←→要素(ビルトイン記法)
- ページ/属性
-- 属性/継承
- 権限(鍵)
-- 権限/継承
*[[:t/ページ]]より [#v215978a]

まとめる前の原案と、[[ページ]]の参考になる点について言及したもの。

**ページとは [#te598c37]

***[[:i/派閥はページ←Amazonでの商品にあたるもの]] [#i6758216]
派閥は無くなったけど、ページがAmazonの商品にあたるのは変わらない。

ほしい物リストに登録すれば備忘録になったり価格の変動を通知してくれる点も、ページにレビューが付く点も。

ほしい物リストから生成されたおすすめ商品や、それらを集めたマイストアも参考になりそう。登録したページでサブセットWikiを作っておいて、それを何かに利用したり?



***[[:i/ページは…]] [#k041008c]
> データ保存場所
>
RIGHT:[[:i/ページは…]]

> 利用者から送られてきたクエリーのうち、自身に関する部分だけは解釈できる
>
RIGHT:[[:i/ページは…]]

> (ページを)入れ子にはしない。
>
RIGHT:[[:i/ページは…]]

入れ子(ネスト)にしないのは埋め込みができるから。クラス定義ではネスト不可。でも閲覧時の埋め込み解決後にネストしているかのように見えるのはあり。



***[[:i/ページとは]] [#i097cab3]
ページ内部は要素のリストでも、ページ要素ごとにデータ構造が違う。
ページはRDBのテーブル。ページ/要素1つが1つの型を持つフィールド。

→ [[フレームワーク/WikiEngineでやること#vad5bbbb]]
WikiEngineはページを操作するもの。



***[[:/ページと要素は似ている]] [#c6934989]
要素と同じ使い方ができても目的が違う。

要素は内向きで要素間連携のための、ページは外向きのインターフェイス。
***[[:i/ページの属性は下位が豪華、内容は上位が豪華]] [#t9a5584a]
継承とフォルダー式のまとめ。下位が上位を参照すると、下位が豪華になる。どう依存するかの違いでもある。



***[[:i/ページはファイルと類似]] [#m42ea2cc]
ページ/属性とページ/裏に管理用データを持たせて。



***[[:i/ページは機能のDB]] [#wfc07b2e]
ページ/要素にデータアクセス。それをシリアライズして記法化。



***[[:i/ページは要素のインターフェイス]] [#i468126e]
%%このインターフェイスを使わなければ直接依存することになる。それもあり。プラグイン開発の戦略。%%
利用者からのクエリーはそれを解釈できる要素だけが解釈する。解釈できる要素がいくつ存在していてもいい。ページを介しては伝わらない。
ページは要素にとっての場所。要素の配置を変えるときはページに指示することになる。



**ページの内部 [#d7770632]
// ------------------------------------------------------------------------------------------------------------------------



***[[:Done/スレッドモードは不要]] [#y1cd5f11]
> ドキュメントはスレッド投稿の1件に相当。それぞれ内部にページ/型を持つ。
>
RIGHT:[[スレッドは1件1件がドキュメントと同じ型>:Done/ページ型/スレッド/データコンテキスト/記法定義まとめ#kf220197]]

ページの内部構造はページ/要素だけ。
***[[:Done/ページの中のページは不可か]] [#k7998b52]
> ページ同士に関連は無し。
>
RIGHT:[[:Done/ページの中のページは不可か]]

下位展開ならレイアウト上の問題。ページはネストしない。

- ページ名でまとまっていると''見なす''ことはできる。下位展開時はこのまとまりを一挙に表示。
- 明示的リンクで関連性を示すことはできる。自動検出ではない関連性。



***[[:i/ページ内容がオブジェクト構成を表す]] [#e859055b]
ページは要素の構成。要素も要素の構成。それらを決めるのがページ/内容。利用者はページを通して要素をあつかう。



**ページの性質 [#afb81108]
// ------------------------------------------------------------------------------------------------------------------------

***[[:i/BracketNameは不要]] [#y8c1151a]
明示的リンク。
不要だけど利用者の意図をシステムに伝える手段として使う。
ページ同士に明確なつながりが有ることを示す。



***[[:i/ページに型を]] [#j0dee4a4]
Xの拡張容易点。要素だけで対応できない拡張はページ/型で。




***HTMLを直接書けるページ [#i746c5ac]
→ [[:i/HTML許可ページ]]
→ [[:i/HTML書き込み]]

ページ/型の1つ。HTMLや各種記法のレンダリング後(HTML)を貼るためのもの。

この型を管理者だけの物にするには?権限設定では属性値(ページ/型の値)を制限できない。
%%→「特定のページ/型を使わせない」のは不可能。%%
→属性値に「ページ/型をHTMLにできる」といった値を設定可能にする。使う側で''きちんと''判定すればいい。
→ [[:Done/ページ型/スレッド/データコンテキスト/記法定義まとめ#o051e5a4]]

%%型を分ければ権限(錠)も分けられる?%%
%%→型では分けられないが、その型を集めて1つの上位ページでまとめればいい。属性の継承機能で一度に権限を設定できる。HTMLを書くためのページに特定のディレクトリ名を付けてまとめておく。そのまとまりに管理者だけの編集権限/錠を与えて。%%

%%ページを「ページ/型:HTML」にできては権限設定が無意味。ページ/型の変更…ページ/属性設定のすべてを管理者権限にしなければならない。一般利用者はページ/属性を変更できないので、ページ/型も変更できない。可能。%%

%%ページ/属性は複数に分けて、一部は誰でも変更可能にする必要があるかも知れない。%%
***[[:i/俺のモノは俺のモノ]] [#j8a9a00c]
ページに書かれた情報の権利/権限。
権限設定、権利表明の''コマンド''。それと紹介文にも。


***[[:i/見出しをページのタイトルに]] [#j58387ce]

1行目よりもふさわしい箇所があればそっちで。

%%→ [[:i/全ページ見出しから始める]]%%
タイトルを見出し化するよりも、見出しをタイトル化。書くときは見出しだけを書くように。

→ [[:i/UI上でページ名は「管理用」とする]]
最初の見出しをページタイトルにするといい。
Webブラウザーに表示されるのは最初の見出し。
1行目をWebブラウザーのタブやGoogle検索結果に表示したいなら、1行目を見出しにしてでも見出しがページタイトルになるようにする。

----

%%ページの構成…%%
-%%ページ%%
%%複数。順序あり。ランダムアクセスはしない。%%
-%%テキスト(WikiText)%%
%%複数。順序あり。ランダムアクセスはしない。%%
-%%HTMLテンプレート%%
%%ページの見た目。ビュー。スタイル。閲覧時のページ。1組で良い。が、複数も良い。複数ならテンプレートに適用順序を設けて順次使用することに。あまり意味はない。%%
**全ページ見出しから始める [#q76e9492]
閲覧時、ページ名を見出しと同様に表示。
見出しにはEditボタンを。
見出しと本文のうち最初の1行をページタイトルに。
**ページを操作するためのUI [#m7402a92]
// ------------------------------------------------------------------------------------------------------------------------

ページ内容の有効な一行目がページ名。なのでページ名を見出しにすればいい。
(一行目かTITLE:やNAME:で始まる行。複数あるなら全てを連結したもの)
**newプラグインを標準に [#b38375a2]
ページへのリンク(Wiki内リンク)にはNew!が付く。
実装するならオプション。サイト設定で。

RIGHT:[[:t/プラグイン]] [[:t/設定]]
**添付ファイルは1ページ扱い [#hf16f53a]
添付ファイル1つに1ページ生成。フォーマットの統一。
こうしたほうが扱いやすいし、ページの機能を添付ファイルでも利用できる。

埋め込みリンクを利用して添付ファイルに対応する''ページを他のページに埋め込み''。
*** [[→:タイトルとURLをコピペ]] [#b6fa6f8f]

はてなフォトライフのフォトライフ記法欄のような。
ページ名のコピペ以外に内部リンクを作る方法があるなら不要。オートコンプリートとか。ドラッグ・ドロップで使えるクリップボードとか。
このコピペ機能の代わりにページ名を逆リンク一覧にリンクするのもあり。クラシックWikiではそうなっているけどMediaWikiではそうなっていないので、どちらでもいい。
***[[:i/存在しないページは無い]] [#e2e28745]
UI上では内容が無くても関連情報はある。ページ名も情報のうち。
実装上はページの有無を気にしない。ページはSingletonのようなもの。

RIGHT:[[:t/属性]]
**存在しないページは無い [#pc2d3b3b]
存在しないページ=内容が空で存在するページ。
ページ管理クラス(ページとファイルを結び付けるクラス)以外では(UIからも含めて)そうなっているように。
**ページの内容はコードと見なせる [#xae85282]
ページ内容をコードと見なすと…
DanglingLinkは「存在しないページヘのリンク」という意味ではなくなる。

-ページの内容は基本的に全てコメント
-ただし、#(プラグインの接頭辞)で始まる行はコード
-コードの出力はコメント
コードとして再処理することは無い。
他のコードの引数(データ)になることはある。
-コードの出力はコードと置き換わる。


**本文のレンダリングは最後 [#ua1b6934]
本文(ヘッダーなど以外の部分)の展開(レンダリング、HTML変換)は最後。
1つの画面に重複部分があるとき、ヘッダーなどを優先する。
二重展開を防ぐようにした場合、先にヘッダーなどを展開しないとヘッダー編集時のプレビューができなくなるから。
**ページを更新できるのは自身だけ [#e17f3c5c]
編集など、ページの属性を変更する操作は自身が全て行なう。
(自身とはインスタンス)
***[[:Done/ページ削除のUI]] [#ob0cfa17]
→ [[ページ/削除]]
**UIになるページ [#a6ce55e1]
// ------------------------------------------------------------------------------------------------------------------------

他から変更したいときは、指示を対象ページにキューイング。
そのページは最新状態をリクエストされるまでに自身を変更すればいい。
それ用の要素を使って入力フォームを持つページを作ることができる。
[[→:UI要素]]
**Wiki構築のためのページ [#pfc0f372]
// ------------------------------------------------------------------------------------------------------------------------

参照は自由にできていい。
***[[:i/Wiki構築をページで]] [#zccacd77]
設定項目をページに書ければいい。
汎用化して[[データアクセス]]になった。

編集は遅延処理。
ページに手を加えるにはページごとに{属性→値}という形式で指示をキューイング。
適当なときに処理。

最新版が必要なときはそのページを呼び出して、最新版になってもらう。

衝突したか知らせるために、編集後のレスポンスには最新版が必要。それまでに更新しなければならない。
***[[:i/ページ主体の設計]] [#q138cd45]
Wiki構築をページで行なうという発想。
ページの仕様が大きくなる。

RIGHT:[[:t/遅延処理]]
**Webページのテンプレートは特定のページに書く [#e7516dbe]
システムが用意するページ(Webページ)は:config/Page/Editのような特定のページで定義。

このページを書き換えて…
-ページの構造・内容(HTML)
-どんなときにどんなページを使うか
User-Agent別に定義して、フルブラウザ用とか、ケータイ用とか、スマートフォン用とか。
利用者の権限別とか。

条件、それに合ったときの戻り値は特定のページに。
条件に使えるデータ、戻り値の用途はシステムにコードで定義。(用意されている中から選択して設定で利用)
***[[:i/Webページのテンプレートは特定のページに書く]] [#c4ee467b]
条件別のページテンプレート。言語別とか。
***[[:i/増殖するページ]] [#g0a21fb1]
ページの元になるページ。ログなど自動生成されるデータのテンプレート。
(ヘッダーなど)通常のテンプレートと異なるのは、テンプレートを穴埋めした後に保存する点。

RIGHT:[[:t/構築]] [[:t/設定]]
**%%コンテンツとスタイルの分離%% [#jcbb0dd4]
%%「人気のページ」など、データを提供するページはコンテンツとスタイルを分ける。%%
%%スタイルは…%%
+%%スタイルシート%%
%%RIGHT:[[:t/スタイルシート]]%%
+%%フィルター%%
+%%テンプレート%%

%%…で。%%
%%フィルターとテンプレートは別のページに埋め込んだときに可能…になるはず。%%

→検索に含まれている。
**%%リストとハッシュ%% [#z69970b0]
%%リスト状に並んだページ…版。%%
%%ハッシュに格納…Wiki。%%
***[[:i/テンプレートは制限するものではない]] [#k86f3c03]
入力用テンプレートはUI要素として実装。編集ビューではなく閲覧ビューでのその場編集に有効。
→ [[:i/UI要素]]

**ページ内容がオブジェクト構成を表す [#qdd0826b]
ページは独立したオブジェクト。
それを構成するElement系クラスを決めるのはページ内容。

プラグインからはこのオブジェクト構成を参照できるように。
WebページのDOMアクセスと同様に。
**1つのページ内部名にインスタンスは1つ [#ocee16cb]
Flyweight。内部名がID。ページ名は同じものが複数あっていい。
**アクセスログはページの属性 [#i50a7b52]
アクセスログもページ化する。
プラグインから扱えるように。
RIGHT:[[:t/フレームワーク]] [[:t/属性]]
**ページはプラグインのDB [#d6676d32]
プラグインが生成するデータはページに記録。
プラグインが独自にデータ保存するよりも使いやすくなければ無意味。

**資料 [#sb6c1333]
ごく簡単なHTMLの説明 - The Web KANZAKI
[[http://www.kanzaki.com/docs/htminfo.html>http://www.kanzaki.com/docs/htminfo.html]]

閲覧時のページ→HTML変換の参考に。
***[[:i/利用者のページ化]] [#t98d478d]
ページはデータベース。利用者はページ。ページの移動が利用者の異動。
移動で上位ページが変われば(属性/継承によって)その利用者のロールや権限も変わる。
***[[隠しページ]] [#u1b73b7b]
(コンテンツ用ではなく)システム用のページは隠しページにする。
***[[機能/分析>:i/機能#g2f99200]] [#dc9a77a2]
MediaWikiでの特別ページ。%%(ユーティリティページ)%%
***[[:i/ログはページに記録]] [#hce77106]
分析結果はページ自身に記録する。
***[[:i/ページの重さ]] [#o45d0a00]
Wikiの可視化。概要把握の機能とその表示。



*設計 [#v3386267]
**属性と内容 [#kcd08e8d]
ページ/属性と、ページ/内容。
「属性」という言葉が紛らわしい。[[:t/?]]
***[[:i/最近更新されたページ]] [#i7902b3b]
システムが作るページ。実体がページ/要素で、その出力が動的なページリスト。なので「システムが書き込むのはページ/裏だけ」のルールと衝突しない。
**実装案 [#v0cd5027]
// ------------------------------------------------------------------------------------------------------------------------

:属性|
テキストのリスト。下位ページが継承する。(1項目ごとに)
***[[:Done/ページ型/スレッド/データコンテキスト/記法定義まとめ]] [#q97ea804]
***[[ルートページ]] [#m80fde0f]
ページはページでまとめる。どうまとまるかはページ/名前次第なので、ルートページはそういう名前を持つ(だけの)ページということになる。

:内容|
テキスト1つ。継承されない。
***[[:i/ページと他オブジェクトとの関わり合い]] [#o3452815]
ページ同士の関わりはなし。ページ名でまとめる。順不同パスに共通点があれば下位展開でまとめて表示可能。
下位展開ビューでの順序情報に他のページ名が含まれるくらい。その情報は消えても間違っていてもいい。表示順序が変わるだけ。

どちらもWikiNotationあり。内容の方はそれに加えてプレーンテキストも。
属性の方にプレーンテキストを書いてもいいが特に意味がない。
***[[:i/ページを保存するときはオブジェクトだけ]] [#qfa54968]
NotationText(WikiText)は要素が分担して保存する。
記法テキスト以外でも書き換えられるようにするため。この方法でもテキストで書き換えられる。

APIやプラグイン呼び出しからは区別なし。指定すると呼び出しが煩雑になるので。
継承処理後の属性と内容を1つにしたものが参照可能になる。
属性部分を何かで括ったりもしない。
**他オブジェクトとの関わり合い [#wf50993c]
ページ…Elementのコンテナー。ページがページを含むことはできない。
ページ同士に関連は無し。リンクオブジェクトでつながりが分かるだけ。
Element…ページの要素。ページはElementに含まない。深い構造にしないため。
***[[:i/アクセスログはページの属性]] [#k00303e2]
ログの出力先を特定の(設定された)ページに。
でもシステムが書き込むのはページ/裏のはず。ページ/裏の1つに追記していく。アクセスログ専用のページ/裏。

PageとNotationは、ContainerとElementの関係。
クラス名…Page、Notation。”Container”、”Element”という言葉は属性名やインターフェイス名で使用。
%%裏だけを使うページがあってもいいかも?%%

機能
-同型のオブジェクトとの類似度算出
コードで。Elementのクラス別。
-出力用(ページの一部になるもの)に変換
逆変換は不可能。
-生成
コンストラクター
*コード [#b9332bbb]

**Perl [#n3bc38ca]
[[code*:364]]

***[[:i/クラスごとにページを]] [#h50fe0ba]
アクセスログもクラス名を冠したページ(のページ/裏)に?

***[[:/セクションをやめてページのネストで]] [#d829ef1d]
ページ名でつながるネスト構造。オブジェクト間はつながっていない。
上位ページを閲覧すると下位ページも見える。上位と下位について→ [[順不同パス]]
***[[:i/テンプレートはページ名]] [#t4fd31e8]
独立したページにすると機能充実。その反面、テンプレートにも権限(錠)を設定できてしまう。運用の問題にしておく。


***[[:i/属性と内容]] [#r359cfe9]
扱いは同じ。操作に必要な権限が違う。
ページ/内容、ページ/属性、ページ/裏。
***[[:i/検索結果でページを作れば「検索結果の検索結果」が可能に]] [#q85af08c]
まず見るべきところを「まず見て欲しいページ」という''ページ名で''見せることができる。更新される動的まとめ。

***[[:i/権限を判定するケース]] [#t6879152]
ページが関わるところ全てとユースケース。つまりいたるところ。権限の参照を速くすれば高速化できそう。
***[[:i/添付ファイルもページ]] [#kc2c0e30]
ページは添付ファイルのアダプター。

***[[:i/ページにtoJsonを]] [#pca316eb]
実装。


***[[:i/ページの1行目は特別]] [#n3d4e945]
実装。

***[[:i/ページは要素でもある]] [#x5cde9ca]
実装。

***[[:i/ページ内容と属性領域の違い]] [#bc3ca9a4]
実装。
**コード [#b9332bbb]
[[code*:364]] Perl
// ------------------------------------------------------------------------------------------------------------------------



**まだまとめてない [#z5f15e45]
// ------------------------------------------------------------------------------------------------------------------------

***[[:i/仮想ページという考え方]] [#i88a35cc]
***[[:/ページ属性の型は文字列だけ]] [#c1d81e26]
***[[:i/ページ属性の接頭辞をやめる]] [#xbb9544d]
***[[:i/ページ属性はセレクターで読む]] [#t27decc8]
***[[:i/ページ属性はデータアクセスで参照]] [#ld96e8d0]
***[[:i/属性領域も複数に]] [#q501cf6d]
***[[:/権限領域のページ名]] [#k6c25b29]
***[[:i/継承にも錠と鍵を]] [#m1f49938]
***[[:i/見出しかダガーがその見出しへのリンク]] [#abfd2299]
***[[:Done/Twitter連携するときページ名をどうするか]] [#y4ed2841]

**いらない [#x54b71de]
// ------------------------------------------------------------------------------------------------------------------------

***%%[[:/ユーティリティページ]]%% [#g470d3aa]
***%%[[:/ページはメモ化しない]]%% [#k7edab34]
ページ/要素は制御されないので、外からはメモ化可能か分からない。
***%%[[:/DBクラスにページ検索の機能を]]%% [#f890a445]
***%%[[:/X/PageFactory]]%% [#c81bc4bd]
***%%[[:/プラグインが使えるフック]]%% [#u787d86f]
***%%[[:/ページをセクションと比べると…]]%% [#o6f1dd71]
***%%[[:/ページを更新できるのは自身だけ]]%% [#z052431a]
***%%[[:/リストとハッシュ]]%% [#x3f32980]
***%%[[:/保存は入力されたままのWikiTextか]]%% [#ud576605]
***%%[[:/ページの出力はHTML]]%% [#q44452f7]
***%%[[:/ページを細切れにするのは隠蔽すべき?]]%% [#zae94000]
***%%[[:/対象範囲]]%% [#u4118be6]
***%%[[:/機能/複数ページ組み合わせ]]%% [#de61a854]
***%%[[:/自動生成されるページ]]%% [#n0830a1e]

***%%[[:/埋め込めないプレースホルダーは非表示]]%% [#a5855115]
*ページ/ [#ba1b4b58]
- ページでやること

#ls()