summaryrefslogtreecommitdiffstats
path: root/install/ui/details.js
diff options
context:
space:
mode:
Diffstat (limited to 'install/ui/details.js')
-rw-r--r--install/ui/details.js54
1 files changed, 50 insertions, 4 deletions
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<fields.length; i++) {
@@ -235,10 +253,12 @@ IPA.details_facet = function(spec) {
that.sections = $.ordered_map();
+ that.dirty = false;
that.add_section = function(section) {
section.entity = that.entity;
that.sections.put(section.name, section);
+ section.dirty_changed.attach(that.section_dirty_changed);
return section;
};
@@ -297,9 +317,11 @@ IPA.details_facet = function(spec) {
name: 'reset',
label: IPA.messages.buttons.reset,
icon: 'reset-icon',
- 'class': 'details-reset',
+ 'class': 'details-reset action-button-disabled',
click: function() {
- that.reset();
+ if(!that.update_button.hasClass('action-button-disabled')) {
+ that.reset();
+ }
return false;
}
}).appendTo(that.controls);
@@ -308,9 +330,11 @@ IPA.details_facet = function(spec) {
name: 'update',
label: IPA.messages.buttons.update,
icon: 'update-icon',
- 'class': 'details-update',
+ 'class': 'details-update action-button-disabled',
click: function() {
- that.update();
+ if(!that.update_button.hasClass('action-button-disabled')) {
+ that.update();
+ }
return false;
}
}).appendTo(that.controls);
@@ -437,6 +461,16 @@ IPA.details_facet = function(spec) {
return pkey != that.pkey;
};
+ that.section_dirty_changed = function(dirty) {
+ if(dirty) {
+ that.dirty = true;
+ } else {
+ that.dirty = that.is_dirty();
+ }
+
+ that.enable_update(that.dirty);
+ };
+
that.is_dirty = function() {
var sections = that.sections.values;
for (var i=0; i<sections.length; i++) {
@@ -447,6 +481,16 @@ IPA.details_facet = function(spec) {
return false;
};
+ that.enable_update = function(value) {
+ if(value) {
+ that.reset_button.removeClass('action-button-disabled');
+ that.update_button.removeClass('action-button-disabled');
+ } else {
+ that.reset_button.addClass('action-button-disabled');
+ that.update_button.addClass('action-button-disabled');
+ }
+ };
+
that.load = function(data) {
that.facet_load(data);
@@ -455,6 +499,7 @@ IPA.details_facet = function(spec) {
var section = sections[i];
section.load(data);
}
+ that.enable_update(false);
};
that.reset = function() {
@@ -463,6 +508,7 @@ IPA.details_facet = function(spec) {
var section = sections[i];
section.reset();
}
+ that.enable_update(false);
};
that.update = function(on_win, on_fail) {