From 952234ef79e1431773d3f3f35d71a7a12a229d5f Mon Sep 17 00:00:00 2001 From: Petr Vobornik Date: Fri, 12 Apr 2013 17:21:24 +0200 Subject: Report phase errors https://fedorahosted.org/freeipa/ticket/3235 --- install/ui/src/freeipa/Application_controller.js | 29 ++++++++++++++++++------ install/ui/src/freeipa/_base/Phase_controller.js | 12 ++++++++-- 2 files changed, 32 insertions(+), 9 deletions(-) (limited to 'install/ui/src') diff --git a/install/ui/src/freeipa/Application_controller.js b/install/ui/src/freeipa/Application_controller.js index 8ce853e7..7f62159a 100644 --- a/install/ui/src/freeipa/Application_controller.js +++ b/install/ui/src/freeipa/Application_controller.js @@ -24,7 +24,8 @@ * Controls interaction between navigation, menu and facets. */ -define(['dojo/_base/declare', +define([ + 'dojo/_base/declare', 'dojo/_base/lang', 'dojo/_base/array', 'dojo/Deferred', @@ -32,6 +33,7 @@ define(['dojo/_base/declare', 'dojo/topic', 'dojo/query', 'dojo/dom-class', + './json2', './widgets/App', './ipa', './navigation/Menu', @@ -39,7 +41,7 @@ define(['dojo/_base/declare', './navigation/menu_spec' ], function(declare, lang, array, Deferred, on, topic, query, dom_class, - App_widget, IPA, Menu, Router, menu_spec) { + JSON, App_widget, IPA, Menu, Router, menu_spec) { /** * Main application @@ -176,11 +178,24 @@ define(['dojo/_base/declare', }, on_phase_error: function(error) { - // FIXME: CHANGE!!! - window.alert('Initialization error, have a coffee and relax.'); -// var container = $('#content').empty(); -// container.append('

Error: '+error_thrown.name+'

'); -// container.append('

'+error_thrown.message+'

'); + + window.console.error(error); + error = error || {}; + var name = error.name || 'Runtime error'; + var error_container = $('
', { + 'class': 'facet-content facet-error' + }).appendTo($('.content').empty()); + error_container.append('

'+name+'

'); + var details = $('
', { + 'class': 'error-details' + }).appendTo(error_container); + + details.append('

Web UI got in unrecoverable state during "'+error.phase+'" phase.

'); + + if (error.results) { + details.append('Technical details:'); + details.append('

'+JSON.stringify(error.results)+'

'); + } }, on_facet_change: function(event) { diff --git a/install/ui/src/freeipa/_base/Phase_controller.js b/install/ui/src/freeipa/_base/Phase_controller.js index 471c36a0..37334899 100644 --- a/install/ui/src/freeipa/_base/Phase_controller.js +++ b/install/ui/src/freeipa/_base/Phase_controller.js @@ -22,10 +22,11 @@ define([ 'dojo/_base/lang', 'dojo/_base/array', 'dojo/_base/declare', + 'dojo/Deferred', 'dojo/promise/all', 'dojo/topic', '../ordered-map' -], function(lang, array, declare, all, topic, ordered_map) { +], function(lang, array, declare, Deferred, all, topic, ordered_map) { var Phase_controller = declare(null, { @@ -76,7 +77,14 @@ define([ }); array.forEach(tasks, function(task) { - var promise = task.handler(); + var promise; + try { + promise = task.handler(); + } catch (e) { + var fail = new Deferred(); + fail.reject(e, true); + promise = fail.promise; + } promises.push(promise); }); -- cgit