From 99c5f0511f697cc54a9de7994c3e6999c6fd119f Mon Sep 17 00:00:00 2001 From: Petr Vobornik Date: Jul 01 2014 08:19:46 +0000 Subject: webui: focus invalid widget on validation error Reviewed-By: Fraser Tweedale Reviewed-By: Endi Sukma Dewata --- diff --git a/install/ui/src/freeipa/add.js b/install/ui/src/freeipa/add.js index a4b5d36..78f3890 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 ed057e9..7aa4c0e 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 1db0052..ae1ada2 100644 --- a/install/ui/src/freeipa/widget.js +++ b/install/ui/src/freeipa/widget.js @@ -5756,6 +5756,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