remove old fatalError(), move everything to App.Error

update exception dialog css
This commit is contained in:
Andrew Dolgov 2018-12-11 13:18:38 +03:00
parent 071ca5aa96
commit 7a98105960
8 changed files with 83 additions and 74 deletions

View File

@ -577,14 +577,21 @@ body.ttrss_main #feed_browser_spinner {
height: 18px; height: 18px;
width: 18px; width: 18px;
} }
body.ttrss_main .error-contents .message { body.ttrss_main #exceptionDlg .dijitDialogTitleBar {
background: red;
color: white;
}
body.ttrss_main #exceptionDlg .dijitDialogPaneContent {
background: #fcc;
}
body.ttrss_main #exceptionDlg .error-contents .message {
color: red; color: red;
} }
body.ttrss_main .error-contents textarea { body.ttrss_main #exceptionDlg .error-contents textarea {
width: 99%; width: 99%;
height: 200px; height: 200px;
} }
body.ttrss_main .error-contents .dlgButtons { body.ttrss_main #exceptionDlg .error-contents .dlgButtons {
text-align: center; text-align: center;
} }
body.ttrss_main #content-wrap { body.ttrss_main #content-wrap {

File diff suppressed because one or more lines are too long

View File

@ -676,17 +676,28 @@ body.ttrss_main {
width : 18px; width : 18px;
} }
.error-contents { #exceptionDlg {
.message { .dijitDialogTitleBar {
color : red; background : red;
color : white;
} }
textarea { .dijitDialogPaneContent {
width : 99%; background : #fcc;
height : 200px;
} }
.dlgButtons {
text-align : center; .error-contents {
.message {
color : red;
}
textarea {
width : 99%;
height : 200px;
}
.dlgButtons {
text-align : center;
}
} }
} }

View File

