Don't deselect tags unnecessarily

https://forums.zotero.org/discussion/28842/

Related to 4e1fbf974
This commit is contained in:
Dan Stillman 2013-04-12 15:57:02 -04:00
parent ef3a5755f8
commit b01ae24f18

View file

@ -40,7 +40,8 @@
<field name="_notifierID">false</field> <field name="_notifierID">false</field>
<field name="_tags">null</field> <field name="_tags">null</field>
<field name="_dirty">null</field> <field name="_dirty">null</field>
<field name="_empty">null</field> <field name="_emptyColored">null</field>
<field name="_emptyRegular">null</field>
<field name="selection"/> <field name="selection"/>
<!-- Modes are predefined settings groups for particular tasks --> <!-- Modes are predefined settings groups for particular tasks -->
@ -206,7 +207,8 @@
} }
Zotero.debug('Refreshing tags selector'); Zotero.debug('Refreshing tags selector');
var empty = true; var emptyColored = true;
var emptyRegular = true;
var tagsToggleBox = this.id('tags-toggle'); var tagsToggleBox = this.id('tags-toggle');
var self = this; var self = this;
@ -340,7 +342,7 @@
labels[i].className = 'zotero-clicky'; labels[i].className = 'zotero-clicky';
labels[i].setAttribute('inScope', true); labels[i].setAttribute('inScope', true);
labels[i].setAttribute('hidden', false); labels[i].setAttribute('hidden', false);
empty = false; emptyRegular = false;
} }
else { else {
labels[i].className = ''; labels[i].className = '';
@ -360,14 +362,7 @@
} }
labels[i].setAttribute('hidden', false); labels[i].setAttribute('hidden', false);
empty = false; emptyRegular = false;
}
// If tag isn't in scope and is still selected, deselect it
if (labels[i].getAttribute('hidden') == 'true' && self.selection[name]) {
labels[i].setAttribute('selected', false);
delete self.selection[name];
var doCommand = true;
} }
// Always show colored tags at top, unless they // Always show colored tags at top, unless they
@ -375,7 +370,7 @@
if (colorData && (!self._search || inSearch)) { if (colorData && (!self._search || inSearch)) {
labels[i].setAttribute('hidden', false); labels[i].setAttribute('hidden', false);
labels[i].setAttribute('hasColor', true); labels[i].setAttribute('hasColor', true);
empty = false; emptyColored = false;
} }
else { else {
labels[i].removeAttribute('hasColor'); labels[i].removeAttribute('hasColor');
@ -451,15 +446,16 @@
//end tag cloud code //end tag cloud code
self.updateNumSelected(); self.updateNumSelected();
self._empty = empty; self._emptyColored = emptyColored;
self._emptyRegular = emptyRegular;
var empty = emptyColored && emptyRegular;
self.id('tags-toggle').setAttribute('collapsed', empty); self.id('tags-toggle').setAttribute('collapsed', empty);
self.id('no-tags-box').setAttribute('collapsed', !empty); self.id('no-tags-box').setAttribute('collapsed', !empty);
if (doCommand) { if (self.onRefresh) {
Zotero.debug('A selected tag went out of scope -- deselecting'); self.onRefresh();
self.doCommand(); self.onRefresh = null;
} }
}) })
.done(); .done();
@ -564,14 +560,22 @@
me.setSearch(false, true); me.setSearch(false, true);
} }
me._dirty = true; me._dirty = true;
me.doCommand();
// If no tags visible after a delete, deselect all // This is a hack, but set this to run after the refresh,
if ((event == 'remove' || event == 'delete') && // since _emptyRegular isn't set until then
me._empty && me.getNumSelected()) { me.onRefresh = function () {
Zotero.debug('No tags visible after delete -- deselecting all'); // If no regular tags visible after a delete, deselect all.
me.clearAll(); // This is necessary so that a selected tag that's removed
} // from its last item doesn't cause all regular tags to
// disappear without anything being visibly selected.
if ((event == 'remove' || event == 'delete') &&
me._emptyRegular && me.getNumSelected()) {
Zotero.debug('No tags visible after delete -- deselecting all');
me.clearAll();
}
};
me.doCommand();
}, 0); }, 0);
this._notified = true; this._notified = true;
]]> ]]>