aboutsummaryrefslogtreecommitdiff
path: root/ext/js
diff options
context:
space:
mode:
authortoasted-nutbread <toasted-nutbread@users.noreply.github.com>2022-02-20 09:35:54 -0500
committerGitHub <noreply@github.com>2022-02-20 09:35:54 -0500
commit48b2807120928654ae52ea78bd7d2d9824eaa05e (patch)
tree9732815074e7343fa38f8a6e91f7d8af9ab72b58 /ext/js
parent045eb63a52697b4436c935d4db1716762fef5eb8 (diff)
Add support for logging Anki errors on the settings page (#2073)
Diffstat (limited to 'ext/js')
-rw-r--r--ext/js/comm/anki.js4
-rw-r--r--ext/js/pages/settings/anki-controller.js11
2 files changed, 13 insertions, 2 deletions
diff --git a/ext/js/comm/anki.js b/ext/js/comm/anki.js
index 3254873f..54b12384 100644
--- a/ext/js/comm/anki.js
+++ b/ext/js/comm/anki.js
@@ -183,7 +183,7 @@ class AnkiConnect {
});
} catch (e) {
const error = new Error('Anki connection failure');
- error.data = {action, params};
+ error.data = {action, params, originalError: e};
throw error;
}
@@ -200,7 +200,7 @@ class AnkiConnect {
result = JSON.parse(responseText);
} catch (e) {
const error = new Error('Invalid Anki response');
- error.data = {action, params, status: response.status, responseText};
+ error.data = {action, params, status: response.status, responseText, originalError: e};
throw error;
}
diff --git a/ext/js/pages/settings/anki-controller.js b/ext/js/pages/settings/anki-controller.js
index a99f0f33..a7630d86 100644
--- a/ext/js/pages/settings/anki-controller.js
+++ b/ext/js/pages/settings/anki-controller.js
@@ -43,6 +43,7 @@ class AnkiController {
this._ankiErrorMessageDetailsToggle = null;
this._ankiErrorInvalidResponseInfo = null;
this._ankiCardPrimary = null;
+ this._ankiError = null;
this._validateFieldsToken = null;
}
@@ -70,6 +71,8 @@ class AnkiController {
input.addEventListener('change', this._onAnkiCardPrimaryTypeRadioChange.bind(this), false);
}
+ document.querySelector('#anki-error-log').addEventListener('click', this._onAnkiErrorLogLinkClick.bind(this));
+
const options = await this._settingsController.getOptions();
this._settingsController.on('optionsChanged', this._onOptionsChanged.bind(this));
this._onOptionsChanged({options});
@@ -184,6 +187,11 @@ class AnkiController {
this._setAnkiCardPrimaryType(node.dataset.value, node.dataset.ankiCardMenu);
}
+ _onAnkiErrorLogLinkClick() {
+ if (this._ankiError === null) { return; }
+ console.log({error: this._ankiError});
+ }
+
_setAnkiCardPrimaryType(ankiCardType, ankiCardMenu) {
if (this._ankiCardPrimary === null) { return; }
this._ankiCardPrimary.dataset.ankiCardType = ankiCardType;
@@ -296,9 +304,12 @@ class AnkiController {
this._ankiErrorMessageNode.textContent = (this._ankiConnect.enabled ? 'Connected' : 'Not enabled');
this._ankiErrorMessageNode.classList.remove('danger-text');
this._ankiErrorMessageDetailsNode.textContent = '';
+ this._ankiError = null;
}
_showAnkiError(error) {
+ this._ankiError = error;
+
let errorString = typeof error === 'object' && error !== null ? error.message : null;
if (!errorString) { errorString = `${error}`; }
if (!/[.!?]$/.test(errorString)) { errorString += '.'; }