0 | module Web.Async.Extra.Widget
3 | import HTTP.API.Decode
4 | import Text.HTML.Extra
5 | import public Web.Async.Extra.I18n
6 | import public Web.Async
14 | data LogEv = Clear | Lvl LogLevel
16 | printErr : JSErr -> JS [] ()
17 | printErr x = putStrLn "Error: \{dispErr x}"
20 | logNode : HTTPLocal => LogLevel -> List String -> HTMLNode
23 | [ label [class $
level l] [Text $
"[\{logLevel l}]"]
24 | , div [] $
intersperse (br []) (map Text msgs)
28 | uilog : HTTPLocal => (ref : IORef LogLevel) => Logger JS
30 | MkLogger $
\l,ml => Prelude.do
32 | when (l >= x) $
handle [printErr] (prepend (elemRef AsyncLog) $
logNode l ml)
34 | levels : List LogLevel
35 | levels = [Trace,Debug,Info,Warn,Error,Fatal]
37 | appLog : Sink LogEv => ExtraLocal => HTMLNode
42 | [ label [] [Text logTxt]
44 | , button [onClick Clear] [Text clearTxt]
45 | , selectFromList' levels (Just Info) show Lvl []
47 | , ul [ref AsyncLog] []
54 | stream : AsyncStream JS [] Void
57 | onev : (ref : IORef LogLevel) => LogEv -> Async JS [] ()
58 | onev Clear = handle [printErr] $
children (elemRef AsyncLog) []
59 | onev (Lvl x) = writeref ref x
62 | logger : HTTPLocal => ExtraLocal => LogLevel -> Act Logger
63 | logger l = Prelude.do
66 | pure $
L appLog (foreach onev es) uilog
72 | validIcon : DOMLocal => Ref Tag.Div -> EditRes t -> HTMLNode
73 | validIcon r (Valid _) = hiddenDiv r
74 | validIcon r (Invalid s) = div [class iconError, Id r, title s] [iwarn]
75 | validIcon r Missing =
76 | div [class iconMissing, Id r, title $
editRes {t} Missing] [iwarn]
79 | validated : DOMLocal => Editor t -> Editor t
81 | E $
\m => Prelude.do
82 | lbl <- uniqueRef Tag.Div
83 | W ns vs <- ed.widget m
85 | [div [class validatedInput] $
ns ++ [validIcon lbl $
Missing {t}]]
86 | (observe (replace lbl . validIcon lbl) vs)
92 | parameters {auto loc : DOMLocal}
96 | seledit : Maybe Class -> (v -> t) -> (v -> String) -> List v -> Editor t
97 | seledit c f g vs = E $
Widget.sel f g vs $
class <$> toList c
100 | selEdit : (v -> t) -> (v -> String) -> List v -> Editor t
101 | selEdit = seledit Nothing
104 | selEditC : Class -> (v -> t) -> (v -> String) -> List v -> Editor t
105 | selEditC = seledit . Just
111 | parameters {auto loc : DOMLocal}
115 | (dec : String -> EditRes t)
117 | -> (init : Maybe t -> String)
119 | input dec tpe init = validated $
txtEdit dec tpe init []
123 | double : Editor Double
124 | double = input read Text (maybe "0.0" show)
129 | nat = input read Text (maybe "0" show)
133 | integer : Editor Integer
134 | integer = input read Text (maybe "0" show)
138 | bits8 : Editor Bits8
139 | bits8 = input read Text (maybe "0" show)
143 | bits16 : Editor Bits16
144 | bits16 = input read Text (maybe "0" show)
148 | bits32 : Editor Bits32
149 | bits32 = input read Text (maybe "0" show)
153 | bits64 : Editor Bits64
154 | bits64 = input read Text (maybe "0" show)
159 | int8 = input read Text (maybe "0" show)
163 | int16 : Editor Int16
164 | int16 = input read Text (maybe "0" show)
168 | int32 : Editor Int32
169 | int32 = input read Text (maybe "0" show)
173 | int64 : Editor Int64
174 | int64 = input read Text (maybe "0" show)