- Purge tags immediately on delete from tag selector

- Adds optional tagIDs parameter to Zotero.Tags.purge()
This commit is contained in:
Dan Stillman 2010-01-27 10:39:35 +00:00
parent 244c411c11
commit a5329880d7
2 changed files with 38 additions and 20 deletions

View File

@ -682,6 +682,7 @@
} }
Zotero.Tags.erase(tagIDs); Zotero.Tags.erase(tagIDs);
Zotero.Tags.purge(tagIDs);
Zotero.DB.commitTransaction() Zotero.DB.commitTransaction()
} }

View File

@ -399,20 +399,36 @@ Zotero.Tags = new function() {
} }
/* /**
* Delete obsolete tags from database and clear internal array entries * Delete obsolete tags from database and clear internal array entries
* *
* Returns removed tagIDs on success * @param [Integer[]|Integer] [tagIDs] tagID or array of tagIDs to purge
*/ */
function purge() { function purge(tagIDs) {
if (!Zotero.Prefs.get('purge.tags')) { if (!tagIDs && !Zotero.Prefs.get('purge.tags')) {
return; return;
} }
if (tagIDs) {
tagIDs = Zotero.flattenArguments(tagIDs);
}
Zotero.UnresponsiveScriptIndicator.disable(); Zotero.UnresponsiveScriptIndicator.disable();
try { try {
Zotero.DB.beginTransaction(); Zotero.DB.beginTransaction();
// Use given tags
if (tagIDs) {
var sql = "CREATE TEMPORARY TABLE tagDelete (tagID INT PRIMARY KEY)";
Zotero.DB.query(sql);
for each(var id in tagIDs) {
Zotero.DB.query("INSERT OR IGNORE INTO tagDelete VALUES (?)", id);
}
// Remove duplicates
var toDelete = Zotero.DB.columnQuery("SELECT * FROM tagDelete");
}
// Look for orphaned tags
else {
var sql = "CREATE TEMPORARY TABLE tagDelete AS " var sql = "CREATE TEMPORARY TABLE tagDelete AS "
+ "SELECT tagID FROM tags WHERE tagID " + "SELECT tagID FROM tags WHERE tagID "
+ "NOT IN (SELECT tagID FROM itemTags)"; + "NOT IN (SELECT tagID FROM itemTags)";
@ -431,6 +447,7 @@ Zotero.Tags = new function() {
Zotero.Prefs.set('purge.tags', false); Zotero.Prefs.set('purge.tags', false);
return; return;
} }
}
var notifierData = {}; var notifierData = {};