summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/js/data/anki-note-builder.js10
-rw-r--r--ext/js/display/display-anki.js3
-rw-r--r--ext/js/pages/settings/anki-templates-controller.js3
-rw-r--r--test/anki-note-builder.test.js9
-rw-r--r--test/mocks/template-renderer-proxy.js63
5 files changed, 14 insertions, 74 deletions
diff --git a/ext/js/data/anki-note-builder.js b/ext/js/data/anki-note-builder.js
index 9240c1d8..cdb06564 100644
--- a/ext/js/data/anki-note-builder.js
+++ b/ext/js/data/anki-note-builder.js
@@ -18,22 +18,22 @@
import {deferPromise} from '../core.js';
import {ExtensionError} from '../core/extension-error.js';
-import {TemplateRendererProxy} from '../templates/template-renderer-proxy.js';
import {yomitan} from '../yomitan.js';
import {AnkiUtil} from './anki-util.js';
export class AnkiNoteBuilder {
/**
* Initiate an instance of AnkiNoteBuilder.
- * @param {{japaneseUtil: import('../language/sandbox/japanese-util.js').JapaneseUtil}} details
+ * @param {import('../language/sandbox/japanese-util.js').JapaneseUtil} japaneseUtil
+ * @param {import('../templates/template-renderer-proxy.js').TemplateRendererProxy|import('../templates/sandbox/template-renderer.js').TemplateRenderer} templateRenderer
*/
- constructor({japaneseUtil}) {
+ constructor(japaneseUtil, templateRenderer) {
/** @type {import('../language/sandbox/japanese-util.js').JapaneseUtil} */
this._japaneseUtil = japaneseUtil;
/** @type {RegExp} */
this._markerPattern = AnkiUtil.cloneFieldMarkerPattern(true);
- /** @type {TemplateRendererProxy} */
- this._templateRenderer = new TemplateRendererProxy();
+ /** @type {import('../templates/template-renderer-proxy.js').TemplateRendererProxy|import('../templates/sandbox/template-renderer.js').TemplateRenderer} */
+ this._templateRenderer = templateRenderer;
/** @type {import('anki-note-builder').BatchedRequestGroup[]} */
this._batchedRequests = [];
/** @type {boolean} */
diff --git a/ext/js/display/display-anki.js b/ext/js/display/display-anki.js
index 322237da..423cdfdc 100644
--- a/ext/js/display/display-anki.js
+++ b/ext/js/display/display-anki.js
@@ -21,6 +21,7 @@ import {AnkiNoteBuilder} from '../data/anki-note-builder.js';
import {AnkiUtil} from '../data/anki-util.js';
import {PopupMenu} from '../dom/popup-menu.js';
import {querySelectorNotNull} from '../dom/query-selector.js';
+import {TemplateRendererProxy} from '../templates/template-renderer-proxy.js';
import {yomitan} from '../yomitan.js';
export class DisplayAnki {
@@ -39,7 +40,7 @@ export class DisplayAnki {
/** @type {?string} */
this._ankiFieldTemplatesDefault = null;
/** @type {AnkiNoteBuilder} */
- this._ankiNoteBuilder = new AnkiNoteBuilder({japaneseUtil});
+ this._ankiNoteBuilder = new AnkiNoteBuilder(japaneseUtil, new TemplateRendererProxy());
/** @type {?import('./display-notification.js').DisplayNotification} */
this._errorNotification = null;
/** @type {?EventListenerCollection} */
diff --git a/ext/js/pages/settings/anki-templates-controller.js b/ext/js/pages/settings/anki-templates-controller.js
index 03fda9ca..ac0cc9c2 100644
--- a/ext/js/pages/settings/anki-templates-controller.js
+++ b/ext/js/pages/settings/anki-templates-controller.js
@@ -20,6 +20,7 @@ import {ExtensionError} from '../../core/extension-error.js';
import {AnkiNoteBuilder} from '../../data/anki-note-builder.js';
import {querySelectorNotNull} from '../../dom/query-selector.js';
import {JapaneseUtil} from '../../language/sandbox/japanese-util.js';
+import {TemplateRendererProxy} from '../../templates/template-renderer-proxy.js';
import {yomitan} from '../../yomitan.js';
export class AnkiTemplatesController {
@@ -54,7 +55,7 @@ export class AnkiTemplatesController {
/** @type {?import('./modal.js').Modal} */
this._fieldTemplateResetModal = null;
/** @type {AnkiNoteBuilder} */
- this._ankiNoteBuilder = new AnkiNoteBuilder({japaneseUtil: new JapaneseUtil(null)});
+ this._ankiNoteBuilder = new AnkiNoteBuilder(new JapaneseUtil(null), new TemplateRendererProxy());
}
/** */
diff --git a/test/anki-note-builder.test.js b/test/anki-note-builder.test.js
index bdf3f8e4..35db5107 100644
--- a/test/anki-note-builder.test.js
+++ b/test/anki-note-builder.test.js
@@ -21,17 +21,16 @@
import {readFileSync} from 'fs';
import {fileURLToPath} from 'node:url';
import path from 'path';
-import {describe, vi} from 'vitest';
+import {describe} from 'vitest';
import {parseJson} from '../dev/json.js';
import {AnkiNoteBuilder} from '../ext/js/data/anki-note-builder.js';
import {JapaneseUtil} from '../ext/js/language/sandbox/japanese-util.js';
+import {AnkiTemplateRenderer} from '../ext/js/templates/sandbox/anki-template-renderer.js';
import {createTranslatorTest} from './fixtures/translator-test.js';
import {createFindOptions} from './utilities/translator.js';
const dirname = path.dirname(fileURLToPath(import.meta.url));
-vi.mock('../ext/js/templates/template-renderer-proxy.js', async () => await import('../test/mocks/template-renderer-proxy.js'));
-
/**
* @param {'terms'|'kanji'} type
* @returns {string[]}
@@ -112,6 +111,8 @@ async function getRenderResults(dictionaryEntries, type, mode, template, expect)
fields.push([marker, `{${marker}}`]);
}
+ const ankiTemplateRenderer = new AnkiTemplateRenderer();
+ await ankiTemplateRenderer.prepare();
const japaneseUtil = new JapaneseUtil(null);
const clozePrefix = 'cloze-prefix';
const clozeSuffix = 'cloze-suffix';
@@ -128,7 +129,7 @@ async function getRenderResults(dictionaryEntries, type, mode, template, expect)
}
break;
}
- const ankiNoteBuilder = new AnkiNoteBuilder({japaneseUtil});
+ const ankiNoteBuilder = new AnkiNoteBuilder(japaneseUtil, ankiTemplateRenderer.templateRenderer);
const context = {
url: 'url:',
sentence: {
diff --git a/test/mocks/template-renderer-proxy.js b/test/mocks/template-renderer-proxy.js
deleted file mode 100644
index 106cdb35..00000000
--- a/test/mocks/template-renderer-proxy.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2023 Yomitan Authors
- * Copyright (C) 2021-2022 Yomichan Authors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- */
-
-import {AnkiTemplateRenderer} from '../../ext/js/templates/sandbox/anki-template-renderer.js';
-
-export class TemplateRendererProxy {
- constructor() {
- /** @type {?Promise<void>} */
- this._preparePromise = null;
- /** @type {AnkiTemplateRenderer} */
- this._ankiTemplateRenderer = new AnkiTemplateRenderer();
- }
-
- /**
- * @param {string} template
- * @param {import('template-renderer').PartialOrCompositeRenderData} data
- * @param {import('anki-templates').RenderMode} type
- * @returns {Promise<import('template-renderer').RenderResult>}
- */
- async render(template, data, type) {
- await this._prepare();
- return this._ankiTemplateRenderer.templateRenderer.render(template, data, type);
- }
-
- /**
- * @param {import('template-renderer').RenderMultiItem[]} items
- * @returns {Promise<import('core').Response<import('template-renderer').RenderResult>[]>}
- */
- async renderMulti(items) {
- await this._prepare();
- return this._ankiTemplateRenderer.templateRenderer.renderMulti(items);
- }
-
- /**
- * @returns {Promise<void>}
- */
- _prepare() {
- if (this._preparePromise === null) {
- this._preparePromise = this._prepareInternal();
- }
- return this._preparePromise;
- }
-
- /** */
- async _prepareInternal() {
- await this._ankiTemplateRenderer.prepare();
- }
-}