summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEndi S. Dewata <edewata@redhat.com>2011-02-23 12:35:45 -0600
committerAdam Young <ayoung@redhat.com>2011-03-02 12:26:24 -0500
commit697af3e1f8b4102df2bde5c7d04f8e7d4dad4369 (patch)
tree81ccaef5abec658748833695ee184a4f89fc2214
parentd37bb6f925cace69f15c8e548a69121bfb00be5e (diff)
downloadfreeipa-697af3e1f8b4102df2bde5c7d04f8e7d4dad4369.zip
freeipa-697af3e1f8b4102df2bde5c7d04f8e7d4dad4369.tar.gz
freeipa-697af3e1f8b4102df2bde5c7d04f8e7d4dad4369.tar.xz
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.
-rw-r--r--install/ui/associate.js42
-rw-r--r--install/ui/ipa.js4
-rw-r--r--install/ui/test/data/i18n_messages.json3
-rw-r--r--install/ui/test/data/ipa_init.json3
-rw-r--r--ipalib/plugins/internal.py7
5 files changed, 49 insertions, 10 deletions
diff --git a/install/ui/associate.js b/install/ui/associate.js
index 600cd55..2f1a28d 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 2c07d74..ec15332 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 11b02c8..cca68b9 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. Please save or revert.",
+ "dirty_title": "Dirty",
"hide_already_enrolled": "Hide already enrolled.",
"prospective": "Prospective",
"remove_empty": "Select ${entity} to be removed.",
"remove_title": "Remove ${entity}."
},
- "dirty": "This page has unsaved changes. Please save or revert.",
"facets": {
"details": "Settings",
"search": "Search"
diff --git a/install/ui/test/data/ipa_init.json b/install/ui/test/data/ipa_init.json
index 99f6a60..b819dab 100644
--- a/install/ui/test/data/ipa_init.json
+++ b/install/ui/test/data/ipa_init.json
@@ -9505,12 +9505,13 @@
},
"dialogs": {
"available": "Available",
+ "dirty_message": "This page has unsaved changes. Please save or revert.",
+ "dirty_title": "Dirty",
"hide_already_enrolled": "Hide already enrolled.",
"prospective": "Prospective",
"remove_empty": "Select ${entity} to be removed.",
"remove_title": "Remove ${entity}."
},
- "dirty": "This page has unsaved changes. Please save or revert.",
"facets": {
"details": "Settings",
"search": "Search"
diff --git a/ipalib/plugins/internal.py b/ipalib/plugins/internal.py
index 436867b..29e930c 100644
--- a/ipalib/plugins/internal.py
+++ b/ipalib/plugins/internal.py
@@ -332,10 +332,12 @@ class i18n_messages(Command):
"view":_("View"),
},
"dialogs":{
+ "available":_("Available"),
+ "dirty_message":_("This page has unsaved changes. Please save or revert."),
+ "dirty_title":_("Dirty"),
+ "hide_already_enrolled":_("Hide already enrolled."),
"remove_empty":_("Select ${entity} to be removed."),
"remove_title":_("Remove ${entity}."),
- "hide_already_enrolled":_("Hide already enrolled."),
- "available":_("Available"),
"prospective":_("Prospective"),
},
"facets":{
@@ -377,7 +379,6 @@ class i18n_messages(Command):
"ajax":{
"401":_("Your kerberos ticket is no longer valid. Please run kinit and then click 'Retry'. If this is your first time running the IPA Web UI <a href='/ipa/config/unauthorized.html'>follow these directions</a> to configure your browser.")
},
- "dirty":_("This page has unsaved changes. Please save or revert."),
}
has_output = (
Output('messages', dict, doc=_('Dict of I18N messages')),