詳細な設計→Page

目次 Edit


関連 Edit

検索:ページ

ページ周辺のタグ Edit

Array

ページとは Edit

→Page[?]

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

ページとは Edit

ページは…

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

思い付き Edit

ページ内容はコードと見なせる Edit

ページ内容をコードと見なすと…

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

ファイルと類似 Edit

Wikiのページにはファイルと同様にアクセス許可リスト、日付、読み専用などの属性、パスなどがある。

スレッドモード Edit

コメント、トラックバック、Wikipediaでのノートのようなものは裏に隠す。(ページ/裏に限らず、普段見えないところ)
UIWikipedia式のタブでいい。

フローとストックのフロー側。

Wiki構築をページ Edit

Wiki構築をページで。
APIページ内の表をレコード単位で読み出しするようなことができれば実現しやすい。

アクセス権は引き継がれる Edit

自動生成ページは元のページ(入力されたページ)すべてのアクセス権を引き継ぐ。アクセス権の合成ルールが必要。

→:ToDo/自動生成ページに何か入力するか[?]

Wikiは1ページが1つの板 Edit

…などを。

利用者登録も?WikiFarmとは違う?

→:ToDo/ブログや掲示板として利用できるか[?]

HTML許可ページ Edit

ブログパーツなど、サイトに貢献する人だけが作れるページ
HTMLタグなどが閲覧ページまでエスケープされずに残る。

作った後は(ページの機能を利用して)他のページに埋め込んだりできる。言い換えればホワイトリスト。

ヘッダーの使い道 Edit

ページ内容以外から呼ばれた機能のディスプレイとして使用。
形式いくつか用意。上部にテキスト表示するバナー、下部に表示するバルーン、右上にアイコン通知バッジ出すなど。コードで指定。そのためフレームワーク側にライブラリとして用意を。
組み込み済みの基本的な記法を使えるように。

ヘッダー。つまり通常のページ埋め込みリンクで埋め込むだけ。

内容は…

…などをAPI経由で追加。

実装 Edit

セクションと比べると… Edit

ページセクションの集約。
Wikitextを持たない。代わりに(Wikitextを持った)セクションを持つ。

作り方はページ作成フォームとか、DanglingLinkとかから。

リンク先になれる。URIを持つ。

下位展開のルールによって一度に展開される埋め込みの深度に制限がかかる。

構成 Edit

310x310

ページヘッダー内容ページフッターは連結して1つのページとして閲覧時展開

ページヘッダーページ見出しページ名とEditボタン)やタグリンク一覧(そのページ名を表すメタシンボル付き)を置く。

ページ見出しから始める Edit

閲覧時、ページ名見出しと同様に表示。
見出しになったページ名にもEditボタンを付ける。

ページ内容の有効な一行目がページ名。なのでページ名見出しにすればいい。
記法/タイトル記法もあるけど、これは後に続く要素にタイトルを付けるものなのでページタイトルには向かない。でも最初の記法/タイトルをタイトルにしてもいいかも?

newプラグインを標準に Edit

ページ名の隣(一覧や検索結果や自動リンク)にはプラグイン/New![?]が付く。
実装するならオプション。サイト設定でon/off。

添付ファイルもページ Edit

→プラグイン/ファイルアップロード[?]

存在しないページは無い Edit

存在しないページ=内容が空で存在するページ
ページ管理クラス(ページとファイルを結び付けるクラス)以外では(UIからも含めて)そうなっているように。つまりこれを実現するのはページ管理クラス(PageFactory)

本文のレンダリングは最後 Edit

描画順序内容が変わりにくい順で、上から。ヘッダー、サイドバー、フッター、本文
これは重複描画の判定を考えて。
1つの画面に重複部分があるとき、ヘッダーなどを優先、重複判定は本文側でする。

二重展開を防ぐようにした場合、先にヘッダーなどを展開しないとヘッダー編集時のプレビューができなくなるから。

ページ更新できるのは自身だけ Edit

編集など、ページ属性を変更する操作は自身が全て行なう。
(自身とはインスタンス)

他から変更したいときは、指示を対象ページにキューイング。
そのページは最新状態をリクエストされるまでに自身を変更すればいい。
キュー出し/入れはフレームワーク/WikiEngineで。それを呼び出すのはページクラス。ページだけのものではないので。

ページの参照は自由にできていい。普通にロックを掛けて読むだけ。

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

最新版が必要なときはそのページを呼び出して、最新版になってもらう。
これはページの特殊な参照方法。
衝突したか知らせるために、編集後のレスポンスには最新版が必要。それまでに更新しなければならない。

Webページテンプレートは特定のページに書く Edit

システムが用意するページ(Webページ)は:config/Page/Editのような特定のページで定義。
WikiText編集方法でページデザインやヘッダーの機能を変更。

このページを書き換えて…

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

条件、それに合ったときの戻り値は特定のページに。
条件に使えるデータ、戻り値の用途はシステムにコードで定義。(用意されている中から選択して設定で利用)

リストとハッシュ Edit

エントリー、見解はハッシュ構造。順序なし。キー指定で参照。
はリスト構造。末尾が最新版

ページ内容がオブジェクト構成を表す Edit

ページは独立したオブジェクト。
それを構成するPageElementを決めるのはページ内容

プラグインからはこのオブジェクト構成を参照できるように。
WebページのDOM風アクセスと同様に。

1つのページ内部名にインスタンスは1つ Edit

Flyweight。内部名がID。ページ名は同じものが複数あっていいが内部名は重複なし。

アクセスログページ属性 Edit

アクセスログページ化する。
プラグインから扱えるように。

アクセスログから逆リンクを表示すればその場しのぎの低負荷のBackLinkになる。

ページプラグインのDB Edit

プラグインが生成するデータはPageElementを通じてページに記録。見ることは出来るので、読みやすいデータ書式がいい。
プラグインが独自にデータ保存するよりも使いやすくなければ無意味。
例えばテーブル(表)にレコード形式のデータ、定義リスト(DD)にキー・バリュー形式のデータ、のように。

プラグイン設定ページ
これは利用者が書いてプラグインが読む。

資料 Edit

ごく簡単なHTMLの説明 - The Web KANZAKI
http://www.kanzaki.com/docs/htminfo.html

閲覧時のページ→HTML変換の参考に。

空のページ Edit

空でページ名だけのページは、閲覧時に編集画面。DanglingLinkのかわり。
内容が無いからといって削除されたりはしない。

設計 Edit

属性内容 Edit

ページ/属性と、ページ/内容
属性」という言葉が紛らわしい。:t/?[?]

属性
WikiTextのリスト。下位ページ継承する。(1項目ごとに)。ページ/裏と違い、利用者が書いてシステムが読むもの。
内容
WikiText1つ。継承されない。

どちらも記法あり。内容の方はそれに加えてプレーンテキストも。
属性の方にプレーンテキストを書いてもいいが特に意味がない。

APIプラグイン呼び出しからは区別なし。指定すると呼び出しが煩雑になるので。
継承処理後の属性内容を1つにしたものが参照可能になる。
属性部分を何かで括ったりもしない。

他オブジェクトとの関わり合い Edit

ページ…Elementのコンテナー。ページページを含むことはできない。
ページ同士に関連は無し。リンクオブジェクトでつながりが分かるだけ。
Element…ページ要素ページはElementに含まない。深い構造にしないため。

ページ/セクション(実装がページと類似)はセクション同士でネスト可能。

コード Edit

Perl Edit

code*:364