changeset 1703:6f2f74cc4ead

Change ID generation scheme to conform to HTML standards (thanks to Edward Yang for the catch)
author Adam Chlipala <adam@chlipala.net>
date Fri, 16 Mar 2012 08:42:51 -0400
parents 06791667937e
children 21ecf340f05c
files lib/js/urweb.js src/c/urweb.c tests/id.ur
diffstat 3 files changed, 20 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/lib/js/urweb.js	Wed Mar 14 10:10:56 2012 -0400
+++ b/lib/js/urweb.js	Fri Mar 16 08:42:51 2012 -0400
@@ -1731,7 +1731,7 @@
 var nextId = 0;
 
 function fresh() {
-    return (--nextId).toString();
+    return "uw" + (--nextId);
 }
 
 
--- a/src/c/urweb.c	Wed Mar 14 10:10:56 2012 -0400
+++ b/src/c/urweb.c	Fri Mar 16 08:42:51 2012 -0400
@@ -3962,7 +3962,14 @@
 }
 
 uw_Basis_string uw_Basis_fresh(uw_context ctx) {
-  return uw_Basis_htmlifyInt(ctx, ctx->nextId++);
+  int len;
+  char *r;
+
+  uw_check_heap(ctx, 2+INTS_MAX);
+  r = ctx->heap.front;
+  sprintf(r, "uw%u%n", ctx->nextId++, &len);
+  ctx->heap.front += len+1;
+  return r;
 }
 
 uw_Basis_float uw_Basis_floatFromInt(uw_context ctx, uw_Basis_int n) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/id.ur	Fri Mar 16 08:42:51 2012 -0400
@@ -0,0 +1,11 @@
+fun main () : transaction page =
+    id1 <- fresh;
+    id2 <- fresh;
+    x <- source <xml/>;
+    return <xml><body>
+      <span id={id1}>Hi!</span>
+      <span id={id2}>Ho!</span>
+      <dyn signal={signal x}/>
+      <button value="Set" onclick={id <- fresh; set x <xml><span id={id}>He!</span></xml>}/>
+      <button value="Show" onclick={x <- get x; alert (show x)}/>
+    </body></xml>