[Kimchi-devel] [PATCH v2] Issue#349: Software Update Grid Keeps Loading when Error Returns
Aline Manera
alinefm at linux.vnet.ibm.com
Tue Mar 25 02:01:52 UTC 2014
Reviewed-by: Aline Manera <alinefm at linux.vnet.ibm.com>
On 03/24/2014 07:28 AM, Hongliang Wang wrote:
> Software update grid keeps loading on UI when server returns 500 error.
> Instead, we shall remove the loading UI and add a message UI to let the
> user know something is wrong, as well as add a button to allow the user
> retry.
>
> v1 -> v2:
> 2a) Made message more user-friendly and informative
> (Aline's comment)
>
> Signed-off-by: Hongliang Wang <hlwang at linux.vnet.ibm.com>
> ---
> ui/css/theme-default/grid.css | 20 +++++++++++++
> ui/js/src/kimchi.api.js | 4 +--
> ui/js/src/kimchi.grid.js | 66 +++++++++++++++++++++++++++++++++----------
> ui/js/src/kimchi.host.js | 11 +++++++-
> ui/pages/i18n.html.tmpl | 5 ++++
> 5 files changed, 87 insertions(+), 19 deletions(-)
>
> diff --git a/ui/css/theme-default/grid.css b/ui/css/theme-default/grid.css
> index 44ae614..684dd7b 100644
> --- a/ui/css/theme-default/grid.css
> +++ b/ui/css/theme-default/grid.css
> @@ -239,3 +239,23 @@
> height: 48px;
> width: 49px;
> }
> +
> +.grid-message {
> + background: white;
> + box-sizing: border-box;
> + bottom: 0;
> + left: 0;
> + overflow: auto;
> + padding: .2em .5em;
> + position: absolute;
> + right: 0;
> + z-index: 5;
> +}
> +
> +.grid-message-text {
> + line-height: 25px;
> +}
> +
> +.retry-button {
> + margin: 0 1em;
> +}
> diff --git a/ui/js/src/kimchi.api.js b/ui/js/src/kimchi.api.js
> index 4310435..11f83df 100644
> --- a/ui/js/src/kimchi.api.js
> +++ b/ui/js/src/kimchi.api.js
> @@ -838,10 +838,8 @@ var kimchi = {
> }, 200);
> break;
> case 'finished':
> - suc(result);
> - break;
> case 'failed':
> - err(result);
> + suc(result);
> break;
> default:
> break;
> diff --git a/ui/js/src/kimchi.grid.js b/ui/js/src/kimchi.grid.js
> index 540f1ba..f35228d 100644
> --- a/ui/js/src/kimchi.grid.js
> +++ b/ui/js/src/kimchi.grid.js
> @@ -62,6 +62,18 @@ kimchi.widget.Grid = function(params) {
> '</div>',
> '</div>',
> '</div>',
> + '<div class="grid-message hidden">',
> + '<div class="grid-message-text">',
> + i18n['KCHGRD6002M'],
> + '<button class="retry-button btn-small">',
> + i18n['KCHGRD6003M'],
> + '</button>',
> + '</div>',
> + '<div class="detailed-title">',
> + i18n['KCHGRD6004M'],
> + '</div>',
> + '<div class="detailed-text"></div>',
> + '</div>',
> '</div>'
> ];
>
> @@ -161,6 +173,9 @@ kimchi.widget.Grid = function(params) {
> var maskNode = $('.grid-mask', gridNode);
> maskNode.css('top', captionHeight + 'px');
>
> + var messageNode = $('.grid-message', gridNode);
> + messageNode.css('top', captionHeight + 'px');
> +
> var fillBody = function(container, fields, data) {
> var tbody = ($('tbody', container).length && $('tbody', container))
> || $('<tbody></tbody>').appendTo(container);
> @@ -384,28 +399,49 @@ kimchi.widget.Grid = function(params) {
> $('body').on('mousemove', positionResizer);
> $('body').on('mouseup', endResizing);
>
> + this.showMessage = function(msg) {
> + $('.detailed-text', messageNode).text(msg);
> + $(messageNode).removeClass('hidden');
> + };
> +
> + this.hideMessage = function() {
> + $(messageNode).addClass('hidden');
> + };
> +
> this.destroy = function() {
> $('body').off('mousemove', positionResizer);
> $('body').off('mouseup', endResizing);
> };
>
> var data = params['data'];
> - if(!data) {
> - return;
> - }
> + var self = this;
> + var reload = function() {
> + if(!data) {
> + return;
> + }
>
> - if($.isArray(data)) {
> - this.setData(data);
> - return;
> - }
> + $(messageNode).addClass('hidden');
>
> - if($.isFunction(data)) {
> - var self = this;
> - var loadData = data;
> - maskNode.removeClass('hidden');
> - loadData(function(data) {
> + if($.isArray(data)) {
> self.setData(data);
> - maskNode.addClass('hidden');
> - });
> - }
> + return;
> + }
> +
> + if($.isFunction(data)) {
> + var loadData = data;
> + maskNode.removeClass('hidden');
> + loadData(function(data) {
> + self.setData(data);
> + maskNode.addClass('hidden');
> + });
> + }
> + };
> +
> + var reloadButton = $('.retry-button', gridNode);
> + $(reloadButton).on('click', function(event) {
> + reload();
> + });
> +
> + this.reload = reload;
> + reload();
> };
> diff --git a/ui/js/src/kimchi.host.js b/ui/js/src/kimchi.host.js
> index ae2ee7d..53a4541 100644
> --- a/ui/js/src/kimchi.host.js
> +++ b/ui/js/src/kimchi.host.js
> @@ -57,7 +57,9 @@ kimchi.host_main = function() {
> kimchi.topic('kimchi/softwareUpdated').publish({
> result: result
> });
> - }, function(result) {
> + }, function(error) {
> + var message = error && error['responseJSON'] && error['responseJSON']['reason'];
> + kimchi.message.error(message || i18n['KCHUPD6009M']);
> $(updateButton).text(i18n['KCHUPD6006M']).prop('disabled', false);
> }, reloadProgressArea);
> }
> @@ -100,6 +102,13 @@ kimchi.host_main = function() {
>
> var updateButton = $('#' + softwareUpdatesGridID + '-update-button');
> $(updateButton).prop('disabled', softwareUpdates.length === 0);
> + }, function(error) {
> + var message = error && error['responseJSON'] && error['responseJSON']['reason'];
> + if($.isFunction(gridCallback)) {
> + gridCallback([]);
> + }
> + softwareUpdatesGrid &&
> + softwareUpdatesGrid.showMessage(message || i18n['KCHUPD6008M']);
> });
> };
>
> diff --git a/ui/pages/i18n.html.tmpl b/ui/pages/i18n.html.tmpl
> index 2f47e50..9f7537f 100644
> --- a/ui/pages/i18n.html.tmpl
> +++ b/ui/pages/i18n.html.tmpl
> @@ -60,6 +60,9 @@ var i18n = {
> 'KCHAPI6006M': "$_("Warning")",
>
> 'KCHGRD6001M': "$_("Loading...")",
> + 'KCHGRD6002M': "$_("An error occurs while checking for packages update.")",
> + 'KCHGRD6003M': "$_("Retry")",
> + 'KCHGRD6004M': "$_("Detailed message:")",
>
> 'KCHTMPL6001W': "$_("No iso found")",
>
> @@ -87,6 +90,8 @@ var i18n = {
> 'KCHUPD6005M': "$_("Repository")",
> 'KCHUPD6006M': "$_("Update All")",
> 'KCHUPD6007M': "$_("Updating...")",
> + 'KCHUPD6008M': "$_("Failed to retrieve updates.")",
> + 'KCHUPD6009M': "$_("Failed to update package(s).")",
>
>
> 'KCHDR6001M': "$_("Debug report will be removed permanently and can't be recovered. Do you want to continue?")",
More information about the Kimchi-devel
mailing list