3 | import HTTP.API.Decode
4 | import Text.HTML.Select
6 | import public CyBy.UI.HTML
7 | import public Web.Async
15 | data LogEv = Clear | Lvl LogLevel
17 | printErr : JSErr -> JS [] ()
18 | printErr x = putStrLn "Error: \{dispErr x}"
21 | logNode : LogLevel -> List String -> HTMLNode
24 | [ label [class $
level l] [Text $
"[\{l}]"]
25 | , div [] $
intersperse (br []) (map Text msgs)
29 | uilog : IORef LogLevel => Logger JS
31 | MkLogger $
\l,ml => Prelude.do
33 | when (l >= x) $
handle [printErr] (prepend (elemRef CyByLog) $
logNode l ml)
35 | levels : List LogLevel
36 | levels = [Trace,Debug,Info,Warn,Error,Fatal]
38 | appLog : Sink LogEv => HTMLNode
43 | [ label [] [Text "Log"]
45 | , button [onClick Clear] ["Clear"]
46 | , selectFromList' levels (Just Info) show Lvl []
48 | , ul [ref CyByLog] []
55 | stream : AsyncStream JS [] Void
58 | onev : (ref : IORef LogLevel) => LogEv -> Async JS [] ()
59 | onev Clear = handle [printErr] $
children (elemRef CyByLog) []
60 | onev (Lvl x) = writeref ref x
63 | logger : LogLevel -> Act Logger
64 | logger l = Prelude.do
67 | pure $
L appLog (foreach onev es) uilog
73 | validIcon : DOMLocal => Ref Tag.Div -> EditRes t -> HTMLNode
74 | validIcon r (Valid _) = div [class iconPlaceholder, Id r] []
75 | validIcon r (Invalid s) = div [class iconError, Id r, title s] [iwarn]
76 | validIcon r Missing =
77 | div [class iconMissing, Id r, title $
editRes {t} Missing] [iwarn]
80 | validated : DOMLocal => Editor t -> Editor t
82 | E $
\m => Prelude.do
83 | lbl <- uniqueRef Tag.Div
84 | W ns vs <- ed.widget m
86 | [div [class validatedInput] $
ns ++ [validIcon lbl $
Missing {t}]]
87 | (observe (replace lbl . validIcon lbl) vs)
93 | parameters {auto loc : DOMLocal}
97 | seledit : Maybe Class -> (v -> t) -> (v -> String) -> List v -> Editor t
98 | seledit c f g vs = E $
Widget.sel f g vs $
class <$> toList c
101 | selEdit : (v -> t) -> (v -> String) -> List v -> Editor t
102 | selEdit = seledit Nothing
105 | selEditC : Class -> (v -> t) -> (v -> String) -> List v -> Editor t
106 | selEditC = seledit . Just
112 | parameters {auto loc : DOMLocal}
116 | (dec : String -> EditRes t)
118 | -> (init : Maybe t -> String)
120 | input dec tpe init = validated $
txtEdit dec tpe init []
124 | double : Editor Double
125 | double = input read Text (maybe "0.0" show)
130 | nat = input read Text (maybe "0" show)
134 | integer : Editor Integer
135 | integer = input read Text (maybe "0" show)
139 | bits8 : Editor Bits8
140 | bits8 = input read Text (maybe "0" show)
144 | bits16 : Editor Bits16
145 | bits16 = input read Text (maybe "0" show)
149 | bits32 : Editor Bits32
150 | bits32 = input read Text (maybe "0" show)
154 | bits64 : Editor Bits64
155 | bits64 = input read Text (maybe "0" show)
160 | int8 = input read Text (maybe "0" show)
164 | int16 : Editor Int16
165 | int16 = input read Text (maybe "0" show)
169 | int32 : Editor Int32
170 | int32 = input read Text (maybe "0" show)
174 | int64 : Editor Int64
175 | int64 = input read Text (maybe "0" show)