diff options
-rw-r--r-- | install/ui/widget.js | 59 |
1 files changed, 36 insertions, 23 deletions
diff --git a/install/ui/widget.js b/install/ui/widget.js index 344d701c2..5277389ed 100644 --- a/install/ui/widget.js +++ b/install/ui/widget.js @@ -149,12 +149,13 @@ IPA.widget = function(spec) { } } }; + /** * This function compares the original values and the * values entered in the UI. If the values have changed * it will return true. */ - that.test_dirty = function(){ + that.test_dirty = function() { if (that.read_only) { return false; @@ -241,8 +242,8 @@ IPA.widget = function(spec) { }; that.reset = function() { - that.set_dirty(false); that.update(); + that.set_dirty(false); }; that.update = function() { @@ -328,6 +329,7 @@ IPA.widget = function(spec) { that.widget_reset = that.reset; that.widget_save = that.save; that.widget_set_dirty = that.set_dirty; + that.widget_test_dirty = that.test_dirty; return that; }; @@ -460,35 +462,40 @@ IPA.multivalued_text_widget = function(spec) { } }; - that.super_test_dirty = that.test_dirty; - - that.test_dirty = function(index){ + that.test_dirty = function(index) { if (index === undefined) { - return that.super_test_dirty(); + return that.widget_test_dirty(); } + var row = that.get_row(index); - var return_value = false; + var input = $('input[name="'+that.name+'"]', row); - $('input[name="'+that.name+'"]', row).each(function() { - var input = $(this); - if (input.is('.strikethrough')) return_value = true; - var value = input.val(); + if (input.is('.strikethrough')) { + return true; + } - if (value !== that.values[index]){ - return_value = true; - } - }); - return return_value; + var value = input.val(); + if (value !== that.values[index]) { + return true; + } + + return false; }; that.set_dirty = function(dirty, index) { - that.widget_set_dirty(dirty); + that.dirty = dirty; + if (that.undo) { if (dirty) { that.show_undo(index); } else { that.hide_undo(index); } + + if (index !== undefined) { + // update undo all + that.set_dirty(that.test_dirty()); + } } }; @@ -636,7 +643,7 @@ IPA.multivalued_text_widget = function(spec) { var index = that.row_index(row); // uncross removed value input.removeClass('strikethrough'); - that.set_dirty( that.test_dirty(index), index); + that.set_dirty(that.test_dirty(index), index); if (that.undo) { if (index < that.values.length) { remove_link.css('display', 'inline'); @@ -655,7 +662,8 @@ IPA.multivalued_text_widget = function(spec) { remove_link.css('display', 'none'); } else { // remove new value - row.remove(); + that.remove_row(index); + that.set_dirty(that.test_dirty()); } return false; }); @@ -664,12 +672,13 @@ IPA.multivalued_text_widget = function(spec) { var index = that.row_index(row); if (index < that.values.length) { // restore old value - that.reset(index); input.removeClass('strikethrough'); remove_link.css('display', 'inline'); + that.reset(index); } else { // remove new value - row.remove(); + that.remove_row(index); + that.set_dirty(that.test_dirty()); } }); } @@ -679,6 +688,10 @@ IPA.multivalued_text_widget = function(spec) { that.get_row(index).remove(); }; + that.remove_rows = function() { + that.get_rows().remove(); + }; + that.get_row = function(index) { return $('div[name=value]:eq('+index+')', that.container); }; @@ -692,8 +705,8 @@ IPA.multivalued_text_widget = function(spec) { }; that.reset = function(index) { - that.set_dirty(false, index); that.update(index); + that.set_dirty(false, index); }; that.update = function(index) { @@ -701,7 +714,7 @@ IPA.multivalued_text_widget = function(spec) { var value; if (index === undefined) { - $('div[name=value]', that.container).remove(); + that.remove_rows(); for (var i=0; i<that.values.length; i++) { value = that.values[i]; |