From f0670d5a5a60c1bdda0277fcf74f2cf3f028c5b4 Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Sat, 2 Jan 2010 14:54:15 -0500 Subject: JavaScript urlification; more lenient export pattern in Corify; only include scripts in pages that use JavaScript --- lib/js/urweb.js | 4 ++++ src/cjr_print.sml | 22 +++++++++++++--------- src/corify.sml | 19 +++++++++---------- src/jscomp.sml | 13 ++++++++++++- 4 files changed, 38 insertions(+), 20 deletions(-) diff --git a/lib/js/urweb.js b/lib/js/urweb.js index 8d7f6e40..a5713bf0 100644 --- a/lib/js/urweb.js +++ b/lib/js/urweb.js @@ -691,6 +691,10 @@ function xhrFinished(xhr) { inFlight = remove(xhr, inFlight); } +function unurlify(parse, s) { + return parse(s); +} + function rc(prefix, uri, parse, k, needsSig) { uri = cat(prefix, uri); uri = flattenLocal(uri); diff --git a/src/cjr_print.sml b/src/cjr_print.sml index 2cfd0663..8c5a24b4 100644 --- a/src/cjr_print.sml +++ b/src/cjr_print.sml @@ -2591,15 +2591,19 @@ fun p_file env (ds, ps) = val scripts = case side of ServerOnly => "" - | _ => "\\n" - - val scripts = foldl (fn (x, scripts) => - scripts - ^ "\\n") - scripts (Settings.getScripts ()) + | _ => + let + val scripts = + "\\n" + in + foldl (fn (x, scripts) => + scripts + ^ "\\n") + scripts (Settings.getScripts ()) + end in string scripts end, diff --git a/src/corify.sml b/src/corify.sml index a1a5c745..2720f8db 100644 --- a/src/corify.sml +++ b/src/corify.sml @@ -964,16 +964,15 @@ fun corifyDecl mods (all as (d, loc : EM.span), st) = fun wrapSgi ((sgi, _), (wds, eds)) = case sgi of L.SgiVal (s, _, t as (L.TFun (dom, ran), _)) => - (case (#1 dom, #1 ran) of - (L.TRecord _, - L.CApp ((L.CModProj (basis, [], "transaction"), _), - ran' as - (L.CApp - ((L.CApp - ((L.CApp ((L.CModProj (basis', [], "xml"), _), - (L.CRecord (_, [((L.CName "Html", _), - _)]), _)), _), _), - _), _), _))) => + (case #1 ran of + L.CApp ((L.CModProj (basis, [], "transaction"), _), + ran' as + (L.CApp + ((L.CApp + ((L.CApp ((L.CModProj (basis', [], "xml"), _), + (L.CRecord (_, [((L.CName "Html", _), + _)]), _)), _), _), + _), _), _)) => let val ran = (L.TRecord (L.CRecord ((L.KType, loc), []), loc), loc) val ranT = (L.CApp ((L.CModProj (basis, [], "transaction"), loc), diff --git a/src/jscomp.sml b/src/jscomp.sml index ca20e71d..11d75a3a 100644 --- a/src/jscomp.sml +++ b/src/jscomp.sml @@ -869,10 +869,21 @@ fun process file = | EDml _ => unsupported "DML" | ENextval _ => unsupported "Nextval" | ESetval _ => unsupported "Nextval" - | EUnurlify _ => unsupported "EUnurlify" | EReturnBlob _ => unsupported "EUnurlify" | ERedirect _ => unsupported "ERedirect" + | EUnurlify (e, t) => + let + val (e, st) = jsE inner (e, st) + val (e', st) = unurlifyExp loc (t, st) + in + (strcat [str ("{c:\"f\",f:\"unurlify\",a:cons({c:\"c\",v:function(s){var t=s.split(\"/\");var i=0;return " + ^ e' ^ "}},cons("), + e, + str ",null))}"], + st) + end + | ESignalReturn e => let val (e, st) = jsE inner (e, st) -- cgit v1.2.3