diff options
| author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2021-07-05 15:08:11 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-07-05 15:08:11 -0400 | 
| commit | da13a2ebff76f00a0338e2e9d8fb5e8f1587fade (patch) | |
| tree | c92b9b38631abd7a10a04756bc62092212406010 /ext/js/data | |
| parent | 0491de12d49bbf8da2b6688d9d419206a5b9a5c0 (diff) | |
DisplayAnki note requirements (#1799)
* Update how errors are collected from _formatField
* Expose requirements
Diffstat (limited to 'ext/js/data')
| -rw-r--r-- | ext/js/data/anki-note-builder.js | 27 | 
1 files changed, 19 insertions, 8 deletions
| diff --git a/ext/js/data/anki-note-builder.js b/ext/js/data/anki-note-builder.js index 4427c276..6077eec1 100644 --- a/ext/js/data/anki-note-builder.js +++ b/ext/js/data/anki-note-builder.js @@ -52,20 +52,27 @@ class AnkiNoteBuilder {              duplicateScopeCheckChildren = true;          } -        const errors = [];          const commonData = this._createData(dictionaryEntry, mode, context, resultOutputMode, glossaryLayoutMode, compactTags, injectedMedia);          const formattedFieldValuePromises = [];          for (const [, fieldValue] of fields) { -            const formattedFieldValuePromise = this._formatField(fieldValue, commonData, template, errors); +            const formattedFieldValuePromise = this._formatField(fieldValue, commonData, template);              formattedFieldValuePromises.push(formattedFieldValuePromise);          }          const formattedFieldValues = await Promise.all(formattedFieldValuePromises); +        const errors = []; +        const uniqueRequirements = new Map();          const noteFields = {};          for (let i = 0, ii = fields.length; i < ii; ++i) {              const fieldName = fields[i][0]; -            const formattedFieldValue = formattedFieldValues[i]; -            noteFields[fieldName] = formattedFieldValue; +            const {value, errors: fieldErrors, requirements} = formattedFieldValues[i]; +            noteFields[fieldName] = value; +            errors.push(...fieldErrors); +            for (const requirement of requirements) { +                const key = JSON.stringify(requirement); +                if (uniqueRequirements.has(key)) { continue; } +                uniqueRequirements.set(key, requirement); +            }          }          const note = { @@ -82,7 +89,7 @@ class AnkiNoteBuilder {                  }              }          }; -        return {note, errors}; +        return {note, errors, requirements: [...uniqueRequirements.values()]};      }      async getRenderingData({ @@ -113,10 +120,13 @@ class AnkiNoteBuilder {          };      } -    async _formatField(field, commonData, template, errors) { -        return await this._stringReplaceAsync(field, this._markerPattern, async (g0, marker) => { +    async _formatField(field, commonData, template) { +        const errors = []; +        const requirements = []; +        const value = await this._stringReplaceAsync(field, this._markerPattern, async (g0, marker) => {              try { -                const {result} = await this._renderTemplateBatched(template, commonData, marker); +                const {result, requirements: fieldRequirements} = await this._renderTemplateBatched(template, commonData, marker); +                requirements.push(...fieldRequirements);                  return result;              } catch (e) {                  const error = new Error(`Template render error for {${marker}}`); @@ -125,6 +135,7 @@ class AnkiNoteBuilder {                  return `{${marker}-render-error}`;              }          }); +        return {value, errors, requirements};      }      async _stringReplaceAsync(str, regex, replacer) { |