summaryrefslogtreecommitdiffstats
path: root/install/ui
diff options
context:
space:
mode:
authorPetr Vobornik <pvoborni@redhat.com>2014-10-20 18:39:30 +0200
committerPetr Vobornik <pvoborni@redhat.com>2014-10-21 10:29:53 +0200
commit41a7d0bf472b21018715eedf0b4c56ccbeace1f1 (patch)
tree5e26121e2e368f89be6198bdfbbbecb869b76700 /install/ui
parent43f8de0c7661c4cc6102bed905535a6143e77995 (diff)
downloadfreeipa-41a7d0bf472b21018715eedf0b4c56ccbeace1f1.tar.gz
freeipa-41a7d0bf472b21018715eedf0b4c56ccbeace1f1.tar.xz
freeipa-41a7d0bf472b21018715eedf0b4c56ccbeace1f1.zip
webui: do not show closed dialog
Fixes issues when dialog is not removed from `IPA.opened_dialogs` registry when dialog.close() is called while the dialog is not shown, i.e., while other dialog is shown. Without it, the dialog is could be incorrectly displayed. New dialog's property `opened` handles whether dialog is intended to be opened. How to test: Add new host with IP address outside of managed reverse zones to get error 4304. https://fedorahosted.org/freeipa/ticket/4656 Reviewed-By: Endi Sukma Dewata <edewata@redhat.com>
Diffstat (limited to 'install/ui')
-rw-r--r--install/ui/src/freeipa/dialog.js18
1 files changed, 18 insertions, 0 deletions
diff --git a/install/ui/src/freeipa/dialog.js b/install/ui/src/freeipa/dialog.js
index c277518ac..6cac66794 100644
--- a/install/ui/src/freeipa/dialog.js
+++ b/install/ui/src/freeipa/dialog.js
@@ -239,6 +239,16 @@ IPA.dialog = function(spec) {
that.is_shown = false;
/**
+ * Whether dialog should be opened.
+ *
+ * The actual display state is reflected in `is_shown` property. Dialog can
+ * be `opened` and not `is_shown` at the same time, eg., when other dialog
+ * is displayed. Opposite is invalid state.
+ * @property {boolean}
+ */
+ that.opened = false;
+
+ /**
* Close dialog on Escape key press
* @property {boolean} close_on_escape=true
*/
@@ -556,6 +566,7 @@ IPA.dialog = function(spec) {
that.register_listeners();
+ this.opened = true;
this.emit('open', { source: that });
topic.publish('dialog.open', { source: that });
@@ -571,6 +582,7 @@ IPA.dialog = function(spec) {
* @param {Function} clb Show callback, called when showing is complete.
*/
that.show = function(clb) {
+ if (!this.opened) return;
that.is_shown = true;
this.dom_node.one('shown.bs.modal', clb);
@@ -648,6 +660,12 @@ IPA.dialog = function(spec) {
that.close = function() {
that.remove_listeners();
+ this.opened = false;
+
+ if (!this.is_shown) {
+ that.emit('closed', { source: that });
+ topic.publish('dialog.closed', { source: that });
+ }
if (!that.dom_node) return;