(my first try didn't post....)

ok, here is a patch against current *trunk*.  this should never allow
you to remove the last item from the list.  note that when the list is
empty (showing one field with no data) the + and - buttons appear to be
no-op.

--



diff -r 4c55a243c4c2 gluon/sqlhtml.py
--- a/gluon/sqlhtml.py  Thu Dec 20 09:22:24 2012 -0600
+++ b/gluon/sqlhtml.py  Thu Dec 20 10:45:52 2012 -0800
@@ -263,18 +263,27 @@
 jQuery.fn.grow_input = function() {
   return this.each(function() {
     var ul = this;
-    jQuery(ul).find(":text").after('<a 
href="javascript:void(0)">+</a>').keypress(function (e) { return (e.which == 
13) ? pe(ul) : true; }).next().click(function(){ pe(ul) });
+    jQuery(ul).find(":text").after('<a href="javascript:void(0)">+</a>&nbsp;<a 
href="javascript:void(0)">-</a>').keypress(function (e) { return (e.which == 
13) ? pe(ul, e) : true; }).next().click(function(e){ pe(ul, e) 
}).next().click(function(e){ rl(ul, e)});
   });
 };
 function pe(ul, e) {
   var new_line = ml(ul);
   rel(ul);
-  new_line.appendTo(ul);
+  if ($(e.target).parent().is(':visible')) {
+    //make sure we didn't delete the element before we insert after
+    new_line.insertAfter($(e.target).parent());
+  } else {
+    //the line we clicked on was deleted, just add to end of list
+    new_line.appendTo(ul);
+  }
   new_line.find(":text").focus();
   return false;
 }
 function rl(ul, e) {
-  jQuery(e.target).parent().remove();
+  if (jQuery(ul).children().length > 1) {
+    //only remove if we have more than 1 item so the list is never empty
+    $(e.target).parent().remove();
+  }
 }
 function ml(ul) {
   var line = jQuery(ul).find("li:first").clone(true);

Reply via email to