例
配布物には二種類のプログラムが入っています。43 本の小さなプログラムと、ブラウザで動く画面です。小さなプログラムは一本が一つの機能の説明で、番号順に読めるようになっています。
画面はどれも、デザイナが書いた HTML と対になっています。LPScript のプログラムに HTML はありません。HTML の見本を複製して値を入れ、クリックされたときに送るメッセージの名前を指定します。
画面ごとの説明です。
- 受注管理 — 検索、絞り込み、並べ替え、明細、保存。状態を文字列ではなくクラスで表す
- 受注入力 — ViewModel と項目表。画面全体でハンドラは二つ
- 入力検査 — 検査規則はサーバと共用のファイルから読む
- 通信を書かない画面 — URL、トークン、エンベロープを共通部品に隠す
- ページ送り — サーバが一ページ分ずつ返す場合の一覧
- 見積一覧 — 行もダイアログも HTML の見本の複製
- 一万行の一覧 — 仮想スクロール。描くのは見えている二十数行
- ファイルの出し入れ — ファイルの受け取りと保存。文字列とバイト列
- 通信中のオーバーレイ — 待っている画面のオーバーレイを別のアクタにする理由
- 画面から画面へ — ページ遷移と、一度だけ読める値の受け渡し
- Worker — 同じ計算をメインスレッドと Worker で実行して比較
- 監督 — 一つのアクタをエラーで止め、他への影響を見る
- 日付を選ぶ — アクタではない共通部品
- やること表 — 親の描き直しが子に及ばないことの確認
- ゲーム — DOM の毎フレーム描画と canvas
共通部品
どの画面にも属さない部品は別のファイルに置き、パスを指定して import します。
アクタでない部品: 確認ダイアログ、カレンダー、ページ送り。確認ダイアログとカレンダーは自分のマークアップを持ちます。ページ送りは数値二つを受け取ってページ番号を返します。状態を持たないので、使う側の画面のクラスに依存しません。
アクタである部品: 通信中のオーバーレイ、サーバのエラー表示欄。forced で待っている画面は待っている間描き直されないので、待っている間に表示を変える部品は画面の状態には置けません。別のアクタにする必要があります。
その他: gateway(サービス名と送信内容を受け取り、サーバが success を返したときだけ応答の中身を返す)、入力検査(サーバと共用の規則ファイルを読む)、ストア(sessionStorage を「セッションの間保持する値」と「一度だけ読める値」に分ける)、ソケット(WebSocket の切断検知と再接続)。