aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/data/schemas/options-schema.json5
-rw-r--r--ext/js/data/anki-note-builder.js4
-rw-r--r--ext/js/data/options-util.js4
-rw-r--r--ext/js/display/display-anki.js5
-rw-r--r--ext/settings.html22
-rw-r--r--test/test-anki-note-builder.js1
-rw-r--r--test/test-options-util.js1
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&hellip;</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,