From b24e1be86bca114f8a025c9b860e84e278044a5e Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Sun, 16 Nov 2014 14:39:38 -0500 Subject: Some more HTML5 input types --- lib/ur/basis.urs | 11 +++++++++++ src/monoize.sml | 9 +++++++++ src/urweb.grm | 1 + src/urweb.lex | 8 ++++---- tests/html5_forms.ur | 21 +++++++++++++++++++++ 5 files changed, 46 insertions(+), 4 deletions(-) diff --git a/lib/ur/basis.urs b/lib/ur/basis.urs index 7691cdce..9fb04484 100644 --- a/lib/ur/basis.urs +++ b/lib/ur/basis.urs @@ -969,6 +969,17 @@ val email : textWidget val search : textWidget val url_ : textWidget val tel : textWidget +val color : textWidget + +val number : formTag float [] ([Value = float, Min = float, Max = float, Step = float, Size = int, Onchange = transaction unit] ++ boxAttrs ++ inputAttrs) +val range : formTag float [] ([Value = float, Min = float, Max = float, Size = int, Onchange = transaction unit] ++ boxAttrs ++ inputAttrs) +val date : formTag string [] ([Value = string, Min = string, Max = string, Size = int, Onchange = transaction unit] ++ boxAttrs ++ inputAttrs) +val datetime : formTag string [] ([Value = string, Min = string, Max = string, Size = int, Onchange = transaction unit] ++ boxAttrs ++ inputAttrs) +val datetime_local : formTag string [] ([Value = string, Min = string, Max = string, Size = int, Onchange = transaction unit] ++ boxAttrs ++ inputAttrs) +val month : formTag string [] ([Value = string, Min = string, Max = string, Size = int, Onchange = transaction unit] ++ boxAttrs ++ inputAttrs) +val week : formTag string [] ([Value = string, Min = string, Max = string, Size = int, Onchange = transaction unit] ++ boxAttrs ++ inputAttrs) +val timeInput : formTag string [] ([Value = string, Min = string, Max = string, Size = int, Onchange = transaction unit] ++ boxAttrs ++ inputAttrs) + type file diff --git a/src/monoize.sml b/src/monoize.sml index 96323c9e..9ca21058 100644 --- a/src/monoize.sml +++ b/src/monoize.sml @@ -3667,6 +3667,15 @@ fun monoExp (env, st, fm) (all as (e, loc)) = | "search" => input "search" | "url_" => input "url" | "tel" => input "tel" + | "color" => input "color" + | "number" => input "number" + | "range" => input "range" + | "date" => input "date" + | "datetime" => input "datetime" + | "datetime_local" => input "datetime-local" + | "month" => input "month" + | "week" => input "week" + | "timeInput" => input "time" | "textarea" => (case targs of [_, (L.CName name, _)] => diff --git a/src/urweb.grm b/src/urweb.grm index 85e5f092..5b568a8c 100644 --- a/src/urweb.grm +++ b/src/urweb.grm @@ -222,6 +222,7 @@ fun tagIn bt = case bt of "table" => "tabl" | "url" => "url_" + | "datetime-local" => "datetime_local" | _ => bt datatype prop_kind = Delete | Update diff --git a/src/urweb.lex b/src/urweb.lex index 15ae448e..0d316ed2 100644 --- a/src/urweb.lex +++ b/src/urweb.lex @@ -277,19 +277,19 @@ xint = x[0-9a-fA-F][0-9a-fA-F]; continue ()) end); - "<" {id} "/>"=>(let + "<" {xmlid} "/>"=>(let val tag = String.substring (yytext, 1, size yytext - 3) in Tokens.XML_BEGIN_END (tag, yypos, yypos + size yytext) end); - "<" {id} ">"=> (let + "<" {xmlid} ">"=> (let val tag = String.substring (yytext, 1, size yytext - 2) in YYBEGIN XML; xmlTag := tag :: (!xmlTag); Tokens.XML_BEGIN (tag, yypos, yypos + size yytext) end); - "" => (let + "" => (let val id = String.substring (yytext, 2, size yytext - 3) in case !xmlTag of @@ -304,7 +304,7 @@ xint = x[0-9a-fA-F][0-9a-fA-F]; Tokens.END_TAG (id, yypos, yypos + size yytext) end); - "<" {id} => (YYBEGIN XMLTAG; + "<" {xmlid} => (YYBEGIN XMLTAG; Tokens.BEGIN_TAG (String.extract (yytext, 1, NONE), yypos, yypos + size yytext)); diff --git a/tests/html5_forms.ur b/tests/html5_forms.ur index a9bf7f77..507ea3cf 100644 --- a/tests/html5_forms.ur +++ b/tests/html5_forms.ur @@ -6,6 +6,15 @@ fun handler r = return E: {[r.E]}
F: {[r.F]}
G: {[r.G]}
+ H: {[r.H]}
+ I: {[r.I]}
+ J: {[r.J]}
+ K: {[r.K]}
+ L: {[r.L]}
+ M: {[r.M]}
+ N: {[r.N]}
+ O: {[r.O]}
+ P: {[r.P]}
fun main () = @@ -19,6 +28,18 @@ fun main () = +
+ + + + + + + + + + +
-- cgit v1.2.3