@ -191,17 +191,17 @@ define(["dojo/_base/declare"], function (declare) {
const reply = JSON.parse(transport.responseText); const reply = JSON.parse(transport.responseText);
if (reply) { if (reply) {
const error = reply['error']; const error = reply['error'];
if (error) { if (error) {
const code = error['code']; const code = error['code'];
const msg = error['msg']; const msg = error['message'];
console.warn("[handleRpcJson] received fatal error " + code + "/" + msg); console.warn("[handleRpcJson] received fatal error ", code, msg);
if (code != 0) { if (code != 0) {
fatalError(code, msg); /* global ERRORS */
this.Error.fatal(ERRORS[code], {info: msg, code: code});
return false; return false;
} }
} }
@ -299,18 +299,22 @@ define(["dojo/_base/declare"], function (declare) {
PluginHost.run(PluginHost.HOOK_RUNTIME_INFO_LOADED, data); PluginHost.run(PluginHost.HOOK_RUNTIME_INFO_LOADED, data);
}, },
backendSanityCallback: function (transport) { backendSanityCallback: function (transport) {
const reply = JSON.parse(transport.responseText); const reply = JSON.parse(transport.responseText);
/* global ERRORS */
if (!reply) { if (!reply) {
fatalError(3, "Sanity check: invalid RPC reply", transport.responseText); this.Error.fatal(ERRORS[3], {info: transport.responseText});
return; return;
} }
const error_code = reply['error']['code']; if (reply['error']) {
const code = reply['error']['code'];
if (error_code && error_code != 0) { if (code && code != 0) {
return fatalError(error_code, reply['error']['message']); return this.Error.fatal(ERRORS[code],
{code: code, info: reply['error']['message']});
}
} }
console.log("sanity check ok"); console.log("sanity check ok");
@ -387,6 +391,22 @@ define(["dojo/_base/declare"], function (declare) {
return this.displayDlg(__("Error explained"), "explainError", code); return this.displayDlg(__("Error explained"), "explainError", code);
}, },
Error: { Error: {
fatal: function (error, params) {
params = params || {};
if (params.code) {
if (params.code == 6) {
window.location.href = "index.php";
return;
} else if (params.code == 5) {
window.location.href = "public.php?op=dbupdate";
return;
}
}
return this.report(error,
Object.extend({title: __("Fatal error")}, params));
},
report: function(error, params) { report: function(error, params) {
params = params || {}; params = params || {};
@ -414,10 +434,19 @@ define(["dojo/_base/declare"], function (declare) {
if (dijit.byId("exceptionDlg")) if (dijit.byId("exceptionDlg"))
dijit.byId("exceptionDlg").destroyRecursive(); dijit.byId("exceptionDlg").destroyRecursive();
let stack_msg = "";
if (error.stack)
stack_msg += `<div><b>Stack trace:</b></div>
<textarea name="stack" readonly="1">${error.stack}</textarea>`;
if (params.info)
stack_msg += `<div><b>Additional information:</b></div>
<textarea name="stack" readonly="1">${params.info}</textarea>`;
let content = `<div class="error-contents"> let content = `<div class="error-contents">
<p class="message">${message}</p> <p class="message">${message}</p>
<div><b>Stack trace:</b></div> ${stack_msg}
<textarea name="stack" readonly="1">${error.stack}</textarea>
<div class="dlgButtons"> <div class="dlgButtons">
<button dojoType="dijit.form.Button" <button dojoType="dijit.form.Button"
onclick=\"dijit.byId('exceptionDlg').hide()">${__('Close this window')}</button> onclick=\"dijit.byId('exceptionDlg').hide()">${__('Close this window')}</button>
@ -426,7 +455,7 @@ define(["dojo/_base/declare"], function (declare) {
const dialog = new dijit.Dialog({ const dialog = new dijit.Dialog({
id: "exceptionDlg", id: "exceptionDlg",
title: "Unhandled exception", title: params.title || __("Unhandled exception"),
style: "width: 600px", style: "width: 600px",
content: content content: content
}); });

View File

@ -246,51 +246,6 @@ function displayIfChecked(checkbox, elemId) {
} }
} }
function fatalError(code, msg, ext_info) {
if (code == 6) {
window.location.href = "index.php";
} else if (code == 5) {
window.location.href = "public.php?op=dbupdate";
} else {
if (msg == "") msg = "Unknown error";
if (ext_info) {
if (ext_info.responseText) {
ext_info = ext_info.responseText;
}
}
/* global ERRORS */
if (ERRORS && ERRORS[code] && !msg) {
msg = ERRORS[code];
}
let content = `<div><b>Error code:</b> ${code} </div>
<p>${msg}</p>`;
if (ext_info) {
content = content + `<div><b>Additional information:</b></div>
<textarea style='width: 100%' readonly="1">${ext_info}</textarea>`;
}
content += `<div style='text-align : center'>
<button dojoType="dijit.form.Button" onclick="window.location.reload()">
${__('Try again')}</button></div>`;
const dialog = new dijit.Dialog({
title: "Fatal error",
style: "width: 600px",
content: content});
dialog.show();
}
return false;
}
/* function strip_tags(s) { /* function strip_tags(s) {
return s.replace(/<\/?[^>]+(>|$)/g, ""); return s.replace(/<\/?[^>]+(>|$)/g, "");
} */ } */

View File

@ -103,7 +103,7 @@ require(["dojo/_base/kernel",
}); });
if (errorMsg) { if (errorMsg) {
fatalError(4, errorMsg, navigator.userAgent); this.Error.fatal(errorMsg, {info: navigator.userAgent});
} }
return errorMsg == ""; return errorMsg == "";

View File

@ -577,14 +577,21 @@ body.ttrss_main #feed_browser_spinner {
height: 18px; height: 18px;
width: 18px; width: 18px;
} }
body.ttrss_main .error-contents .message { body.ttrss_main #exceptionDlg .dijitDialogTitleBar {
background: red;
color: white;
}
body.ttrss_main #exceptionDlg .dijitDialogPaneContent {
background: #fcc;
}
body.ttrss_main #exceptionDlg .error-contents .message {
color: red; color: red;
} }
body.ttrss_main .error-contents textarea { body.ttrss_main #exceptionDlg .error-contents textarea {
width: 99%; width: 99%;
height: 200px; height: 200px;
} }
body.ttrss_main .error-contents .dlgButtons { body.ttrss_main #exceptionDlg .error-contents .dlgButtons {
text-align: center; text-align: center;
} }
body.ttrss_main #content-wrap { body.ttrss_main #content-wrap {

File diff suppressed because one or more lines are too long