Use dependency injection for apiTemplateRender

This commit is contained in:
toasted-nutbread 2020-03-07 15:20:45 -05:00
parent 69cce49b0d
commit 7ac1c843a9
4 changed files with 11 additions and 12 deletions

View File

@ -16,10 +16,9 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/*global apiTemplateRender*/
class AnkiNoteBuilder {
constructor() {
constructor({renderTemplate}) {
this._renderTemplate = renderTemplate;
this._markers = new Set([
'audio',
'character',
@ -100,7 +99,7 @@ class AnkiNoteBuilder {
}
data.marker = marker;
try {
return await apiTemplateRender(templates, data);
return await this._renderTemplate(templates, data);
} catch (e) {
if (errors) { errors.push(e); }
return `{${marker}-render-error}`;

View File

@ -17,10 +17,6 @@
*/
function apiTemplateRender(template, data) {
return _apiInvoke('templateRender', {data, template});
}
function _apiInvoke(action, params={}) {
const data = {action, params};
return new Promise((resolve, reject) => {

View File

@ -31,7 +31,7 @@ class Backend {
this.anki = new AnkiNull();
this.mecab = new Mecab();
this.clipboardMonitor = new ClipboardMonitor({getClipboard: this._onApiClipboardGet.bind(this)});
this.ankiNoteBuilder = new AnkiNoteBuilder();
this.ankiNoteBuilder = new AnkiNoteBuilder({renderTemplate: this._renderTemplate.bind(this)});
this.options = null;
this.optionsSchema = null;
this.defaultAnkiFieldTemplates = null;
@ -507,7 +507,7 @@ class Backend {
}
async _onApiTemplateRender({template, data}) {
return handlebarsRenderDynamic(template, data);
return this._renderTemplate(template, data);
}
async _onApiCommandExec({command, params}) {
@ -811,6 +811,10 @@ class Backend {
definition.screenshotFileName = filename;
}
async _renderTemplate(template, data) {
return handlebarsRenderDynamic(template, data);
}
static _getTabUrl(tab) {
return new Promise((resolve) => {
chrome.tabs.sendMessage(tab.id, {action: 'getUrl'}, {frameId: 0}, (response) => {

View File

@ -18,7 +18,7 @@
/*global getOptionsContext, getOptionsMutable, settingsSaveOptions
ankiGetFieldMarkers, ankiGetFieldMarkersHtml
apiOptionsGet, apiTermsFind, apiGetDefaultAnkiFieldTemplates,
apiOptionsGet, apiTermsFind, apiGetDefaultAnkiFieldTemplates, apiTemplateRender
AnkiNoteBuilder*/
function onAnkiFieldTemplatesReset(e) {
@ -93,7 +93,7 @@ async function ankiTemplatesValidate(infoNode, field, mode, showSuccessResult, i
const options = await apiOptionsGet(optionsContext);
let templates = options.anki.fieldTemplates;
if (typeof templates !== 'string') { templates = await apiGetDefaultAnkiFieldTemplates(); }
const ankiNoteBuilder = new AnkiNoteBuilder();
const ankiNoteBuilder = new AnkiNoteBuilder({renderTemplate: apiTemplateRender});
result = await ankiNoteBuilder.formatField(field, definition, mode, options, templates, exceptions);
}
} catch (e) {