From a24318ec6a7abb8d88d244730cce81281da7b33a Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Wed, 25 Apr 2007 05:53:32 +0000 Subject: [PATCH] Self-destruct if a transaction is open while trying to scrape, switch collections, click a toolbar button or select an item, and display an error prompting user to restart This should prevent any chance of data loss from transaction rollback if Firefox crashes, since it removes almost all possibility of modifying Zotero data after an error. Also replaced commitAllTransactions() call in DB shutdown observer with rollbackAllTransactions(), since the extra safety precaution now shouldn't be necessary. --- chrome/content/zotero/browser.js | 9 +++ chrome/content/zotero/overlay.js | 72 ++++++++++++++++++- chrome/content/zotero/overlay.xul | 11 +-- .../content/zotero/preferences/preferences.js | 2 +- chrome/content/zotero/xpcom/db.js | 25 ++++++- chrome/content/zotero/xpcom/itemTreeView.js | 18 +++++ chrome/content/zotero/xpcom/progressWindow.js | 10 ++- chrome/content/zotero/xpcom/zotero.js | 14 +++- chrome/locale/bg-BG/zotero/zotero.properties | 4 +- chrome/locale/de-AT/zotero/zotero.properties | 4 +- chrome/locale/de-CH/zotero/zotero.properties | 4 +- chrome/locale/de-DE/zotero/zotero.properties | 4 +- chrome/locale/en-US/zotero/zotero.dtd | 1 - chrome/locale/en-US/zotero/zotero.properties | 10 ++- chrome/locale/es-ES/zotero/zotero.properties | 4 +- chrome/locale/fr-FR/zotero/zotero.properties | 4 +- chrome/locale/it-IT/zotero/zotero.properties | 4 +- chrome/locale/ja-JP/zotero/zotero.properties | 4 +- chrome/locale/ko-KR/zotero/zotero.properties | 4 +- chrome/locale/nb-NO/zotero/zotero.properties | 4 +- chrome/locale/nl-NL/zotero/zotero.properties | 4 +- chrome/locale/pt-BR/zotero/zotero.properties | 4 +- chrome/locale/sr-YU/zotero/zotero.properties | 4 +- chrome/locale/tr-TR/zotero/zotero.properties | 4 +- chrome/locale/zh-CN/zotero/zotero.properties | 4 +- chrome/locale/zh-TW/zotero/zotero.properties | 4 +- chrome/skin/default/zotero/errorReport.css | 2 +- chrome/skin/default/zotero/overlay.css | 4 ++ 28 files changed, 192 insertions(+), 50 deletions(-) diff --git a/chrome/content/zotero/browser.js b/chrome/content/zotero/browser.js index e102bb44ca..49ed27e377 100644 --- a/chrome/content/zotero/browser.js +++ b/chrome/content/zotero/browser.js @@ -117,6 +117,15 @@ var Zotero_Browser = new function() { * ID as the argument */ function scrapeThisPage(saveLocation) { + if (!Zotero.stateCheck()) { + Zotero_Browser.progress.changeHeadline(Zotero.getString("ingester.scrapeError")); + var desc = Zotero.getString("ingester.scrapeError.transactionInProgress.previousError") + + ' ' + Zotero.getString("general.restartFirefoxAndTryAgain"); + Zotero_Browser.progress.addDescription(desc); + Zotero_Browser.progress.show(); + Zotero_Browser.progress.startCloseTimer(8000); + return; + } _getTabObject(this.tabbrowser.selectedBrowser).translate(saveLocation); } diff --git a/chrome/content/zotero/overlay.js b/chrome/content/zotero/overlay.js index f9f5fbaffa..c7a28a842d 100644 --- a/chrome/content/zotero/overlay.js +++ b/chrome/content/zotero/overlay.js @@ -85,6 +85,7 @@ var ZoteroPane = new function() this.showAttachmentNotFoundDialog = showAttachmentNotFoundDialog; this.relinkAttachment = relinkAttachment; this.reportErrors = reportErrors; + this.displayErrorMessage = displayErrorMessage; const DEFAULT_ZPANE_HEIGHT = 300; const COLLECTIONS_HEIGHT = 125; // minimum height of the collections pane and toolbar @@ -467,6 +468,11 @@ var ZoteroPane = new function() */ function newItem(typeID, data) { + if (!Zotero.stateCheck()) { + this.displayErrorMessage(true); + return; + } + var item = new Zotero.Item(typeID); for (var i in data) @@ -704,6 +710,11 @@ var ZoteroPane = new function() function itemSelected() { + if (!Zotero.stateCheck()) { + this.displayErrorMessage(); + return; + } + if (this.itemsView && this.itemsView.selection.count == 1 && this.itemsView.selection.currentIndex != -1) { var item = this.itemsView._getItemAtRow(this.itemsView.selection.currentIndex); @@ -1453,15 +1464,23 @@ var ZoteroPane = new function() function setItemsPaneMessage(msg) { + var elem = document.getElementById('zotero-items-pane-message-box'); + while (elem.hasChildNodes()) { + elem.removeChild(elem.firstChild); + } + var msgParts = msg.split("\n\n"); + for (var i=0; i - + @@ -265,9 +265,7 @@ - - + @@ -352,6 +350,11 @@ break; } + // Set "Report Errors..." label via property rather than DTD entity, + // since we need to reference it in script elsewhere + document.getElementById('zotero-tb-actions-reportErrors').setAttribute('label', + Zotero.getString('errorReport.reportErrors')); + // Used for loading the changelog after upgrades if (Zotero.initialURL) { gBrowser.selectedTab = gBrowser.addTab(Zotero.initialURL); diff --git a/chrome/content/zotero/preferences/preferences.js b/chrome/content/zotero/preferences/preferences.js index fa9ebc7c3f..e0bcb7ebf5 100644 --- a/chrome/content/zotero/preferences/preferences.js +++ b/chrome/content/zotero/preferences/preferences.js @@ -68,7 +68,7 @@ function onDataDirUpdate(event) { + (ps.BUTTON_POS_1) * (ps.BUTTON_TITLE_CANCEL); var index = ps.confirmEx(window, Zotero.getString('general.restartRequired'), - Zotero.getString('general.restartFirefox.singular'), + Zotero.getString('general.restartRequiredForChange'), buttonFlags, Zotero.getString('general.restartNow'), null, null, null, {}); diff --git a/chrome/content/zotero/xpcom/db.js b/chrome/content/zotero/xpcom/db.js index bed08da474..04d45c63f1 100644 --- a/chrome/content/zotero/xpcom/db.js +++ b/chrome/content/zotero/xpcom/db.js @@ -403,6 +403,8 @@ Zotero.DBConnection.prototype.transactionInProgress = function () { /** * Safety function used on shutdown to make sure we're not stuck in the * middle of a transaction + * + * NOTE: No longer used */ Zotero.DBConnection.prototype.commitAllTransactions = function () { if (this.transactionInProgress()) { @@ -418,6 +420,23 @@ Zotero.DBConnection.prototype.commitAllTransactions = function () { } +/* + * Used on shutdown to rollback all open transactions + */ +Zotero.DBConnection.prototype.rollbackAllTransactions = function () { + if (this.transactionInProgress()) { + var level = this._transactionNestingLevel; + this._transactionNestingLevel = 0; + try { + this.rollbackTransaction(); + } + catch (e) {} + return level ? level : true; + } + return false; +} + + Zotero.DBConnection.prototype.tableExists = function (table) { return this._getDBConnection().tableExists(table); } @@ -530,7 +549,9 @@ Zotero.DBConnection.prototype.observe = function(subject, topic, data) { return; } - var level = this.commitAllTransactions(); + // NOTE: disabled + //var level = this.commitAllTransactions(); + var level = this.rollbackAllTransactions() if (level) { level = level === true ? '0' : level; this._debug("A transaction in DB '" + this._dbName + "' was still open! (level " + level + ")", 2); @@ -776,8 +797,8 @@ Zotero.DBConnection.prototype._getDBConnection = function () { // Register shutdown handler to call this.onShutdown() for DB backup var observerService = Components.classes["@mozilla.org/observer-service;1"] .getService(Components.interfaces.nsIObserverService); - observerService.addObserver(this, "xpcom-shutdown", false); + observerService = null; return this._connection; } diff --git a/chrome/content/zotero/xpcom/itemTreeView.js b/chrome/content/zotero/xpcom/itemTreeView.js index 3fcc4b5b5e..c1b062e390 100644 --- a/chrome/content/zotero/xpcom/itemTreeView.js +++ b/chrome/content/zotero/xpcom/itemTreeView.js @@ -96,6 +96,24 @@ Zotero.ItemTreeView.prototype.setTree = function(treebox) // Generate the tree contents in a timer to allow message above to display var paneLoader = function(obj) { + // If a DB transaction is open, display error message and bail + if (!Zotero.stateCheck()) { + if (obj._ownerDocument.defaultView.ZoteroPane) { + obj._ownerDocument.defaultView.ZoteroPane.displayErrorMessage(); + /* + var reportErrorsStr = Zotero.getString('errorReport.reportErrors'); + var reportInstructions = + Zotero.getString('errorReport.reportInstructions', reportErrorsStr) + + var msg = Zotero.getString('general.errorHasOccurred') + ' ' + + Zotero.getString('general.restartFirefox') + '\n\n' + + reportInstructions; + obj._ownerDocument.defaultView.ZoteroPane.setItemsPaneMessage(msg); + */ + } + return; + } + obj.refresh(); // Add a keypress listener for expand/collapse diff --git a/chrome/content/zotero/xpcom/progressWindow.js b/chrome/content/zotero/xpcom/progressWindow.js index 27e9e43bec..be889b17e8 100644 --- a/chrome/content/zotero/xpcom/progressWindow.js +++ b/chrome/content/zotero/xpcom/progressWindow.js @@ -97,7 +97,7 @@ Zotero.ProgressWindowSet = new function() { for (var i=0; i<_progressWindows.length; i++) { // Pass |requireMouseOver| so that the window only closes // if the mouse was over it at some point - _progressWindows[i].instance.startCloseTimer(true); + _progressWindows[i].instance.startCloseTimer(null, true); } } } @@ -246,7 +246,7 @@ Zotero.ProgressWindow = function(_window){ } - function startCloseTimer(requireMouseOver) { + function startCloseTimer(ms, requireMouseOver) { if (_windowLoaded || _windowLoading) { if (requireMouseOver && !_mouseWasOver) { return; @@ -256,7 +256,11 @@ Zotero.ProgressWindow = function(_window){ _disableTimeout(); } - _timeoutID = _progressWindow.setTimeout(_timeout, 2500); + if (typeof ms != 'number') { + ms = 2500; + } + + _timeoutID = _progressWindow.setTimeout(_timeout, ms); } } diff --git a/chrome/content/zotero/xpcom/zotero.js b/chrome/content/zotero/xpcom/zotero.js index b5befecab1..ae5410a1c4 100644 --- a/chrome/content/zotero/xpcom/zotero.js +++ b/chrome/content/zotero/xpcom/zotero.js @@ -34,6 +34,7 @@ const ZOTERO_CONFIG = { var Zotero = new function(){ // Privileged (public) methods this.init = init; + this.stateCheck = stateCheck; //this.shutdown = shutdown; this.getProfileDirectory = getProfileDirectory; this.getZoteroDirectory = getZoteroDirectory; @@ -223,6 +224,17 @@ var Zotero = new function(){ } + function stateCheck() { + if (Zotero.DB.transactionInProgress()) { + this.initialized = false; + this.skipLoading = true; + return false; + } + + return true; + } + + /* function shutdown(subject, topic, data){ // Called twice otherwise, for some reason @@ -350,7 +362,7 @@ var Zotero = new function(){ } var index = ps.confirmEx(win, Zotero.getString('general.restartRequired'), - Zotero.getString('general.restartFirefox.singular'), + Zotero.getString('general.restartRequiredForChange'), buttonFlags, Zotero.getString('general.restartNow'), forceRestartNow ? null : Zotero.getString('general.restartLater'), diff --git a/chrome/locale/bg-BG/zotero/zotero.properties b/chrome/locale/bg-BG/zotero/zotero.properties index d4318fae63..e1388e2e54 100644 --- a/chrome/locale/bg-BG/zotero/zotero.properties +++ b/chrome/locale/bg-BG/zotero/zotero.properties @@ -1,7 +1,7 @@ general.dontShowWarningAgain=Don't show this warning again. general.locate=Locate... -general.restartFirefox.singular=Firefox must be restarted for the change to take effect. -general.restartFirefox.plural=Firefox must be restarted for the changes to take effect. +general.restartRequiredForChange=Firefox must be restarted for the change to take effect. +general.restartRequiredForChanges=Firefox must be restarted for the changes to take effect. general.restartNow=Restart now general.restartLater=Restart later diff --git a/chrome/locale/de-AT/zotero/zotero.properties b/chrome/locale/de-AT/zotero/zotero.properties index ec20f7a24e..d9eac8adf2 100644 --- a/chrome/locale/de-AT/zotero/zotero.properties +++ b/chrome/locale/de-AT/zotero/zotero.properties @@ -1,7 +1,7 @@ general.dontShowWarningAgain=Don't show this warning again. general.locate=Locate... -general.restartFirefox.singular=Firefox must be restarted for the change to take effect. -general.restartFirefox.plural=Firefox must be restarted for the changes to take effect. +general.restartRequiredForChange=Firefox must be restarted for the change to take effect. +general.restartRequiredForChanges=Firefox must be restarted for the changes to take effect. general.restartNow=Restart now general.restartLater=Restart later diff --git a/chrome/locale/de-CH/zotero/zotero.properties b/chrome/locale/de-CH/zotero/zotero.properties index 49fb0fdeeb..6054584cda 100644 --- a/chrome/locale/de-CH/zotero/zotero.properties +++ b/chrome/locale/de-CH/zotero/zotero.properties @@ -1,7 +1,7 @@ general.dontShowWarningAgain=Don't show this warning again. general.locate=Locate... -general.restartFirefox.singular=Firefox must be restarted for the change to take effect. -general.restartFirefox.plural=Firefox must be restarted for the changes to take effect. +general.restartRequiredForChange=Firefox must be restarted for the change to take effect. +general.restartRequiredForChanges=Firefox must be restarted for the changes to take effect. general.restartNow=Restart now general.restartLater=Restart later diff --git a/chrome/locale/de-DE/zotero/zotero.properties b/chrome/locale/de-DE/zotero/zotero.properties index 45ca6ddec8..9d2b72025d 100644 --- a/chrome/locale/de-DE/zotero/zotero.properties +++ b/chrome/locale/de-DE/zotero/zotero.properties @@ -1,7 +1,7 @@ general.dontShowWarningAgain=Don't show this warning again. general.locate=Locate... -general.restartFirefox.singular=Firefox must be restarted for the change to take effect. -general.restartFirefox.plural=Firefox must be restarted for the changes to take effect. +general.restartRequiredForChange=Firefox must be restarted for the change to take effect. +general.restartRequiredForChanges=Firefox must be restarted for the changes to take effect. general.restartNow=Restart now general.restartLater=Restart later diff --git a/chrome/locale/en-US/zotero/zotero.dtd b/chrome/locale/en-US/zotero/zotero.dtd index f5d6f66213..aced82d704 100644 --- a/chrome/locale/en-US/zotero/zotero.dtd +++ b/chrome/locale/en-US/zotero/zotero.dtd @@ -63,7 +63,6 @@ - diff --git a/chrome/locale/en-US/zotero/zotero.properties b/chrome/locale/en-US/zotero/zotero.properties index dcbb6f0bc9..496c680094 100644 --- a/chrome/locale/en-US/zotero/zotero.properties +++ b/chrome/locale/en-US/zotero/zotero.properties @@ -2,14 +2,19 @@ general.error = Error general.dontShowWarningAgain = Don't show this warning again. general.locate = Locate... general.restartRequired = Restart Required -general.restartFirefox.singular = Firefox must be restarted for the change to take effect. -general.restartFirefox.plural = Firefox must be restarted for the changes to take effect. +general.restartRequiredForChange = Firefox must be restarted for the change to take effect. +general.restartRequiredForChanges = Firefox must be restarted for the changes to take effect. general.restartNow = Restart now general.restartLater = Restart later +general.errorHasOccurred = An error has occurred. +general.restartFirefox = Please restart Firefox. +general.restartFirefoxAndTryAgain = Please restart Firefox and try again. upgrade.failed = Upgrading of the Zotero database failed: upgrade.advanceMessage = Press %S to upgrade now. +errorReport.reportErrors = Report Errors... +errorReport.reportInstructions = You can report this error by selecting "%S" from the Actions (gear) menu. errorReport.followingErrors = The following errors have occurred: errorReport.advanceMessage = Press %S to send an error report to the Zotero developers. errorReport.stepsToReproduce = Steps to Reproduce: @@ -293,6 +298,7 @@ ingester.scrapeComplete = Item Saved ingester.scrapeError = Could Not Save Item ingester.scrapeErrorDescription = An error occurred while saving this item. Check %S for more information. ingester.scrapeErrorDescription.linkText = Known Translator Issues +ingester.scrapeError.transactionInProgress.previousError = The saving process failed due to a previous Zotero error. db.dbCorrupted = The Zotero database '%S' appears to have become corrupted. db.dbCorrupted.restart = Please restart Firefox to attempt an automatic restore from the last backup. diff --git a/chrome/locale/es-ES/zotero/zotero.properties b/chrome/locale/es-ES/zotero/zotero.properties index a2f33d0145..01a8d84fae 100644 --- a/chrome/locale/es-ES/zotero/zotero.properties +++ b/chrome/locale/es-ES/zotero/zotero.properties @@ -1,7 +1,7 @@ general.dontShowWarningAgain=Don't show this warning again. general.locate=Locate... -general.restartFirefox.singular=Firefox must be restarted for the change to take effect. -general.restartFirefox.plural=Firefox must be restarted for the changes to take effect. +general.restartRequiredForChange=Firefox must be restarted for the change to take effect. +general.restartRequiredForChanges=Firefox must be restarted for the changes to take effect. general.restartNow=Restart now general.restartLater=Restart later diff --git a/chrome/locale/fr-FR/zotero/zotero.properties b/chrome/locale/fr-FR/zotero/zotero.properties index 7000c7ce00..de2dbe4aef 100644 --- a/chrome/locale/fr-FR/zotero/zotero.properties +++ b/chrome/locale/fr-FR/zotero/zotero.properties @@ -1,7 +1,7 @@ general.dontShowWarningAgain=Don't show this warning again. general.locate=Locate... -general.restartFirefox.singular=Firefox must be restarted for the change to take effect. -general.restartFirefox.plural=Firefox must be restarted for the changes to take effect. +general.restartRequiredForChange=Firefox must be restarted for the change to take effect. +general.restartRequiredForChanges=Firefox must be restarted for the changes to take effect. general.restartNow=Restart now general.restartLater=Restart later diff --git a/chrome/locale/it-IT/zotero/zotero.properties b/chrome/locale/it-IT/zotero/zotero.properties index 055e2fa1f1..9ed4215acd 100644 --- a/chrome/locale/it-IT/zotero/zotero.properties +++ b/chrome/locale/it-IT/zotero/zotero.properties @@ -1,7 +1,7 @@ general.dontShowWarningAgain=Don't show this warning again. general.locate=Locate... -general.restartFirefox.singular=Firefox must be restarted for the change to take effect. -general.restartFirefox.plural=Firefox must be restarted for the changes to take effect. +general.restartRequiredForChange=Firefox must be restarted for the change to take effect. +general.restartRequiredForChanges=Firefox must be restarted for the changes to take effect. general.restartNow=Restart now general.restartLater=Restart later diff --git a/chrome/locale/ja-JP/zotero/zotero.properties b/chrome/locale/ja-JP/zotero/zotero.properties index ed43653c12..fdeb43327c 100644 --- a/chrome/locale/ja-JP/zotero/zotero.properties +++ b/chrome/locale/ja-JP/zotero/zotero.properties @@ -1,7 +1,7 @@ general.dontShowWarningAgain=Don't show this warning again. general.locate=Locate... -general.restartFirefox.singular=Firefox must be restarted for the change to take effect. -general.restartFirefox.plural=Firefox must be restarted for the changes to take effect. +general.restartRequiredForChange=Firefox must be restarted for the change to take effect. +general.restartRequiredForChanges=Firefox must be restarted for the changes to take effect. general.restartNow=Restart now general.restartLater=Restart later diff --git a/chrome/locale/ko-KR/zotero/zotero.properties b/chrome/locale/ko-KR/zotero/zotero.properties index 455893be76..79fe42485a 100644 --- a/chrome/locale/ko-KR/zotero/zotero.properties +++ b/chrome/locale/ko-KR/zotero/zotero.properties @@ -1,7 +1,7 @@ general.dontShowWarningAgain=Don't show this warning again. general.locate=Locate... -general.restartFirefox.singular=Firefox must be restarted for the change to take effect. -general.restartFirefox.plural=Firefox must be restarted for the changes to take effect. +general.restartRequiredForChange=Firefox must be restarted for the change to take effect. +general.restartRequiredForChanges=Firefox must be restarted for the changes to take effect. general.restartNow=Restart now general.restartLater=Restart later diff --git a/chrome/locale/nb-NO/zotero/zotero.properties b/chrome/locale/nb-NO/zotero/zotero.properties index 737d4d2d91..354c5c5a38 100644 --- a/chrome/locale/nb-NO/zotero/zotero.properties +++ b/chrome/locale/nb-NO/zotero/zotero.properties @@ -1,7 +1,7 @@ general.dontShowWarningAgain=Don't show this warning again. general.locate=Locate... -general.restartFirefox.singular=Firefox must be restarted for the change to take effect. -general.restartFirefox.plural=Firefox must be restarted for the changes to take effect. +general.restartRequiredForChange=Firefox must be restarted for the change to take effect. +general.restartRequiredForChanges=Firefox must be restarted for the changes to take effect. general.restartNow=Restart now general.restartLater=Restart later diff --git a/chrome/locale/nl-NL/zotero/zotero.properties b/chrome/locale/nl-NL/zotero/zotero.properties index 21d7a8ada6..bb3a683a28 100644 --- a/chrome/locale/nl-NL/zotero/zotero.properties +++ b/chrome/locale/nl-NL/zotero/zotero.properties @@ -1,7 +1,7 @@ general.dontShowWarningAgain=Don't show this warning again. general.locate=Locate... -general.restartFirefox.singular=Firefox must be restarted for the change to take effect. -general.restartFirefox.plural=Firefox must be restarted for the changes to take effect. +general.restartRequiredForChange=Firefox must be restarted for the change to take effect. +general.restartRequiredForChanges=Firefox must be restarted for the changes to take effect. general.restartNow=Restart now general.restartLater=Restart later diff --git a/chrome/locale/pt-BR/zotero/zotero.properties b/chrome/locale/pt-BR/zotero/zotero.properties index d543726ac1..64b0198c00 100644 --- a/chrome/locale/pt-BR/zotero/zotero.properties +++ b/chrome/locale/pt-BR/zotero/zotero.properties @@ -1,7 +1,7 @@ general.dontShowWarningAgain=Don't show this warning again. general.locate=Locate... -general.restartFirefox.singular=Firefox must be restarted for the change to take effect. -general.restartFirefox.plural=Firefox must be restarted for the changes to take effect. +general.restartRequiredForChange=Firefox must be restarted for the change to take effect. +general.restartRequiredForChanges=Firefox must be restarted for the changes to take effect. general.restartNow=Restart now general.restartLater=Restart later diff --git a/chrome/locale/sr-YU/zotero/zotero.properties b/chrome/locale/sr-YU/zotero/zotero.properties index 8c91b644db..4a0718d76a 100644 --- a/chrome/locale/sr-YU/zotero/zotero.properties +++ b/chrome/locale/sr-YU/zotero/zotero.properties @@ -1,7 +1,7 @@ general.dontShowWarningAgain=Don't show this warning again. general.locate=Locate... -general.restartFirefox.singular=Firefox must be restarted for the change to take effect. -general.restartFirefox.plural=Firefox must be restarted for the changes to take effect. +general.restartRequiredForChange=Firefox must be restarted for the change to take effect. +general.restartRequiredForChanges=Firefox must be restarted for the changes to take effect. general.restartNow=Restart now general.restartLater=Restart later diff --git a/chrome/locale/tr-TR/zotero/zotero.properties b/chrome/locale/tr-TR/zotero/zotero.properties index 547da23db4..edc1f11b33 100644 --- a/chrome/locale/tr-TR/zotero/zotero.properties +++ b/chrome/locale/tr-TR/zotero/zotero.properties @@ -1,7 +1,7 @@ general.dontShowWarningAgain=Don't show this warning again. general.locate=Locate... -general.restartFirefox.singular=Firefox must be restarted for the change to take effect. -general.restartFirefox.plural=Firefox must be restarted for the changes to take effect. +general.restartRequiredForChange=Firefox must be restarted for the change to take effect. +general.restartRequiredForChanges=Firefox must be restarted for the changes to take effect. general.restartNow=Restart now general.restartLater=Restart later diff --git a/chrome/locale/zh-CN/zotero/zotero.properties b/chrome/locale/zh-CN/zotero/zotero.properties index c07578ed37..de38ffc748 100644 --- a/chrome/locale/zh-CN/zotero/zotero.properties +++ b/chrome/locale/zh-CN/zotero/zotero.properties @@ -1,7 +1,7 @@ general.dontShowWarningAgain=Don't show this warning again. general.locate=Locate... -general.restartFirefox.singular=Firefox must be restarted for the change to take effect. -general.restartFirefox.plural=Firefox must be restarted for the changes to take effect. +general.restartRequiredForChange=Firefox must be restarted for the change to take effect. +general.restartRequiredForChanges=Firefox must be restarted for the changes to take effect. general.restartNow=Restart now general.restartLater=Restart later diff --git a/chrome/locale/zh-TW/zotero/zotero.properties b/chrome/locale/zh-TW/zotero/zotero.properties index 0150e30158..7e1c0569bf 100644 --- a/chrome/locale/zh-TW/zotero/zotero.properties +++ b/chrome/locale/zh-TW/zotero/zotero.properties @@ -1,7 +1,7 @@ general.dontShowWarningAgain=Don't show this warning again. general.locate=Locate... -general.restartFirefox.singular=Firefox must be restarted for the change to take effect. -general.restartFirefox.plural=Firefox must be restarted for the changes to take effect. +general.restartRequiredForChange=Firefox must be restarted for the change to take effect. +general.restartRequiredForChanges=Firefox must be restarted for the changes to take effect. general.restartNow=Restart now general.restartLater=Restart later diff --git a/chrome/skin/default/zotero/errorReport.css b/chrome/skin/default/zotero/errorReport.css index 1a42fddeb6..b999037e46 100644 --- a/chrome/skin/default/zotero/errorReport.css +++ b/chrome/skin/default/zotero/errorReport.css @@ -1,5 +1,5 @@ description { - margin-bottom: 1.5em; + margin: 0 0 1.5em; } /* Intro pane */ diff --git a/chrome/skin/default/zotero/overlay.css b/chrome/skin/default/zotero/overlay.css index b9ae5e1abc..0c2215e803 100644 --- a/chrome/skin/default/zotero/overlay.css +++ b/chrome/skin/default/zotero/overlay.css @@ -264,6 +264,10 @@ -moz-appearance: listbox; } +#zotero-items-pane-message-box description:not(:first-child) { + margin-top: .75em; +} + #zotero-annotate-tb-add {