diff options
-rw-r--r-- | ext/data/schemas/options-schema.json | 5 | ||||
-rw-r--r-- | ext/js/data/anki-note-builder.js | 4 | ||||
-rw-r--r-- | ext/js/data/options-util.js | 4 | ||||
-rw-r--r-- | ext/js/display/display-anki.js | 5 | ||||
-rw-r--r-- | ext/settings.html | 22 | ||||
-rw-r--r-- | test/test-anki-note-builder.js | 1 | ||||
-rw-r--r-- | test/test-options-util.js | 1 |
7 files changed, 40 insertions, 2 deletions
diff --git a/ext/data/schemas/options-schema.json b/ext/data/schemas/options-schema.json index 9bdf8747..52e5fa1f 100644 --- a/ext/data/schemas/options-schema.json +++ b/ext/data/schemas/options-schema.json @@ -812,6 +812,7 @@ "terms", "kanji", "duplicateScope", + "duplicateScopeCheckAllModels", "checkForDuplicates", "fieldTemplates", "suspendNewCards", @@ -910,6 +911,10 @@ "default": "collection", "enum": ["collection", "deck", "deck-root"] }, + "duplicateScopeCheckAllModels": { + "type": "boolean", + "default": false + }, "checkForDuplicates": { "type": "boolean", "default": true diff --git a/ext/js/data/anki-note-builder.js b/ext/js/data/anki-note-builder.js index 621816d4..4bb3ddcb 100644 --- a/ext/js/data/anki-note-builder.js +++ b/ext/js/data/anki-note-builder.js @@ -41,6 +41,7 @@ class AnkiNoteBuilder { requirements=[], checkForDuplicates=true, duplicateScope='collection', + duplicateScopeCheckAllModels=false, resultOutputMode='split', glossaryLayoutMode='default', compactTags=false, @@ -98,7 +99,8 @@ class AnkiNoteBuilder { duplicateScope, duplicateScopeOptions: { deckName: duplicateScopeDeckName, - checkChildren: duplicateScopeCheckChildren + checkChildren: duplicateScopeCheckChildren, + checkAllModels: duplicateScopeCheckAllModels } } }; diff --git a/ext/js/data/options-util.js b/ext/js/data/options-util.js index 36630e2f..d131d0c6 100644 --- a/ext/js/data/options-util.js +++ b/ext/js/data/options-util.js @@ -856,7 +856,11 @@ class OptionsUtil { // Handlebars templates updated to use new media format. // Added {selection-text} field marker. // Added {sentence-furigana} field marker. + // Added anki.duplicateScopeCheckAllModels. await this._applyAnkiFieldTemplatesPatch(options, '/data/templates/anki-field-templates-upgrade-v13.handlebars'); + for (const profile of options.profiles) { + profile.options.anki.duplicateScopeCheckAllModels = false; + } return options; } } diff --git a/ext/js/display/display-anki.js b/ext/js/display/display-anki.js index b08dc952..b2ed9ec3 100644 --- a/ext/js/display/display-anki.js +++ b/ext/js/display/display-anki.js @@ -42,6 +42,7 @@ class DisplayAnki { this._glossaryLayoutMode = 'default'; this._displayTags = 'never'; this._duplicateScope = 'collection'; + this._duplicateScopeCheckAllModels = false; this._screenshotFormat = 'png'; this._screenshotQuality = 100; this._scanLength = 10; @@ -142,7 +143,7 @@ class DisplayAnki { _onOptionsUpdated({options}) { const { general: {resultOutputMode, glossaryLayoutMode, compactTags}, - anki: {tags, duplicateScope, suspendNewCards, checkForDuplicates, displayTags, kanji, terms, screenshot: {format, quality}}, + anki: {tags, duplicateScope, duplicateScopeCheckAllModels, suspendNewCards, checkForDuplicates, displayTags, kanji, terms, screenshot: {format, quality}}, scanning: {length: scanLength} } = options; @@ -153,6 +154,7 @@ class DisplayAnki { this._glossaryLayoutMode = glossaryLayoutMode; this._displayTags = displayTags; this._duplicateScope = duplicateScope; + this._duplicateScopeCheckAllModels = duplicateScopeCheckAllModels; this._screenshotFormat = format; this._screenshotQuality = quality; this._scanLength = scanLength; @@ -561,6 +563,7 @@ class DisplayAnki { tags: this._noteTags, checkForDuplicates: this._checkForDuplicates, duplicateScope: this._duplicateScope, + duplicateScopeCheckAllModels: this._duplicateScopeCheckAllModels, resultOutputMode: this._resultOutputMode, glossaryLayoutMode: this._glossaryLayoutMode, compactTags: this._compactTags, diff --git a/ext/settings.html b/ext/settings.html index d392b0c0..7380b753 100644 --- a/ext/settings.html +++ b/ext/settings.html @@ -1495,6 +1495,28 @@ </div> <div class="settings-item-children settings-item-children-group" id="anki-card-duplicate-options" hidden> <div class="settings-item"> + <div class="settings-item-inner"> + <div class="settings-item-left"> + <div class="settings-item-label"> + Check for duplicates across all models + <a class="more-toggle more-only" data-parent-distance="4">(?)</a> + </div> + </div> + <div class="settings-item-right"> + <label class="toggle"><input type="checkbox" data-setting="anki.duplicateScopeCheckAllModels"><span class="toggle-body"><span class="toggle-track"></span><span class="toggle-knob"></span></span></label> + </div> + </div> + <div class="settings-item-children more" hidden> + <p> + By default, duplicate checks are only performed for notes created with the same model. + Enabling this option will check for duplicates across <em>all</em> model types. + </p> + <p> + <a class="more-toggle" data-parent-distance="3">Less…</a> + </p> + </div> + </div> + <div class="settings-item"> <div class="settings-item-inner settings-item-inner-wrappable"> <div class="settings-item-left"> <div class="settings-item-label"> diff --git a/test/test-anki-note-builder.js b/test/test-anki-note-builder.js index c7d91325..4433e3e6 100644 --- a/test/test-anki-note-builder.js +++ b/test/test-anki-note-builder.js @@ -236,6 +236,7 @@ async function getRenderResults(dictionaryEntries, type, mode, template, AnkiNot tags: ['yomichan'], checkForDuplicates: true, duplicateScope: 'collection', + duplicateScopeCheckAllModels: false, resultOutputMode: mode, glossaryLayoutMode: 'default', compactTags: false diff --git a/test/test-options-util.js b/test/test-options-util.js index 5c411c23..10881af9 100644 --- a/test/test-options-util.js +++ b/test/test-options-util.js @@ -444,6 +444,7 @@ function createProfileOptionsUpdatedTestData1() { terms: {deck: '', model: '', fields: {}}, kanji: {deck: '', model: '', fields: {}}, duplicateScope: 'collection', + duplicateScopeCheckAllModels: false, displayTags: 'never', checkForDuplicates: true, fieldTemplates: null, |