summaryrefslogtreecommitdiffstats
path: root/install/ui
diff options
context:
space:
mode:
authorPetr Vobornik <pvoborni@redhat.com>2011-08-05 17:12:21 +0200
committerEndi S. Dewata <edewata@redhat.com>2011-08-05 19:14:19 +0000
commit08905eb9a9039b38c032275a87b4f5602e5a63dd (patch)
treea566ca2e61144a2d5d98b751f56c9af125b367e3 /install/ui
parent966fbd6485f3e2a1bc7fa4c3f96fcb435daa553d (diff)
downloadfreeipa-08905eb9a9039b38c032275a87b4f5602e5a63dd.tar.gz
freeipa-08905eb9a9039b38c032275a87b4f5602e5a63dd.tar.xz
freeipa-08905eb9a9039b38c032275a87b4f5602e5a63dd.zip
Fixed adding host without DNS reverse zone
https://fedorahosted.org/freeipa/ticket/1481 Shows status dialog instead of error dialog (error 4304 is treated like success). Refactored error dialog. Added generic message dialog (IPA.message_dialog) Modified core tests to work with dialog.
Diffstat (limited to 'install/ui')
-rw-r--r--install/ui/add.js17
-rw-r--r--install/ui/dialog.js32
-rw-r--r--install/ui/host.js42
-rw-r--r--install/ui/ipa.js115
-rw-r--r--install/ui/test/ipa_tests.html1
-rw-r--r--install/ui/test/ipa_tests.js23
6 files changed, 163 insertions, 67 deletions
diff --git a/install/ui/add.js b/install/ui/add.js
index 988ea8ff1..b4f1228f0 100644
--- a/install/ui/add.js
+++ b/install/ui/add.js
@@ -31,6 +31,9 @@ IPA.add_dialog = function (spec) {
that.method = spec.method || 'add';
that.pre_execute_hook = spec.pre_execute_hook;
+ that.on_error = spec.on_error ;
+ that.retry = typeof spec.retry !== 'undefined' ? spec.retry : true;
+ that.command = null;
function show_edit_page(entity,result){
var pkey_name = entity.metadata.primary_key;
@@ -51,9 +54,11 @@ IPA.add_dialog = function (spec) {
var command = IPA.command({
entity: that.entity.name,
method: that.method,
+ retry: that.retry,
on_success: on_success,
on_error: on_error
});
+ that.command = command;
pkey_prefix = that.entity.get_primary_key_prefix();
@@ -127,8 +132,8 @@ IPA.add_dialog = function (spec) {
var table = facet.table;
table.refresh();
that.close();
- }
- );
+ },
+ that.on_error);
});
that.add_button(IPA.messages.buttons.add_and_add_another, function() {
@@ -141,8 +146,8 @@ IPA.add_dialog = function (spec) {
var table = facet.table;
table.refresh();
that.reset();
- }
- );
+ },
+ that.on_error);
});
that.add_button(IPA.messages.buttons.add_and_edit, function() {
@@ -154,8 +159,8 @@ IPA.add_dialog = function (spec) {
that.close();
var result = data.result.result;
that.show_edit_page(that.entity,result);
- }
- );
+ },
+ that.on_error);
});
that.add_button(IPA.messages.buttons.cancel, function() {
diff --git a/install/ui/dialog.js b/install/ui/dialog.js
index 0a1d5428a..0ec84a786 100644
--- a/install/ui/dialog.js
+++ b/install/ui/dialog.js
@@ -32,6 +32,7 @@ IPA.dialog = function(spec) {
that.entity = spec.entity;
that.name = spec.name;
+ that.id = spec.id;
that.title = spec.title;
that.width = spec.width || 400;
that.height = spec.height;
@@ -194,7 +195,7 @@ IPA.dialog = function(spec) {
*/
that.open = function(container) {
- that.container = $('<div/>');
+ that.container = $('<div/>', { id : that.id });
if (container) {
container.append(that.container);
}
@@ -257,6 +258,7 @@ IPA.dialog = function(spec) {
that.dialog_create = that.create;
that.dialog_open = that.open;
+ that.dialog_close = that.close;
var fields = spec.fields || [];
for (var i=0; i<fields.length; i++) {
@@ -656,3 +658,31 @@ IPA.deleter_dialog = function (spec) {
return that;
};
+
+IPA.message_dialog = function(spec) {
+
+ var that = IPA.dialog(spec);
+
+ var init = function() {
+ spec = spec || {};
+ that.message = spec.message || '';
+ that.on_ok = spec.on_ok;
+ };
+
+ that.create = function() {
+ $('<p/>', {
+ 'text': that.message
+ }).appendTo(that.container);
+ };
+
+ that.add_button(IPA.messages.buttons.ok, function() {
+ that.close();
+ if(that.on_ok) {
+ that.on_ok();
+ }
+ });
+
+ init();
+
+ return that;
+};
diff --git a/install/ui/host.js b/install/ui/host.js
index b8e849211..743196b08 100644
--- a/install/ui/host.js
+++ b/install/ui/host.js
@@ -102,6 +102,7 @@ IPA.entity_factories.host = function () {
}).
standard_association_facets().
adder_dialog({
+ factory: IPA.host_adder_dialog,
width: 400,
height: 250,
fields:[
@@ -128,6 +129,47 @@ IPA.entity_factories.host = function () {
build();
};
+IPA.host_adder_dialog = function(spec)
+{
+ spec = spec || {};
+ spec.retry = typeof spec.retry !== 'undefined' ? spec.retry : false;
+
+ var that = IPA.add_dialog(spec);
+
+ that.on_error = function(xhr, text_status, error_thrown)
+ {
+ var command = that.command;
+ var data = error_thrown.data;
+ var dialog = null;
+
+ if(data && data.error && data.error.code === 4304) {
+ dialog = IPA.message_dialog({
+ message: data.error.message,
+ title: spec.title,
+ on_ok: function() {
+ data.result = {
+ result: {
+ fqdn: that.get_field('fqdn').save()
+ }
+ };
+ command.on_success(data, text_status, xhr);
+ }
+ });
+ } else {
+ dialog = IPA.error_dialog({
+ xhr: xhr,
+ text_status: text_status,
+ error_thrown: error_thrown,
+ command: command
+ });
+ }
+
+ dialog.open(that.container);
+ };
+
+ return that;
+};
+
IPA.host_deleter_dialog = function(spec) {
spec = spec || {};
diff --git a/install/ui/ipa.js b/install/ui/ipa.js
index 2f1c6969c..d53ee7b12 100644
--- a/install/ui/ipa.js
+++ b/install/ui/ipa.js
@@ -243,57 +243,13 @@ IPA.command = function(spec) {
that.execute = function() {
function dialog_open(xhr, text_status, error_thrown) {
-
- IPA.error_dialog = $('<div/>', {
- id: 'error_dialog'
- });
-
- if (error_thrown.url) {
- $('<p/>', {
- text: 'URL: '+error_thrown.url
- }).appendTo(IPA.error_dialog);
- }
-
- $('<p/>', {
- html: error_thrown.message
- }).appendTo(IPA.error_dialog);
-
- function close() {
- IPA.error_dialog.dialog('destroy');
- IPA.error_dialog.remove();
- IPA.error_dialog = null;
- }
-
- var buttons = {};
-
- /**
- * When a user initially opens the Web UI without a Kerberos
- * ticket, the messages including the button labels have not
- * been loaded yet, so the button labels need default values.
- */
- var label = IPA.messages.buttons ? IPA.messages.buttons.retry : 'Retry';
- buttons[label] = function() {
- close();
- that.execute();
- };
-
- label = IPA.messages.buttons ? IPA.messages.buttons.cancel : 'Cancel';
- buttons[label] = function() {
- close();
- if (that.on_error) {
- that.on_error.call(this, xhr, text_status, error_thrown);
- }
- };
-
- IPA.error_dialog.dialog({
- modal: true,
- title: error_thrown.name,
- width: 400,
- buttons: buttons,
- close: function() {
- close();
- }
+ var dialog = IPA.error_dialog({
+ xhr: xhr,
+ text_status: text_status,
+ error_thrown: error_thrown,
+ command: that
});
+ dialog.open();
}
function error_handler(xhr, text_status, error_thrown) {
@@ -331,6 +287,7 @@ IPA.command = function(spec) {
dialog_open.call(this, xhr, text_status, error_thrown);
} else if (that.on_error) {
+ //custom error handling, maintaining AJAX call's context
that.on_error.call(this, xhr, text_status, error_thrown);
}
}
@@ -349,11 +306,13 @@ IPA.command = function(spec) {
// error_handler() calls IPA.hide_activity_icon()
error_handler.call(this, xhr, text_status, /* error_thrown */ {
name: 'IPA Error '+data.error.code,
- message: data.error.message
+ message: data.error.message,
+ data: data
});
} else if (that.on_success) {
IPA.hide_activity_icon();
+ //custom success handling, maintaining AJAX call's context
that.on_success.call(this, data, text_status, xhr);
}
}
@@ -610,3 +569,57 @@ IPA.dirty_dialog = function(spec) {
return that;
};
+
+IPA.error_dialog = function(spec) {
+ var that = IPA.dialog(spec);
+
+ var init = function() {
+ spec = spec || {};
+
+ that.id = 'error_dialog';
+ that.xhr = spec.xhr || {};
+ that.text_status = spec.text_status || '';
+ that.error_thrown = spec.error_thrown || {};
+ that.command = spec.command;
+ that.title = spec.error_thrown.name;
+ };
+
+ that.create = function() {
+ if (that.error_thrown.url) {
+ $('<p/>', {
+ text: 'URL: '+that.error_thrown.url
+ }).appendTo(that.container);
+ }
+
+ $('<p/>', {
+ html: that.error_thrown.message
+ }).appendTo(that.container);
+ };
+
+ that.create_buttons = function() {
+ /**
+ * When a user initially opens the Web UI without a Kerberos
+ * ticket, the messages including the button labels have not
+ * been loaded yet, so the button labels need default values.
+ */
+ var label = IPA.messages.buttons ? IPA.messages.buttons.retry : 'Retry';
+
+ that.add_button(label, function() {
+ that.close();
+ that.command.execute();
+ });
+
+ label = IPA.messages.buttons ? IPA.messages.buttons.cancel : 'Cancel';
+ that.add_button(label, function() {
+ that.close();
+ if (that.command.retry && that.command.on_error) {
+ that.command.on_error(that.xhr, that.text_status, that.error_thrown);
+ }
+ });
+ };
+
+ init();
+ that.create_buttons();
+
+ return that;
+};
diff --git a/install/ui/test/ipa_tests.html b/install/ui/test/ipa_tests.html
index 8f8ab93ef..b3bf93b16 100644
--- a/install/ui/test/ipa_tests.html
+++ b/install/ui/test/ipa_tests.html
@@ -11,6 +11,7 @@
<script type="text/javascript" src="../jquery-ui.js"></script>
<script type="text/javascript" src="../jquery.ordered-map.js"></script>
<script type="text/javascript" src="../ipa.js"></script>
+ <script type="text/javascript" src="../dialog.js"></script>
<script type="text/javascript" src="ipa_tests.js"></script>
</head>
<body>
diff --git a/install/ui/test/ipa_tests.js b/install/ui/test/ipa_tests.js
index 72a32783f..079b022b3 100644
--- a/install/ui/test/ipa_tests.js
+++ b/install/ui/test/ipa_tests.js
@@ -162,8 +162,10 @@ test("Testing successful IPA.command().", function() {
"Checking ajax invocation counter"
);
+ var dialog = $('#error_dialog');
+
ok(
- !IPA.error_dialog,
+ dialog.length == 0,
"The dialog box is not created."
);
@@ -237,7 +239,8 @@ test("Testing unsuccessful IPA.command().", function() {
on_error: error_handler
}).execute();
- var dialog = IPA.error_dialog.parent('.ui-dialog');
+ var dialog = $('#error_dialog');
+ var ui_dialog = dialog.parent('.ui-dialog');
equals(
ajax_counter, 1,
@@ -245,7 +248,7 @@ test("Testing unsuccessful IPA.command().", function() {
);
ok(
- dialog.length == 1 && IPA.error_dialog.dialog('isOpen'),
+ ui_dialog.length == 1 && dialog.dialog('isOpen'),
"The dialog box is created and open."
);
@@ -255,7 +258,7 @@ test("Testing unsuccessful IPA.command().", function() {
);
// search the retry button from the beginning
- var retry = $('button', dialog).first();
+ var retry = $('button', ui_dialog).first();
retry.trigger('click');
equals(
@@ -270,8 +273,8 @@ test("Testing unsuccessful IPA.command().", function() {
// search the retry button from the beginning again because the dialog
// has been recreated
- dialog = IPA.error_dialog.parent('.ui-dialog');
- retry = $('button', dialog).first();
+ ui_dialog = $('#error_dialog').parent('.ui-dialog');
+ retry = $('button', ui_dialog).first();
retry.trigger('click');
equals(
@@ -286,8 +289,8 @@ test("Testing unsuccessful IPA.command().", function() {
// search the cancel button from the beginning because the dialog has
// been recreated
- dialog = IPA.error_dialog.parent('.ui-dialog');
- var cancel = $('button', dialog).first().next();
+ ui_dialog = $('#error_dialog').parent('.ui-dialog');
+ var cancel = $('button', ui_dialog).first().next();
cancel.trigger('click');
equals(
@@ -295,8 +298,10 @@ test("Testing unsuccessful IPA.command().", function() {
"Checking ajax invocation counter"
);
+ dialog = $('#error_dialog');
+
ok(
- !IPA.error_dialog,
+ dialog.length == 0,
"After cancel, the dialog box is closed."
);