diff --git a/chrome/content/zotero/containers/tagSelectorContainer.jsx b/chrome/content/zotero/containers/tagSelectorContainer.jsx
index a4839e8e9c..a1369b77f7 100644
--- a/chrome/content/zotero/containers/tagSelectorContainer.jsx
+++ b/chrome/content/zotero/containers/tagSelectorContainer.jsx
@@ -583,8 +583,12 @@ Zotero.TagSelector = class TagSelectorContainer extends React.PureComponent {
true
);
this.contextTag = tag;
- // Disable "Exclude tag" for disabled tags
+ // Disable options for disabled tags, mark if the tag is included vs excluded
+ let tagSelected = this.selectedTags.get(this.contextTag.name);
tagContextMenu.querySelector("#tag-menu-exclude-tag").disabled = tag.disabled;
+ tagContextMenu.querySelector("#tag-menu-exclude-tag").setAttribute("checked", tagSelected?.excluded);
+ tagContextMenu.querySelector("#tag-menu-include-tag").disabled = tag.disabled;
+ tagContextMenu.querySelector("#tag-menu-include-tag").setAttribute("checked", tagSelected && !tagSelected.excluded);
}
handleSettings = (ev) => {
@@ -595,9 +599,17 @@ Zotero.TagSelector = class TagSelectorContainer extends React.PureComponent {
handleTagSelected = (tag) => {
let selectedTags = this.selectedTags;
- if(selectedTags.has(tag)) {
+ let viaClick = true;
+ if (!tag) {
+ tag = this.contextTag.name;
+ viaClick = false;
+ }
+ // remove tag from selection on click or on context-menu selection if it is not excluded
+ if (selectedTags.has(tag) && (viaClick || !selectedTags.get(tag).excluded)) {
selectedTags.delete(tag);
- } else {
+ }
+ // otherwise, select the tag
+ else {
selectedTags.set(tag, {});
}
@@ -809,8 +821,14 @@ Zotero.TagSelector = class TagSelectorContainer extends React.PureComponent {
if (!tag) {
tag = this.contextTag.name;
}
- this.selectedTags.set(tag, { excluded: true })
- if (typeof(this.props.onSelection) === 'function') {
+ // If the tag is already excluded - remove it from selection
+ if (this.selectedTags.get(tag)?.excluded) {
+ this.selectedTags.delete(tag);
+ }
+ else {
+ this.selectedTags.set(tag, { excluded: true });
+ }
+ if (typeof (this.props.onSelection) === 'function') {
this.props.onSelection(this.selectedTags);
}
}
diff --git a/chrome/content/zotero/zoteroPane.xhtml b/chrome/content/zotero/zoteroPane.xhtml
index 533eeea0e7..4b0afebd11 100644
--- a/chrome/content/zotero/zoteroPane.xhtml
+++ b/chrome/content/zotero/zoteroPane.xhtml
@@ -1017,6 +1017,11 @@