Treat null templates as the default value

This commit is contained in:
toasted-nutbread 2019-12-14 16:59:44 -05:00
parent 024f969bfd
commit 3033fea31e
6 changed files with 27 additions and 10 deletions

View File

@ -321,6 +321,7 @@ class Backend {
async _onApiDefinitionAdd({definition, mode, context, optionsContext}) { async _onApiDefinitionAdd({definition, mode, context, optionsContext}) {
const options = await this.getOptions(optionsContext); const options = await this.getOptions(optionsContext);
const templates = Backend._getTemplates(options);
if (mode !== 'kanji') { if (mode !== 'kanji') {
await audioInject( await audioInject(
@ -339,19 +340,20 @@ class Backend {
); );
} }
const note = await dictNoteFormat(definition, mode, options); const note = await dictNoteFormat(definition, mode, options, templates);
return this.anki.addNote(note); return this.anki.addNote(note);
} }
async _onApiDefinitionsAddable({definitions, modes, optionsContext}) { async _onApiDefinitionsAddable({definitions, modes, optionsContext}) {
const options = await this.getOptions(optionsContext); const options = await this.getOptions(optionsContext);
const templates = Backend._getTemplates(options);
const states = []; const states = [];
try { try {
const notes = []; const notes = [];
for (const definition of definitions) { for (const definition of definitions) {
for (const mode of modes) { for (const mode of modes) {
const note = await dictNoteFormat(definition, mode, options); const note = await dictNoteFormat(definition, mode, options, templates);
notes.push(note); notes.push(note);
} }
} }
@ -672,6 +674,11 @@ class Backend {
return 'chrome'; return 'chrome';
} }
} }
static _getTemplates(options) {
const templates = options.anki.fieldTemplates;
return typeof templates === 'string' ? templates : profileOptionsGetDefaultFieldTemplates();
}
} }
Backend._messageHandlers = new Map([ Backend._messageHandlers = new Map([

View File

@ -310,7 +310,7 @@ function dictFieldSplit(field) {
return field.length === 0 ? [] : field.split(' '); return field.length === 0 ? [] : field.split(' ');
} }
async function dictFieldFormat(field, definition, mode, options, exceptions) { async function dictFieldFormat(field, definition, mode, options, templates, exceptions) {
const data = { const data = {
marker: null, marker: null,
definition, definition,
@ -329,7 +329,7 @@ async function dictFieldFormat(field, definition, mode, options, exceptions) {
} }
data.marker = marker; data.marker = marker;
try { try {
return await apiTemplateRender(options.anki.fieldTemplates, data, true); return await apiTemplateRender(templates, data, true);
} catch (e) { } catch (e) {
if (exceptions) { exceptions.push(e); } if (exceptions) { exceptions.push(e); }
return `{${marker}-render-error}`; return `{${marker}-render-error}`;
@ -357,7 +357,7 @@ dictFieldFormat.markers = new Set([
'url' 'url'
]); ]);
async function dictNoteFormat(definition, mode, options) { async function dictNoteFormat(definition, mode, options, templates) {
const note = {fields: {}, tags: options.anki.tags}; const note = {fields: {}, tags: options.anki.tags};
let fields = []; let fields = [];
@ -391,7 +391,7 @@ async function dictNoteFormat(definition, mode, options) {
} }
for (const name in fields) { for (const name in fields) {
note.fields[name] = await dictFieldFormat(fields[name], definition, mode, options); note.fields[name] = await dictFieldFormat(fields[name], definition, mode, options, templates);
} }
return note; return note;

View File

@ -326,7 +326,7 @@ function profileOptionsCreateDefaults() {
screenshot: {format: 'png', quality: 92}, screenshot: {format: 'png', quality: 92},
terms: {deck: '', model: '', fields: {}}, terms: {deck: '', model: '', fields: {}},
kanji: {deck: '', model: '', fields: {}}, kanji: {deck: '', model: '', fields: {}},
fieldTemplates: profileOptionsGetDefaultFieldTemplates() fieldTemplates: null
} }
}; };
} }

View File

@ -73,7 +73,9 @@ async function ankiTemplatesValidate(infoNode, field, mode, showSuccessResult, i
const definition = await ankiTemplatesValidateGetDefinition(text, optionsContext); const definition = await ankiTemplatesValidateGetDefinition(text, optionsContext);
if (definition !== null) { if (definition !== null) {
const options = await apiOptionsGet(optionsContext); const options = await apiOptionsGet(optionsContext);
result = await dictFieldFormat(field, definition, mode, options, exceptions); let templates = options.anki.fieldTemplates;
if (typeof templates !== 'string') { templates = profileOptionsGetDefaultFieldTemplates(); }
result = await dictFieldFormat(field, definition, mode, options, templates, exceptions);
} }
} catch (e) { } catch (e) {
exceptions.push(e); exceptions.push(e);

View File

@ -145,7 +145,11 @@ async function formWrite(options) {
$('#interface-server').val(options.anki.server); $('#interface-server').val(options.anki.server);
$('#screenshot-format').val(options.anki.screenshot.format); $('#screenshot-format').val(options.anki.screenshot.format);
$('#screenshot-quality').val(options.anki.screenshot.quality); $('#screenshot-quality').val(options.anki.screenshot.quality);
$('#field-templates').val(options.anki.fieldTemplates);
let templates = options.anki.fieldTemplates;
if (typeof templates !== 'string') { templates = profileOptionsGetDefaultFieldTemplates(); }
$('#field-templates').val(templates);
onAnkiTemplatesValidateCompile(); onAnkiTemplatesValidateCompile();
await onAnkiOptionsChanged(options); await onAnkiOptionsChanged(options);
@ -166,7 +170,9 @@ function formUpdateVisibility(options) {
if (options.general.debugInfo) { if (options.general.debugInfo) {
const temp = utilIsolate(options); const temp = utilIsolate(options);
temp.anki.fieldTemplates = '...'; if (typeof temp.anki.fieldTemplates === 'string') {
temp.anki.fieldTemplates = '...';
}
const text = JSON.stringify(temp, null, 4); const text = JSON.stringify(temp, null, 4);
$('#debug').text(text); $('#debug').text(text);
} }

View File

@ -88,6 +88,8 @@ function utilSetDifference(setA, setB) {
function utilStringHashCode(string) { function utilStringHashCode(string) {
let hashCode = 0; let hashCode = 0;
if (typeof string !== 'string') { return hashCode; }
for (let i = 0, charCode = string.charCodeAt(i); i < string.length; charCode = string.charCodeAt(++i)) { for (let i = 0, charCode = string.charCodeAt(i); i < string.length; charCode = string.charCodeAt(++i)) {
hashCode = ((hashCode << 5) - hashCode) + charCode; hashCode = ((hashCode << 5) - hashCode) + charCode;
hashCode |= 0; hashCode |= 0;