summaryrefslogtreecommitdiffstats
path: root/install/ui/widget.js
diff options
context:
space:
mode:
Diffstat (limited to 'install/ui/widget.js')
-rw-r--r--install/ui/widget.js42
1 files changed, 42 insertions, 0 deletions
diff --git a/install/ui/widget.js b/install/ui/widget.js
index f3559a35b..1a0683546 100644
--- a/install/ui/widget.js
+++ b/install/ui/widget.js
@@ -62,6 +62,8 @@ IPA.widget = function(spec) {
that.dirty = false;
that.valid = true;
+ that.dirty_changed = IPA.observer();
+
function set_param_info(){
if (!that.param_info && that.entity){
@@ -296,6 +298,7 @@ IPA.widget = function(spec) {
};
that.set_dirty = function(dirty) {
+ var old = that.dirty;
that.dirty = dirty;
if (that.undo) {
if (dirty) {
@@ -304,6 +307,10 @@ IPA.widget = function(spec) {
that.hide_undo();
}
}
+
+ if(old !== dirty) {
+ that.dirty_changed.notify([], that);
+ }
};
that.get_undo = function() {
@@ -496,6 +503,7 @@ IPA.multivalued_text_widget = function(spec) {
};
that.set_dirty = function(dirty, index) {
+ var old = that.dirty;
that.dirty = dirty;
if (that.undo) {
@@ -510,6 +518,10 @@ IPA.multivalued_text_widget = function(spec) {
that.set_dirty(that.test_dirty());
}
}
+
+ if(old !== dirty) {
+ that.dirty_changed.notify([], that);
+ }
};
that.show_undo = function(index) {
@@ -1939,3 +1951,33 @@ IPA.button = function(spec) {
return button;
};
+IPA.observer = function(spec) {
+
+ var that = {};
+
+ that.listeners = [];
+
+ that.attach = function(callback) {
+ that.listeners.push(callback);
+ };
+
+ that.detach = function(callback) {
+ for(var i=0; i < that.listeners.length; i++) {
+ if(callback === that.listeners[i]) {
+ that.listeners.splice(i,1);
+ break;
+ }
+ }
+ };
+
+ that.notify = function(args, context) {
+ args = args || [];
+ context = context || this;
+
+ for(var i=0; i < that.listeners.length; i++) {
+ that.listeners[i].apply(context, args);
+ }
+ };
+
+ return that;
+};