diff --git a/install/ui/details.js b/install/ui/details.js index a0a44e7b2..4f7e4a29a 100644 --- a/install/ui/details.js +++ b/install/ui/details.js @@ -40,6 +40,9 @@ IPA.details_section = function(spec) { that.entity = spec.entity; that.fields = $.ordered_map(); + that.dirty = false; + that.dirty_changed = IPA.observer(); + that.get_field = function(name) { return that.fields.get(name); }; @@ -47,6 +50,7 @@ IPA.details_section = function(spec) { that.add_field = function(field) { field.entity = that.entity; that.fields.put(field.name, field); + field.dirty_changed.attach(that.field_dirty_changed); return field; }; @@ -117,6 +121,20 @@ IPA.details_section = function(spec) { } }; + that.field_dirty_changed = function(dirty) { + var old = that.dirty; + + if(dirty) { + that.dirty = true; + } else { + that.dirty = that.is_dirty(); + } + + if(old !== that.dirty) { + that.dirty_changed.notify([that.dirty], that); + } + }; + that.is_dirty = function() { var fields = that.fields.values; for (var i=0; i