Patch 618 fixes a bug.

Patches 680 and 681 were implemented along with it. They address pspacek's usability rant :).


[PATCH] 680 webui: show notification instead of modal dialog on validation error
[PATCH] 681 webui: fix required error notification in multivalued widget
[PATCH] 682 webui: focus invalid widget on validation error
--
Petr Vobornik
From 5c3fcd240d61f378a8bb7e8cd4c2129cd11930df Mon Sep 17 00:00:00 2001
From: Petr Vobornik <pvobo...@redhat.com>
Date: Wed, 25 Jun 2014 15:17:26 +0200
Subject: [PATCH] webui: focus invalid widget on validation error

---
 install/ui/src/freeipa/add.js     |  7 +++++--
 install/ui/src/freeipa/details.js |  4 +++-
 install/ui/src/freeipa/widget.js  | 22 ++++++++++++++++++++++
 3 files changed, 30 insertions(+), 3 deletions(-)

diff --git a/install/ui/src/freeipa/add.js b/install/ui/src/freeipa/add.js
index a4b5d3649d2df2933cb7eb7c8a24a18b7b789f50..78f3890ad2320cbc3afd5cb9ae1e4ae2359d8023 100644
--- a/install/ui/src/freeipa/add.js
+++ b/install/ui/src/freeipa/add.js
@@ -20,7 +20,7 @@
 */
 
 define(['./ipa', './jquery', './navigation', './rpc', './text', './field', './widget', './dialog'],
-       function(IPA, $, navigation, rpc, text) {
+       function(IPA, $, navigation, rpc, text, field_mod, widget_mod) {
 
 /**
  * Entity adder dialog
@@ -219,7 +219,10 @@ IPA.entity_adder_dialog = function(spec) {
      */
     that.add = function(on_success, on_error) {
 
-        if (!that.validate()) return;
+        if (!that.validate()) {
+            widget_mod.focus_invalid(that);
+            return;
+        }
 
         var record = {};
         that.save(record);
diff --git a/install/ui/src/freeipa/details.js b/install/ui/src/freeipa/details.js
index ed057e98c14e8ee72e5f1596ed24599eb27abfa5..7aa4c0ef6541900d6fa5b14b16ec964b50349015 100644
--- a/install/ui/src/freeipa/details.js
+++ b/install/ui/src/freeipa/details.js
@@ -31,9 +31,10 @@ define([
         './rpc',
         './spec_util',
         './text',
+        './widget',
         './facet',
         './add'],
-    function(lang, builder, IPA, $, phases, reg, rpc, su, text) {
+    function(lang, builder, IPA, $, phases, reg, rpc, su, text, widget_mod) {
 
 /**
  * Details module
@@ -1436,6 +1437,7 @@ exp.update_action = IPA.update_action = function(spec) {
 
         if (!facet.validate()) {
             facet.show_validation_error();
+            widget_mod.focus_invalid(facet);
             return;
         }
 
diff --git a/install/ui/src/freeipa/widget.js b/install/ui/src/freeipa/widget.js
index 3d3f427af43e429124f5e19a2604bd443a6e39c8..ab86c72d1abfae87984fa2212040a3e6c63f2f31 100644
--- a/install/ui/src/freeipa/widget.js
+++ b/install/ui/src/freeipa/widget.js
@@ -5747,6 +5747,28 @@ exp.activity_widget = IPA.activity_widget = function(spec) {
 };
 
 /**
+ * Find and focus first focusable invalid widget
+ * @member widget
+ * @param {IPA.widget|facet.facet} widget Widget container
+ * @return {boolean} A widget was focused
+ */
+exp.focus_invalid = function(widget) {
+
+    var widgets = widget.widgets.widgets;
+    var focused = false;
+    for (var i=0, l=widgets.length; i<l; i++) {
+        var w = widgets.values[i];
+        if (w.valid === false && w.focus_input) {
+            w.focus_input();
+            focused = true;
+        }
+        else if (w.widgets) focused = exp.focus_invalid(w);
+        if (focused) break;
+    }
+    return focused;
+};
+
+/**
  * pre_op operations for widgets
  * - sets facet and entity if present in context
  * @member widget
-- 
1.9.0

From 431dad35cbcb02351786fd75bd34aa86781d42fb Mon Sep 17 00:00:00 2001
From: Petr Vobornik <pvobo...@redhat.com>
Date: Wed, 25 Jun 2014 14:50:16 +0200
Subject: [PATCH] webui: fix required error notification in multivalued widget

---
 install/ui/src/freeipa/widget.js | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/install/ui/src/freeipa/widget.js b/install/ui/src/freeipa/widget.js
index a49c6282b1977008e80a9c02754df44de31c8b02..3d3f427af43e429124f5e19a2604bd443a6e39c8 100644
--- a/install/ui/src/freeipa/widget.js
+++ b/install/ui/src/freeipa/widget.js
@@ -909,7 +909,7 @@ IPA.multivalued_widget = function(spec) {
         var old = that.valid;
         that.valid = result.valid;
 
-        if (!result.valid && result.errors) {
+        if (!result.valid && result.results) {
             var offset = 0;
             for (var i=0; i<that.rows.length; i++) {
 
@@ -928,10 +928,9 @@ IPA.multivalued_widget = function(spec) {
                 var error_link = that.get_error_link();
                 error_link.css('display', 'none');
                 error_link.html('');
-            } else {
-                that.show_error(result.message);
             }
-
+        } else if (!result.valid) {
+            that.show_error(result.message);
         } else {
             that.hide_error();
         }
-- 
1.9.0

From 65ce6fcd7578e0dbe03adf1ba8b9ae3fc67c09bb Mon Sep 17 00:00:00 2001
From: Petr Vobornik <pvobo...@redhat.com>
Date: Wed, 25 Jun 2014 14:49:26 +0200
Subject: [PATCH] webui: show notification instead of modal dialog on
 validation error

---
 install/ui/src/freeipa/details.js | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/install/ui/src/freeipa/details.js b/install/ui/src/freeipa/details.js
index b7fa3646921dd8a3229d1bb397373d808877fa17..ed057e98c14e8ee72e5f1596ed24599eb27abfa5 100644
--- a/install/ui/src/freeipa/details.js
+++ b/install/ui/src/freeipa/details.js
@@ -930,12 +930,7 @@ exp.details_facet = IPA.details_facet = function(spec, no_init) {
      * @protected
      */
     that.show_validation_error = function() {
-        var dialog = IPA.message_dialog({
-            name: 'validation_error',
-            title: '@i18n:dialogs.validation_title',
-            message: '@i18n:dialogs.validation_message'
-        });
-        dialog.open();
+        IPA.notify('@i18n:dialogs.validation_message', 'error');
     };
 
     /**
-- 
1.9.0

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to