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 e102bb44c..49ed27e37 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 f9f5fbaff..c7a28a842 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 fa9ebc7c3..e0bcb7ebf 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 bed08da47..04d45c63f 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 3fcc4b5b5..c1b062e39 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 27e9e43be..be889b17e 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 b5befecab..ae5410a1c 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 d4318fae6..e1388e2e5 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 ec20f7a24..d9eac8adf 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 49fb0fdee..6054584cd 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 45ca6ddec..9d2b72025 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 f5d6f6621..aced82d70 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 dcbb6f0bc..496c68009 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 a2f33d014..01a8d84fa 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 7000c7ce0..de2dbe4ae 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 055e2fa1f..9ed4215ac 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 ed43653c1..fdeb43327 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 455893be7..79fe42485 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 737d4d2d9..354c5c5a3 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 21d7a8ada..bb3a683a2 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 d543726ac..64b0198c0 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 8c91b644d..4a0718d76 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 547da23db..edc1f11b3 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 c07578ed3..de38ffc74 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 0150e3015..7e1c0569b 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 1a42fddeb..b999037e4 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 b9ae5e1ab..0c2215e80 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 {