diff options
| author | Darius Jahandarie <djahandarie@gmail.com> | 2023-11-08 03:11:35 +0900 | 
|---|---|---|
| committer | Darius Jahandarie <djahandarie@gmail.com> | 2023-11-08 03:23:17 +0900 | 
| commit | 0f4d36938fd0d844f548aa5a7f7e7842df8dfb41 (patch) | |
| tree | 5b6be3620a557d0b9177047003f6d742d9d2a32d /ext/js | |
| parent | ef79eab44bfd000792c610b968b5ceefd41e76a0 (diff) | |
Switch to vitest for ESM support; other fixes
Diffstat (limited to 'ext/js')
| -rw-r--r-- | ext/js/app/content-script-wrapper.js | 3 | ||||
| -rw-r--r-- | ext/js/display/display.js | 2 | ||||
| -rw-r--r-- | ext/js/language/__mocks__/dictionary-importer-media-loader.js | 24 | ||||
| -rw-r--r-- | ext/js/language/dictionary-importer.js | 9 | ||||
| -rw-r--r-- | ext/js/templates/__mocks__/template-renderer-proxy.js | 80 | ||||
| -rw-r--r-- | ext/js/templates/sandbox/anki-template-renderer.js | 14 | 
6 files changed, 116 insertions, 16 deletions
| diff --git a/ext/js/app/content-script-wrapper.js b/ext/js/app/content-script-wrapper.js index ac921c19..795d3d8b 100644 --- a/ext/js/app/content-script-wrapper.js +++ b/ext/js/app/content-script-wrapper.js @@ -19,6 +19,5 @@  (async () => {      const src = chrome.runtime.getURL('js/app/content-script-main.js');      // eslint-disable-next-line no-unsanitized/method -    const contentMain = await import(src); -    contentMain.main(); +    await import(src);  })(); diff --git a/ext/js/display/display.js b/ext/js/display/display.js index 39e9b5f9..b86b877d 100644 --- a/ext/js/display/display.js +++ b/ext/js/display/display.js @@ -1652,6 +1652,8 @@ export class Display extends EventDispatcher {                  Object.assign(result, result2);              }          } + +        console.log(result);      }      _triggerContentClear() { diff --git a/ext/js/language/__mocks__/dictionary-importer-media-loader.js b/ext/js/language/__mocks__/dictionary-importer-media-loader.js new file mode 100644 index 00000000..96f0f6dd --- /dev/null +++ b/ext/js/language/__mocks__/dictionary-importer-media-loader.js @@ -0,0 +1,24 @@ +/* + * 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/>. + */ + +export class DictionaryImporterMediaLoader { +    async getImageDetails(content) { +        // Placeholder values +        return {content, width: 100, height: 100}; +    } +} diff --git a/ext/js/language/dictionary-importer.js b/ext/js/language/dictionary-importer.js index bb5ac300..791d1a77 100644 --- a/ext/js/language/dictionary-importer.js +++ b/ext/js/language/dictionary-importer.js @@ -17,7 +17,7 @@   */  import * as ajvSchemas from '../../lib/validate-schemas.js'; -import {BlobWriter, TextWriter, Uint8ArrayReader, ZipReader} from '../../lib/zip.js'; +import {BlobWriter, TextWriter, Uint8ArrayReader, ZipReader, configure} from '../../lib/zip.js';  import {stringReverse} from '../core.js';  import {MediaUtil} from '../media/media-util.js';  export class DictionaryImporter { @@ -37,6 +37,13 @@ export class DictionaryImporter {          this._progressReset(); +        configure({ +            workerScripts: { +                deflate: ['../../lib/z-worker.js'], +                inflate: ['../../lib/z-worker.js'] +            } +        }); +          // Read archive          const zipFileReader = new Uint8ArrayReader(new Uint8Array(archiveContent));          const zipReader = new ZipReader(zipFileReader); diff --git a/ext/js/templates/__mocks__/template-renderer-proxy.js b/ext/js/templates/__mocks__/template-renderer-proxy.js new file mode 100644 index 00000000..bcacf13b --- /dev/null +++ b/ext/js/templates/__mocks__/template-renderer-proxy.js @@ -0,0 +1,80 @@ +/* + * 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 '../sandbox/anki-template-renderer.js'; + +export class TemplateRendererProxy { +    constructor() { +        this._preparePromise = null; +        this._ankiTemplateRenderer = new AnkiTemplateRenderer(); +    } + +    async render(template, data, type) { +        await this._prepare(); +        return await this._ankiTemplateRenderer.templateRenderer.render(template, data, type); +    } + +    async renderMulti(items) { +        await this._prepare(); +        return await this._serializeMulti(this._ankiTemplateRenderer.templateRenderer.renderMulti(items)); +    } + +    _prepare() { +        if (this._preparePromise === null) { +            this._preparePromise = this._prepareInternal(); +        } +        return this._preparePromise; +    } + +    async _prepareInternal() { +        await this._ankiTemplateRenderer.prepare(); +    } + +    _serializeError(error) { +        try { +            if (typeof error === 'object' && error !== null) { +                const result = { +                    name: error.name, +                    message: error.message, +                    stack: error.stack +                }; +                if (Object.prototype.hasOwnProperty.call(error, 'data')) { +                    result.data = error.data; +                } +                return result; +            } +        } catch (e) { +            // NOP +        } +        return { +            value: error, +            hasValue: true +        }; +    } + +    _serializeMulti(array) { +        for (let i = 0, ii = array.length; i < ii; ++i) { +            const value = array[i]; +            const {error} = value; +            if (typeof error !== 'undefined') { +                value.error = this._serializeError(error); +            } +        } +        return array; +    } +} diff --git a/ext/js/templates/sandbox/anki-template-renderer.js b/ext/js/templates/sandbox/anki-template-renderer.js index d42402ff..10f69745 100644 --- a/ext/js/templates/sandbox/anki-template-renderer.js +++ b/ext/js/templates/sandbox/anki-template-renderer.js @@ -16,6 +16,7 @@   * along with this program.  If not, see <https://www.gnu.org/licenses/>.   */ +import {Handlebars} from '../../../lib/handlebars.js';  import {AnkiNoteDataCreator} from '../../data/sandbox/anki-note-data-creator.js';  import {PronunciationGenerator} from '../../display/sandbox/pronunciation-generator.js';  import {StructuredContentGenerator} from '../../display/sandbox/structured-content-generator.js'; @@ -26,19 +27,6 @@ import {AnkiTemplateRendererContentManager} from './anki-template-renderer-conte  import {TemplateRendererMediaProvider} from './template-renderer-media-provider.js';  import {TemplateRenderer} from './template-renderer.js'; -/* global - * AnkiNoteDataCreator - * AnkiTemplateRendererContentManager - * CssStyleApplier - * DictionaryDataUtil - * Handlebars - * JapaneseUtil - * PronunciationGenerator - * StructuredContentGenerator - * TemplateRenderer - * TemplateRendererMediaProvider - */ -  /**   * This class contains all Anki-specific template rendering functionality. It is built on   * the generic TemplateRenderer class and various other Anki-related classes. |