formlets HTMLのフォームを抽象化する試み
こういうフォームで、日付入力ボックスを、部品として抽象化できたらいいよねという話。
入力が01〜12月の範囲かチェックとか、生のクエリデータを意識しないですむように日付型の値を返すとかを、再利用できるはずだから。
名前 [ Gemma ] 到着 [09] / [22] 出発 [09] / [23] [送信]
こうなるらしい。論文から抜粋。
let date formlet : date formlet = formlet <div> Month: {input int ⇒ month} Day: {input int ⇒ day} </div> yields make date month day let travel formlet : (string × date × date) formlet = formlet <#> Name: {input ⇒ name} <div> Arrive: {date formlet ⇒ arrive} Depart: {date formlet ⇒ depart} </div> {submit "Submit"} </#> yields (name, arrive, depart) let display itinerary : (string × date × date) → xml = fun (name, arrive, depart) → <html> <head><title>Itinerary</title></head> <body> Itinerary for: {xml text name} Arriving: {xml of date arrive} Departing: {xml of date depart} </body> </html> handle travel formlet display itinerary
自分用メモ
scanfに似ていると思った。
function scanf_date(msg) { printf("%s",msg); scanf("%d/%d",month,day); return new Date(month,day); } function main() { var name, arrive, depart; printf("名前"); scanf("%s", name); arrive = scanf_date("到着"); depart = scanf_date("出発"); }
さて、これだと3回入力待ちループになるわけだ。
こいつをどうにかしてこういう動作に解釈できないか?
printf("名前 到着 出発"); scanf("%s %d/%d %d/%d",name, month0, day0, month1, day1);
- month0、month1と、変数名のつけかえが必要になった。
- さらに、scanf_dateの動作を加えて・・・
printf("名前 到着 出発"); scanf("%s %{date} %{date}",name, arrive, depart);
-
-
- -
-
- もう3ページ遷移すればいいよ(バカ
名前 [ Gemma ] [送信]
到着 [09] / [23] [送信]
出発 [09] / [25] [送信]