Improve debug logging
This commit is contained in:
parent
1fd568ab8e
commit
26ea278c29
@ -187,6 +187,23 @@ input[type=checkbox].storage-button-checkbox {
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.error-data-show-button {
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: 0.5em;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.error-data-show-button:after {
|
||||||
|
content: "\2026";
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.error-data-container {
|
||||||
|
margin-top: 0.25em;
|
||||||
|
font-family: 'Courier New', Courier, monospace;
|
||||||
|
white-space: pre;
|
||||||
|
overflow-x: auto;
|
||||||
|
}
|
||||||
|
|
||||||
[data-show-for-browser],
|
[data-show-for-browser],
|
||||||
[data-show-for-operating-system] {
|
[data-show-for-operating-system] {
|
||||||
display: none;
|
display: none;
|
||||||
|
@ -36,8 +36,9 @@ async function requestJson(url, action, params) {
|
|||||||
const responseText = await requestText(url, action, params);
|
const responseText = await requestText(url, action, params);
|
||||||
try {
|
try {
|
||||||
return JSON.parse(responseText);
|
return JSON.parse(responseText);
|
||||||
}
|
} catch (e) {
|
||||||
catch (e) {
|
const error = new Error(`Invalid response (${e.message || e})`);
|
||||||
throw new Error('Invalid response');
|
error.data = {url, action, params, responseText};
|
||||||
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,13 +37,35 @@ function _ankiSetError(error) {
|
|||||||
if (error) {
|
if (error) {
|
||||||
node.hidden = false;
|
node.hidden = false;
|
||||||
node.textContent = `${error}`;
|
node.textContent = `${error}`;
|
||||||
}
|
_ankiSetErrorData(node, error);
|
||||||
else {
|
} else {
|
||||||
node.hidden = true;
|
node.hidden = true;
|
||||||
node.textContent = '';
|
node.textContent = '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function _ankiSetErrorData(node, error) {
|
||||||
|
const data = error.data;
|
||||||
|
let message = '';
|
||||||
|
if (typeof data !== 'undefined') {
|
||||||
|
message += `${JSON.stringify(data, null, 4)}\n\n`;
|
||||||
|
}
|
||||||
|
message += `${error.stack}`.trimRight();
|
||||||
|
|
||||||
|
const button = document.createElement('a');
|
||||||
|
button.className = 'error-data-show-button';
|
||||||
|
|
||||||
|
const content = document.createElement('div');
|
||||||
|
content.className = 'error-data-container';
|
||||||
|
content.textContent = message;
|
||||||
|
content.hidden = true;
|
||||||
|
|
||||||
|
button.addEventListener('click', () => content.hidden = !content.hidden, false);
|
||||||
|
|
||||||
|
node.appendChild(button);
|
||||||
|
node.appendChild(content);
|
||||||
|
}
|
||||||
|
|
||||||
function _ankiSetDropdownOptions(dropdown, optionValues) {
|
function _ankiSetDropdownOptions(dropdown, optionValues) {
|
||||||
const fragment = document.createDocumentFragment();
|
const fragment = document.createDocumentFragment();
|
||||||
for (const optionValue of optionValues) {
|
for (const optionValue of optionValues) {
|
||||||
|
@ -56,7 +56,8 @@ function errorToJson(error) {
|
|||||||
return {
|
return {
|
||||||
name: error.name,
|
name: error.name,
|
||||||
message: error.message,
|
message: error.message,
|
||||||
stack: error.stack
|
stack: error.stack,
|
||||||
|
data: error.data
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,6 +65,7 @@ function jsonToError(jsonError) {
|
|||||||
const error = new Error(jsonError.message);
|
const error = new Error(jsonError.message);
|
||||||
error.name = jsonError.name;
|
error.name = jsonError.name;
|
||||||
error.stack = jsonError.stack;
|
error.stack = jsonError.stack;
|
||||||
|
error.data = jsonError.data;
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,7 +76,11 @@ function logError(error, alert) {
|
|||||||
|
|
||||||
const errorString = `${error.toString ? error.toString() : error}`;
|
const errorString = `${error.toString ? error.toString() : error}`;
|
||||||
const stack = `${error.stack}`.trimRight();
|
const stack = `${error.stack}`.trimRight();
|
||||||
errorMessage += (!stack.startsWith(errorString) ? `${errorString}\n${stack}` : `${stack}`);
|
if (!stack.startsWith(errorString)) { errorMessage += `${errorString}\n`; }
|
||||||
|
errorMessage += stack;
|
||||||
|
|
||||||
|
const data = error.data;
|
||||||
|
if (typeof data !== 'undefined') { errorMessage += `\nData: ${JSON.stringify(data, null, 4)}`; }
|
||||||
|
|
||||||
errorMessage += '\n\nIssues can be reported at https://github.com/FooSoft/yomichan/issues';
|
errorMessage += '\n\nIssues can be reported at https://github.com/FooSoft/yomichan/issues';
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user