commit 177dac3fd27401c6f5cb95c91ef7cb370f44b5fd
parent e3033b056eeb1ee4d41680a673efb053f600bfed
Author: Dan Stillman <dstillman@zotero.org>
Date: Thu, 10 Dec 2015 01:09:40 -0500
Closes #805, Translation shouldn't create new item in My Publications
And in download overlay, save and switch to My Library if My
Publications is selected.
Diffstat:
7 files changed, 92 insertions(+), 7 deletions(-)
diff --git a/chrome/content/zotero/browser.js b/chrome/content/zotero/browser.js
@@ -631,6 +631,15 @@ var Zotero_Browser = new function() {
}
}
+ if (libraryID === Zotero.Libraries.publicationsLibraryID) {
+ Zotero_Browser.progress.changeHeadline(Zotero.getString("ingester.scrapeError"));
+ var desc = Zotero.getString('save.error.cannotAddToMyPublications');
+ Zotero_Browser.progress.addDescription(desc);
+ Zotero_Browser.progress.show();
+ Zotero_Browser.progress.startCloseTimer(8000);
+ return;
+ }
+
if(Zotero.isConnector) {
Zotero.Connector.callMethod("getSelectedCollection", {}, function(response, status) {
if(status !== 200) {
diff --git a/chrome/content/zotero/downloadOverlay.js b/chrome/content/zotero/downloadOverlay.js
@@ -64,14 +64,14 @@ var Zotero_DownloadOverlay = new function() {
var libraryID, collection;
try {
let itemGroup = win.ZoteroPane.getCollectionTreeRow();
- if (itemGroup.filesEditable) {
+ if (itemGroup.filesEditable && !itemGroup.isPublications()) {
libraryID = win.ZoteroPane.getSelectedLibraryID();
collection = win.ZoteroPane.getSelectedCollection();
}
// TODO: Just show an error instead?
else {
Zotero.debug("Cannot save files to library " + itemGroup.ref.libraryID
- + " -- saving to personal library instead", 2);
+ + " -- saving to My Library instead", 2);
libraryID = Zotero.Libraries.userLibraryID;
}
} catch(e) {
@@ -98,7 +98,7 @@ var Zotero_DownloadOverlay = new function() {
url,
collections: collection ? [collection.id] : [],
contentType
- })
+ });
}
catch (e) {
if (!win) return;
@@ -112,7 +112,11 @@ var Zotero_DownloadOverlay = new function() {
progressWin.addLines([item.getDisplayTitle()], [item.getImageSrc()]);
progressWin.startCloseTimer();
- if(collection) collection.addItem(item.id);
+ if (collection) {
+ yield collection.addItem(item.id);
+ }
+
+ yield win.ZoteroPane.selectItem(item.id);
if(recognizePDF) {
var timer = Components.classes["@mozilla.org/timer;1"]
diff --git a/chrome/content/zotero/xpcom/progressWindow.js b/chrome/content/zotero/xpcom/progressWindow.js
@@ -98,6 +98,11 @@ Zotero.ProgressWindowSet = new function() {
_progressWindows[i].instance.startCloseTimer(null, true);
}
}
+
+
+ this.closeAll = function () {
+ _progressWindows.forEach(pw => pw.instance.close());
+ }
}
diff --git a/chrome/content/zotero/zoteroPane.js b/chrome/content/zotero/zoteroPane.js
@@ -3341,6 +3341,12 @@ var ZoteroPane = new function()
return false;
}
+ var collectionTreeRow = this.collectionsView.getRow(row);
+ if (collectionTreeRow.isPublications()) {
+ this.displayCannotAddToMyPublicationsMessage();
+ return false;
+ }
+
return this.addItemFromDocument(window.content.document, itemType, saveSnapshot, row);
});
@@ -3977,6 +3983,13 @@ var ZoteroPane = new function()
}
+ this.displayCannotAddToMyPublicationsMessage = function () {
+ var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
+ .getService(Components.interfaces.nsIPromptService);
+ ps.alert(null, "", Zotero.getString('save.error.cannotAddToMyPublications'));
+ }
+
+
// TODO: Figure out a functioning way to get the original path and just copy the real file
this.displayCannotAddShortcutMessage = function (path) {
Zotero.alert(
diff --git a/chrome/locale/en-US/zotero/zotero.properties b/chrome/locale/en-US/zotero/zotero.properties
@@ -491,6 +491,7 @@ save.link = Saving Linkā¦
save.link.error = An error occurred while saving this link.
save.error.cannotMakeChangesToCollection = You cannot make changes to the currently selected collection.
save.error.cannotAddFilesToCollection = You cannot add files to the currently selected collection.
+save.error.cannotAddToMyPublications = You cannot save items directly to My Publications. To add items to My Publications, drag them from another library.
ingester.saveToZotero = Save to Zotero
ingester.saveToZoteroUsing = Save to Zotero using "%S"
diff --git a/test/content/support.js b/test/content/support.js
@@ -127,7 +127,12 @@ function waitForDialog(onOpen, button='accept', url) {
failure = e;
}
}
- if (button != 'cancel') {
+ if (button === false) {
+ if (failure) {
+ throw failure;
+ }
+ }
+ else if (button != 'cancel') {
let deferred = Zotero.Promise.defer();
function acceptWhenEnabled() {
// Handle delayed buttons
diff --git a/test/tests/browserTest.js b/test/tests/browserTest.js
@@ -2,14 +2,20 @@
describe("Zotero_Browser", function () {
var win;
+
before(function* () {
win = yield loadBrowserWindow();
});
+
after(function* () {
win.close();
});
- it("should save webpage item to current collection", function* () {
+ afterEach(function () {
+ Zotero.ProgressWindowSet.closeAll();
+ })
+
+ it("should save webpage to current collection", function* () {
var uri = OS.Path.join(getTestDataDirectory().path, "snapshot", "index.html");
var deferred = Zotero.Promise.defer();
win.addEventListener('pageshow', () => deferred.resolve());
@@ -28,7 +34,7 @@ describe("Zotero_Browser", function () {
assert.isTrue(collection.hasItem(items[0].id));
})
- it("should save journalArticle to current collection", function* () {
+ it("should save journal article to current collection", function* () {
var uri = OS.Path.join(
getTestDataDirectory().path, "metadata", "journalArticle-single.html"
);
@@ -48,4 +54,46 @@ describe("Zotero_Browser", function () {
assert.equal(Zotero.ItemTypes.getName(items[0].itemTypeID), 'journalArticle');
assert.isTrue(collection.hasItem(items[0].id));
})
+
+ it("shouldn't save webpage to My Publications", function* () {
+ var uri = OS.Path.join(getTestDataDirectory().path, "snapshot", "index.html");
+ var deferred = Zotero.Promise.defer();
+ win.addEventListener('pageshow', () => deferred.resolve());
+ win.loadURI(uri);
+ yield deferred.promise;
+
+ yield loadZoteroPane(win);
+ yield selectLibrary(win, Zotero.Libraries.publicationsLibraryID);
+
+ var promise = waitForDialog(function (dialog) {
+ assert.include(
+ dialog.document.documentElement.textContent,
+ Zotero.getString('save.error.cannotAddToMyPublications')
+ );
+ });
+ yield win.Zotero_Browser.scrapeThisPage();
+ yield promise;
+ })
+
+ it("shouldn't save journal article to My Publications", function* () {
+ var uri = OS.Path.join(
+ getTestDataDirectory().path, "metadata", "journalArticle-single.html"
+ );
+ var deferred = Zotero.Promise.defer();
+ win.addEventListener('pageshow', () => deferred.resolve());
+ win.loadURI(uri);
+ yield deferred.promise;
+
+ yield loadZoteroPane(win);
+ yield selectLibrary(win, Zotero.Libraries.publicationsLibraryID);
+
+ var promise = waitForDialog(function (dialog) {
+ assert.include(
+ dialog.document.documentElement.textContent,
+ Zotero.getString('save.error.cannotAddToMyPublications')
+ );
+ }, false, 'chrome://zotero/content/progressWindow.xul');
+ yield win.Zotero_Browser.scrapeThisPage();
+ yield promise;
+ })
})