changeset 1111:e1d738870086

JavaScript urlification; more lenient export pattern in Corify; only include scripts in pages that use JavaScript
author Adam Chlipala <adamc@hcoop.net>
date Sat, 02 Jan 2010 14:54:15 -0500 (2010-01-02)
parents 7fc4e0087e50
children 7a31e0cf25e9
files lib/js/urweb.js src/cjr_print.sml src/corify.sml src/jscomp.sml
diffstat 4 files changed, 38 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/lib/js/urweb.js	Sat Jan 02 13:31:59 2010 -0500
+++ b/lib/js/urweb.js	Sat Jan 02 14:54:15 2010 -0500
@@ -691,6 +691,10 @@
   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);
--- a/src/cjr_print.sml	Sat Jan 02 13:31:59 2010 -0500
+++ b/src/cjr_print.sml	Sat Jan 02 14:54:15 2010 -0500
@@ -2591,15 +2591,19 @@
                                         val scripts =
                                             case side of
                                                 ServerOnly => ""
-                                              | _ => "<script src=\\\""
-                                                     ^ OS.Path.joinDirFile {dir = Settings.getUrlPrefix (),
-                                                                            file = "app.js"}
-                                                     ^ "\\\"></script>\\n"
-
-                                        val scripts = foldl (fn (x, scripts) =>
-                                                                scripts
-                                                                ^ "<script src=\\\"" ^ x ^ "\\\"></script>\\n")
-                                                      scripts (Settings.getScripts ())
+                                              | _ =>
+                                                let
+                                                    val scripts =
+                                                        "<script src=\\\""
+                                                        ^ OS.Path.joinDirFile {dir = Settings.getUrlPrefix (),
+                                                                               file = "app.js"}
+                                                        ^ "\\\"></script>\\n"
+                                                in
+                                                    foldl (fn (x, scripts) =>
+                                                              scripts
+                                                              ^ "<script src=\\\"" ^ x ^ "\\\"></script>\\n")
+                                                          scripts (Settings.getScripts ())
+                                                end
                                     in
                                         string scripts
                                     end,
--- a/src/corify.sml	Sat Jan 02 13:31:59 2010 -0500
+++ b/src/corify.sml	Sat Jan 02 14:54:15 2010 -0500
@@ -964,16 +964,15 @@
                          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),
--- a/src/jscomp.sml	Sat Jan 02 13:31:59 2010 -0500
+++ b/src/jscomp.sml	Sat Jan 02 14:54:15 2010 -0500
@@ -869,10 +869,21 @@
                           | 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)