# HG changeset patch # User Adam Chlipala # Date 1310738574 14400 # Node ID b2ca3e1e5b40b1419350a74faa72da5980982909 # Parent a77fa7e7bb7be4611516a5500136c49c519e24bf Fixes for detecting pastes and autocompletes for dynamic textboxes diff -r a77fa7e7bb7b -r b2ca3e1e5b40 lib/js/urweb.js --- a/lib/js/urweb.js Fri Jul 08 13:33:26 2011 -0400 +++ b/lib/js/urweb.js Fri Jul 15 10:02:54 2011 -0400 @@ -277,11 +277,13 @@ return {data : v, dyns : null}; } function sv(s, v) { - s.data = v; + if (s.data != v) { + s.data = v; - for (var ls = s.dyns; ls; ls = ls.next) - if (!ls.dead) - populate(ls.data); + for (var ls = s.dyns; ls; ls = ls.next) + if (!ls.dead) + populate(ls.data); + } } function sg(s) { return s.data; @@ -491,7 +493,7 @@ var x = input(document.createElement("input"), s, function(x) { return function(v) { if (x.value != v) x.value = v; }; }, null, name); x.value = s.data; - x.onkeyup = function() { sv(s, x.value) }; + x.onkeyup = x.oninput = x.onchange = x.onpropertychange = function() { sv(s, x.value) }; return x; } @@ -545,7 +547,7 @@ var x = input(document.createElement("textarea"), s, function(x) { return function(v) { if (x.innerHTML != v) x.innerHTML = v; }; }); x.innerHTML = s.data; - x.onkeyup = function() { sv(s, x.value) }; + x.onkeyup = x.oninput = x.onchange = x.onpropertychange = function() { sv(s, x.value) }; return x; } diff -r a77fa7e7bb7b -r b2ca3e1e5b40 tests/autocomp.ur --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/autocomp.ur Fri Jul 15 10:02:54 2011 -0400 @@ -0,0 +1,11 @@ +fun main () : transaction page = + a <- source ""; + b <- source ""; + return +
+ +