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}) {
const options = await this.getOptions(optionsContext);
const templates = Backend._getTemplates(options);
if (mode !== 'kanji') {
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);
}
async _onApiDefinitionsAddable({definitions, modes, optionsContext}) {
const options = await this.getOptions(optionsContext);
const templates = Backend._getTemplates(options);
const states = [];
try {
const notes = [];
for (const definition of definitions) {
for (const mode of modes) {
const note = await dictNoteFormat(definition, mode, options);
const note = await dictNoteFormat(definition, mode, options, templates);
notes.push(note);
}
}
@ -672,6 +674,11 @@ class Backend {
return 'chrome';
}
}
static _getTemplates(options) {
const templates = options.anki.fieldTemplates;
return typeof templates === 'string' ? templates : profileOptionsGetDefaultFieldTemplates();
}
}
Backend._messageHandlers = new Map([

View File

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

View File

@ -326,7 +326,7 @@ function profileOptionsCreateDefaults() {
screenshot: {format: 'png', quality: 92},
terms: {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);
if (definition !== null) {
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) {
exceptions.push(e);

View File

@ -145,7 +145,11 @@ async function formWrite(options) {
$('#interface-server').val(options.anki.server);
$('#screenshot-format').val(options.anki.screenshot.format);
$('#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();
await onAnkiOptionsChanged(options);
@ -166,7 +170,9 @@ function formUpdateVisibility(options) {
if (options.general.debugInfo) {
const temp = utilIsolate(options);
temp.anki.fieldTemplates = '...';
if (typeof temp.anki.fieldTemplates === 'string') {
temp.anki.fieldTemplates = '...';
}
const text = JSON.stringify(temp, null, 4);
$('#debug').text(text);
}

View File

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