In a details page, usually any changes done to the fields will not be
applied until the user clicks the Update button. However, if the page
contains an association table, any addition/deletion to the table will
be applied immediately.
To avoid any confusion, the user is now required to save or reset all
changes to the page before modifying the association. A dialog box will
appear if the page contains any unsaved changes.
--
Endi S. Dewata
From e3e26e9dae6ad228c6bbbe98e649e3e0abbd2131 Mon Sep 17 00:00:00 2001
From: Endi S. Dewata edew...@redhat.com
Date: Wed, 23 Feb 2011 12:35:45 -0600
Subject: [PATCH] Save changes before modifying association.
In a details page, usually any changes done to the fields will not be
applied until the user clicks the Update button. However, if the page
contains an association table, any addition/deletion to the table will
be applied immediately.
To avoid any confusion, the user is now required to save or reset all
changes to the page before modifying the association. A dialog box will
appear if the page contains any unsaved changes.
---
install/ui/associate.js | 42 --
install/ui/ipa.js |4 +-
install/ui/test/data/i18n_messages.json |3 +-
install/ui/test/data/ipa_init.json |3 +-
ipalib/plugins/internal.py |7 +++--
5 files changed, 49 insertions(+), 10 deletions(-)
diff --git a/install/ui/associate.js b/install/ui/associate.js
index 600cd55c3abb99f810c8e322da83262c21b5e2c3..2f1a28d5a66e989d562c3605fa335763bcd00324 100644
--- a/install/ui/associate.js
+++ b/install/ui/associate.js
@@ -351,6 +351,28 @@ IPA.association_table_widget = function (spec) {
that.table_setup(container);
+var dialog = $('div/', {
+html: IPA.messages.dialogs.dirty_message
+}).appendTo(container);
+
+var buttons = {};
+
+buttons[IPA.messages.buttons.ok] = function() {
+dialog.dialog('close');
+};
+
+dialog.dialog({
+autoOpen: false,
+title: IPA.messages.dialogs.dirty_title,
+modal: true,
+width: '20em',
+buttons: buttons
+});
+
+var entity = IPA.get_entity(that.entity_name);
+var facet_name = IPA.current_facet(entity);
+var facet = entity.get_facet(facet_name);
+
var button = $('input[name=remove]', container);
button.replaceWith(IPA.action_button({
'label': button.val(),
@@ -359,7 +381,13 @@ IPA.association_table_widget = function (spec) {
if ($(this).hasClass('action-button-disabled')) {
return false;
}
-that.show_remove_dialog();
+
+if (facet.is_dirty()) {
+dialog.dialog('open');
+} else {
+that.show_remove_dialog();
+}
+
return false;
}
}));
@@ -369,8 +397,16 @@ IPA.association_table_widget = function (spec) {
'label': button.val(),
'icon': 'ui-icon-plus',
'click': function() {
-if ($(this).hasClass('action-button-disabled')) return false;
-that.show_add_dialog();
+if ($(this).hasClass('action-button-disabled')) {
+return false;
+}
+
+if (facet.is_dirty()) {
+dialog.dialog('open');
+} else {
+that.show_add_dialog();
+}
+
return false;
}
}));
diff --git a/install/ui/ipa.js b/install/ui/ipa.js
index 2c07d742a71b3e0428eac0637fc75f5fc0419280..ec15332f4a3d56fd54412bba99898b8e73986ef4 100644
--- a/install/ui/ipa.js
+++ b/install/ui/ipa.js
@@ -137,7 +137,7 @@ var IPA = ( function () {
var facet = IPA.current_entity.facets_by_name[facet_name];
if (facet.is_dirty()){
var message_box = $(div/,{
-html: IPA.messages.dirty
+html: IPA.messages.dialogs.dirty_message
}).
appendTo($(#navigation));
@@ -148,7 +148,7 @@ var IPA = ( function () {
};
message_box.dialog({
-title: 'Dirty',
+title: IPA.messages.dialogs.dirty_title,
modal:true,
width: '20em',
buttons: buttons
diff --git a/install/ui/test/data/i18n_messages.json b/install/ui/test/data/i18n_messages.json
index f5aa841ec1483618a3851871362477e2a6756241..076bdbf4c94694401f8079e1f5adfc189473dce4 100644
--- a/install/ui/test/data/i18n_messages.json
+++ b/install/ui/test/data/i18n_messages.json
@@ -42,12 +42,13 @@
},
dialogs: {
available: Available,
+dirty_message: This page has unsaved changes.