commit 4767cad19e57edbe8adfad1212290b3c6694e40b parent c76531e1d42c605aafaefbc22ce79ef4f0da056e Author: Dan Stillman <dstillman@zotero.org> Date: Tue, 10 Jan 2012 19:54:09 -0500 Merge branch '3.0' Diffstat:
61 files changed, 285 insertions(+), 234 deletions(-)
diff --git a/chrome/content/zotero/bindings/itembox.xml b/chrome/content/zotero/bindings/itembox.xml @@ -2404,7 +2404,19 @@ } next[0].click(); - this.ensureElementIsVisible(next[0]); + + // DEBUG: next[0] is always equal to the target element, + // but for some reason it's necessary to scroll to the next + // element when moving forward for the target element to + // be fully in view + if (!back && next[0].parentNode.nextSibling) { + var visElem = next[0].parentNode.nextSibling; + } + else { + var visElem = next[0]; + } + this.ensureElementIsVisible(visElem); + return true; ]]> </body> diff --git a/chrome/content/zotero/bindings/tagsbox.xml b/chrome/content/zotero/bindings/tagsbox.xml @@ -689,7 +689,19 @@ } next[0].click(); - this.ensureElementIsVisible(next[0]); + + // DEBUG: next[0] is always equal to the target element, + // but for some reason it's necessary to scroll to the next + // element when moving forward for the target element to + // be fully in view + if (!back && next[0].parentNode.nextSibling) { + var visElem = next[0].parentNode.nextSibling; + } + else { + var visElem = next[0]; + } + this.ensureElementIsVisible(visElem); + return true; ]]> </body> diff --git a/chrome/content/zotero/browser.js b/chrome/content/zotero/browser.js @@ -634,14 +634,7 @@ Zotero_Browser.Tab.prototype.clear = function() { /* * detects translators for this browser object */ -Zotero_Browser.Tab.prototype.detectTranslators = function(rootDoc, doc) { - // if there's already a scrapable page in the browser window, and it's - // still there, ensure it is actually part of the page, then return - if(this.page.translators && this.page.translators.length && this.page.document.location) { - if(this._searchFrames(rootDoc, this.page.document)) return; - this.clear(); - } - +Zotero_Browser.Tab.prototype.detectTranslators = function(rootDoc, doc) { if(doc instanceof HTMLDocument && doc.documentURI.substr(0, 6) != "about:") { // get translators var me = this; @@ -791,6 +784,17 @@ Zotero_Browser.Tab.prototype._selectItems = function(obj, itemList, callback) { */ Zotero_Browser.Tab.prototype._translatorsAvailable = function(translate, translators) { if(translators && translators.length) { + // if there's already a scrapable page in the browser window, and it's + // still there, ensure it is actually part of the page, then return + if(this.page.translators && this.page.translators.length && this.page.document.location) { + if(this.page.document.defaultView && !this.page.document.defaultView.closed) { + // if it is still there, switch translation to take place on + if(!translators.length || this.page.translators[0].priority <= translators[0].priority) return; + } else { + this.clear(); + } + } + this.page.translate = translate; this.page.translators = translators; this.page.document = translate.document; diff --git a/chrome/content/zotero/overlay.js b/chrome/content/zotero/overlay.js @@ -245,53 +245,6 @@ var ZoteroOverlay = new function() zoteroPane.height = 0; document.getElementById('content').setAttribute('collapsed', false); - - // turn off full window mode, if it was on - _setFullWindowMode(false); - - // Return focus to the browser content pane - window.content.window.focus(); - } - } - - /** - * Hides or shows navigation toolbars - * @param set {Boolean} Whether navigation toolbars should be hidden or shown - */ - function _setFullWindowMode(set) { - // hide or show navigation toolbars - if(!getNavToolbox) return; - var toolbox = getNavToolbox(); - if(set) { - // the below would be a good thing to do if the whole title bar (and not just the center - // part) got updated when it happened... - /*if(Zotero.isMac) { - titlebarcolorState = document.documentElement.getAttribute("activetitlebarcolor"); - document.documentElement.removeAttribute("activetitlebarcolor"); - }*/ - if(document.title != "Zotero") { - titleState = document.title; - document.title = "Zotero"; - } - - if(!toolbarCollapseState) { - toolbarCollapseState = [node.collapsed for each (node in toolbox.childNodes)]; - for(var i=0; i<toolbox.childNodes.length; i++) { - toolbox.childNodes[i].collapsed = true; - } - } - } else { - /*if(Zotero.isMac) { - document.documentElement.setAttribute("activetitlebarcolor", titlebarcolorState); - }*/ - if(document.title == "Zotero") document.title = titleState; - - if(toolbarCollapseState) { - for(var i=0; i<toolbox.childNodes.length; i++) { - toolbox.childNodes[i].collapsed = toolbarCollapseState[i]; - } - toolbarCollapseState = undefined; - } } } diff --git a/chrome/content/zotero/preferences/preferences.js b/chrome/content/zotero/preferences/preferences.js @@ -30,9 +30,45 @@ var _io = {}; var Zotero_Preferences = { - onUnload: function () { Zotero_Preferences.Debug_Output.onUnload(); + }, + + openHelpLink: function () { + var url = "http://www.zotero.org/support/preferences/"; + var helpTopic = document.getElementsByTagName("prefwindow")[0].currentPane.helpTopic; + url += helpTopic; + + // Non-instantApply prefwindows are usually modal, so we can't open in the topmost window, + // since it's probably behind the window + var instantApply = Zotero.Prefs.get("browser.preferences.instantApply", true); + + if (instantApply) { + window.opener.ZoteroPane_Local.loadURI(url, { shiftKey: true, metaKey: true }); + } + else { + if (Zotero.isStandalone) { + var io = Components.classes['@mozilla.org/network/io-service;1'] + .getService(Components.interfaces.nsIIOService); + var uri = io.newURI(url, null, null); + var handler = Components.classes['@mozilla.org/uriloader/external-protocol-service;1'] + .getService(Components.interfaces.nsIExternalProtocolService) + .getProtocolHandlerInfo('http'); + handler.preferredAction = Components.interfaces.nsIHandlerInfo.useSystemDefault; + handler.launchWithURI(uri, null); + } + else { + var ww = Components.classes["@mozilla.org/embedcomp/window-watcher;1"] + .getService(Components.interfaces.nsIWindowWatcher); + var win = ww.openWindow( + window, + url, + "helpWindow", + "chrome=no,menubar=yes,location=yes,toolbar=yes,personalbar=yes,resizable=yes,scrollbars=yes,status=yes", + null + ); + } + } } } diff --git a/chrome/content/zotero/preferences/preferences.xul b/chrome/content/zotero/preferences/preferences.xul @@ -42,11 +42,13 @@ To add a new preference: --> <prefwindow id="zotero-prefs" title="&zotero.preferences.title;" onload="init()" onunload="Zotero_Preferences.onUnload()" - windowtype="zotero:pref" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> + windowtype="zotero:pref" ondialoghelp="Zotero_Preferences.openHelpLink()" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <prefpane id="zotero-prefpane-general" label="&zotero.preferences.prefpane.general;" - image="chrome://zotero/skin/prefs-general.png"> + image="chrome://zotero/skin/prefs-general.png" + helpTopic="general"> <preferences id="zotero-prefpane-general-preferences"> <preference id="pref-fontSize" name="extensions.zotero.fontSize" type="string"/> <preference id="pref-noteFontSize" name="extensions.zotero.note.fontSize" type="string"/> @@ -156,7 +158,8 @@ To add a new preference: <prefpane id="zotero-prefpane-sync" label="&zotero.preferences.prefpane.sync;" onpaneload="document.getElementById('sync-password').value = Zotero.Sync.Server.password; document.getElementById('storage-password').value = Zotero.Sync.Storage.password;" - image="chrome://zotero/skin/prefs-sync.png"> + image="chrome://zotero/skin/prefs-sync.png" + helpTopic="sync"> <preferences> <preference id="pref-sync-autosync" name="extensions.zotero.sync.autoSync" type="bool"/> <preference id="pref-sync-username" name="extensions.zotero.sync.server.username" type="string" instantApply="true"/> @@ -422,7 +425,8 @@ To add a new preference: <prefpane id="zotero-prefpane-search" label="&zotero.preferences.prefpane.search;" onpaneload="updateIndexStats()" - image="chrome://zotero/skin/prefs-search.png"> + image="chrome://zotero/skin/prefs-search.png" + helpTopic="search"> <preferences> <preference id="pref-fulltext-textMaxLength" name="extensions.zotero.fulltext.textMaxLength" type="int"/> <preference id="pref-fulltext-pdfmaxpages" name="extensions.zotero.fulltext.pdfMaxPages" type="int"/> @@ -511,7 +515,8 @@ To add a new preference: <prefpane id="zotero-prefpane-export" label="&zotero.preferences.prefpane.export;" - image="chrome://zotero/skin/prefs-export.png"> + image="chrome://zotero/skin/prefs-export.png" + helpTopic="export"> <preferences> <preference id="pref-quickCopy-setting" name="extensions.zotero.export.quickCopy.setting" type="string"/> <preference id="pref-quickCopy-dragLimit" name="extensions.zotero.export.quickCopy.dragLimit" type="int"/> @@ -576,7 +581,8 @@ To add a new preference: <prefpane id="zotero-prefpane-cite" label="&zotero.preferences.prefpane.cite;" - image="chrome://zotero/skin/prefs-styles.png"> + image="chrome://zotero/skin/prefs-styles.png" + helpTopic="cite"> <preferences id="zotero-preferences-cite"> <preference id="pref-cite-citePaperJournalArticleURL" name="extensions.zotero.export.citePaperJournalArticleURL" type="bool"/> @@ -635,7 +641,8 @@ To add a new preference: <prefpane id="zotero-prefpane-keys" label="&zotero.preferences.prefpane.keys;" - image="chrome://zotero/skin/prefs-keys.png"> + image="chrome://zotero/skin/prefs-keys.png" + helpTopic="shortcut_keys"> <preferences> <preference id="pref-keys-openZotero" name="extensions.zotero.keys.openZotero" type="string"/> <preference id="pref-keys-toggleFullscreen" name="extensions.zotero.keys.toggleFullscreen" type="string"/> @@ -730,7 +737,8 @@ To add a new preference: <prefpane id="zotero-prefpane-advanced" label="&zotero.preferences.prefpane.advanced;" - image="chrome://zotero/skin/prefs-advanced.png"> + image="chrome://zotero/skin/prefs-advanced.png" + helpTopic="advanced"> <preferences> <preference id="pref-useDataDir" name="extensions.zotero.useDataDir" type="bool"/> <preference id="pref-dataDir" name="extensions.zotero.dataDir" type="string"/> diff --git a/chrome/content/zotero/preferences/preferences_firefox.xul b/chrome/content/zotero/preferences/preferences_firefox.xul @@ -78,7 +78,8 @@ To add a new preference: </prefpane> <prefpane id="zotero-prefpane-proxies" label="&zotero.preferences.prefpane.proxies;" - image="chrome://zotero/skin/prefs-proxies.png" position="6"> + image="chrome://zotero/skin/prefs-proxies.png" position="6" + helpTopic="proxies"> <description width="45em" style="font-size: 12px"> &zotero.preferences.proxies.desc_before_link; <label class="zotero-text-link" href="http://www.zotero.org/support/proxies" diff --git a/chrome/content/zotero/xpcom/citeproc.js b/chrome/content/zotero/xpcom/citeproc.js @@ -1963,7 +1963,7 @@ CSL.DateParser = function () { }; CSL.Engine = function (sys, style, lang, forceLang) { var attrs, langspec, localexml, locale; - this.processor_version = "1.0.252"; + this.processor_version = "1.0.255"; this.csl_version = "1.0"; this.sys = sys; this.sys.xml = new CSL.System.Xml.Parsing(); @@ -3586,6 +3586,7 @@ CSL.getCitationCluster = function (inputList, citationID) { params.have_collapsed = this.tmp.have_collapsed; myparams.push(params); } + this.tmp.has_purged_parallel = false; this.parallel.PruneOutputQueue(this); empties = 0; myblobs = this.output.queue.slice(); @@ -3642,14 +3643,18 @@ CSL.getCitationCluster = function (inputList, citationID) { return composite; } if ("object" === typeof composite && composite.length === 0 && !item["suppress-author"]) { - composite.push("[CSL STYLE ERROR: reference with no printed form.]"); + if (this.tmp.has_purged_parallel) { + composite.push(""); + } else { + composite.push("[CSL STYLE ERROR: reference with no printed form.]"); + } } if (objects.length && "string" === typeof composite[0]) { composite.reverse(); var tmpstr = composite.pop(); if (tmpstr && tmpstr.slice(0, 1) === ",") { objects.push(tmpstr); - } else { + } else if (tmpstr) { objects.push(txt_esc(this.tmp.splice_delimiter) + tmpstr); } } else { @@ -6328,7 +6333,7 @@ CSL.NameOutput.prototype.fixupInstitution = function (name, varname, listpos) { if (this.state.sys.getAbbreviation) { var jurisdiction = this.Item.jurisdiction; for (var j = 0, jlen = long_form.length; j < jlen; j += 1) { - var jurisdiction = this.state.transform.loadAbbreviation(jurisdiction, "institution-part", long_form[j]); + jurisdiction = this.state.transform.loadAbbreviation(jurisdiction, "institution-part", long_form[j]); if (this.state.transform.abbrevs[jurisdiction]["institution-part"][long_form[j]]) { short_form[j] = this.state.transform.abbrevs[jurisdiction]["institution-part"][long_form[j]]; } @@ -6362,11 +6367,22 @@ CSL.NameOutput.prototype._splitInstitution = function (value, v, i) { var jurisdiction = this.Item.jurisdiction; for (var j = splitInstitution.length; j > 0; j += -1) { var str = splitInstitution.slice(0, j).join("|"); - var jurisdiction = this.state.transform.loadAbbreviation(jurisdiction, "institution-entire", str); + jurisdiction = this.state.transform.loadAbbreviation(jurisdiction, "institution-entire", str); if (this.state.transform.abbrevs[jurisdiction]["institution-entire"][str]) { var splitLst = this.state.transform.abbrevs[jurisdiction]["institution-entire"][str]; - var splitLst = splitLst.replace(/\s*\|\s*/g, "|"); - var splitLst = splitLst.split("|"); + var splitSplitLst = splitLst.split(/>>[0-9]{4}>>/); + var m = splitLst.match(/>>([0-9]{4})>>/); + splitLst = splitSplitLst.pop(); + if (splitSplitLst.length > 0 && this.Item.issued && this.Item.issued.year) { + for (var k=m.length - 1; k > 0; k += -1) { + if (parseInt(this.Item.issued.year, 10) >= parseInt(m[k], 10)) { + break; + } + splitLst = splitSplitLst.pop(); + } + } + splitLst = splitLst.replace(/\s*\|\s*/g, "|"); + splitLst = splitLst.split("|"); splitInstitution = splitLst.concat(splitInstitution.slice(j)); } } @@ -8315,11 +8331,26 @@ CSL.Transform = function (state) { return jurisdiction; } if (state.sys.getAbbreviation) { - if (!this.abbrevs[jurisdiction]) { - this.abbrevs[jurisdiction] = new CSL.AbbreviationSegments(); + var tryList = ['default']; + if (jurisdiction !== 'default') { + var workLst = jurisdiction.split(/\s*;\s*/); + for (var i=0, ilen=workLst.length; i < ilen; i += 1) { + tryList.push(workLst.slice(0,i+1).join(';')); + } } - if (!this.abbrevs[jurisdiction][category][orig]) { - state.sys.getAbbreviation(state.opt.styleID, this.abbrevs, jurisdiction, category, orig); + for (var i=tryList.length - 1; i > -1; i += -1) { + if (!this.abbrevs[tryList[i]]) { + this.abbrevs[tryList[i]] = new CSL.AbbreviationSegments(); + } + if (!this.abbrevs[tryList[i]][category][orig]) { + state.sys.getAbbreviation(state.opt.styleID, this.abbrevs, tryList[i], category, orig); + } + if (this.abbrevs[tryList[i]][category][orig]) { + if (i < tryList.length) { + this.abbrevs[jurisdiction][category][orig] = this.abbrevs[tryList[i]][category][orig]; + } + break; + } } } return jurisdiction; @@ -8828,6 +8859,7 @@ CSL.Parallel.prototype.purgeVariableBlobs = function (cite, varnames) { for (ppos = llen; ppos > -1; ppos += -1) { b = cite[varname].blobs[ppos]; b[0].blobs = b[0].blobs.slice(0, b[1]).concat(b[0].blobs.slice((b[1] + 1))); + this.state.tmp.has_purged_parallel = true; if (b[0] && b[0].strings && "string" == typeof b[0].strings.oops && b[0].parent && b[0].parent) { b[0].parent.parent.strings.delimiter = b[0].strings.oops; diff --git a/chrome/content/zotero/xpcom/data/collection.js b/chrome/content/zotero/xpcom/data/collection.js @@ -1183,7 +1183,7 @@ Zotero.Collection.prototype.addLinkedCollection = function (collection) { // If both group libraries, store relation with source group. // Otherwise, store with personal library. - var libraryID = (this.libraryID && item.libraryID) ? this.libraryID : null; + var libraryID = (this.libraryID && collection.libraryID) ? this.libraryID : null; Zotero.Relations.add(libraryID, url1, predicate, url2); } diff --git a/chrome/content/zotero/xpcom/data/item.js b/chrome/content/zotero/xpcom/data/item.js @@ -3898,9 +3898,9 @@ Zotero.Item.prototype.diff = function (item, includeMatches, ignoreFields) { var thisNote = thisData.note; var otherNote = otherData.note; - // Stop Windows newlines from triggering erroneous conflicts - thisNote = thisNote.replace(/\r\n/g, "\n"); - otherNote = otherNote.replace(/\r\n/g, "\n"); + // Stop non-Unix newlines from triggering erroneous conflicts + thisNote = thisNote.replace(/\r\n?/g, "\n"); + otherNote = otherNote.replace(/\r\n?/g, "\n"); // Normalize multiple spaces (due to differences TinyMCE, Z.U.text2html(), // and the server) diff --git a/chrome/content/zotero/xpcom/file.js b/chrome/content/zotero/xpcom/file.js @@ -351,7 +351,7 @@ Zotero.File = new function(){ var opWord = "updated"; } - if (e.name == 'NS_ERROR_FILE_ACCESS_DENIED' + if (e.name == 'NS_ERROR_FILE_ACCESS_DENIED' || e.name == 'NS_ERROR_FILE_IS_LOCKED' // Shows up on some Windows systems || e.name == 'NS_ERROR_FAILURE') { Zotero.debug(e); diff --git a/chrome/content/zotero/xpcom/integration.js b/chrome/content/zotero/xpcom/integration.js @@ -43,6 +43,7 @@ Zotero.Integration = new function() { // these need to be global because of GC var _updateTimer; + var _carbon, ProcessSerialNumber, SetFrontProcessWithOptions; var _inProgress = false; this.currentWindow = false; @@ -276,24 +277,27 @@ Zotero.Integration = new function() { }; if(Zotero.isFx4 && win) { - const carbon = ctypes.open("/System/Library/Frameworks/Carbon.framework/Carbon"); - /* - * struct ProcessSerialNumber { - * unsigned long highLongOfPSN; - * unsigned long lowLongOfPSN; - * }; - */ - const ProcessSerialNumber = new ctypes.StructType("ProcessSerialNumber", - [{"highLongOfPSN":ctypes.uint32_t}, {"lowLongOfPSN":ctypes.uint32_t}]); - - /* - * OSStatus SetFrontProcessWithOptions ( - * const ProcessSerialNumber *inProcess, - * OptionBits inOptions - * ); - */ - const SetFrontProcessWithOptions = carbon.declare("SetFrontProcessWithOptions", - ctypes.default_abi, ctypes.int32_t, ProcessSerialNumber.ptr, ctypes.uint32_t); + if(!_carbon) { + _carbon = ctypes.open("/System/Library/Frameworks/Carbon.framework/Carbon"); + /* + * struct ProcessSerialNumber { + * unsigned long highLongOfPSN; + * unsigned long lowLongOfPSN; + * }; + */ + ProcessSerialNumber = new ctypes.StructType("ProcessSerialNumber", + [{"highLongOfPSN":ctypes.uint32_t}, {"lowLongOfPSN":ctypes.uint32_t}]); + + /* + * OSStatus SetFrontProcessWithOptions ( + * const ProcessSerialNumber *inProcess, + * OptionBits inOptions + * ); + */ + SetFrontProcessWithOptions = _carbon.declare("SetFrontProcessWithOptions", + ctypes.default_abi, ctypes.int32_t, ProcessSerialNumber.ptr, + ctypes.uint32_t); + } var psn = new ProcessSerialNumber(); psn.highLongOfPSN = 0; @@ -304,7 +308,6 @@ Zotero.Integration = new function() { psn.address(), 1 // kSetFrontProcessFrontWindowOnly = (1 << 0) ); - carbon.close(); }, false); } else { if(Zotero.oscpu == "PPC Mac OS X 10.4" || Zotero.oscpu == "Intel Mac OS X 10.4" @@ -322,8 +325,6 @@ Zotero.Integration = new function() { * Show appropriate dialogs for an integration error */ this.handleError = function(e, document) { - this.complete(document); - if(!(e instanceof Zotero.Integration.UserCancelledException)) { try { var displayError = null; @@ -378,6 +379,8 @@ Zotero.Integration = new function() { Zotero.logError(e); } } + + this.complete(document); } /** @@ -388,13 +391,21 @@ Zotero.Integration = new function() { try { doc.cleanup(); doc.activate(); + + // Call complete function if one exists + if(doc.wrappedJSObject && doc.wrappedJSObject.complete) { + doc.wrappedJSObject.complete(); + } } catch(e) { Zotero.logError(e); } } if(Zotero.Integration.currentWindow && !Zotero.Integration.currentWindow.closed) { - Zotero.Integration.currentWindow.close(); + var oldWindow = Zotero.Integration.currentWindow; + Zotero.setTimeout(function() { + oldWindow.close(); + }, 100, true); } _inProgress = Zotero.Integration.currentWindow = false; } @@ -421,6 +432,52 @@ Zotero.Integration = new function() { } catch(e) {} } } + + /** + * Displays a dialog in a modal-like fashion without hanging the thread + * @param {String} url The chrome:// URI of the window + * @param {String} [options] Options to pass to the window + * @param {String} [io] Data to pass to the window + * @param {Function|Boolean} [async] Function to call when window is closed. If not specified, + * function waits to return until the window has been closed. If "true", the function returns + * immediately. + */ + this.displayDialog = function(doc, url, options, io, async) { + doc.cleanup(); + + var allOptions = 'chrome,centerscreen'; + // without this, Firefox gets raised with our windows under Compiz + if(Zotero.isLinux) allOptions += ',dialog=no'; + if(options) allOptions += ','+options; + if(!async) allOptions += ',modal=yes'; + + var window = Components.classes["@mozilla.org/embedcomp/window-watcher;1"] + .getService(Components.interfaces.nsIWindowWatcher) + .openWindow(null, url, '', allOptions, (io ? io : null)); + Zotero.Integration.currentWindow = window; + Zotero.Integration.activate(window); + + var listener = function() { + if(window.location.toString() === "about:blank") return; + + if(window.newWindow) { + window = window.newWindow; + Zotero.Integration.currentWindow = window; + window.addEventListener("unload", listener, false); + return; + } + + Zotero.Integration.currentWindow = false; + if(async instanceof Function) { + try { + async(); + } catch(e) { + Zotero.Integration.handleError(e, doc); + } + } + } + window.addEventListener("unload", listener, false); + } } /** @@ -526,7 +583,7 @@ Zotero.Integration.Document.prototype._getSession = function(require, dontRunSet return; } - this._session.setDocPrefs(this._app.primaryFieldType, this._app.secondaryFieldType, function(status) { + this._session.setDocPrefs(this._doc, this._app.primaryFieldType, this._app.secondaryFieldType, function(status) { if(status === false) { throw new Zotero.Integration.UserCancelledException(); } @@ -571,7 +628,7 @@ Zotero.Integration.Document.prototype._getSession = function(require, dontRunSet } catch(e) { // make sure style is defined if(e instanceof Zotero.Integration.DisplayException && e.name === "invalidStyle") { - this._session.setDocPrefs(this._app.primaryFieldType, this._app.secondaryFieldType, function() { + this._session.setDocPrefs(this._doc, this._app.primaryFieldType, this._app.secondaryFieldType, function() { me._doc.setDocumentData(me._session.data.serializeXML()); me._session.reload = true; callback(true); @@ -666,7 +723,7 @@ Zotero.Integration.Document.prototype.editBibliography = function(callback) { } fieldGetter.updateSession(function() { - me._session.editBibliography(function() { + me._session.editBibliography(this._doc, function() { me._doc.activate(); fieldGetter.updateDocument(false, true, false, function() { Zotero.Integration.complete(me._doc); @@ -1078,7 +1135,7 @@ Zotero.Integration.Fields.prototype._processFields = function(fields, callback, } else { // Yes // Display reselect item dialog var me = this; - this._session.reselectItem(e, function() { + this._session.reselectItem(this._doc, e, function() { // Now try again me._doc.activate(); me._processFields(fields, callback, i); @@ -1324,11 +1381,14 @@ Zotero.Integration.Fields.prototype.addEditCitation = function(field, callback) var io = new Zotero.Integration.CitationEditInterface(citation, field, this, session, newField, callback); if(Zotero.Prefs.get("integration.useClassicAddCitationDialog")) { - session.displayDialog('chrome://zotero/content/integration/addCitationDialog.xul', 'alwaysRaised,resizable', io, true); + Zotero.Integration.displayDialog(this._doc, + 'chrome://zotero/content/integration/addCitationDialog.xul', 'alwaysRaised,resizable', + io, true); } else { var mode = (!Zotero.isMac && Zotero.Prefs.get('integration.keepAddCitationDialogRaised') ? 'popup' : 'alwaysRaised') - session.displayDialog('chrome://zotero/content/integration/quickFormat.xul', mode, io, true); + Zotero.Integration.displayDialog(this._doc, + 'chrome://zotero/content/integration/quickFormat.xul', mode, io, true); } } @@ -1564,56 +1624,10 @@ Zotero.Integration.Session.prototype.setData = function(data) { } /** - * Displays a dialog in a modal-like fashion without hanging the thread - * @param {String} url The chrome:// URI of the window - * @param {String} [options] Options to pass to the window - * @param {String} [io] Data to pass to the window - * @param {Function|Boolean} [async] Function to call when window is closed. If not specified, - * function waits to return until the window has been closed. If "true", the function returns - * immediately. - */ -Zotero.Integration.Session.prototype.displayDialog = function(url, options, io, async) { - if(this.doc) this.doc.cleanup(); - - var allOptions = 'chrome,centerscreen'; - // without this, Firefox gets raised with our windows under Compiz - if(Zotero.isLinux) allOptions += ',dialog=no'; - if(options) allOptions += ','+options; - if(!async) allOptions += ',modal=yes'; - - var window = Components.classes["@mozilla.org/embedcomp/window-watcher;1"] - .getService(Components.interfaces.nsIWindowWatcher) - .openWindow(null, url, '', allOptions, (io ? io : null)); - Zotero.Integration.currentWindow = window; - Zotero.Integration.activate(window); - - var listener = function() { - if(window.location.toString() === "about:blank") return; - - if(window.newWindow) { - window = window.newWindow; - Zotero.Integration.currentWindow = window; - window.addEventListener("unload", listener, false); - return; - } - - Zotero.Integration.currentWindow = false; - if(async instanceof Function) { - try { - async(); - } catch(e) { - Zotero.Integration.handleError(e, this.doc); - } - } - } - window.addEventListener("unload", listener, false); -} - -/** * Displays a dialog to set document preferences * @return {oldData|null|false} Old document data, if there was any; null, if there wasn't; false if cancelled */ -Zotero.Integration.Session.prototype.setDocPrefs = function(primaryFieldType, secondaryFieldType, callback) { +Zotero.Integration.Session.prototype.setDocPrefs = function(doc, primaryFieldType, secondaryFieldType, callback) { var io = new function() { this.wrappedJSObject = this; }; @@ -1629,7 +1643,8 @@ Zotero.Integration.Session.prototype.setDocPrefs = function(primaryFieldType, se } var me = this; - this.displayDialog('chrome://zotero/content/integration/integrationDocPrefs.xul', '', io, function() { + Zotero.Integration.displayDialog(doc, + 'chrome://zotero/content/integration/integrationDocPrefs.xul', '', io, function() { if(!io.style) { callback(false); return; @@ -1660,7 +1675,7 @@ Zotero.Integration.Session.prototype.setDocPrefs = function(primaryFieldType, se * Reselects an item to replace a deleted item * @param exception {Zotero.Integration.MissingItemException} */ -Zotero.Integration.Session.prototype.reselectItem = function(exception, callback) { +Zotero.Integration.Session.prototype.reselectItem = function(doc, exception, callback) { var io = new function() { this.wrappedJSObject = this; }, @@ -1668,7 +1683,8 @@ Zotero.Integration.Session.prototype.reselectItem = function(exception, callback io.addBorder = Zotero.isWin; io.singleSelection = true; - this.displayDialog('chrome://zotero/content/selectItemsDialog.xul', 'resizable', io, function() { + Zotero.Integration.displayDialog(doc, 'chrome://zotero/content/selectItemsDialog.xul', + 'resizable', io, function() { if(io.dataOut && io.dataOut.length) { var itemID = io.dataOut[0]; @@ -2383,13 +2399,15 @@ Zotero.Integration.Session.prototype.previewCitation = function(citation) { /** * Edits integration bibliography */ -Zotero.Integration.Session.prototype.editBibliography = function(callback) { +Zotero.Integration.Session.prototype.editBibliography = function(doc, callback) { var bibliographyEditor = new Zotero.Integration.Session.BibliographyEditInterface(this); var io = new function() { this.wrappedJSObject = bibliographyEditor; } this.bibliographyDataHasChanged = this.bibliographyHasChanged = true; - this.displayDialog('chrome://zotero/content/integration/editBibliographyDialog.xul', 'resizable', io, callback); + Zotero.Integration.displayDialog(doc, + 'chrome://zotero/content/integration/editBibliographyDialog.xul', 'resizable', io, + callback); } /** @@ -2716,8 +2734,4 @@ Zotero.Integration.URIMap.prototype.getZoteroItemForURIs = function(uris) { } return [zoteroItem, needUpdate]; -} - -/** - * - */ -\ No newline at end of file +} +\ No newline at end of file diff --git a/chrome/content/zotero/xpcom/ipc.js b/chrome/content/zotero/xpcom/ipc.js @@ -272,9 +272,13 @@ Zotero.IPC = new function() { instancePipeOpen = true; } - var wroteToPipe = Zotero.IPC.safePipeWrite(pipe, msg+"\n"); + // Try to write to the pipe once a ms for 100 ms + var timeout = Date.now()+100, wroteToPipe; + do { + wroteToPipe = Zotero.IPC.safePipeWrite(pipe, msg+"\n"); + } while(Date.now() < timeout && !wroteToPipe); success = success || wroteToPipe; - defunct = !wroteToPipe + defunct = !wroteToPipe; } if(defunct) { diff --git a/chrome/content/zotero/xpcom/schema.js b/chrome/content/zotero/xpcom/schema.js @@ -3065,6 +3065,10 @@ Zotero.Schema = new function(){ Zotero.wait(); } + // TODO + // + // Replace customBaseFieldMappings to fix FK fields/customField -> customFields->customFieldID + _updateDBVersion('userdata', toVersion); Zotero.DB.commitTransaction(); diff --git a/chrome/content/zotero/xpcom/translation/translate_item.js b/chrome/content/zotero/xpcom/translation/translate_item.js @@ -389,6 +389,11 @@ Zotero.Translate.ItemSaver.prototype = { for(var i=0; i<item.creators.length; i++) { var creator = item.creators[i]; + if(!creator.firstName && !creator.lastName) { + Zotero.debug("Translate: Silently dropping empty creator"); + continue; + } + // try to assign correct creator type var creatorTypeID = 1; if(creator.creatorType) { diff --git a/chrome/content/zotero/xpcom/utilities.js b/chrome/content/zotero/xpcom/utilities.js @@ -1082,7 +1082,7 @@ Zotero.Utilities = { var typeID = Zotero.ItemTypes.getID(item.itemType); if(!typeID) { - Zotero.debug("Translate: Invalid itemType "+item.itemType+"; saving as webpage"); + Zotero.debug("itemToServerJSON: Invalid itemType "+item.itemType+"; using webpage"); item.itemType = "webpage"; typeID = Zotero.ItemTypes.getID(item.itemType); } @@ -1103,6 +1103,11 @@ Zotero.Utilities = { for(var j=0; j<n; j++) { var creator = val[j]; + if(!creator.firstName && !creator.lastName) { + Zotero.debug("itemToServerJSON: Silently dropping empty creator"); + continue; + } + // Single-field mode if (!creator.firstName || (creator.fieldMode && creator.fieldMode == 1)) { var newCreator = { @@ -1122,7 +1127,7 @@ Zotero.Utilities = { if(Zotero.CreatorTypes.getID(creator.creatorType)) { newCreator.creatorType = creator.creatorType; } else { - Zotero.debug("Translate: Invalid creator type "+creator.creatorType+"; falling back to author"); + Zotero.debug("itemToServerJSON: Invalid creator type "+creator.creatorType+"; falling back to author"); } } if(!newCreator.creatorType) newCreator.creatorType = "author"; @@ -1141,7 +1146,7 @@ Zotero.Utilities = { } else if(tag.name) { tag = tag.name; } else { - Zotero.debug("Translate: Discarded invalid tag"); + Zotero.debug("itemToServerJSON: Discarded invalid tag"); continue; } } @@ -1155,7 +1160,7 @@ Zotero.Utilities = { var note = val[j]; if(typeof note === "object") { if(!note.note) { - Zotero.debug("Translate: Discarded invalid note"); + Zotero.debug("itemToServerJSON: Discarded invalid note"); continue; } note = note.note; @@ -1182,10 +1187,10 @@ Zotero.Utilities = { if(Zotero.ItemFields.isValidForType(fieldID, typeID)) { newItem[field] = val; } else { - Zotero.debug("Translate: Discarded field "+field+": field not valid for type "+item.itemType, 3); + Zotero.debug("itemToServerJSON: Discarded field "+field+": field not valid for type "+item.itemType, 3); } } else { - Zotero.debug("Translate: Discarded unknown field "+field, 3); + Zotero.debug("itemToServerJSON: Discarded unknown field "+field, 3); } } diff --git a/chrome/content/zotero/xpcom/zotero.js b/chrome/content/zotero/xpcom/zotero.js @@ -1952,19 +1952,20 @@ Zotero.Prefs = new function(){ try { if (global) { var service = Components.classes["@mozilla.org/preferences-service;1"] - .getService(Components.interfaces.nsIPrefService); + .getService(Components.interfaces.nsIPrefService); + var branch = service.getBranch(""); } else { - var service = this.prefBranch; + var branch = this.prefBranch; } - switch (this.prefBranch.getPrefType(pref)){ - case this.prefBranch.PREF_BOOL: - return this.prefBranch.getBoolPref(pref); - case this.prefBranch.PREF_STRING: - return this.prefBranch.getCharPref(pref); - case this.prefBranch.PREF_INT: - return this.prefBranch.getIntPref(pref); + switch (branch.getPrefType(pref)){ + case branch.PREF_BOOL: + return branch.getBoolPref(pref); + case branch.PREF_STRING: + return branch.getCharPref(pref); + case branch.PREF_INT: + return branch.getIntPref(pref); } } catch (e){ diff --git a/chrome/locale/af-ZA/zotero/preferences.dtd b/chrome/locale/af-ZA/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Display character encoding option on export"> <!ENTITY zotero.preferences.dataDir "Stoorligging"> -<!ENTITY zotero.preferences.dataDir.useProfile "Gebruik Firerfox-profielgids"> <!ENTITY zotero.preferences.dataDir.custom "Doelmaak:"> <!ENTITY zotero.preferences.dataDir.choose "Kies..."> <!ENTITY zotero.preferences.dataDir.reveal "Show Data Directory"> diff --git a/chrome/locale/ar/zotero/preferences.dtd b/chrome/locale/ar/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "اظهار خطائص ترميز الحروف عند التصدير"> <!ENTITY zotero.preferences.dataDir "مكان تخزين البيانات"> -<!ENTITY zotero.preferences.dataDir.useProfile "استخدم مجلد الملف الشخصي لفايرفوكس"> <!ENTITY zotero.preferences.dataDir.custom "تخصيص:"> <!ENTITY zotero.preferences.dataDir.choose "اختر..."> <!ENTITY zotero.preferences.dataDir.reveal "عرض مجلد البيانات"> diff --git a/chrome/locale/bg-BG/zotero/preferences.dtd b/chrome/locale/bg-BG/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Показва опция за символният код при експорт."> <!ENTITY zotero.preferences.dataDir "Място за съхранение"> -<!ENTITY zotero.preferences.dataDir.useProfile "Използва папката с профила на Firefox"> <!ENTITY zotero.preferences.dataDir.custom "Потребителски"> <!ENTITY zotero.preferences.dataDir.choose "Избор..."> <!ENTITY zotero.preferences.dataDir.reveal "Показва папката с дани"> diff --git a/chrome/locale/ca-AD/zotero/preferences.dtd b/chrome/locale/ca-AD/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Display character encoding option on export"> <!ENTITY zotero.preferences.dataDir "Lloc d'emmagatzematge"> -<!ENTITY zotero.preferences.dataDir.useProfile "Fer servir el directori del perfil del Firefox"> <!ENTITY zotero.preferences.dataDir.custom "Personalitzat:"> <!ENTITY zotero.preferences.dataDir.choose "Escull..."> <!ENTITY zotero.preferences.dataDir.reveal "Mostra el directori de dades"> diff --git a/chrome/locale/cs-CZ/zotero/preferences.dtd b/chrome/locale/cs-CZ/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Zobrazit při exportu možnost zvolit kódování"> <!ENTITY zotero.preferences.dataDir "Umístění Datového adresáře"> -<!ENTITY zotero.preferences.dataDir.useProfile "Použít adresář profilu Firefoxu"> <!ENTITY zotero.preferences.dataDir.custom "Vlastní:"> <!ENTITY zotero.preferences.dataDir.choose "Vybrat..."> <!ENTITY zotero.preferences.dataDir.reveal "Ukázat Datový adresář"> diff --git a/chrome/locale/da-DK/zotero/preferences.dtd b/chrome/locale/da-DK/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Display character encoding option on export"> <!ENTITY zotero.preferences.dataDir "Storage Location"> -<!ENTITY zotero.preferences.dataDir.useProfile "Use Firefox profile directory"> <!ENTITY zotero.preferences.dataDir.custom "Custom:"> <!ENTITY zotero.preferences.dataDir.choose "Choose..."> <!ENTITY zotero.preferences.dataDir.reveal "Show Data Directory"> diff --git a/chrome/locale/da-DK/zotero/zotero.properties b/chrome/locale/da-DK/zotero/zotero.properties @@ -257,7 +257,7 @@ itemFields.rights=Rettigheder itemFields.series=Tidsskrift itemFields.volume=Årgang itemFields.issue=Bind -itemFields.edition=Udgavve +itemFields.edition=Udgave itemFields.place=Sted itemFields.publisher=Udgiver itemFields.pages=Sider diff --git a/chrome/locale/de/zotero/preferences.dtd b/chrome/locale/de/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Option für Zeichenkodierung beim Export anzeigen"> <!ENTITY zotero.preferences.dataDir "Speicherort"> -<!ENTITY zotero.preferences.dataDir.useProfile "Verwende den Firefox-Profil-Ordner"> <!ENTITY zotero.preferences.dataDir.custom "Eigene:"> <!ENTITY zotero.preferences.dataDir.choose "Auswählen..."> <!ENTITY zotero.preferences.dataDir.reveal "Datenverzeichnis anzeigen"> diff --git a/chrome/locale/el-GR/zotero/preferences.dtd b/chrome/locale/el-GR/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Display character encoding option on export"> <!ENTITY zotero.preferences.dataDir "Storage Location"> -<!ENTITY zotero.preferences.dataDir.useProfile "Use Firefox profile directory"> <!ENTITY zotero.preferences.dataDir.custom "Custom:"> <!ENTITY zotero.preferences.dataDir.choose "Choose..."> <!ENTITY zotero.preferences.dataDir.reveal "Show Data Directory"> diff --git a/chrome/locale/en-US/zotero/preferences.dtd b/chrome/locale/en-US/zotero/preferences.dtd @@ -171,7 +171,7 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Display character encoding option on export"> <!ENTITY zotero.preferences.dataDir "Data Directory Location"> -<!ENTITY zotero.preferences.dataDir.useProfile "Use Firefox profile directory"> +<!ENTITY zotero.preferences.dataDir.useProfile "Use profile directory"> <!ENTITY zotero.preferences.dataDir.custom "Custom:"> <!ENTITY zotero.preferences.dataDir.choose "Choose..."> <!ENTITY zotero.preferences.dataDir.reveal "Show Data Directory"> diff --git a/chrome/locale/es-ES/zotero/preferences.dtd b/chrome/locale/es-ES/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Display character encoding option on export"> <!ENTITY zotero.preferences.dataDir "Lugar de almacenamiento"> -<!ENTITY zotero.preferences.dataDir.useProfile "Usar el directorio del perfil de usuario en Firefox"> <!ENTITY zotero.preferences.dataDir.custom "Especial:"> <!ENTITY zotero.preferences.dataDir.choose "Elegir..."> <!ENTITY zotero.preferences.dataDir.reveal "Mostrar el directorio de datos"> diff --git a/chrome/locale/et-EE/zotero/preferences.dtd b/chrome/locale/et-EE/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Näidata ekspordi puhul tähtede kodeeringut"> <!ENTITY zotero.preferences.dataDir "Lao asukoht"> -<!ENTITY zotero.preferences.dataDir.useProfile "Kasutada Firefoxi profiili kataloogi"> <!ENTITY zotero.preferences.dataDir.custom "Oma valik:"> <!ENTITY zotero.preferences.dataDir.choose "Valida..."> <!ENTITY zotero.preferences.dataDir.reveal "Andmete kataloogi näitamine"> diff --git a/chrome/locale/eu-ES/zotero/preferences.dtd b/chrome/locale/eu-ES/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Display character encoding option on export"> <!ENTITY zotero.preferences.dataDir "Data Directory Location"> -<!ENTITY zotero.preferences.dataDir.useProfile "Use Firefox profile directory"> <!ENTITY zotero.preferences.dataDir.custom "Custom:"> <!ENTITY zotero.preferences.dataDir.choose "Choose..."> <!ENTITY zotero.preferences.dataDir.reveal "Show Data Directory"> diff --git a/chrome/locale/fa/zotero/preferences.dtd b/chrome/locale/fa/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "نمایش گزینه کدبندی نویسهها در موقع صدور"> <!ENTITY zotero.preferences.dataDir "محل ذخیره اطلاعات"> -<!ENTITY zotero.preferences.dataDir.useProfile "استفاده از پوشه پروفایل فایرفاکس"> <!ENTITY zotero.preferences.dataDir.custom "محل دلخواه:"> <!ENTITY zotero.preferences.dataDir.choose "انتخاب..."> <!ENTITY zotero.preferences.dataDir.reveal "نمایش محل ذخیره اطلاعات"> diff --git a/chrome/locale/fi-FI/zotero/preferences.dtd b/chrome/locale/fi-FI/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Display character encoding option on export"> <!ENTITY zotero.preferences.dataDir "Storage Location"> -<!ENTITY zotero.preferences.dataDir.useProfile "Use Firefox profile directory"> <!ENTITY zotero.preferences.dataDir.custom "Custom:"> <!ENTITY zotero.preferences.dataDir.choose "Choose..."> <!ENTITY zotero.preferences.dataDir.reveal "Show Data Directory"> diff --git a/chrome/locale/fr-FR/zotero/preferences.dtd b/chrome/locale/fr-FR/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Afficher l'option de codage de caractères à l'exportation"> <!ENTITY zotero.preferences.dataDir "Emplacement du répertoire contenant les données"> -<!ENTITY zotero.preferences.dataDir.useProfile "Utiliser le répertoire de profil de Firefox"> <!ENTITY zotero.preferences.dataDir.custom "Personnalisé :"> <!ENTITY zotero.preferences.dataDir.choose "Sélectionner…"> <!ENTITY zotero.preferences.dataDir.reveal "Afficher le répertoire contenant les données"> diff --git a/chrome/locale/gl-ES/zotero/preferences.dtd b/chrome/locale/gl-ES/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Amosar opción de codificación de caracteres na exportación"> <!ENTITY zotero.preferences.dataDir "Localización de almacenamento"> -<!ENTITY zotero.preferences.dataDir.useProfile "Usar o directorio de perfís de Firefox"> <!ENTITY zotero.preferences.dataDir.custom "Personalizado:"> <!ENTITY zotero.preferences.dataDir.choose "Escoller..."> <!ENTITY zotero.preferences.dataDir.reveal "Mostrar Directorio de Datos"> diff --git a/chrome/locale/he-IL/zotero/preferences.dtd b/chrome/locale/he-IL/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Display character encoding option on export"> <!ENTITY zotero.preferences.dataDir "מיקום אחסון"> -<!ENTITY zotero.preferences.dataDir.useProfile "Use Firefox profile directory"> <!ENTITY zotero.preferences.dataDir.custom "מותאם אישית:"> <!ENTITY zotero.preferences.dataDir.choose "בחר..."> <!ENTITY zotero.preferences.dataDir.reveal "Show Data Directory"> diff --git a/chrome/locale/hr-HR/zotero/preferences.dtd b/chrome/locale/hr-HR/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Display character encoding option on export"> <!ENTITY zotero.preferences.dataDir "Storage Location"> -<!ENTITY zotero.preferences.dataDir.useProfile "Use Firefox profile directory"> <!ENTITY zotero.preferences.dataDir.custom "Custom:"> <!ENTITY zotero.preferences.dataDir.choose "Choose..."> <!ENTITY zotero.preferences.dataDir.reveal "Show Data Directory"> diff --git a/chrome/locale/hu-HU/zotero/preferences.dtd b/chrome/locale/hu-HU/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "A karakterkódolás beállításainak mutatása exportálás során"> <!ENTITY zotero.preferences.dataDir "Adatok mentése ide:"> -<!ENTITY zotero.preferences.dataDir.useProfile "Firefox profilkönyvtár"> <!ENTITY zotero.preferences.dataDir.custom "Egyéni:"> <!ENTITY zotero.preferences.dataDir.choose "Tallózás..."> <!ENTITY zotero.preferences.dataDir.reveal "Az adatkönyvtár mutatása"> diff --git a/chrome/locale/is-IS/zotero/preferences.dtd b/chrome/locale/is-IS/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Display character encoding option on export"> <!ENTITY zotero.preferences.dataDir "Storage Location"> -<!ENTITY zotero.preferences.dataDir.useProfile "Use Firefox profile directory"> <!ENTITY zotero.preferences.dataDir.custom "Custom:"> <!ENTITY zotero.preferences.dataDir.choose "Choose..."> <!ENTITY zotero.preferences.dataDir.reveal "Show Data Directory"> diff --git a/chrome/locale/it-IT/zotero/preferences.dtd b/chrome/locale/it-IT/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Display character encoding option on export"> <!ENTITY zotero.preferences.dataDir "Posizione salvataggio"> -<!ENTITY zotero.preferences.dataDir.useProfile "Utilizza la cartella del profilo di Firefox"> <!ENTITY zotero.preferences.dataDir.custom "Personalizza:"> <!ENTITY zotero.preferences.dataDir.choose "Sfoglia..."> <!ENTITY zotero.preferences.dataDir.reveal "Visualizza la cartella dati"> diff --git a/chrome/locale/ja-JP/zotero/preferences.dtd b/chrome/locale/ja-JP/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Display character encoding option on export"> <!ENTITY zotero.preferences.dataDir "保管場所"> -<!ENTITY zotero.preferences.dataDir.useProfile "Firefoxプロファイルダイレクトリーを使用する"> <!ENTITY zotero.preferences.dataDir.custom "カストム:"> <!ENTITY zotero.preferences.dataDir.choose "選択する..."> <!ENTITY zotero.preferences.dataDir.reveal "データ・ディレクトリーを表示"> diff --git a/chrome/locale/ko-KR/zotero/preferences.dtd b/chrome/locale/ko-KR/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Display character encoding option on export"> <!ENTITY zotero.preferences.dataDir "저장 위치"> -<!ENTITY zotero.preferences.dataDir.useProfile "Firefox 프로필 디렉토리 이용"> <!ENTITY zotero.preferences.dataDir.custom "사용자 지정:"> <!ENTITY zotero.preferences.dataDir.choose "선택..."> <!ENTITY zotero.preferences.dataDir.reveal "자료 디렉토리 표시"> diff --git a/chrome/locale/mn-MN/zotero/preferences.dtd b/chrome/locale/mn-MN/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Display character encoding option on export"> <!ENTITY zotero.preferences.dataDir "Storage Location"> -<!ENTITY zotero.preferences.dataDir.useProfile "Use Firefox profile directory"> <!ENTITY zotero.preferences.dataDir.custom "Custom:"> <!ENTITY zotero.preferences.dataDir.choose "Choose..."> <!ENTITY zotero.preferences.dataDir.reveal "Show Data Directory"> diff --git a/chrome/locale/nb-NO/zotero/preferences.dtd b/chrome/locale/nb-NO/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Display character encoding option on export"> <!ENTITY zotero.preferences.dataDir "Lagringsplass"> -<!ENTITY zotero.preferences.dataDir.useProfile "Bruk profilmappa til Firefox."> <!ENTITY zotero.preferences.dataDir.custom "Egendefinert:"> <!ENTITY zotero.preferences.dataDir.choose "Velg..."> <!ENTITY zotero.preferences.dataDir.reveal "Vis datamappe"> diff --git a/chrome/locale/nl-NL/zotero/preferences.dtd b/chrome/locale/nl-NL/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Tekensetcodering kiezen bij exporteren"> <!ENTITY zotero.preferences.dataDir "Opslaglocatie"> -<!ENTITY zotero.preferences.dataDir.useProfile "Gebruik de profielmap van Firefox"> <!ENTITY zotero.preferences.dataDir.custom "Aangepast:"> <!ENTITY zotero.preferences.dataDir.choose "Kiezen..."> <!ENTITY zotero.preferences.dataDir.reveal "Opslagmap tonen"> diff --git a/chrome/locale/nn-NO/zotero/preferences.dtd b/chrome/locale/nn-NO/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Display character encoding option on export"> <!ENTITY zotero.preferences.dataDir "Lagringsplass"> -<!ENTITY zotero.preferences.dataDir.useProfile "Bruk profilmappa til Firefox."> <!ENTITY zotero.preferences.dataDir.custom "Egendefinert:"> <!ENTITY zotero.preferences.dataDir.choose "Vel..."> <!ENTITY zotero.preferences.dataDir.reveal "Vis datamappe"> diff --git a/chrome/locale/pl-PL/zotero/preferences.dtd b/chrome/locale/pl-PL/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Wyświetl opcje kodowania znaków przy eksporcie"> <!ENTITY zotero.preferences.dataDir "Miejsce przechowywania:"> -<!ENTITY zotero.preferences.dataDir.useProfile "Użyj katalogu profilu Firefoksa"> <!ENTITY zotero.preferences.dataDir.custom "Określ katalog:"> <!ENTITY zotero.preferences.dataDir.choose "Przeglądaj"> <!ENTITY zotero.preferences.dataDir.reveal "Wyświetl katalog bazy danych"> diff --git a/chrome/locale/pt-BR/zotero/preferences.dtd b/chrome/locale/pt-BR/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Exibir opção de codificação de caracteres ao exportar"> <!ENTITY zotero.preferences.dataDir "Localização do armazenamento"> -<!ENTITY zotero.preferences.dataDir.useProfile "Usar o diretório do perfil do usuário Firefox"> <!ENTITY zotero.preferences.dataDir.custom "Personalizado:"> <!ENTITY zotero.preferences.dataDir.choose "Escolha..."> <!ENTITY zotero.preferences.dataDir.reveal "Exibir diretório de dados"> diff --git a/chrome/locale/pt-PT/zotero/preferences.dtd b/chrome/locale/pt-PT/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Mostrar opção de codificação de caracteres ao exportar"> <!ENTITY zotero.preferences.dataDir "Local de Armazenamento"> -<!ENTITY zotero.preferences.dataDir.useProfile "Usar pasta de perfil do Firefox"> <!ENTITY zotero.preferences.dataDir.custom "Outra:"> <!ENTITY zotero.preferences.dataDir.choose "Escolher..."> <!ENTITY zotero.preferences.dataDir.reveal "Mostrar Pasta de Dados"> diff --git a/chrome/locale/ro-RO/zotero/preferences.dtd b/chrome/locale/ro-RO/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Afișează la export opțiunea pentru codificarea caracterelor"> <!ENTITY zotero.preferences.dataDir "Locație pentru stocare"> -<!ENTITY zotero.preferences.dataDir.useProfile "Folosește dosarul de profil din Firefox"> <!ENTITY zotero.preferences.dataDir.custom "Personalizare:"> <!ENTITY zotero.preferences.dataDir.choose "Alege..."> <!ENTITY zotero.preferences.dataDir.reveal "Afișează directorul de date"> diff --git a/chrome/locale/ru-RU/zotero/preferences.dtd b/chrome/locale/ru-RU/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Показывать окно выбора кодировки символов при экспорте"> <!ENTITY zotero.preferences.dataDir "Расположение папки с данными"> -<!ENTITY zotero.preferences.dataDir.useProfile "Использовать папку профиля Firefox"> <!ENTITY zotero.preferences.dataDir.custom "Пользовательская:"> <!ENTITY zotero.preferences.dataDir.choose "Выбрать…"> <!ENTITY zotero.preferences.dataDir.reveal "Показать папку с данными"> diff --git a/chrome/locale/sk-SK/zotero/preferences.dtd b/chrome/locale/sk-SK/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Zobraziť voľbu kódovania pri exportovaní"> <!ENTITY zotero.preferences.dataDir "Umiestnenie priečinku s dátami"> -<!ENTITY zotero.preferences.dataDir.useProfile "Použiť priečinok, do ktorého Firefox ukladá používateľské dáta"> <!ENTITY zotero.preferences.dataDir.custom "Vlastné umiestnenie:"> <!ENTITY zotero.preferences.dataDir.choose "Prehľadávať..."> <!ENTITY zotero.preferences.dataDir.reveal "Zobraziť priečinok s dátami"> diff --git a/chrome/locale/sl-SI/zotero/preferences.dtd b/chrome/locale/sl-SI/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Pri izvozu ponudi možnost kodiranja znakov"> <!ENTITY zotero.preferences.dataDir "Mesto shranjevanja"> -<!ENTITY zotero.preferences.dataDir.useProfile "Uporabi mapo profila za Firefox"> <!ENTITY zotero.preferences.dataDir.custom "Po meri:"> <!ENTITY zotero.preferences.dataDir.choose "Izberi ..."> <!ENTITY zotero.preferences.dataDir.reveal "Pokaži mapo s podatki"> diff --git a/chrome/locale/sr-RS/zotero/preferences.dtd b/chrome/locale/sr-RS/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Display character encoding option on export"> <!ENTITY zotero.preferences.dataDir "Место за складиштење"> -<!ENTITY zotero.preferences.dataDir.useProfile "Користи Firefox директоријум за профил"> <!ENTITY zotero.preferences.dataDir.custom "Прилагођено:"> <!ENTITY zotero.preferences.dataDir.choose "Изабери..."> <!ENTITY zotero.preferences.dataDir.reveal "Прикажи директоријум података"> diff --git a/chrome/locale/sv-SE/zotero/preferences.dtd b/chrome/locale/sv-SE/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Visa val för teckenkod vid export"> <!ENTITY zotero.preferences.dataDir "Lagringsplats"> -<!ENTITY zotero.preferences.dataDir.useProfile "Använd profilkatalogen för Firefox"> <!ENTITY zotero.preferences.dataDir.custom "Egen:"> <!ENTITY zotero.preferences.dataDir.choose "Välj..."> <!ENTITY zotero.preferences.dataDir.reveal "Visa datakatalog"> diff --git a/chrome/locale/th-TH/zotero/preferences.dtd b/chrome/locale/th-TH/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Display character encoding option on export"> <!ENTITY zotero.preferences.dataDir "ที่ตั้งของพื้นที่เก็บข้อมูล"> -<!ENTITY zotero.preferences.dataDir.useProfile "ใช้ไดเรคทอรีของโปรไฟล์ไฟร์ฟ๊อกซ์"> <!ENTITY zotero.preferences.dataDir.custom "Custom:"> <!ENTITY zotero.preferences.dataDir.choose "โปรดเลือก..."> <!ENTITY zotero.preferences.dataDir.reveal "แสดงไดเรคทอรีข้อมูล"> diff --git a/chrome/locale/tr-TR/zotero/preferences.dtd b/chrome/locale/tr-TR/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Dışarı aktarırken karakter kodlama seçeneğini göster"> <!ENTITY zotero.preferences.dataDir "Veri Dizini Konumu"> -<!ENTITY zotero.preferences.dataDir.useProfile "Firefox profil dizinini kullan"> <!ENTITY zotero.preferences.dataDir.custom "Özel:"> <!ENTITY zotero.preferences.dataDir.choose "Seç..."> <!ENTITY zotero.preferences.dataDir.reveal "Veri Dizinini Göster"> diff --git a/chrome/locale/vi-VN/zotero/preferences.dtd b/chrome/locale/vi-VN/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Display character encoding option on export"> <!ENTITY zotero.preferences.dataDir "Nơi lưu trữ dữ liệu"> -<!ENTITY zotero.preferences.dataDir.useProfile "Dùng thư mục profile của Firefox"> <!ENTITY zotero.preferences.dataDir.custom "Tùy biến:"> <!ENTITY zotero.preferences.dataDir.choose "Chọn..."> <!ENTITY zotero.preferences.dataDir.reveal "Hiển thị Thư mục dữ liệu"> diff --git a/chrome/locale/zh-CN/zotero/preferences.dtd b/chrome/locale/zh-CN/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "Display character encoding option on export"> <!ENTITY zotero.preferences.dataDir "存储位置"> -<!ENTITY zotero.preferences.dataDir.useProfile "使用 Firefox 配置目录"> <!ENTITY zotero.preferences.dataDir.custom "自定义:"> <!ENTITY zotero.preferences.dataDir.choose "选择..."> <!ENTITY zotero.preferences.dataDir.reveal "显示数据目录"> diff --git a/chrome/locale/zh-TW/zotero/preferences.dtd b/chrome/locale/zh-TW/zotero/preferences.dtd @@ -167,7 +167,6 @@ <!ENTITY zotero.preferences.charset.displayExportOption "匯出時顯示字元編碼的選項"> <!ENTITY zotero.preferences.dataDir "儲存位置"> -<!ENTITY zotero.preferences.dataDir.useProfile "使用 Firefox 個人設定檔目錄"> <!ENTITY zotero.preferences.dataDir.custom "自訂:"> <!ENTITY zotero.preferences.dataDir.choose "選擇…"> <!ENTITY zotero.preferences.dataDir.reveal "顯示資料目錄"> diff --git a/chrome/skin/default/zotero/preferences.css b/chrome/skin/default/zotero/preferences.css @@ -15,6 +15,11 @@ radio[pane] -moz-box-pack: end; } +#export-citePaperJournalArticleURL +{ + font-size: .85em; +} + .statusLine { margin: .75em 0; @@ -203,11 +208,6 @@ grid row hbox:first-child height: 1em; } -#quickCopy-instructions, #quickCopy-macWarning, #export-citePaperJournalArticleURL -{ - font-size: .85em; -} - #quickCopy-siteSettings-rows::-moz-tree-cell(quickCopy-copyAsHTML) { /* DEBUG: possible to center checkmark here instead of with spaces? diff --git a/userdata.sql b/userdata.sql @@ -378,7 +378,7 @@ CREATE TABLE customBaseFieldMappings ( PRIMARY KEY (customItemTypeID, baseFieldID, customFieldID), FOREIGN KEY (customItemTypeID) REFERENCES customItemTypes(customItemTypeID), FOREIGN KEY (baseFieldID) REFERENCES fields(fieldID), - FOREIGN KEY (customFieldID) REFERENCES fields(customFieldID) + FOREIGN KEY (customFieldID) REFERENCES customFields(customFieldID) ); CREATE INDEX customBaseFieldMappings_baseFieldID ON customBaseFieldMappings(baseFieldID); CREATE INDEX customBaseFieldMappings_customFieldID ON customBaseFieldMappings(customFieldID);