changeset 1731:27e731a65934

Include JavaScript files properly in error handler pages
author Adam Chlipala <adam@chlipala.net>
date Sat, 28 Apr 2012 12:00:35 -0400
parents 02533f681ad2
children 4a03aa3251cb
files src/cjr_print.sml tests/onerrorJs.ur tests/onerrorJs.urp tests/onerrorJs.urs
diffstat 4 files changed, 32 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/cjr_print.sml	Sat Apr 28 11:35:12 2012 -0400
+++ b/src/cjr_print.sml	Sat Apr 28 12:00:35 2012 -0400
@@ -2905,6 +2905,19 @@
         val app_js = OS.Path.joinDirFile {dir = Settings.getUrlPrefix (),
                                           file = "app." ^ timestamp ^ ".js"}
 
+        val allScripts =
+            let
+                val scripts =
+                    "<script type=\\\"text/javascript\\\" src=\\\""
+                    ^ app_js
+                    ^ "\\\"></script>\\n"
+            in
+                foldl (fn (x, scripts) =>
+                          scripts
+                          ^ "<script type=\\\"text/javascript\\\" src=\\\"" ^ x ^ "\\\"></script>\\n")
+                      scripts (Settings.getScripts ())
+            end
+
         fun p_page (ek, s, n, ts, ran, side, tellSig) =
             let
                 val (ts, defInputs, inputsVar, fields) =
@@ -3032,18 +3045,7 @@
                                         val scripts =
                                             case side of
                                                 ServerOnly => ""
-                                              | _ =>
-                                                let
-                                                    val scripts =
-                                                        "<script type=\\\"text/javascript\\\" src=\\\""
-                                                        ^ app_js
-                                                        ^ "\\\"></script>\\n"
-                                                in
-                                                    foldl (fn (x, scripts) =>
-                                                              scripts
-                                                              ^ "<script type=\\\"text/javascript\\\" src=\\\"" ^ x ^ "\\\"></script>\\n")
-                                                          scripts (Settings.getScripts ())
-                                                end
+                                              | _ => allScripts
                                     in
                                         string scripts
                                     end,
@@ -3129,6 +3131,7 @@
         val expunge = ref 0
         val initialize = ref 0
         val prepped = ref []
+        val hasJs = ref false
 
         val _ = foldl (fn (d, env) =>
                           ((case #1 d of
@@ -3136,6 +3139,7 @@
                                                                                       dbstring := x;
                                                                                       expunge := y;
                                                                                       initialize := z)
+                              | DJavaScript _ => hasJs := true
                               | DTable (s, xts, _, _) => tables := (s, map (fn (x, t) =>
                                                                                (x, sql_type_in env t)) xts) :: !tables
                               | DView (s, xts, _) => views := (s, map (fn (x, t) =>
@@ -3499,6 +3503,13 @@
                                 else
                                     box [string "uw_cutErrorLocation(msg);",
                                          newline],
+                                if !hasJs then
+                                    box [string "uw_set_script_header(ctx, \"",
+                                         string allScripts,
+                                         string "\");",
+                                         newline]
+                                else
+                                    box [],
                                 box [string "uw_write(ctx, ",
                                      p_enamed env n,
                                      string "(ctx, msg, 0));",
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/onerrorJs.ur	Sat Apr 28 12:00:35 2012 -0400
@@ -0,0 +1,4 @@
+fun main n =
+  case n of
+      0 => error <xml>Zero is bad! <button value="Capische?" onclick={alert "GOOD!"}/></xml>
+    | _ => return <xml/>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/onerrorJs.urp	Sat Apr 28 12:00:35 2012 -0400
@@ -0,0 +1,4 @@
+onError OnerrorE.err
+
+onerrorE
+onerrorJs
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/onerrorJs.urs	Sat Apr 28 12:00:35 2012 -0400
@@ -0,0 +1,1 @@
+val main : int -> transaction page