From 0ec1ed58efac64775abb51f4437e0b23b852d5b0 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Thu, 4 Jan 2007 14:00:10 +0000 Subject: [PATCH] Add new Notifier event types, 'collection-item' and 'item-tag', which send id pairs, e.g. adding tagID 2 to item id 1 would trigger ('add', 'item-tag', '1-2') Similarly, removing items from collections now uses collection-item remove instead of item remove This was done to prevent some problems that resulted from the tag selector using item modify events to update itself (which caused the items pane to refresh itself before itemTreeView.notify() got a chance to do the things it likes to do). This should also help out utility writers. --- .../content/zotero/bindings/tagselector.xml | 12 ++----- chrome/content/zotero/xpcom/data_access.js | 33 ++++++++++++++++--- chrome/content/zotero/xpcom/itemTreeView.js | 16 ++++----- chrome/content/zotero/xpcom/notifier.js | 6 ++-- 4 files changed, 41 insertions(+), 26 deletions(-) diff --git a/chrome/content/zotero/bindings/tagselector.xml b/chrome/content/zotero/bindings/tagselector.xml index c853f6ec1..54919e112 100644 --- a/chrome/content/zotero/bindings/tagselector.xml +++ b/chrome/content/zotero/bindings/tagselector.xml @@ -265,20 +265,14 @@ diff --git a/chrome/content/zotero/xpcom/data_access.js b/chrome/content/zotero/xpcom/data_access.js index 0b1cda510..e7c14b20e 100644 --- a/chrome/content/zotero/xpcom/data_access.js +++ b/chrome/content/zotero/xpcom/data_access.js @@ -1636,6 +1636,7 @@ Zotero.Item.prototype.addTagByID = function(tagID) { Zotero.DB.commitTransaction(); Zotero.Notifier.trigger('modify', 'item', this.getID()); + Zotero.Notifier.trigger('add', 'item-tag', this.getID() + '-' + tagID); return true; } @@ -1679,6 +1680,8 @@ Zotero.Item.prototype.replaceTag = function(oldTagID, newTag){ var id = this.addTag(newTag); Zotero.DB.commitTransaction(); Zotero.Notifier.trigger('modify', 'item', this.getID()); + Zotero.Notifier.trigger('remove', 'item-tag', this.getID() + '-' + oldTagID); + Zotero.Notifier.trigger('add', 'item-tag', this.getID() + '-' + id); return id; } @@ -1693,6 +1696,7 @@ Zotero.Item.prototype.removeTag = function(tagID){ Zotero.Tags.purge(); Zotero.DB.commitTransaction(); Zotero.Notifier.trigger('modify', 'item', this.getID()); + Zotero.Notifier.trigger('remove', 'item-tag', this.getID() + '-' + tagID); } Zotero.Item.prototype.removeAllTags = function(){ @@ -1701,10 +1705,18 @@ Zotero.Item.prototype.removeAllTags = function(){ } Zotero.DB.beginTransaction(); + var tagIDs = this.getTagIDs(); Zotero.DB.query("DELETE FROM itemTags WHERE itemID=?", this.getID()); Zotero.Tags.purge(); Zotero.DB.commitTransaction(); Zotero.Notifier.trigger('modify', 'item', this.getID()); + + if (tagIDs) { + for (var i in tagIDs) { + tagIDs[i] = this.getID() + '-' + tagIDs[i]; + } + Zotero.Notifier.trigger('remove', 'item-tag', tagIDs); + } } @@ -2643,7 +2655,7 @@ Zotero.Collection.prototype.addItem = function(itemID){ Zotero.Notifier.trigger('modify', 'collection', this.getID()); } - Zotero.Notifier.trigger('add', 'item', itemID); + Zotero.Notifier.trigger('add', 'collection-item', this.getID() + '-' + itemID); } @@ -2684,7 +2696,7 @@ Zotero.Collection.prototype.removeItem = function(itemID){ Zotero.Notifier.trigger('modify', 'collection', this.getID()); } - Zotero.Notifier.trigger('remove', 'item', itemID); + Zotero.Notifier.trigger('remove', 'collection-item', this.getID() + '-' + itemID); } @@ -3258,6 +3270,11 @@ Zotero.Tags = new function(){ Zotero.DB.commitTransaction(); Zotero.Notifier.trigger('modify', 'item', itemIDs); + var itemTags = []; + for (var i in itemIDs) { + itemTags.push(itemIDs[i] + '-' + tagID); + } + Zotero.Notifier.trigger('modify', 'item-tag', itemTags); Zotero.Notifier.trigger('modify', 'tag', tagID); } @@ -3266,15 +3283,21 @@ Zotero.Tags = new function(){ Zotero.DB.beginTransaction(); var sql = "SELECT itemID FROM itemTags WHERE tagID=?"; - var items = Zotero.DB.columnQuery(sql, tagID); + var itemIDs = Zotero.DB.columnQuery(sql, tagID); - if (!items) { + if (!itemIDs) { return; } var sql = "DELETE FROM itemTags WHERE tagID=?"; Zotero.DB.query(sql, tagID); - Zotero.Notifier.trigger('modify', 'item', items) + + Zotero.Notifier.trigger('modify', 'item', itemIDs) + var itemTags = []; + for (var i in itemIDs) { + itemTags.push(itemIDs[i] + '-' + tagID); + } + Zotero.Notifier.trigger('remove', 'item-tag', itemTags); this.purge(); Zotero.DB.commitTransaction(); diff --git a/chrome/content/zotero/xpcom/itemTreeView.js b/chrome/content/zotero/xpcom/itemTreeView.js index 2db1d8a52..85846614f 100644 --- a/chrome/content/zotero/xpcom/itemTreeView.js +++ b/chrome/content/zotero/xpcom/itemTreeView.js @@ -110,7 +110,7 @@ Zotero.ItemTreeView.prototype.refresh = function() */ Zotero.ItemTreeView.prototype.notify = function(action, type, ids) { - if (type != 'item'){ + if (type != 'item' && type != 'collection-item'){ return; } @@ -136,12 +136,13 @@ Zotero.ItemTreeView.prototype.notify = function(action, type, ids) var rows = new Array(); for(var i=0, len=ids.length; i