# HG changeset patch # User Karn Kallio # Date 1311864874 16200 # Node ID bbdedfde154efa507a2d2a72d332ce5af25acf51 # Parent ccd0a169e8277f92acedbe0b6d9e82ae521adf8f Add a calendar control. diff -r ccd0a169e827 -r bbdedfde154e datebox.ur --- a/datebox.ur Sun Jul 24 14:51:16 2011 -0400 +++ b/datebox.ur Thu Jul 28 10:24:34 2011 -0430 @@ -15,12 +15,17 @@ Le = fn {Year = y1, Month = m1, Day = d1} {Year = y2, Month = m2, Day = d2} => y1 < y2 || (y1 = y2 && m1 < m2) || (y1 = y2 && m1 = m2 && d1 <= d2)} -type t = {Month : source {ThisMonth : int, Year : int, - ThisMonthLength : int, PrevMonthLength : int, - MondayMonth : month, MondayDay : int, - PrevMonthName : string, ThisMonthName : string, NextMonthName : string}, - Day : source date, - Hide : source bool} +con cal = [Month = source {ThisMonth : int, Year : int, + ThisMonthLength : int, PrevMonthLength : int, + MondayMonth : month, MondayDay : int, + PrevMonthName : string, ThisMonthName : string, NextMonthName : string}, + Day = source date] + +class givesDates t = t -> source date + +type t = $(cal ++ [Hide = source bool]) + +fun givesDates_t x = x.Day fun pad len n = let @@ -36,6 +41,14 @@ end fun time {Year = y, Month = m, Day = d} = readError (show y ^ "-" ^ pad 2 m ^ "-" ^ pad 2 d ^ " 00:00:00") +fun date tm = + let + val y = readError (timef "%Y" tm) + val m = readError (timef "%m" tm) + val d = readError (timef "%d" tm) + in + {Year = y, Month = m, Day = d} + end fun monthLen m = let @@ -103,7 +116,7 @@ hide <- source True; return {Month = minf, Day = day, Hide = hide} -fun render' t = +fun render' action t = minf <- signal t.Month; let fun rows year month day = @@ -126,7 +139,7 @@ {[day]} else case month of This => {[day]} + onclick={action thisDate; set t.Day thisDate}>{[day]} | _ => {[day]}) end}/> {let @@ -202,8 +215,29 @@ if hd then return