www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit bb489a45c36148b551763d3b1630ae7e288597f4
parent 9637770c1626cf054764f6aab4dda4cc17f89d1a
Author: Dan Stillman <dstillman@zotero.org>
Date:   Sat,  1 Apr 2017 02:54:24 -0400

Upload modified items after tag rename

The web library will probably still display the old tag in addition to
the new one, at least until browser restart. We'll have to deal with
that separately.

Closes #1205

Diffstat:
Mchrome/content/zotero/xpcom/data/tags.js | 7++++++-
Mtest/content/support.js | 3+++
Mtest/tests/tagsTest.js | 13+++++++++++++
3 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/chrome/content/zotero/xpcom/data/tags.js b/chrome/content/zotero/xpcom/data/tags.js @@ -235,6 +235,9 @@ Zotero.Tags = new function() { } var oldTagID = this.getID(oldName); + if (!oldTagID) { + throw new Error(`Tag '${oldName}' not found`); + } // We need to know if the old tag has a color assigned so that // we can assign it to the new name @@ -255,10 +258,12 @@ Zotero.Tags = new function() { + 'WHERE tagID=? AND itemID IN (' + placeholders + ')'; yield Zotero.DB.queryAsync(sql, [newTagID, oldTagID].concat(chunk)); - sql = 'UPDATE items SET clientDateModified=? ' + sql = 'UPDATE items SET clientDateModified=?, synced=0 ' + 'WHERE itemID IN (' + placeholders + ')' yield Zotero.DB.queryAsync(sql, [Zotero.DB.transactionDateTime].concat(chunk)); + chunk.forEach(id => Zotero.Items.get(id).updateSynced(false, true)); + yield Zotero.Items.reload(oldItemIDs, ['tags'], true); }) ); diff --git a/test/content/support.js b/test/content/support.js @@ -414,6 +414,9 @@ function createUnsavedDataObject(objectType, params = {}) { if (params.collections !== undefined) { obj.setCollections(params.collections); } + if (params.tags !== undefined) { + obj.setTags(params.tags); + } break; case 'collection': diff --git a/test/tests/tagsTest.js b/test/tests/tagsTest.js @@ -25,6 +25,19 @@ describe("Zotero.Tags", function () { }) }) + describe("#rename()", function () { + it("should mark items as changed", function* () { + var item1 = yield createDataObject('item', { tags: [{ tag: "A" }], synced: true }); + var item2 = yield createDataObject('item', { tags: [{ tag: "A" }, { tag: "B" }], synced: true }); + var item3 = yield createDataObject('item', { tags: [{ tag: "B" }, { tag: "C" }], synced: true }); + + yield Zotero.Tags.rename(item1.libraryID, "A", "D"); + assert.isFalse(item1.synced); + assert.isFalse(item2.synced); + assert.isTrue(item3.synced); + }); + }); + describe("#removeFromLibrary()", function () { it("should reload tags of associated items", function* () { var libraryID = Zotero.Libraries.userLibraryID;