From cf9d3c67b4e2715d3f7968c3dd44b0eff5aeb9ef Mon Sep 17 00:00:00 2001 From: Simon Kornblith Date: Tue, 1 Mar 2011 22:48:17 +0000 Subject: [PATCH] merge r8220-8419 to 2.1 branch --- chrome/content/zotero/fileInterface.js | 2 +- chrome/content/zotero/locateMenu.js | 244 ++++++++++------ chrome/content/zotero/tab.js | 14 +- chrome/content/zotero/xpcom/citeproc.js | 38 ++- chrome/content/zotero/xpcom/data/item.js | 10 +- chrome/content/zotero/xpcom/fulltext.js | 14 +- chrome/content/zotero/xpcom/integration.js | 74 +++-- chrome/content/zotero/xpcom/itemTreeView.js | 2 +- chrome/content/zotero/xpcom/quickCopy.js | 3 +- chrome/content/zotero/xpcom/schema.js | 70 ++++- chrome/content/zotero/xpcom/storage.js | 73 +++-- chrome/content/zotero/xpcom/sync.js | 34 ++- .../xpcom/translation/browser_firefox.js | 7 +- .../zotero/xpcom/translation/item_local.js | 6 + .../zotero/xpcom/translation/translate.js | 12 +- chrome/content/zotero/zoteroPane.js | 18 +- chrome/content/zotero/zoteroPane.xul | 1 + chrome/locale/fr-FR/zotero/zotero.properties | 1 + chrome/locale/sv-SE/zotero/about.dtd | 2 +- chrome/locale/sv-SE/zotero/preferences.dtd | 88 +++--- chrome/locale/sv-SE/zotero/searchbox.dtd | 6 +- chrome/locale/sv-SE/zotero/standalone.dtd | 46 +-- .../locale/sv-SE/zotero/timeline.properties | 12 +- chrome/locale/sv-SE/zotero/zotero.dtd | 96 +++---- chrome/locale/sv-SE/zotero/zotero.properties | 268 +++++++++--------- .../skin/default/zotero/bindings/itembox.css | 6 + install.rdf | 2 +- repotime.txt | 2 +- translators/ACM.js | 7 +- translators/Bibliontology RDF.js | 4 +- .../Bibliothèque nationale de France.js | 22 +- translators/Bookmarks.js | 124 ++++++++ translators/EBSCOhost.js | 26 +- translators/JSTOR.js | 30 +- translators/PEP Web.js | 10 +- 35 files changed, 883 insertions(+), 491 deletions(-) create mode 100644 translators/Bookmarks.js diff --git a/chrome/content/zotero/fileInterface.js b/chrome/content/zotero/fileInterface.js index 83c40b660a..1aad84dc47 100644 --- a/chrome/content/zotero/fileInterface.js +++ b/chrome/content/zotero/fileInterface.js @@ -188,7 +188,7 @@ var Zotero_File_Interface = new function() { } else { Components.classes["@mozilla.org/widget/clipboardhelper;1"] .getService(Components.interfaces.nsIClipboardHelper) - .copyString(obj.output.replace(/\r\n/g, "\n")); + .copyString(obj.string.replace(/\r\n/g, "\n")); } } diff --git a/chrome/content/zotero/locateMenu.js b/chrome/content/zotero/locateMenu.js index ba7dbb6735..f67422c93b 100644 --- a/chrome/content/zotero/locateMenu.js +++ b/chrome/content/zotero/locateMenu.js @@ -45,60 +45,17 @@ var Zotero_LocateMenu = new function() { var selectedItems = [item for each(item in ZoteroPane.getSelectedItems()) if(!item.isNote())]; if(selectedItems.length) { - var optionsToShow = {}; - - // check which view options are available - for each(var item in selectedItems) { - for(var viewOption in ViewOptions) { - if(!optionsToShow[viewOption]) { - Zotero.debug("testing "+viewOption); - optionsToShow[viewOption] = ViewOptions[viewOption].canHandleItem(item); - } - } - } - - // add available view options to menu - for(var viewOption in optionsToShow) { - if(!optionsToShow[viewOption]) continue; - - var menuitem = _createMenuItem(Zotero.getString("locate."+viewOption+".label"), - null, Zotero.getString("locate."+viewOption+".tooltip")); - menuitem.setAttribute("class", "menuitem-iconic"); - Zotero.debug("icon is "+ViewOptions[viewOption].icon); - menuitem.setAttribute("image", ViewOptions[viewOption].icon); - locateMenu.appendChild(menuitem); - - let myViewOption = viewOption; - menuitem.addEventListener("command", function(event) { - ViewOptions[myViewOption].handleItems(selectedItems, event); - }, false) - } - - // check for custom locate engines - var customEngines = Zotero.LocateManager.getVisibleEngines(); - var availableEngines = []; - - // check which engines can translate an item - for each(var engine in customEngines) { - // require a submission for at least one selected item - for each(var item in selectedItems) { - if(engine.getItemSubmission(item)) { - availableEngines.push(engine); - break; - } - } - } + _addViewOptions(locateMenu, selectedItems, true, true); + var availableEngines = _getAvailableLocateEngines(selectedItems); // add engines that are available for selected items if(availableEngines.length) { + _addLocateEngines(locateMenu, availableEngines, true); + } + + // add separator at end if necessary + if(locateMenu.lastChild.tagName !== "menuseparator") { locateMenu.appendChild(document.createElement("menuseparator")); - for each(var engine in availableEngines) { - var menuitem = _createMenuItem(engine.name, null, engine.description); - menuitem.setAttribute("class", "menuitem-iconic"); - menuitem.setAttribute("image", engine.icon); - locateMenu.appendChild(menuitem); - menuitem.addEventListener("command", _locateItem, false); - } } } else { // add "no items selected" @@ -129,15 +86,142 @@ var Zotero_LocateMenu = new function() { } } - // add manage menu item - locateMenu.appendChild(document.createElement("menuseparator")); - var menuitem = document.createElement("menuitem"); menuitem = _createMenuItem(Zotero.getString("locate.manageLocateEngines"), "zotero-manage-locate-menu"); menuitem.addEventListener("command", _openLocateEngineManager, false); locateMenu.appendChild(menuitem); } + /** + * Clear the bottom part of the context menu and add locate options + * @param {menupopup} menu The menu to add context menu items to + */ + this.buildContextMenu = function(menu) { + // get selected items + var selectedItems = [item for each(item in ZoteroPane.getSelectedItems()) if(!item.isNote())]; + + // if no items selected, stop now + if(!selectedItems.length) return; + + // add view options + _addViewOptions(menu, selectedItems); + + /*// look for locate engines + var availableEngines = _getAvailableLocateEngines(selectedItems); + if(availableEngines.length) { + // if locate engines are available, make a new submenu + var submenu = document.createElement("menu"); + submenu.setAttribute("zotero-locate", "true"); + submenu.setAttribute("label", Zotero.getString("locate.locateEngines")); + + // add locate engines to the submenu + _addLocateEngines(submenuPopup, availableEngines, true); + + submenu.appendChild(submenuPopup); + menu.appendChild(submenu); + }*/ + } + + function _addViewOption(selectedItems, optionName, optionObject, showIcons) { + var menuitem = _createMenuItem(Zotero.getString("locate."+optionName+".label"), + null, Zotero.getString("locate."+optionName+".tooltip")); + if(showIcons) { + menuitem.setAttribute("class", "menuitem-iconic"); + menuitem.setAttribute("image", optionObject.icon); + } + menuitem.setAttribute("zotero-locate", "true"); + + menuitem.addEventListener("command", function(event) { + optionObject.handleItems(selectedItems, event); + }, false) + return menuitem; + } + + /** + * Add view options to a menu + * @param {menupopup} locateMenu The menu to add menu items to + * @param {Zotero.Item[]} selectedItems The items to create view options based upon + * @param {Boolean} showIcons Whether menu items should have associated icons + * @param {Boolean} addExtraOptions Whether to add options that start with "_" below the separator + */ + function _addViewOptions(locateMenu, selectedItems, showIcons, addExtraOptions) { + var optionsToShow = {}; + + // check which view options are available + for each(var item in selectedItems) { + for(var viewOption in ViewOptions) { + if(!optionsToShow[viewOption]) { + optionsToShow[viewOption] = ViewOptions[viewOption].canHandleItem(item); + } + } + } + + // add available view options to menu + var lastNode = locateMenu.hasChildNodes() ? locateMenu.firstChild : null; + var haveOptions = false; + for(var viewOption in optionsToShow) { + if(viewOption[0] === "_" || !optionsToShow[viewOption]) continue; + locateMenu.insertBefore(_addViewOption(selectedItems, viewOption, + ViewOptions[viewOption], showIcons), lastNode); + haveOptions = true; + } + + if(haveOptions) { + var sep = document.createElement("menuseparator"); + sep.setAttribute("zotero-locate", "true"); + locateMenu.insertBefore(sep, lastNode); + } + + if(addExtraOptions) { + for each(var viewOption in [key for(key in optionsToShow) if(key[0] === "_")]) { + if(viewOption[0] !== "_" || !optionsToShow[viewOption]) continue; + locateMenu.insertBefore(_addViewOption(selectedItems, viewOption.substr(1), + ViewOptions[viewOption], showIcons), lastNode); + } + } + } + + /** + * Get available locate engines that can handle a set of items + * @param {Zotero.Item[]} selectedItems The items to look or locate engines for + * @return {Zotero.LocateManater.LocateEngine[]} An array of locate engines capable of handling + * the given items + */ + function _getAvailableLocateEngines(selectedItems) { + // check for custom locate engines + var customEngines = Zotero.LocateManager.getVisibleEngines(); + var availableEngines = []; + + // check which engines can translate an item + for each(var engine in customEngines) { + // require a submission for at least one selected item + for each(var item in selectedItems) { + if(engine.getItemSubmission(item)) { + availableEngines.push(engine); + break; + } + } + } + + return availableEngines; + } + + /** + * Add locate engine options to a menu + * @param {menupopup} menu The menu to add menu items to + * @param {Zotero.LocateManater.LocateEngine[]} engines The list of engines to add to the menu + * @param {Boolean} showIcons Whether menu items should have associated icons + */ + function _addLocateEngines(menu, engines, showIcons) { + for each(var engine in engines) { + var menuitem = _createMenuItem(engine.name, null, engine.description); + menuitem.setAttribute("class", "menuitem-iconic"); + menuitem.setAttribute("image", engine.icon); + menu.appendChild(menuitem); + menuitem.addEventListener("command", _locateItem, false); + } + } + /** * Create a new menuitem XUL element */ @@ -199,8 +283,10 @@ var Zotero_LocateMenu = new function() { var postDatas = []; for each(var item in selectedItems) { var submission = selectedEngine.getItemSubmission(item); - urls.push(submission.uri.spec); - postDatas.push(submission.postData); + if(submission) { + urls.push(submission.uri.spec); + postDatas.push(submission.postData); + } } Zotero.debug("Loading using "+selectedEngine.name); @@ -254,7 +340,7 @@ var Zotero_LocateMenu = new function() { var attachments = (item.isAttachment() ? [item] : Zotero.Items.get(item.getBestAttachments())); for each(var attachment in attachments) { if(mimeTypes.indexOf(attachment.attachmentMIMEType) !== -1 - && item.linkMode != Zotero.Attachments.LINK_MODE_LINKED_URL) return attachment; + && attachment.attachmentLinkMode !== Zotero.Attachments.LINK_MODE_LINKED_URL) return attachment; } return false; } @@ -270,29 +356,28 @@ var Zotero_LocateMenu = new function() { this.canHandleItem = function(item) _getURL(item) !== false; this.handleItems = function(items, event) { - ZoteroPane.loadURI([_getURL(item) for each(item in items)], event); + var urls = [_getURL(item) for each(item in items)]; + ZoteroPane.loadURI([url for each(url in urls) if(url)], event); } function _getURL(item) { // try url field for item and for attachments - var urlFields = [item.getField('url')]; + var urlField = item.getField('url'); + if(urlField) { + var uri = Zotero_LocateMenu.ios.newURI(urlField, null, null); + if(uri && uri.host && uri.scheme !== 'file') return urlField; + } + if(item.isRegularItem()) { var attachments = item.getAttachments(); if(attachments) { - urlFields = urlFields.concat([attachment.getField('url') - for each(attachment in Zotero.Items.get(attachments))]); - } - } - - // look through url fields for non-file:/// attachments - for each(var urlField in urlFields) { - try { - Zotero.debug(urlField); - var uri = Zotero_LocateMenu.ios.newURI(urlField, null, null); - if(uri && uri.host && uri.scheme !== 'file') { - return urlField; + // look through url fields for non-file:/// attachments + for each(var attachment in Zotero.Items.get(attachments)) { + var urlField = attachment.getField('url'); + if(urlField) return urlField; } - } catch(e) {}; + + } } // if no url field, try DOI field @@ -346,7 +431,7 @@ var Zotero_LocateMenu = new function() { for each(var attachment in attachments) { if(!ViewOptions.snapshot.canHandleItem(attachment) && !ViewOptions.pdf.canHandleItem(attachment) - && item.linkMode != Zotero.Attachments.LINK_MODE_LINKED_URL) { + && attachment.attachmentLinkMode !== Zotero.Attachments.LINK_MODE_LINKED_URL) { return attachment; } } @@ -382,15 +467,16 @@ var Zotero_LocateMenu = new function() { function _getBestNonNativeAttachment(item) { var attachments = (item.isAttachment() ? [item] : Zotero.Items.get(item.getBestAttachments())); for each(var attachment in attachments) { - if(attachment.linkMode != Zotero.Attachments.LINK_MODE_LINKED_URL) { + if(attachment.attachmentLinkMode !== Zotero.Attachments.LINK_MODE_LINKED_URL) { var file = attachment.getFile(); if(file) { var ext = Zotero.File.getExtension(file); - if(!attachment.attachmentMIMEType) continue; - if(!Zotero.MIME.hasNativeHandler(attachment.attachmentMIMEType, ext) && - Zotero.MIME.hasInternalHandler(attachment.attachmentMIMEType, ext)) { - return attachment; + if(!attachment.attachmentMIMEType || + Zotero.MIME.hasNativeHandler(attachment.attachmentMIMEType, ext) || + !Zotero.MIME.hasInternalHandler(attachment.attachmentMIMEType, ext)) { + return false; } + return attachment; } } } @@ -437,7 +523,7 @@ var Zotero_LocateMenu = new function() { function _getBestFile(item) { if(item.isAttachment()) { - if(item.linkMode === Zotero.Attachments.LINK_MODE_LINKED_URL) return false + if(item.attachmentLinkMode === Zotero.Attachments.LINK_MODE_LINKED_URL) return false; return item; } else { return Zotero.Items.get(item.getBestAttachment()); @@ -450,7 +536,7 @@ var Zotero_LocateMenu = new function() { * * Should appear only for regular items */ - ViewOptions.libraryLookup = new function() { + ViewOptions._libraryLookup = new function() { this.icon = "chrome://zotero/skin/locate-library-lookup.png"; this.canHandleItem = function(item) item.isRegularItem(); this.handleItems = function(items, event) { diff --git a/chrome/content/zotero/tab.js b/chrome/content/zotero/tab.js index c1ce5ca477..28ea37db9a 100644 --- a/chrome/content/zotero/tab.js +++ b/chrome/content/zotero/tab.js @@ -42,7 +42,6 @@ var ZoteroTab = new function() ? this.containerWindow.gBrowser.tabs : this.containerWindow.gBrowser.mTabs); // loop over all browsers in this window - var containerTab, containerBrowser; for(var i=0; i -1) { + } else if (["publisher", "publisher-place", "edition"].indexOf(this.variables[0]) > -1) { state.transform.setTransformLocale("default-locale"); } func = state.transform.getOutputFunction(); @@ -5283,7 +5285,7 @@ CSL.Node.text = { } else { state.transform.setTransformLocale("locale-pri"); state.transform.setTransformFallback(true); - if (["publisher", "publisher-place"].indexOf(this.variables[0]) > -1) { + if (["publisher", "publisher-place", "edition"].indexOf(this.variables[0]) > -1) { state.transform.setTransformLocale("default-locale"); } func = state.transform.getOutputFunction(); @@ -7106,7 +7108,7 @@ CSL.Util.Names.getCommonTerm = function (state, namesets) { } base_nameset = namesets[0]; varnames = []; - varnames.push(base_nameset.variable); + varnames.push(base_nameset.variable); short_namesets = namesets.slice(1); len = short_namesets.length; for (pos = 0; pos < len; pos += 1) { @@ -7119,7 +7121,12 @@ CSL.Util.Names.getCommonTerm = function (state, namesets) { } } varnames.sort(); - return varnames.join(""); + var combined_terms = varnames.join(""); + if (state.locale[state.opt.lang].terms[combined_terms]) { + return varnames.join(""); + } else { + return false; + } }; CSL.Util.Names.compareNamesets = function (base_nameset, nameset) { var name, pos, len, part, ppos, llen; @@ -7464,7 +7471,7 @@ CSL.Util.substituteStart = function (state, target) { } }; CSL.Util.substituteEnd = function (state, target) { - var func, bib_first_end, bib_other, if_end, choose_end, toplevel, hasval, author_substitute, printing, str; + var func, bib_first_end, bib_other, if_end, choose_end, toplevel, hasval, author_substitute, str; state.build.render_nesting_level += -1; if (state.build.render_nesting_level === 0) { if (state.build.cls) { @@ -7510,13 +7517,14 @@ CSL.Util.substituteEnd = function (state, target) { if (toplevel && hasval) { author_substitute = new CSL.Token("text", CSL.SINGLETON); func = function (state, Item) { - printing = !state.tmp.suppress_decorations; + var text_esc = CSL.Output.Formats[state.opt.mode].text_escape; + var printing = !state.tmp.suppress_decorations; if (printing) { if (!state.tmp.rendered_name) { state.tmp.rendered_name = state.output.string(state, state.tmp.name_node.blobs, false); if (state.tmp.rendered_name) { if (state.tmp.rendered_name === state.tmp.last_rendered_name) { - str = new CSL.Blob(false, state[state.tmp.area].opt["subsequent-author-substitute"]); + str = new CSL.Blob(false, text_esc(state[state.tmp.area].opt["subsequent-author-substitute"])); state.tmp.name_node.blobs = [str]; } state.tmp.last_rendered_name = state.tmp.rendered_name; diff --git a/chrome/content/zotero/xpcom/data/item.js b/chrome/content/zotero/xpcom/data/item.js index c18c547bf1..a63556d42b 100644 --- a/chrome/content/zotero/xpcom/data/item.js +++ b/chrome/content/zotero/xpcom/data/item.js @@ -3279,8 +3279,8 @@ Zotero.Item.prototype.getBestAttachment = function() { /* * Looks for attachment in the following order: oldest PDF attachment matching parent URL, - * oldest non-PDF attachment matching parent URL, oldest PDF attachment not matching URL, - * old non-PDF attachment not matching URL + * oldest PDF attachment not matching parent URL, oldest non-PDF attachment matching parent URL, + * old non-PDF attachment not matching parent URL * * @return {Array} itemIDs for attachments */ @@ -3296,7 +3296,7 @@ Zotero.Item.prototype.getBestAttachments = function() { + "LEFT JOIN itemDataValues IDV ON (ID.valueID=IDV.valueID) " + "WHERE sourceItemID=? AND linkMode NOT IN (?) " + "AND IA.itemID NOT IN (SELECT itemID FROM deletedItems) " - + "ORDER BY value=? DESC, mimeType='application/pdf' DESC, dateAdded ASC"; + + "ORDER BY mimeType='application/pdf' DESC, value=? DESC, dateAdded ASC"; return Zotero.DB.columnQuery(sql, [this.id, Zotero.Attachments.LINK_MODE_LINKED_URL, url]); } @@ -4129,7 +4129,7 @@ Zotero.Item.prototype.toArray = function (mode) { // Item metadata for (var i in this._itemData) { - arr[Zotero.ItemFields.getName(i)] = this._itemData[i] ? this._itemData[i] + '': ''; + arr[Zotero.ItemFields.getName(i)] = this.getField(i) + ''; } if (mode == 1 || mode == 2) { @@ -4266,7 +4266,7 @@ Zotero.Item.prototype.serialize = function(mode) { // Item metadata for (var i in this._itemData) { - arr.fields[Zotero.ItemFields.getName(i)] = this._itemData[i] ? this._itemData[i] + '' : ''; + arr.fields[Zotero.ItemFields.getName(i)] = this.getField(i) + ''; } if (mode == 1 || mode == 2) { diff --git a/chrome/content/zotero/xpcom/fulltext.js b/chrome/content/zotero/xpcom/fulltext.js index 70ad0d6e5e..f9923a039c 100644 --- a/chrome/content/zotero/xpcom/fulltext.js +++ b/chrome/content/zotero/xpcom/fulltext.js @@ -429,7 +429,12 @@ Zotero.Fulltext = new function(){ var args = [file.path, infoFile.path]; try { - proc.run(true, args, args.length); + if (!Zotero.isFx36) { + proc.runw(true, args, args.length); + } + else { + proc.run(true, args, args.length); + } var totalPages = this.getTotalPagesFromFile(itemID); } catch (e) { @@ -460,7 +465,12 @@ Zotero.Fulltext = new function(){ } args.push(file.path, cacheFile.path); try { - proc.run(true, args, args.length); + if (!Zotero.isFx36) { + proc.runw(true, args, args.length); + } + else { + proc.run(true, args, args.length); + } } catch (e) { Zotero.debug("Error running pdftotext"); diff --git a/chrome/content/zotero/xpcom/integration.js b/chrome/content/zotero/xpcom/integration.js index 2fcc00ea15..ec30655cd1 100644 --- a/chrome/content/zotero/xpcom/integration.js +++ b/chrome/content/zotero/xpcom/integration.js @@ -38,6 +38,7 @@ Zotero.Integration = new function() { var _osascriptFile; var _inProgress = false; var _integrationVersionsOK = null; + var _winUser32; this.sessions = {}; @@ -130,30 +131,6 @@ Zotero.Integration = new function() { * Executes an integration command, first checking to make sure that versions are compatible */ this.execCommand = function execCommand(agent, command, docId) { - var verComp = Components.classes["@mozilla.org/xpcom/version-comparator;1"] - .getService(Components.interfaces.nsIVersionComparator); - function _checkAddons(addons) { - for each(var addon in addons) { - if(!addon) continue; - - if(verComp.compare(INTEGRATION_MIN_VERSION, addon.version) > 0) { - _inProgress = false; - _integrationVersionsOK = false; - Zotero.Integration.activate(); - var msg = Zotero.getString( - "integration.error.incompatibleVersion2", - [Zotero.version, addon.name, INTEGRATION_MIN_VERSION] - ); - Components.classes["@mozilla.org/embedcomp/prompt-service;1"] - .getService(Components.interfaces.nsIPromptService) - .alert(null, Zotero.getString("integration.error.title"), msg); - throw msg; - } - } - _integrationVersionsOK = true; - _callIntegration(agent, command, docId); - } - if(_inProgress) { Zotero.Integration.activate(); Zotero.debug("Integration: Request already in progress; not executing "+agent+" "+command); @@ -163,9 +140,36 @@ Zotero.Integration = new function() { // Check integration component versions if(!_integrationVersionsOK) { + var verComp = Components.classes["@mozilla.org/xpcom/version-comparator;1"] + .getService(Components.interfaces.nsIVersionComparator); + var addonsChecked = false; + function _checkAddons(addons) { + addonsChecked = true; + for each(var addon in addons) { + if(!addon) continue; + + if(verComp.compare(INTEGRATION_MIN_VERSION, addon.version) > 0) { + _inProgress = false; + _integrationVersionsOK = false; + Zotero.Integration.activate(); + var msg = Zotero.getString( + "integration.error.incompatibleVersion2", + [Zotero.version, addon.name, INTEGRATION_MIN_VERSION] + ); + Components.classes["@mozilla.org/embedcomp/prompt-service;1"] + .getService(Components.interfaces.nsIPromptService) + .alert(null, Zotero.getString("integration.error.title"), msg); + throw msg; + } + } + _integrationVersionsOK = true; + _callIntegration(agent, command, docId); + } + if(Zotero.isFx4) { Components.utils.import("resource://gre/modules/AddonManager.jsm"); AddonManager.getAddonsByIDs(INTEGRATION_PLUGINS, _checkAddons); + while(!addonsChecked) Zotero.mainThread.processNextEvent(true); } else { var extMan = Components.classes['@mozilla.org/extensions/manager;1']. getService(Components.interfaces.nsIExtensionManager); @@ -440,6 +444,26 @@ Zotero.Integration = new function() { } else { _executeAppleScript('tell application id "'+BUNDLE_IDS[Zotero.appName]+'" to activate'); } + } else if(Zotero.isWin) { + try { + if(!_winUser32) { + Components.utils.import("resource://gre/modules/ctypes.jsm"); + var lib = ctypes.open("user32.dll"); + _winUser32 = new function() { + this.FindWindow = lib.declare("FindWindowW", ctypes.default_abi, ctypes.int32_t, + ctypes.ustring, ctypes.ustring); + this.SetForegroundWindow = lib.declare("SetForegroundWindow", ctypes.default_abi, ctypes.bool, + ctypes.int32_t); + } + } + + var thWnd = _winUser32.FindWindow(Zotero.appName+"MessageWindow", null); + if(thWnd) _winUser32.SetForegroundWindow(thWnd); + } catch(e) { + // Don't throw if we don't succeed + Components.utils.reportError(e); + return; + } } } @@ -2107,4 +2131,4 @@ Zotero.Integration.URIMap.prototype.getZoteroItemForURIs = function(uris) { } return [zoteroItem, needUpdate]; -} \ No newline at end of file +} diff --git a/chrome/content/zotero/xpcom/itemTreeView.js b/chrome/content/zotero/xpcom/itemTreeView.js index db867560d7..d38f1177e4 100644 --- a/chrome/content/zotero/xpcom/itemTreeView.js +++ b/chrome/content/zotero/xpcom/itemTreeView.js @@ -1869,7 +1869,7 @@ Zotero.ItemTreeView.prototype.onDragStart = function (event) { return; } - var text = obj.output.replace(/\r\n/g, "\n"); + var text = obj.string.replace(/\r\n/g, "\n"); event.dataTransfer.setData("text/plain", text); } diff --git a/chrome/content/zotero/xpcom/quickCopy.js b/chrome/content/zotero/xpcom/quickCopy.js index d789e0e826..dce2eb2f53 100644 --- a/chrome/content/zotero/xpcom/quickCopy.js +++ b/chrome/content/zotero/xpcom/quickCopy.js @@ -151,7 +151,7 @@ Zotero.QuickCopy = new function() { * * |callback| is only necessary if using an export format and should be * a function suitable for Zotero.Translate.setHandler, taking parameters - * |obj| and |worked|. The generated content should be placed in obj.output + * |obj| and |worked|. The generated content should be placed in obj.string * and |worked| should be true if the operation is successful. * * If bibliography format, the process is synchronous and an object @@ -168,6 +168,7 @@ Zotero.QuickCopy = new function() { if (mode == 'export') { var translation = new Zotero.Translate.Export; + translation.noWait = true; // needed not to break drags translation.setItems(items); translation.setTranslator(format); translation.setHandler("done", callback); diff --git a/chrome/content/zotero/xpcom/schema.js b/chrome/content/zotero/xpcom/schema.js index 9d05b3649b..f4dd8692e1 100644 --- a/chrome/content/zotero/xpcom/schema.js +++ b/chrome/content/zotero/xpcom/schema.js @@ -965,7 +965,75 @@ Zotero.Schema = new function(){ // Run a manual update from repository if pref set if (Zotero.Prefs.get('automaticScraperUpdates')) { - this.updateFromRepository(2, callback); + this.updateFromRepository(2, function () { + if (callback) { + callback(); + } + }); + } + + if (callback) { + callback(); + } + } + + + this.resetTranslators = function (callback, skipUpdate) { + Zotero.debug("Resetting translators"); + + var sql = "DELETE FROM version WHERE schema IN " + + "('translators', 'repository', 'lastcheck')"; + Zotero.DB.query(sql); + _dbVersions.repository = null; + _dbVersions.lastcheck = null; + + var translatorsDir = Zotero.getTranslatorsDirectory(); + translatorsDir.remove(true); + Zotero.getTranslatorsDirectory(); // recreate directory + Zotero.Translators.init(); + this.updateBundledFiles('translators'); + + // Run a manual update from repository if pref set + if (Zotero.Prefs.get('automaticScraperUpdates')) { + this.updateFromRepository(2, function () { + if (callback) { + callback(); + } + }); + } + + if (callback) { + callback(); + } + } + + + this.resetStyles = function (callback) { + Zotero.debug("Resetting translators and styles"); + + var sql = "DELETE FROM version WHERE schema IN " + + "('styles', 'repository', 'lastcheck')"; + Zotero.DB.query(sql); + _dbVersions.repository = null; + _dbVersions.lastcheck = null; + + var stylesDir = Zotero.getStylesDirectory(); + stylesDir.remove(true); + Zotero.getStylesDirectory(); // recreate directory + Zotero.Styles.init(); + this.updateBundledFiles('styles'); + + // Run a manual update from repository if pref set + if (Zotero.Prefs.get('automaticScraperUpdates')) { + this.updateFromRepository(2, function () { + if (callback) { + callback(); + } + }); + } + + if (callback) { + callback(); } } diff --git a/chrome/content/zotero/xpcom/storage.js b/chrome/content/zotero/xpcom/storage.js index d2e0c774de..67d3efe5df 100644 --- a/chrome/content/zotero/xpcom/storage.js +++ b/chrome/content/zotero/xpcom/storage.js @@ -553,10 +553,8 @@ Zotero.Sync.Storage = new function () { + "in use and that it is not marked read-only."; var checkFileOther = "Check that the file is not currently " + "in use and that its permissions allow write access."; - var msg = Zotero.localeJoin([ - fileCannotBeUpdated, - Zotero.isWin ? checkFileWindows : checkFileOther - ]) + "\n\n" + var msg = fileCannotBeUpdated + " " + + (Zotero.isWin ? checkFileWindows : checkFileOther) + "\n\n" + "Restarting your computer or disabling security " + "software may also help."; var e = new Zotero.Error( @@ -573,7 +571,6 @@ Zotero.Sync.Storage = new function () { } } ); - throw (e); } throw (e); @@ -726,22 +723,58 @@ Zotero.Sync.Storage = new function () { var updateItem = syncState != 1; var updateItem = false; - if (useCurrentModTime) { - file.lastModifiedTime = new Date(); - - // Reset hash and sync state - Zotero.Sync.Storage.setSyncedHash(item.id, null); - Zotero.Sync.Storage.setSyncState(item.id, Zotero.Sync.Storage.SYNC_STATE_TO_UPLOAD); - Zotero.Sync.Storage.resyncOnFinish = true; - } - else { - file.lastModifiedTime = syncModTime; - // If hash not provided (e.g., WebDAV), calculate it now - if (!syncHash) { - syncHash = item.attachmentHash; + try { + if (useCurrentModTime) { + file.lastModifiedTime = new Date(); + + // Reset hash and sync state + Zotero.Sync.Storage.setSyncedHash(item.id, null); + Zotero.Sync.Storage.setSyncState(item.id, Zotero.Sync.Storage.SYNC_STATE_TO_UPLOAD); + Zotero.Sync.Storage.resyncOnFinish = true; } - Zotero.Sync.Storage.setSyncedHash(item.id, syncHash); - Zotero.Sync.Storage.setSyncState(item.id, Zotero.Sync.Storage.SYNC_STATE_IN_SYNC); + else { + file.lastModifiedTime = syncModTime; + // If hash not provided (e.g., WebDAV), calculate it now + if (!syncHash) { + syncHash = item.attachmentHash; + } + Zotero.Sync.Storage.setSyncedHash(item.id, syncHash); + Zotero.Sync.Storage.setSyncState(item.id, Zotero.Sync.Storage.SYNC_STATE_IN_SYNC); + } + } + catch (e) { + if (e.name == 'NS_ERROR_FILE_ACCESS_DENIED' + // Shows up on some Windows systems + || e.name == 'NS_ERROR_FAILURE') { + Zotero.debug(e); + // TODO: localize + var fileCannotBeUpdated = "The file '" + file.path + + "' cannot be updated."; + var checkFileWindows = "Check that the file is not currently " + + "in use and that it is not marked read-only."; + var checkFileOther = "Check that the file is not currently " + + "in use and that its permissions allow write access."; + var msg = fileCannotBeUpdated + " " + + (Zotero.isWin ? checkFileWindows : checkFileOther) + "\n\n" + + "Restarting your computer or disabling security " + + "software may also help."; + var e = new Zotero.Error( + msg, + 0, + { + dialogButtonText: "Show File", + dialogButtonCallback: function () { + try { + file.reveal(); + } + // Unsupported on some platforms + catch (e) {} + } + } + ); + } + + throw (e); } Zotero.Sync.Storage.setSyncedModificationTime(item.id, syncModTime, updateItem); diff --git a/chrome/content/zotero/xpcom/sync.js b/chrome/content/zotero/xpcom/sync.js index 3586717c40..0645aefca7 100644 --- a/chrome/content/zotero/xpcom/sync.js +++ b/chrome/content/zotero/xpcom/sync.js @@ -815,8 +815,9 @@ Zotero.Sync.Runner = new function () { while (enumerator.hasMoreElements()) { var win = enumerator.getNext(); - var warning = win.document.getElementById('zotero-tb-sync-warning'); - var icon = win.document.getElementById('zotero-tb-sync'); + if(!win.ZoteroPane) continue; + var warning = win.ZoteroPane.document.getElementById('zotero-tb-sync-warning'); + var icon = win.ZoteroPane.document.getElementById('zotero-tb-sync'); if (status == 'warning' || status == 'error') { icon.setAttribute('status', ''); @@ -1943,6 +1944,33 @@ Zotero.Sync.Server = new function () { }, 1); break; + case 'INVALID_TIMESTAMP': + var validClock = Zotero.DB.valueQuery("SELECT CURRENT_TIMESTAMP BETWEEN '1970-01-01 00:00:01' AND '2038-01-19 03:14:07'"); + if (!validClock) { + // TODO: localize + _error("The system clock is set to an invalid time. You will need to correct this to sync with the Zotero server."); + } + + setTimeout(function () { + Zotero.DB.beginTransaction(); + + var types = ['collections', 'creators', 'items', 'savedSearches', 'tags']; + for each (var type in types) { + var sql = "UPDATE " + type + " SET dateAdded=CURRENT_TIMESTAMP " + + "WHERE dateAdded NOT BETWEEN '1970-01-01 00:00:01' AND '2038-01-19 03:14:07'"; + Zotero.DB.query(sql); + var sql = "UPDATE " + type + " SET dateModified=CURRENT_TIMESTAMP " + + "WHERE dateModified NOT BETWEEN '1970-01-01 00:00:01' AND '2038-01-19 03:14:07'"; + Zotero.DB.query(sql); + var sql = "UPDATE " + type + " SET clientDateModified=CURRENT_TIMESTAMP " + + "WHERE clientDateModified NOT BETWEEN '1970-01-01 00:00:01' AND '2038-01-19 03:14:07'"; + Zotero.DB.query(sql); + } + + Zotero.DB.commitTransaction(); + }, 1); + break; + case 'UPGRADE_REQUIRED': Zotero.Sync.Server.upgradeRequired = true; break; @@ -4227,7 +4255,7 @@ Zotero.Sync.Server.Data = new function() { } var linkedItems = tag.getLinkedItems(true); Zotero.Tags.erase(tagID); - Zotero.Tags.purge(); + Zotero.Tags.purge(tagID); syncSession.removeFromUpdated(tag); //syncSession.addToDeleted(tag); diff --git a/chrome/content/zotero/xpcom/translation/browser_firefox.js b/chrome/content/zotero/xpcom/translation/browser_firefox.js index 863f281848..21aef4e0a8 100644 --- a/chrome/content/zotero/xpcom/translation/browser_firefox.js +++ b/chrome/content/zotero/xpcom/translation/browser_firefox.js @@ -143,9 +143,7 @@ Zotero.Translate.IO.Read = function(file, mode) { this.file = file; // open file - this._rawStream = Components.classes["@mozilla.org/network/file-input-stream;1"] - .createInstance(Components.interfaces.nsIFileInputStream); - this._rawStream.init(file, 0x01, 0664, 0); + this._openRawStream(); // start detecting charset var charset = null; @@ -297,7 +295,7 @@ Zotero.Translate.IO.Read.prototype = { }, "_seekToStart":function(charset) { - this._rawStream.close(); + if(this._rawStream) this._rawStream.close(); this._openRawStream(); this._linesExhausted = false; @@ -398,6 +396,7 @@ Zotero.Translate.IO.Read.prototype = { if(myIndex !== -1) Zotero.Translate.IO.maintainedInstances.splice(myIndex, 1); this._rawStream.close(); + delete this._rawStream; } } Zotero.Translate.IO.Read.prototype.__defineGetter__("contentLength", diff --git a/chrome/content/zotero/xpcom/translation/item_local.js b/chrome/content/zotero/xpcom/translation/item_local.js index aad1424510..16a3fe5391 100644 --- a/chrome/content/zotero/xpcom/translation/item_local.js +++ b/chrome/content/zotero/xpcom/translation/item_local.js @@ -707,9 +707,15 @@ Zotero.Translate.ItemGetter.prototype = { } } + // add URI + returnItemArray.uri = Zotero.URI.getItemURI(returnItem); + return returnItemArray; }, + /** + * Retrieves the next available item + */ "nextItem":function() { while(this._itemsLeft.length != 0) { var returnItem = this._itemsLeft.shift(); diff --git a/chrome/content/zotero/xpcom/translation/translate.js b/chrome/content/zotero/xpcom/translation/translate.js index e862c65383..52a513b378 100644 --- a/chrome/content/zotero/xpcom/translation/translate.js +++ b/chrome/content/zotero/xpcom/translation/translate.js @@ -95,8 +95,7 @@ Zotero.Translate.Sandbox = { // Allow progress meter to update // // This can probably be re-enabled for web translators once badly asynced ones are fixed - if (translate instanceof Zotero.Translate.Import || translate instanceof Zotero.Translate.Export) { - Zotero.debug("waiting"); + if(!translate.noWait && translate instanceof Zotero.Translate.Import) { Zotero.wait(); } @@ -418,7 +417,12 @@ Zotero.Translate.Sandbox = { } translate._runHandler("itemDone", item); - Zotero.wait(); + + // Update progress bar + if(!translate.noWait) { + Zotero.wait(); + } + return item; }, @@ -1064,7 +1068,7 @@ Zotero.Translate.Import.prototype.setString = function(string) { * Overload {@link Zotero.Translate.Base#complete} to close file */ Zotero.Translate.Import.prototype.complete = function(returnValue, error) { - if(this._currentState == "translate" && this._io) { + if(this._io) { this._progress = null; this._io.close(); } diff --git a/chrome/content/zotero/zoteroPane.js b/chrome/content/zotero/zoteroPane.js index d4ff98b4ec..3faaf8b02f 100644 --- a/chrome/content/zotero/zoteroPane.js +++ b/chrome/content/zotero/zoteroPane.js @@ -310,7 +310,7 @@ var ZoteroPane = new function() return; } - _serializePersist(); + this.serializePersist(); var tagSelector = document.getElementById('zotero-tag-selector'); tagSelector.unregister(); @@ -345,7 +345,7 @@ var ZoteroPane = new function() return false; } - _unserializePersist(); + this.unserializePersist(); var containerWindow = (window.ZoteroTab ? window.ZoteroTab.containerWindow : window); if(containerWindow.zoteroSavedSelection) { @@ -393,7 +393,7 @@ var ZoteroPane = new function() * Function to be called before ZoteroPane is hidden. Does not actually hide the Zotero pane. */ this.makeHidden = function() { - _serializePersist(); + this.serializePersist(); } function isShowing() { @@ -2010,6 +2010,11 @@ var ZoteroPane = new function() var menu = document.getElementById('zotero-itemmenu'); + // remove old locate menu items + while(menu.firstChild && menu.firstChild.getAttribute("zotero-locate")) { + menu.removeChild(menu.firstChild); + } + var enable = [], disable = [], show = [], hide = [], multiple = ''; if (!this.itemsView) { @@ -2303,6 +2308,9 @@ var ZoteroPane = new function() { menu.childNodes[show[i]].setAttribute('hidden', false); } + + // add locate menu options + Zotero_LocateMenu.buildContextMenu(menu); } @@ -3512,7 +3520,7 @@ var ZoteroPane = new function() /** * Unserializes zotero-persist elements from preferences */ - function _unserializePersist() { + this.unserializePersist = function() { var serializedValues = Zotero.Prefs.get("pane.persist"); if(!serializedValues) return; serializedValues = JSON.parse(serializedValues); @@ -3536,7 +3544,7 @@ var ZoteroPane = new function() /** * Serializes zotero-persist elements to preferences */ - function _serializePersist() { + this.serializePersist = function() { var serializedValues = {}; for each(var el in document.getElementsByAttribute("zotero-persist", "*")) { if(!el.getAttribute) continue; diff --git a/chrome/content/zotero/zoteroPane.xul b/chrome/content/zotero/zoteroPane.xul index 5dd8d9f609..02e2b17b4a 100644 --- a/chrome/content/zotero/zoteroPane.xul +++ b/chrome/content/zotero/zoteroPane.xul @@ -305,6 +305,7 @@ ondragenter="return ZoteroPane.itemsView.onDragEnter(event)" ondragover="return ZoteroPane.itemsView.onDragOver(event)" ondragdrop="return ZoteroPane.itemsView.onDrop(event)" + oncommand="ZoteroPane.serializePersist()" flex="1"> - + diff --git a/chrome/locale/sv-SE/zotero/preferences.dtd b/chrome/locale/sv-SE/zotero/preferences.dtd index bb7651f7ab..1ca5faa19a 100644 --- a/chrome/locale/sv-SE/zotero/preferences.dtd +++ b/chrome/locale/sv-SE/zotero/preferences.dtd @@ -1,41 +1,41 @@ - + - - - + + + - + - + - + - + - - + + - - - + + + @@ -58,11 +58,11 @@ - + - + - + @@ -76,7 +76,7 @@ - + @@ -85,12 +85,12 @@ - - - + + + - + @@ -99,32 +99,32 @@ - - - - - - + + + + + + - - - + + + - + - + - + - + @@ -133,8 +133,8 @@ - - + + @@ -151,13 +151,13 @@ - - - + + + - - - + + + @@ -170,14 +170,14 @@ - + - + diff --git a/chrome/locale/sv-SE/zotero/searchbox.dtd b/chrome/locale/sv-SE/zotero/searchbox.dtd index 7e9dc3fd43..a6ab6c1194 100644 --- a/chrome/locale/sv-SE/zotero/searchbox.dtd +++ b/chrome/locale/sv-SE/zotero/searchbox.dtd @@ -6,18 +6,18 @@ - + - + - + diff --git a/chrome/locale/sv-SE/zotero/standalone.dtd b/chrome/locale/sv-SE/zotero/standalone.dtd index 9b35a37e65..732c28b9c3 100644 --- a/chrome/locale/sv-SE/zotero/standalone.dtd +++ b/chrome/locale/sv-SE/zotero/standalone.dtd @@ -1,54 +1,54 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -58,23 +58,23 @@ - + - + - + - + diff --git a/chrome/locale/sv-SE/zotero/timeline.properties b/chrome/locale/sv-SE/zotero/timeline.properties index 15630ef7da..6f752cbfe4 100644 --- a/chrome/locale/sv-SE/zotero/timeline.properties +++ b/chrome/locale/sv-SE/zotero/timeline.properties @@ -1,12 +1,12 @@ general.title=Zotero tidslinje -general.filter=Filter: +general.filter=Filtrera: general.highlight=Framhäv general.clearAll=Radera allt general.jumpToYear=Hoppa till år: -general.firstBand=Första bandet: -general.secondBand=Andra bandet: -general.thirdBand=Tredje bandet: -general.dateType=Datatyp: +general.firstBand=Första strecket: +general.secondBand=Andra strecket: +general.thirdBand=Tredje strecket: +general.dateType=Datumtyp: general.timelineHeight=Höjd på tidslinje general.fitToScreen=Anpassa efter skärm @@ -18,4 +18,4 @@ interval.century=Århundrade interval.millennium=Årtusende dateType.published=Publiceringsdatum -dateType.modified=Ändringsdatum +dateType.modified=Senaste ändringsdatum diff --git a/chrome/locale/sv-SE/zotero/zotero.dtd b/chrome/locale/sv-SE/zotero/zotero.dtd index 7ce5e1a291..5acd8338f6 100644 --- a/chrome/locale/sv-SE/zotero/zotero.dtd +++ b/chrome/locale/sv-SE/zotero/zotero.dtd @@ -9,7 +9,7 @@ - + @@ -20,24 +20,24 @@ - - - - + + + + - - + + - + - + - + @@ -46,16 +46,16 @@ - - + + - + - + @@ -82,22 +82,22 @@ - + - + - - + + - + - + @@ -123,8 +123,8 @@ - - + + @@ -132,8 +132,8 @@ - - + + @@ -156,16 +156,16 @@ - - + + - - - - - + + + + + - + @@ -173,7 +173,7 @@ - + @@ -181,19 +181,19 @@ - + - + - + - - + + @@ -207,21 +207,21 @@ - - - + + + - + - - - - + + + + - + - + diff --git a/chrome/locale/sv-SE/zotero/zotero.properties b/chrome/locale/sv-SE/zotero/zotero.properties index 54137f53e0..37855d2f36 100644 --- a/chrome/locale/sv-SE/zotero/zotero.properties +++ b/chrome/locale/sv-SE/zotero/zotero.properties @@ -7,12 +7,12 @@ general.dontShowWarningAgain=Visa inte denna varning igen general.browserIsOffline=%S är för närvarande i offlineläge general.locate=Lokalisera... general.restartRequired=Omstart krävs -general.restartRequiredForChange=Firefox måste startas om för ändringen ska gälla +general.restartRequiredForChange=Firefox måste startas om för att ändringen ska gälla general.restartRequiredForChanges=Firefox måste startas om för att ändringarna ska gälla general.restartNow=Starta om nu general.restartLater=Starta om senare -general.errorHasOccurred=Ett fel har inträffat -general.unknownErrorOccurred=Ett okänt fel har inträffat +general.errorHasOccurred=Ett fel har uppstått +general.unknownErrorOccurred=Ett okänt fel har uppstått general.restartFirefox=Var vänlig starta om Firefox general.restartFirefoxAndTryAgain=Var vänlig starta om Firefox och försök igen general.checkForUpdate=Kolla efter uppdatering @@ -26,14 +26,14 @@ general.passed=Lyckades general.failed=Misslyckades general.and=och general.accessDenied=Kan inte komma åt -general.permissionDenied=Inte tillåten att komma åt +general.permissionDenied=Tillåts inte komma åt general.character.singular=tecken general.character.plural=tecken general.create=Skapa general.seeForMoreInformation=Se %S för mer information. general.enable=Sätt på general.disable=Stäng av -general.remove=Remove +general.remove=Ta bort general.operationInProgress=Zotero arbetar just nu. general.operationInProgress.waitUntilFinished=Vänta till åtgärden är klar. @@ -41,7 +41,7 @@ general.operationInProgress.waitUntilFinishedAndTryAgain=Vänta till åtgärden install.quickStartGuide=Snabbhjälp install.quickStartGuide.message.welcome=Välkommen till Zotero! -install.quickStartGuide.message.view=Läs snabbstartsguiden för att lära dig hur du samlar, hanterar, refererar till och delar vidare dina källor. +install.quickStartGuide.message.view=Läs snabbstartsguiden för att lära dig hur du samlar, hanterar, refererar till och delar med dig av dina källor. install.quickStartGuide.message.thanks=Tack för att du installerat Zotero. upgrade.failed.title=Uppgraderingen misslyckades @@ -58,7 +58,7 @@ errorReport.reportErrors=Rapportera felen... errorReport.reportInstructions=Du kan rapportera det här felet genom att välja "%S" från menyn Åtgärder (kugghjulet). errorReport.followingErrors=Följande fel har uppstått sedan %S startades: errorReport.advanceMessage=Tryck %S för att skicka en felrapport till utvecklarna av Zotero. -errorReport.stepsToReproduce=Steg för att återskapa: +errorReport.stepsToReproduce=Vad gör man för att återskapa felet? errorReport.expectedResult=Förväntat resultat: errorReport.actualResult=Faktiskt resultat: @@ -68,18 +68,18 @@ dataDir.useProfileDir=Använd Firefox profilkatalog dataDir.selectDir=Välj en datakatalog för Zotero dataDir.selectedDirNonEmpty.title=Katalogen är inte tom dataDir.selectedDirNonEmpty.text=Katalogen du valt är inte tom eller verkar inte vara en datakatalog för Zotero.\n\nSkapa Zotero-filer i den här katalogen ändå? -dataDir.standaloneMigration.title=Zotero Migration Notification -dataDir.standaloneMigration.description=This appears to be your first time using %1$S. Would you like %1$S to import settings from %2$S and use your existing data directory? -dataDir.standaloneMigration.multipleProfiles=%1$S will share its data directory with the most recently used profile. -dataDir.standaloneMigration.selectCustom=Custom Data Directory… +dataDir.standaloneMigration.title=Flyttinformation om Zotero +dataDir.standaloneMigration.description=Detta verkar vara första gången du använder %1$S. Vill du att %1$S ska hämta inställningarna från %2$S och använda din befintliga källkatalog? +dataDir.standaloneMigration.multipleProfiles=%1$S kommer att dela sin källkatalog med den senast använda profilen. +dataDir.standaloneMigration.selectCustom=Ändra källkatalog… app.standalone=Zotero Standalone -app.firefox=Zotero for Firefox +app.firefox=Zotero för Firefox startupError=Det inträffade ett fel när Zotero startades. -startupError.databaseInUse=Your Zotero database is currently in use. Only one instance of Zotero using the same database may be opened simultaneously at this time. -startupError.closeStandalone=If Zotero Standalone is open, please close it and restart Firefox. -startupError.closeFirefox=If Firefox with the Zotero extension is open, please close it and restart Zotero Standalone. +startupError.databaseInUse=Din Zoterodatabas är upptagen. Bara en kopia av Zotero med samma databas kan vara öppen samtidigt. +startupError.closeStandalone=Om Zotero Standalone är aktivt så stäng den och starta om Firefox. +startupError.closeFirefox=Om Firefox med Zotero är aktivt så stäng den och starta om Zotero Standalone. startupError.databaseCannotBeOpened=Zoteros databas kunde inte öppnas. startupError.checkPermissions=Försäkra dig om att du har läs- och skrivrättigheter till alla filer i Zoteros datakatalog. startupError.zoteroVersionIsOlder=Denna Zoteroversion är äldre än den senaste versionen som användes med din databas. @@ -109,7 +109,7 @@ pane.collections.rename=Ändra namn på samling: pane.collections.library=Mitt bibliotek pane.collections.trash=Papperskorg pane.collections.untitled=Utan titel -pane.collections.unfiled=Unfiled Items +pane.collections.unfiled=Oregistrerade källor pane.collections.menu.rename.collection=Ändra namn på samling... pane.collections.menu.edit.savedSearch=Redigera sparad sökning @@ -117,14 +117,14 @@ pane.collections.menu.remove.collection=Ta bort samling... pane.collections.menu.remove.savedSearch=Ta bort sparad sökning... pane.collections.menu.export.collection=Exportera samling... pane.collections.menu.export.savedSearch=Exportera sparad sökning... -pane.collections.menu.createBib.collection=Skapa bibliografi från samling... -pane.collections.menu.createBib.savedSearch=Skapa bibliografi från sparad sökning... +pane.collections.menu.createBib.collection=Skapa källförteckning från samling... +pane.collections.menu.createBib.savedSearch=Skapa källförteckning från sparad sökning... pane.collections.menu.generateReport.collection=Skapa rapport från samling... pane.collections.menu.generateReport.savedSearch=Skapa rapport från sparad sökning... pane.tagSelector.rename.title=Var vänlig ange ett nytt namn för den här etiketten. -pane.tagSelector.rename.message=Denna etikett kommer att ändras i alla besläktade källor. +pane.tagSelector.rename.message=Denna etikett kommer att ändras i alla tillhörande källor. pane.tagSelector.delete.title=Är du säker på att du vill ta bort den här etiketten? pane.tagSelector.delete.message=Denna etikett kommer att tas bort från alla filer. pane.tagSelector.numSelected.none=Ingen etikett vald @@ -144,8 +144,8 @@ pane.items.menu.erase=Ta bort vald källa från biblioteket pane.items.menu.erase.multiple=Ta bort valda källor från biblioteket pane.items.menu.export=Exportera vald källa... pane.items.menu.export.multiple=Exportera valda källor... -pane.items.menu.createBib=Skapa bibliografi av vald källa... -pane.items.menu.createBib.multiple=Skapa bibliografi av valda källor... +pane.items.menu.createBib=Skapa källförteckning av vald källa... +pane.items.menu.createBib.multiple=Skapa källförteckning av valda källor... pane.items.menu.generateReport=Skapa rapport av vald källa... pane.items.menu.generateReport.multiple=Skapa rapport av valda källor... pane.items.menu.reindexItem=Indexera om källa @@ -170,11 +170,11 @@ pane.item.selected.zero=Inga källor valda pane.item.selected.multiple=%S källor valda pane.item.changeType.title=Ändra källtyp -pane.item.changeType.text=Är du säker på att du vill ändra källatyp?\n\nFöljande fält kommer att försvinna: +pane.item.changeType.text=Är du säker på att du vill ändra källtyp?\n\nFöljande fält kommer att försvinna: pane.item.defaultFirstName=Förnamn pane.item.defaultLastName=Efternamn pane.item.defaultFullName=Fullständigt namn -pane.item.switchFieldMode.one=Växla till enstaka fält +pane.item.switchFieldMode.one=Växla till ett fält pane.item.switchFieldMode.two=Växla till två fält pane.item.notes.untitled=Anteckning utan titel pane.item.notes.delete.confirm=Är du säker på att du vill ta bort den här anteckningen? @@ -186,7 +186,7 @@ pane.item.attachments.rename.renameAssociatedFile=Ändra namn på bifogad fil pane.item.attachments.rename.error=Ett fel uppstod när namnet på filen skulle ändras. pane.item.attachments.fileNotFound.title=Filen kunde inte hittas pane.item.attachments.fileNotFound.text=Den bifogade filen kunde hitta hittas.\n\nDen kan ha flyttats eller raderats utanför Zotero. -pane.item.attachments.delete.confirm=Är du säker på att du vill radera det här bifogade dokumentet? +pane.item.attachments.delete.confirm=Är du säker på att du vill radera den här bilagan? pane.item.attachments.count.zero=%S bifogade dokument: pane.item.attachments.count.singular=%S bifogat dokument: pane.item.attachments.count.plural=%S bifogade dokument: @@ -198,20 +198,20 @@ pane.item.tags.count.singular=%S etikett: pane.item.tags.count.plural=%S etiketter: pane.item.tags.icon.user=Etikett tillagd av användare pane.item.tags.icon.automatic=Etikett tillagd automatiskt -pane.item.related=Besläktad: -pane.item.related.count.zero=%S besläktade: -pane.item.related.count.singular=%S besläktad: -pane.item.related.count.plural=%S besläktade: -pane.item.parentItem=Parent Item: +pane.item.related=Liknande källor: +pane.item.related.count.zero=Ingen liknande källa. +pane.item.related.count.singular=En liknande källa: +pane.item.related.count.plural=%S liknande källor: +pane.item.parentItem=Huvudkälla: noteEditor.editNote=Redigera anteckning itemTypes.note=Anteckning -itemTypes.attachment=Bifogat dokument +itemTypes.attachment=Bilaga itemTypes.book=Bok itemTypes.bookSection=Bokavsnitt -itemTypes.journalArticle=Tidskriftsartikel -itemTypes.magazineArticle=Tidningsartikel +itemTypes.journalArticle=Journalartikel +itemTypes.magazineArticle=Magasinsartikel itemTypes.newspaperArticle=Dagstidningsartikel itemTypes.thesis=Avhandling itemTypes.letter=Brev @@ -235,7 +235,7 @@ itemTypes.audioRecording=Ljudinspelning itemTypes.presentation=Presentation itemTypes.videoRecording=Videoinspelning itemTypes.tvBroadcast=TV-sändning -itemTypes.radioBroadcast=Radio-sändning +itemTypes.radioBroadcast=Radiosändning itemTypes.podcast=Poddsändning itemTypes.computerProgram=Datorprogram itemTypes.conferencePaper=Konferensartikel @@ -245,13 +245,13 @@ itemTypes.dictionaryEntry=Uppslag i ordbok itemFields.itemType=Typ itemFields.title=Titel -itemFields.dateAdded=Tillagt datum -itemFields.dateModified=Ändrad +itemFields.dateAdded=Tillagd den +itemFields.dateModified=Ändrad den itemFields.source=Källa itemFields.notes=Anteckningar itemFields.tags=Etiketter itemFields.attachments=Bifogade dokument -itemFields.related=Besläktat +itemFields.related=Liknande itemFields.url=Webbadress itemFields.rights=Rättigheter itemFields.series=Bokserie @@ -272,7 +272,7 @@ itemFields.distributor=Distributör itemFields.extra=Extra itemFields.journalAbbreviation=Tidskriftsförkortning itemFields.DOI=DOI -itemFields.accessDate=Åtkommen +itemFields.accessDate=Hämtad den itemFields.seriesTitle=Titel på bokserie itemFields.seriesText=Bokseries text itemFields.seriesNumber=Nummer i bokserie @@ -285,12 +285,12 @@ itemFields.history=Historia itemFields.reporter=Reporter itemFields.court=Domstol itemFields.numberOfVolumes=# volymer -itemFields.committee=Kommittée -itemFields.assignee=Rättighetsinnehavare +itemFields.committee=Kommitté +itemFields.assignee=Representant itemFields.patentNumber=Patentnummer itemFields.priorityNumbers=Prioritetsnummer itemFields.issueDate=Utgivningsdatum -itemFields.references=Referenser +itemFields.references=Källhänvisningar itemFields.legalStatus=Rättslig status itemFields.codeNumber=Kodnummer itemFields.artworkMedium=Medium för konstverk @@ -299,18 +299,18 @@ itemFields.artworkSize=Storlek på konstverk itemFields.libraryCatalog=Bibliotekskatalog itemFields.videoRecordingFormat=Format itemFields.interviewMedium=Medium -itemFields.letterType=Typ -itemFields.manuscriptType=Type -itemFields.mapType=Type +itemFields.letterType=Brevtyp +itemFields.manuscriptType=Manustyp +itemFields.mapType=Karttyp itemFields.scale=Skala -itemFields.thesisType=Typ -itemFields.websiteType=Typ av webbplats +itemFields.thesisType=Uppsatstyp +itemFields.websiteType=Webbplatstyp itemFields.audioRecordingFormat=Format itemFields.label=Stämpel -itemFields.presentationType=Typ +itemFields.presentationType=Presentationstyp itemFields.meetingName=Namn på möte itemFields.studio=Studio -itemFields.runningTime=Inspelningstid +itemFields.runningTime=Inspelningslängd itemFields.network=Nätverk itemFields.postType=Källtyp itemFields.audioFileType=Filtyp @@ -333,12 +333,12 @@ itemFields.dateDecided=Beslutsdatum itemFields.reporterVolume=Reportervolym itemFields.firstPage=Första sida itemFields.documentNumber=Dokumentnummer -itemFields.dateEnacted=Datum för statuering -itemFields.publicLawNumber=Public Law-nummer +itemFields.dateEnacted=Datum för ikraftträdande +itemFields.publicLawNumber=Lagnummer itemFields.country=Land itemFields.applicationNumber=Anmälningsnummer -itemFields.forumTitle=Titel för forum/Listserver -itemFields.episodeNumber=Episodnummer +itemFields.forumTitle=Titel på forum/listserver +itemFields.episodeNumber=Avsnittsnummer itemFields.blogTitle=Bloggnamn itemFields.medium=Medium itemFields.caseName=Namn på fall @@ -350,7 +350,7 @@ itemFields.shortTitle=Kort titel itemFields.docketNumber=Målnummer itemFields.numPages=# sidor itemFields.programTitle=Programtitel -itemFields.issuingAuthority=Utgivande myndighet +itemFields.issuingAuthority=Utgivare itemFields.filingDate=Ansökningsdatum itemFields.genre=Genre itemFields.archive=Arkiv @@ -358,7 +358,7 @@ itemFields.archive=Arkiv creatorTypes.author=Författare creatorTypes.contributor=Medarbetare creatorTypes.editor=Redaktör -creatorTypes.translator=källfångare +creatorTypes.translator=Källfångare creatorTypes.seriesEditor=Redaktör för bokserie creatorTypes.interviewee=Intervju med creatorTypes.interviewer=Intervjuare @@ -371,12 +371,12 @@ creatorTypes.counsel=Handledare creatorTypes.inventor=Uppfinnare creatorTypes.attorneyAgent=Advokat/Agent creatorTypes.recipient=Mottagare -creatorTypes.performer=Performer +creatorTypes.performer=Artist creatorTypes.composer=Kompositör creatorTypes.wordsBy=Text av creatorTypes.cartographer=Kartograf creatorTypes.programmer=Programmerare -creatorTypes.artist=Artist +creatorTypes.artist=Konstnär creatorTypes.commenter=Kommentator creatorTypes.presenter=Presentatör creatorTypes.guest=Gäst @@ -402,32 +402,32 @@ ingester.scrapeComplete=Källa sparad ingester.scrapeError=Källan kunde inte sparas ingester.scrapeErrorDescription=Ett fel uppstod när källan skulle sparas. Se %S för mer information. ingester.scrapeErrorDescription.linkText=Kända problem med källfångare -ingester.scrapeErrorDescription.previousError=Sparprocessen misslyckades p.g.a. ett tidigare Zotero-fel. +ingester.scrapeErrorDescription.previousError=Sparandet misslyckades p.g.a. ett tidigare Zotero-fel. ingester.importReferRISDialog.title=Zotero RIS/Refer Import -ingester.importReferRISDialog.text=Do you want to import items from "%1$S" into Zotero?\n\nYou can disable automatic RIS/Refer import in the Zotero preferences. -ingester.importReferRISDialog.checkMsg=Always allow for this site +ingester.importReferRISDialog.text=Vill du importera källor från "%1$S" till Zotero?\n\nDu kan stänga av automatisk RIS/Refer-import under Åtgärder > Inställningar. +ingester.importReferRISDialog.checkMsg=Tillåt alltid för denna sida db.dbCorrupted=Zotero-databasen '%S' verkar ha gått sönder. -db.dbCorrupted.restart=Var vänlig starta om Firefox för att försöka automatisk återställning från den senaste säkerhetskopian. +db.dbCorrupted.restart=Var vänlig starta om Firefox för att försöka automatisk återställning till den senaste säkerhetskopian. db.dbCorruptedNoBackup=Zoterodatabasen '%S' verkar ha gått sönder, och ingen automatisk säkerhetskopia finns tillgänglig.\n\nEn ny databasfil har skapats. Den skadade filen sparades i din Zoterokatalog. db.dbRestored=Zoterodatabasen '%1$S' verkar ha gått sönder.\n\nDina data återskapades från den senaste säkerhetskopian som gjordes %2$S kl. %3$S. Den skadade filen sparades i din Zoterokatalog. db.dbRestoreFailed=Zoterodatabasen '%S' verkar ha gått sönder, och ett försök att återskapa den från den senaste säkerhetskopian misslyckades.\n\nEn ny databasfil har skapats. Den skadade filen sparades i din Zoterokatalog. db.integrityCheck.passed=Inga fel hittades i databasen. db.integrityCheck.failed=Fel har hittats i Zoteros databas! -db.integrityCheck.dbRepairTool=Du kan använda databasrepareringsverktyget från http://zotero.org/utils/dbfix för att försöka rätta till dessa fel. +db.integrityCheck.dbRepairTool=Du kan använda databasreparationsverktyget från http://zotero.org/utils/dbfix för att försöka rätta till dessa fel. -zotero.preferences.update.updated=Uppdaterad +zotero.preferences.update.updated=Uppdatering klar zotero.preferences.update.upToDate=Senaste version zotero.preferences.update.error=Fel -zotero.preferences.openurl.resolversFound.zero=%S länkservrar hittades -zotero.preferences.openurl.resolversFound.singular=%S länkserver hittades +zotero.preferences.openurl.resolversFound.zero=Inga länkservrar hittades +zotero.preferences.openurl.resolversFound.singular=En länkserver hittades zotero.preferences.openurl.resolversFound.plural=%S länkservrar hittades zotero.preferences.search.rebuildIndex=Bygg om index -zotero.preferences.search.rebuildWarning=Vill du bygga om hela indexet? Det kan ta ett tag.\n\nFör att bara indexera källor som inte indexerats, använd %S. +zotero.preferences.search.rebuildWarning=Vill du bygga om hela indexet? Det kan ta ett tag.\n\nFör att bara indexera källor som inte tidigare indexerats, använd %S. zotero.preferences.search.clearIndex=Nollställ index -zotero.preferences.search.clearWarning=Efter att index har nollställts kommer bifogat innehåll inte längre vara sökbart.\n\nBifogade webblänkar kan inte indexeras om utan att sidan besöks igen. För att låta webblänkar vara fortsatt indexerade, välj %S. +zotero.preferences.search.clearWarning=Efter att index har nollställts kommer bifogat innehåll inte längre vara sökbart.\n\nBifogade webblänkar kan inte indexeras om utan att sidan besöks igen. För att låta webblänkar fortsätta vara indexerade, välj %S. zotero.preferences.search.clearNonLinkedURLs=Nollställ allt utom webblänkar zotero.preferences.search.indexUnindexed=Indexera ej redan indexerade källor zotero.preferences.search.pdf.toolRegistered=%S är installerat @@ -445,11 +445,11 @@ zotero.preferences.search.pdf.availableUpdates=Tillgängliga uppdateringar för zotero.preferences.search.pdf.toolVersionPlatform=%1$S version %2$S zotero.preferences.search.pdf.zoteroCanInstallVersion=Zotero kan automatiskt installera det i datakatalogen för Zotero. zotero.preferences.search.pdf.zoteroCanInstallVersions=Zotero kan automatiskt installera dessa applikationer i datakatalogen för Zotero. -zotero.preferences.search.pdf.toolsDownloadError=Ett fel uppstod när %S-verktygen försökte laddas ned från zotero.org. +zotero.preferences.search.pdf.toolsDownloadError=Ett fel uppstod när %S-verktygen skulle laddas ned från zotero.org. zotero.preferences.search.pdf.tryAgainOrViewManualInstructions=Var vänlig pröva igen senare, eller se dokumentationen för manuella installationsinstruktioner. -zotero.preferences.export.quickCopy.bibStyles=Bibliografiska stilar +zotero.preferences.export.quickCopy.bibStyles=Referensstilar zotero.preferences.export.quickCopy.exportFormats=Exportformat -zotero.preferences.export.quickCopy.instructions=Snabbkopiering låter dig kopiera valda referenser till klipbordet genom att trycka en genvägstangent (%S) eller genom att dra källor till ett textfält på en webbsida. +zotero.preferences.export.quickCopy.instructions=Snabbkopiering låter dig kopiera valda referenser till urklipp genom att trycka på en genvägstangent (%S) eller genom att dra källorna till ett textfält på en webbsida. zotero.preferences.styles.addStyle=Lägg till referensstil zotero.preferences.advanced.resetTranslatorsAndStyles=Återställ källfångare och stilar @@ -468,13 +468,13 @@ fileInterface.import=Importera fileInterface.export=Exportera fileInterface.exportedItems=Exporterade källor fileInterface.imported=Importerat -fileInterface.fileFormatUnsupported=En källfångare för filen kunde inte hittas. -fileInterface.untitledBibliography=Bibliografi utan titel -fileInterface.bibliographyHTMLTitle=Bibliografi -fileInterface.importError=Ett fel uppstod när den valda filen försökte importeras. Var vänlig se till att filen är giltig och försök sedan igen. +fileInterface.fileFormatUnsupported=Ingen källfångare för filen kunde hittas. +fileInterface.untitledBibliography=Källförteckning utan titel +fileInterface.bibliographyHTMLTitle=Källförteckning +fileInterface.importError=Ett fel uppstod när den valda filen skulle importeras. Var vänlig se till att filen är giltig och försök sedan igen. fileInterface.importClipboardNoDataError=Ingen läsbar data fanns i urklipp. -fileInterface.noReferencesError=Källorna du valt innehåller inga referenser. Välj en eller flera referenser och försök igen. -fileInterface.bibliographyGenerationError=Ett fel uppstod när din bibliografi skulle skapas. Försök igen. +fileInterface.noReferencesError=Dokumenten du valt innehåller inga källhänvisningar. Välj en eller flera källhänvisningar och försök igen. +fileInterface.bibliographyGenerationError=Ett fel uppstod när din källförteckning skulle skapas. Försök igen. fileInterface.exportError=Ett fel uppstod när den valda filen skulle exporteras. advancedSearchMode=Avancerad sökning - tryck Retur för att söka. @@ -513,10 +513,10 @@ searchConditions.mapType=Typ av karta searchConditions.medium=Media searchConditions.artworkMedium=Konstverk searchConditions.dateModified=Ändrat datum -searchConditions.fulltextContent=Innehåll i bifogat dokument +searchConditions.fulltextContent=Bilagans innehåll searchConditions.programmingLanguage=Programmeringsspråk searchConditions.fileTypeID=Bifogad filtyp -searchConditions.annotation=Annotering +searchConditions.annotation=Anteckning fulltext.indexState.indexed=Indexerad fulltext.indexState.unavailable=Okänd @@ -527,7 +527,7 @@ exportOptions.exportFileData=Exportera filer charset.UTF8withoutBOM=Unicode (UTF-8 utan BOM) charset.autoDetect=(välj automatiskt) -date.daySuffixes=st, nd, rd, th +date.daySuffixes=., ., ., . date.abbreviation.year=å date.abbreviation.month=m date.abbreviation.day=d @@ -551,7 +551,7 @@ annotations.close.tooltip=Ta bort anteckning annotations.move.tooltip=Flytta anteckning annotations.collapse.tooltip=Stäng anteckning annotations.expand.tooltip=Öppna anteckning -annotations.oneWindowWarning=Anteckningar för en lokalt sparad webbsida kan bara öppnas i ett webbläsarfönster samtidigt. Den här lokalt sparade webbsidan kommer att öppnas utan anteckningar. +annotations.oneWindowWarning=Anteckningar för en lokalt sparad webbsida kan bara öppnas i ett webbläsarfönster åt gången. Den här lokalt sparade webbsidan kommer att öppnas utan anteckningar. integration.fields.label=Fält integration.referenceMarks.label=Referensmärken @@ -560,53 +560,53 @@ integration.fields.fileFormatNotice=Dokumentet måste sparas i formaten .doc ell integration.referenceMarks.caption=Det är mindre risk att OpenOffice ReferenceMarks ändras oavsiktligt, men de fungerar inte i Microsoft Word. integration.referenceMarks.fileFormatNotice=Dokumentet måste sparas i formatet .odt. -integration.regenerate.title=Vill du skapa om källanteckningen? -integration.regenerate.body=Ändringarna du har gjort i källanteckningsredigeraren kommer att förloras. +integration.regenerate.title=Vill du skapa om källhänvisningen? +integration.regenerate.body=Ändringarna du har gjort i källhänvisningen kommer att förloras. integration.regenerate.saveBehavior=Gör alltid det här urvalet. -integration.revertAll.title=Are you sure you want to revert all edits to your bibliography? -integration.revertAll.body=If you choose to continue, all references cited in the text will appear in the bibliography with their original text, and any references manually added will be removed from the bibliography. -integration.revertAll.button=Revert All -integration.revert.title=Are you sure you want to revert this edit? -integration.revert.body=If you choose to continue, the text of the bibliography entries corresponded to the selected item(s) will be replaced with the unmodified text specified by the selected style. -integration.revert.button=Revert -integration.removeBibEntry.title=The selected references is cited within your document. -integration.removeBibEntry.body=Are you sure you want to omit it from your bibliography? +integration.revertAll.title=Är du säker på att du vill återställa alla ändringar i källförteckningen? +integration.revertAll.body=Om du fortsätter så kommer alla källor som du refererar till i texten att synas i källförteckningen med sin originaltext, och alla manuellt tillagda källor kommer att tas bort från källförteckningen. +integration.revertAll.button=Återställ +integration.revert.title=Är du säker på att ångra denna ändring? +integration.revert.body=Om du väljer att fortsätta så kommer valda poster i källförteckningen att uppdateras med vald referensmall. +integration.revert.button=Återställ +integration.removeBibEntry.title=Den valda källan refereras till i ditt dokument. +integration.removeBibEntry.body=Är du säker på att du vill ta bort den från källförteckningen? -integration.emptyCitationWarning.title=Tom referens -integration.emptyCitationWarning.body=Referensen som du valt kommer att bli tom i den nu valda referensmallen. Är du säker på att du vill lägga till den? +integration.emptyCitationWarning.title=Tom källhänvisning +integration.emptyCitationWarning.body=Källhänvisningen som du valt kommer att bli tom i den nu valda referensmallen. Är du säker på att du vill lägga till den? integration.error.incompatibleVersion=Denna version av Zoteros ordbehandlarplugin($INTEGRATION_VERSION) är inkompatibel med denna version av Zoteros Firefoxtillägg (%1$S). Kolla så du har senaste version av båda programmen. -integration.error.incompatibleVersion2=Zotero %1$S requires %2$S %3$S or later. Please download the latest version of %2$S from zotero.org. +integration.error.incompatibleVersion2=Zotero %1$S behöver %2$S %3$S eller nyare. Ladda ner den senaste versionen av %2$S från zotero.org. integration.error.title=Zotero Integration Error integration.error.notInstalled=Firefox kunde inte ladda en komponent som behövs för att kommunicera med ordbehandlaren. Kolla att rätt Firefoxtillägg är installerat och försök igen. -integration.error.generic=Zotero råkade ut för ett fel när det uppdeterade ditt dokument. -integration.error.mustInsertCitation=Du måste sätta in en referens innan du gör detta. -integration.error.mustInsertBibliography=Du måste sätta in en referens innan du gör detta. +integration.error.generic=Zotero råkade ut för ett fel när det uppdaterade ditt dokument. +integration.error.mustInsertCitation=Du måste sätta in en källhänvisning innan du gör detta. +integration.error.mustInsertBibliography=Du måste sätta in en källförteckning innan du gör detta. integration.error.cannotInsertHere=Zoterofält kan inte sättas in här. integration.error.notInCitation=Du måste sätta markören i en Zoteroreferens för att ändra den. -integration.error.noBibliography=Den nuvarande bibligrafistilen definierar ingen bibliografi. Om du vill lägga till en bibliografi så välj en annan referensstil. -integration.error.deletePipe=The pipe that Zotero uses to communicate with the word processor could not be initialized. Would you like Zotero to attempt to correct this error? You will be prompted for your password. +integration.error.noBibliography=Den nuvarande bibligrafistilen definierar ingen källförteckning. Om du vill lägga till en källförteckning så välj en annan referensstil. +integration.error.deletePipe=Förbindelsen som Zotero använder för att kommunicera med ordbehandlaren kunde inte startas. Vill du att Zotero ska försöka rätta till detta fel? Du kommer att tillfrågas om ditt lösenord. integration.replace=Byt ut detta Zoterofält? integration.missingItem.single=Denna källa finns inte längre i Zoteros databas. Vill du välja en annan källa istället? integration.missingItem.multiple=Källorna %1$S finns inte längre i Zoteros databas. Vill du välja några andra källor istället? -integration.missingItem.description=Klickar du på "Nej" så kommer fältkoderna för källanteckningar som innehåller denna källa att raderas; referenstexten kommer att finnas kvar men inte längre i din bibliografi. -integration.removeCodesWarning=Removing field codes will prevent Zotero from updating citations and bibliographies in this document. Are you sure you want to continue? -integration.upgradeWarning=Your document must be permanently upgraded in order to work with Zotero 2.0b7 or later. It is recommended that you make a backup before proceeding. Are you sure you want to continue? -integration.error.newerDocumentVersion=Your document was created with a newer version of Zotero (%1$S) than the currently installed version (%1$S). Please upgrade Zotero before editing this document. -integration.corruptField=The Zotero field code corresponding to this citation, which tells Zotero which item in your library this citation represents, has been corrupted. Would you like to reselect the item? -integration.corruptField.description=Clicking "No" will delete the field codes for citations containing this item, preserving the citation text but potentially deleting it from your bibliography. -integration.corruptBibliography=The Zotero field code for your bibliography is corrupted. Should Zotero clear this field code and generate a new bibliography? -integration.corruptBibliography.description=All items cited in the text will appear in the new bibliography, but modifications you made in the "Edit Bibliography" dialog will be lost. +integration.missingItem.description=Klickar du på "Nej" så kommer fältkoderna för källanteckningar som innehåller denna källa att raderas; referenstexten kommer att finnas kvar men inte längre i din källförteckning. +integration.removeCodesWarning=Tas fältkoderna bort kommer Zotero inte kunna uppdatera källhänvisningar och källförteckningar i detta dokument. Är du säker på att du vill fortsätta? +integration.upgradeWarning=Ditt dokument måste uppgraderas permanent för att fungera med Zotero 2.0b7 eller senare. Det rekommenderas att du gör en backup innan du fortsätter. Är du säker på att du vill fortsätta? +integration.error.newerDocumentVersion=Ditt dokument skapades med en nyare version av Zotero (%1$S) än den du har installerad (%1$S). Du måste uppgradera Zotero innan du redigerar detta dokument. +integration.corruptField=Fältkoden för källhänvisningen har blivit skadad. Den talade om för Zotero vilken källa i ditt bibliotek denna referens hör till. Vill du välja om källan? +integration.corruptField.description=Klickar du på "Nej" så kommer fältkoderna för denna källa raderas, vilket sparar källhänvisningen men kanske raderar den från källförteckningen. +integration.corruptBibliography=Fältkoden för din källförteckning har blivit skadad. Ska Zotero radera denna fältkod och skapa en ny källförteckning? +integration.corruptBibliography.description=Alla källor som hänvisats till i texten kommer att hamna i den nya källförteckningen, men ändringar du gjort i "Redigera källförteckning" kommer att försvinna. styles.installStyle=Installera stil "%1$S" från %2$S? styles.updateStyle=Uppdatera existerande stil "%1$S" med "%2$S" från %3$S? styles.installed=Stilen "%S" importerades med lyckat resultat. styles.installError=%S verkar inte vara en giltig mallfil. -styles.installSourceError=%1$S refererar till en ogiltig eller saknad CSL-file vid %2$S hos dess källa. +styles.installSourceError=%1$S refererar till en ogiltig eller saknad CSL-file med %2$S som källa. styles.deleteStyle=Är du säker på att du vill ta bort stilen "%1$S"? -styles.deleteStyles=Are you sure you want to delete the selected styles? +styles.deleteStyles=Är du säker på att du vill ta bort de valda stilarna? sync.cancel=Avbryt synkronisering sync.openSyncPreferences=Öppna synkroniseringsval... @@ -616,8 +616,8 @@ sync.localObject=Lokalt objekt sync.remoteObject=Fjärrobjekt sync.mergedObject=Ihopsatt objekt -sync.error.usernameNotSet=Användarnamn är inte inställt -sync.error.passwordNotSet=Lösenord är inte inställt +sync.error.usernameNotSet=Användarnamn är inte valt +sync.error.passwordNotSet=Lösenord är inte valt sync.error.invalidLogin=Ogiltigt användarnamn eller lösenord sync.error.enterPassword=Skriv ett lösenord. sync.error.loginManagerCorrupted1=Zotero kan inte komma åt din inloggningsinformation, antagligen p.g.a en trasig Firefox-loginhanterardatabas. @@ -671,7 +671,7 @@ sync.storage.error.webdav.loadURLForMoreInfo=Surfa till din WebDAV-adress för m sync.storage.error.zfs.personalQuotaReached1=Du har uppnått din tillåtna sparkvot på Zotero File Storage. Några filer laddades inte upp. Övrig Zoterodata kommer att fortsätta synkroniseras med servern. sync.storage.error.zfs.personalQuotaReached2=Kolla dina kontoinställningar på zotero.org för andra sparval. sync.storage.error.zfs.groupQuotaReached1=Gruppen '%S' har uppnått sin tillåtna sparkvot på Zotero File Storage. Några filer laddades inte upp. Övrig Zoterodata kommer att fortsätta synkroniseras med servern. -sync.storage.error.zfs.groupQuotaReached2=Gruppägaren kan öka gruppens sparkapacitet via sparinställningar på zotero.org. +sync.storage.error.zfs.groupQuotaReached2=Gruppägaren kan öka gruppens sparutrymme via sparinställningar på zotero.org. sync.longTagFixer.saveTag=Spara etikett sync.longTagFixer.saveTags=Spara etiketter @@ -680,17 +680,17 @@ sync.longTagFixer.deleteTag=Radera etikett proxies.multiSite=Multisajt proxies.error=Information Validation Error proxies.error.scheme.noHTTP=Giltiga proxyadresser måste börja med "http://" eller "https://" -proxies.error.host.invalid=Du måste skriva in ett fullständigt värddnamn för sajten som denna proxy hanterar (t.ex., jstor.org). +proxies.error.host.invalid=Du måste skriva in ett fullständigt värdnamn för sajten som denna proxy hanterar (t.ex., jstor.org). proxies.error.scheme.noHost=En multisajtproxyadress måste innehålla en hostvariabel (%h). -proxies.error.scheme.noPath=En giltig proxyadress måste antingen innehålla sökvägsvariabeln (%p) eller katalog- och filnamnsvariabeln (%d and %f). +proxies.error.scheme.noPath=En giltig proxyadress måste antingen innehålla sökvägsvariabeln (%p) eller katalog- och filnamnsvariabeln (%d och %f). proxies.error.host.proxyExists=Du har redan ställt in en annan proxy för värden %1$S. proxies.error.scheme.invalid=Denna proxyinställning är ogiltig; den kommer att gälla för alla värdar. -proxies.notification.recognized.label=Zotero detected that you are accessing this website through a proxy. Would you like to automatically redirect future requests to %1$S through %2$S? -proxies.notification.associated.label=Zotero automatically associated this site with a previously defined proxy. Future requests to %1$S will be redirected to %2$S. -proxies.notification.redirected.label=Zotero automatically redirected your request to %1$S through the proxy at %2$S. -proxies.notification.enable.button=Enable... -proxies.notification.settings.button=Proxy Settings... -proxies.recognized.message=Genom att lägga till proxyn så kan Zotero känna igen källor på dess sidor och kommer i fortsättningen att automatiskt skicka vidare frågot till %1$S genom %2$S. +proxies.notification.recognized.label=Zotero upptäckte att du kommer åt webbsidan via en proxy. Vill du i fortsättningen automatiskt komma åt %1$S genom %2$S? +proxies.notification.associated.label=Zotero har automatiskt kopplat denna webbsida med en tidigare inställd proxy. Framtida trafik till %1$S kommer att gå till %2$S. +proxies.notification.redirected.label=Zotero har automatiskt skickat vidare din begäran efter %1$S till proxyn %2$S. +proxies.notification.enable.button=Aktivera... +proxies.notification.settings.button=Proxyinställningar... +proxies.recognized.message=Genom att lägga till proxyn så kan Zotero känna igen källor på dessa sidor och kommer i fortsättningen att automatiskt skicka vidare trafik till %1$S genom %2$S. proxies.recognized.add=Lägg till proxy recognizePDF.noOCR=PDF:en innehåller inte OCR:ad text. @@ -711,20 +711,20 @@ rtfScan.scannedFileSuffix=(Scannad) lookup.failure.title=Kontrollen misslyckades lookup.failure.description=Zotero kunde inte hitta något som passade detta registreringsnummer. Kolla registreringsnummret och försök igen. -locate.online.label=View Online -locate.online.tooltip=Go to this item online -locate.pdf.label=View PDF -locate.pdf.tooltip=Open PDF using the selected viewer -locate.snapshot.label=View Snapshot -locate.snapshot.tooltip=View and annotate the snapshot for this item -locate.file.label=View File -locate.file.tooltip=Open file using the selected viewer -locate.externalViewer.label=Open in External Viewer -locate.externalViewer.tooltip=Open file in another application -locate.internalViewer.label=Open in Internal Viewer -locate.internalViewer.tooltip=Open file in this application -locate.showFile.label=Show File -locate.showFile.tooltip=Open the directory in which this file resides -locate.libraryLookup.label=Library Lookup -locate.libraryLookup.tooltip=Look up this item using the selected OpenURL resolver -locate.manageLocateEngines=Manage Locate Engines... +locate.online.label=Visa online +locate.online.tooltip=Gå till källan online +locate.pdf.label=Visa PDF +locate.pdf.tooltip=Öppna PDF med valt program +locate.snapshot.label=Visa sparad kopia +locate.snapshot.tooltip=Visa och kommentera sparad kopia av källan +locate.file.label=Visa fil +locate.file.tooltip=Öppna fil med valt program +locate.externalViewer.label=Visa med externt program +locate.externalViewer.tooltip=Öppna filen i en annan applikation +locate.internalViewer.label=Visa med inbyggt program +locate.internalViewer.tooltip=Öppna filen i denna applikation +locate.showFile.label=Visa fil +locate.showFile.tooltip=Öppna filens mapp +locate.libraryLookup.label=Slå upp bibliotek +locate.libraryLookup.tooltip=Slå upp denna källa med vald OpenURL-resolver +locate.manageLocateEngines=Hantera söktjänster... diff --git a/chrome/skin/default/zotero/bindings/itembox.css b/chrome/skin/default/zotero/bindings/itembox.css index 662820fbcc..3e9b980898 100644 --- a/chrome/skin/default/zotero/bindings/itembox.css +++ b/chrome/skin/default/zotero/bindings/itembox.css @@ -15,6 +15,12 @@ textbox, tagsbox textbox margin-left: 0; } +.textbox-input-box +{ + margin-left: 0px; + margin-right: 0px; +} + /* DEBUG: this doesn't seem to work, unfortunately label[singleField=false]:after diff --git a/install.rdf b/install.rdf index c27ced491d..874f2cfa31 100644 --- a/install.rdf +++ b/install.rdf @@ -6,7 +6,7 @@ zotero@chnm.gmu.edu Zotero - 2.1b6.SVN + 2.1b8.SVN Center for History and New Media
George Mason University
Dan Cohen Sean Takats diff --git a/repotime.txt b/repotime.txt index bf2a2f470f..b2bd55acb8 100644 --- a/repotime.txt +++ b/repotime.txt @@ -1 +1 @@ -2011-02-12 18:35:00 +2011-02-24 23:30:00 diff --git a/translators/ACM.js b/translators/ACM.js index 26b61e38af..15cc1ec659 100644 --- a/translators/ACM.js +++ b/translators/ACM.js @@ -8,7 +8,7 @@ "priority":100, "inRepository":"1", "translatorType":4, - "lastUpdated":"2011-01-10 21:10:00" + "lastUpdated":"2011-02-24 23:30:00" } /** @@ -114,14 +114,13 @@ function scrapeMulti(doc, url, nsResolver, type) { default: var resultPath= doc.evaluate(searchResultX, doc, null, XPathResult.ANY_TYPE, null); } - Zotero.debug("hi"+resultPath.iterateNext().textContent); //Count how mange pages have been scraped var node; var urls = {}; //Iterate through all the results while(node= resultPath.iterateNext()) { - urls[node.href] = node.textContent; + urls[node.href + '&preflayout=flat'] = node.textContent; } var items = Zotero.selectItems(urls); @@ -283,7 +282,7 @@ function scrapeAttachments(doc, url) { */ function scrapeAbstract(doc) { Zotero.debug("Scraping abstract"); - var text = getText('//div[@style="display: inline;"]', doc); + var text = getText('//div[@class="flatbody" or @class="tabbody"]', doc); return text; } diff --git a/translators/Bibliontology RDF.js b/translators/Bibliontology RDF.js index 50768ea238..2f7e1ae44a 100644 --- a/translators/Bibliontology RDF.js +++ b/translators/Bibliontology RDF.js @@ -10,7 +10,7 @@ "configOptions":{"getCollections":"true", "dataMode":"rdf/xml"}, "displayOptions":{"exportNotes":true, "exportFileData":false}, "inRepository":false, - "lastUpdated":"2011-01-11 04:31:00" + "lastUpdated":"2011-02-22 00:39:57" } var n = { @@ -482,7 +482,7 @@ Type.prototype.addNodeRelations = function(nodes) { */ Type.prototype.createNodes = function(item) { var nodes = {}; - nodes[USERITEM] = "#item_"+item.itemID; + nodes[USERITEM] = (item.uri ? item.uri : "#item_"+item.itemID); // come up with an item node URI nodes[ITEM] = null; diff --git a/translators/Bibliothèque nationale de France.js b/translators/Bibliothèque nationale de France.js index f4be131f19..2dc7869323 100644 --- a/translators/Bibliothèque nationale de France.js +++ b/translators/Bibliothèque nationale de France.js @@ -1,14 +1,14 @@ { - "translatorID":"47533cd7-ccaa-47a7-81bb-71c45e68a74d", - "label":"Bibliothèque nationale de France", - "creator":"Florian Ziche", - "target":"^https?://[^/]*catalogue\\.bnf\\.fr", - "minVersion":"2.0", - "maxVersion":"", - "priority":100, - "inRepository":true, - "translatorType":4, - "lastUpdated":"2010-10-03 16:10:08" + "translatorID":"47533cd7-ccaa-47a7-81bb-71c45e68a74d", + "label":"Bibliothèque nationale de France", + "creator":"Florian Ziche", + "target":"^https?://[^/]*catalogue\\.bnf\\.fr", + "minVersion":"2.0", + "maxVersion":"", + "priority":100, + "inRepository":true, + "translatorType":4, + "lastUpdated":"2011-02-22 09:55:00" } /* @@ -437,7 +437,7 @@ var BnfClass = function() { //Store perennial url from 009 as attachment and accession number var url = record.getField("009"); - if(url && url[0][1]) { + if(url && url.length > 0 && url[0][1]) { newItem.accessionNumber = url[0][1]; newItem.attachments = [ { diff --git a/translators/Bookmarks.js b/translators/Bookmarks.js new file mode 100644 index 0000000000..b8306f2ade --- /dev/null +++ b/translators/Bookmarks.js @@ -0,0 +1,124 @@ +{ + "translatorID":"4e7119e0-02be-4848-86ef-79a64185aad8", + "translatorType":3, + "label":"Bookmarks", + "creator":"Avram Lyon", + "target":"html", + "minVersion":"2.1b6", + "maxVersion":"", + "priority":100, + "inRepository":true, + "lastUpdated":"2011-02-10 04:31:00" +} + +/* + Browser bookmarks translator + Copyright (C) 2011 Avram Lyon, ajlyon@gmail.com + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ + + /* This translator imports and exports browser bookmark files in the standard + * "Netscape Bookmark Format". + * See http://msdn.microsoft.com/en-us/library/aa753582%28VS.85%29.aspx + * This code draws from the CSL style for bookmark export, by Rintze Zelle + * http://www.zotero.org/styles/bookmark-export + * Input looks like: + + + +Bookmarks +

Bookmarks Menu

+
+
Example Site
+
Longer title
+
+ */ + + +function detectImport() { + var text = ""; + var line; + var match; + var re = /
\s*]*HREF="([^"]+)"[^>]*>([^<\n]+)/gi; + while((line = Zotero.read()) !== false) { + text += line; + match = re.exec(text); + if (match) { + Zotero.debug("Found a match with line: "+line); + return true; + } + } + return false; +} + +function doImport() { + var line; + var hits; + var item = false; + var itemIncomplete = false; + var re = /([A-Za-z_]+)="([^"]+)"/g; + while((line = Zotero.read()) !== false) { + if (line.indexOf("
") !== -1) { + if (itemIncomplete) item.complete(); + itemIncomplete = true; + item = new Zotero.Item("webpage"); + item.title = line.match(/>([^<]*)<\/A>/)[1]; + Zotero.debug(item.title); + while(hits = re.exec(line)) { + if (!hits) { Zotero.debug("RE no match in "+line); + } + switch (hits[1]) { + case "HREF": item.url = hits[2]; break; + case "TAGS": item.tags = hits[2].split(','); break; + default: item.extra = item.extra ? item.extra + "; "+ [hits[1], hits[2]].join("=") : + [hits[1], hits[2]].join("="); + } + } + } else if (line.substr(0,4) == "
") { + if (itemIncomplete) item.abstractNote = item.abstractNote ? item.abstractNote + " " + line.substr(4) : line.substr(4); + else Zotero.debug("Discarding description line without item: " + line); + } else { + Zotero.debug("Discarding line: " + line); + } + } + if (item && itemIncomplete) item.complete(); +} + + +function doExport() { + var item; + + var header = '\n'+ +'\n'+ +'\n'+ +'Bookmarks\n'+ +'

Bookmarks Menu

\n'+ +'
\n'; + var footer = '
'; + //var tags = ""; + + Zotero.write(header); + while (item = Zotero.nextItem()) { + // TODO Be more verbose, making an informative title and including more metadata + //tags = item.tags.forEach(function (tag) {return tag.tag}).join(","); + if (item.url) Zotero.write('
'+item.title+'\n'); + else Zotero.debug("Skipping item without URL: "+item.title); + } + Zotero.write(footer); +} diff --git a/translators/EBSCOhost.js b/translators/EBSCOhost.js index 54dba3b668..18bb37565a 100644 --- a/translators/EBSCOhost.js +++ b/translators/EBSCOhost.js @@ -1,14 +1,14 @@ { - "translatorID":"d0b1914a-11f1-4dd7-8557-b32fe8a3dd47", - "translatorType":4, - "label":"EBSCOhost", - "creator":"Simon Kornblith and Michael Berkowitz", - "target":"https?://[^/]+/(?:bsi|ehost)/(?:results|detail|folder)", - "minVersion":"1.0.0b3.r1", - "maxVersion":"", - "priority":100, - "inRepository":true, - "lastUpdated":"2010-11-10 10:10:00" + "translatorID": "d0b1914a-11f1-4dd7-8557-b32fe8a3dd47", + "label": "EBSCOhost", + "creator": "Simon Kornblith and Michael Berkowitz", + "target": "https?://[^/]+/(?:bsi|ehost)/(?:results|detail|folder)", + "minVersion": "1.0.0b3.r1", + "maxVersion": "", + "priority": 100, + "inRepository": "1", + "translatorType": 4, + "lastUpdated": "2011-02-24 23:30:00" } function detectWeb(doc, url) { @@ -87,7 +87,7 @@ function generateDeliverString(nsResolver, doc){ function downloadFunction(text) { //Zotero.debug("POSTTEXT="+text); - var postLocation = /
<]*id="aspnetForm"/ var postMatch = postLocation.exec(text); var deliveryURL = postMatch[1].replace(/&/g, "&"); postMatch = customViewStateMatch.exec(text); @@ -162,7 +162,7 @@ function doWeb(doc, url) { } Zotero.Utilities.processDocuments(uris, function(newDoc){ - var postURL = newDoc.evaluate('//form[@name="aspnetForm"]/@action', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); + var postURL = newDoc.evaluate('//form[@id="aspnetForm"]/@action', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); postURL = host+"/ehost/"+postURL.nodeValue; var deliverString = generateDeliverString(nsResolver, newDoc); Zotero.Utilities.HTTP.doPost(postURL, deliverString, downloadFunction); @@ -171,7 +171,7 @@ function doWeb(doc, url) { //This is a hack, generateDeliveryString is acting up for single pages, but it works on the plink url var link = [doc.evaluate("//input[@id ='pLink']/@value", doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue]; Zotero.Utilities.processDocuments(link, function(newDoc){ - var postURL = newDoc.evaluate('//form[@name="aspnetForm"]/@action', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); + var postURL = newDoc.evaluate('//form[@id="aspnetForm"]/@action', newDoc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); postURL = host+"/ehost/"+postURL.nodeValue; var deliverString = generateDeliverString(nsResolver, newDoc); Zotero.Utilities.HTTP.doPost(postURL, deliverString, downloadFunction); diff --git a/translators/JSTOR.js b/translators/JSTOR.js index 6a040bd31b..c1eaf3954e 100644 --- a/translators/JSTOR.js +++ b/translators/JSTOR.js @@ -3,12 +3,12 @@ "label":"JSTOR", "creator":"Simon Kornblith, Sean Takats, Michael Berkowitz, and Eli Osherovich", "target":"https?://[^/]*jstor\\.org[^/]*/(action/(showArticle|doBasicSearch|doAdvancedSearch|doLocatorSearch|doAdvancedResults|doBasicResults)|stable/|pss/)", - "minVersion":"1.0.0b4.r1", + "minVersion":"2.1b6", "maxVersion":"", "priority":100, "inRepository":"1", "translatorType":4, - "lastUpdated":"2011-02-12 18:35:00" + "lastUpdated":"2011-02-17 18:55:00" } @@ -37,32 +37,6 @@ function detectWeb(doc, url) { } } - -Zotero.Utilities.processAsync = function (sets, callbacks, onDone) { - var currentSet; - var index = 0; - - var nextSet = function () { - if (!sets.length) { - onDone(); - return; - } - index = 0; - currentSet = sets.shift(); - callbacks[0](currentSet, nextCallback); - }; - var nextCallback = function () { - index++; - callbacks[index](currentSet, nextCallback); - }; - - // Add a final callback to proceed to the next set - callbacks[callbacks.length] = function () { - nextSet(); - } - nextSet(); -} - function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { diff --git a/translators/PEP Web.js b/translators/PEP Web.js index 722b0658b7..87c9984933 100644 --- a/translators/PEP Web.js +++ b/translators/PEP Web.js @@ -3,12 +3,12 @@ "translatorType":4, "label":"PEP Web", "creator":"Akilesh Ayyar", - "target":"^http?://www.pep-web.org", + "target":"^https?://www\\.pep-web\\.org", "minVersion":"1.0.0b3.r1", "maxVersion":"", "priority":100, "inRepository":false, - "lastUpdated":"2009-10-02 04:50:00" + "lastUpdated":"2011-02-15 04:50:00" } //Only works for journal articles, and only for single entries. @@ -36,9 +36,9 @@ function scrape(doc, url) { var newItem = new Zotero.Item("journalArticle"); newItem.url = doc.location.href; - var xPathString = "/html/body/table/tbody/tr[3]/td/table/tbody/tr/td/table/tbody/tr/td[1]/span[@id='maincite']"; + var xPathString = "//span[@id='maincite']"; - var xPathString2 = "/html/body/table/tbody/tr[3]/td/table/tbody/tr/td/div/p[3]/a"; + var xPathString2 = '//p[@class="title"]/a'; var myXPathObject = doc.evaluate(xPathString, doc, nsResolver, XPathResult.ANY_TYPE, null); var myXPathObject2 = doc.evaluate(xPathString2, doc, nsResolver, XPathResult.ANY_TYPE, null); @@ -112,4 +112,4 @@ function doWeb(doc, url) { Zotero.Utilities.processDocuments(articles, scrape, function(){Zotero.done();}); Zotero.wait(); -} \ No newline at end of file +}