www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit 440727540137cebeed9d701326e0697e0fc4aae6
parent ce9b915de160fb32b2fd8ac916169f9d35ab6e9e
Author: Dan Stillman <dstillman@zotero.org>
Date:   Tue, 22 Sep 2009 07:04:36 +0000

Fix zotero.org translator on library pages -- can't do item pages because libraryUserID and libraryGroupID are gone and there's no API link


Diffstat:
Mtranslators/zotero.org.js | 46+++++++++++++++-------------------------------
1 file changed, 15 insertions(+), 31 deletions(-)

diff --git a/translators/zotero.org.js b/translators/zotero.org.js @@ -8,21 +8,16 @@ "maxVersion":"", "priority":100, "inRepository":true, - "lastUpdated":"2009-07-01 08:40:00" + "lastUpdated":"2009-09-22 07:05:00" } function detectWeb(doc, url) { - var namespace = doc.documentElement.namespaceURI; - var nsResolver = namespace ? function(prefix) { - if (prefix == 'x') return namespace; else return null; - } : null; - // Skip private groups if (url.match(/\/groups\/[0-9]+\/items/)) { return false; } - var a = doc.evaluate('//li[@id="library-tab"]/a[text()="My Library"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); + var a = doc.evaluate('//li[@id="library-tab"]/a[text()="My Library"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext(); // Skip current user's library if (a && url.indexOf(a.href.match(/(^.+)\/items/)[1]) == 0) { return false; @@ -37,6 +32,9 @@ function detectWeb(doc, url) { // Individual item else if (url.match(/\/items\/[0-9]+(\?.*)?$/)) { + // FIXME: temporarily broken + return false; + // TODO: embed in page, because this is absurd var typeMap = { "Note": "note", @@ -140,30 +138,16 @@ function xmlToItem(xmlItem) { function doWeb(doc, url) { - // User library - if (url.indexOf("/groups/") == -1) { - //var userID = url.match(/^http:\/\/[^\/]*zotero\.org\/[^\/]+\/([0-9]+)/)[1]; - var userID = doc.getElementById('libraryUserID').getAttribute('title'); - var apiPrefix = "https://api.zotero.org/users/" + userID + "/"; - var itemRe = /^https?:\/\/[^\/]*zotero\.org\/[^\/]+\/items\/([0-9]+)/; - } - // Group library - else { - //var groupID = url.match(/^http:\/\/[^\/]*zotero\.org\/groups\/[^\/]+\/([0-9]+)/)[1]; - var groupID = doc.getElementById('libraryGroupID').getAttribute('title'); - var apiPrefix = "https://api.zotero.org/groups/" + groupID + "/"; - var itemRe = /^https?:\/\/[^\/]*zotero\.org\/groups\/[^\/]+\/items\/([0-9]+)/; - } - var nsAtom = new Namespace('http://www.w3.org/2005/Atom'); var nsZXfer = new Namespace('http://zotero.org/ns/transfer'); if (detectWeb(doc, url) == "multiple") { - var namespace = doc.documentElement.namespaceURI; - var nsResolver = namespace ? function(prefix) { - if (prefix == 'x') return namespace; else return null; - } : null; - var column = doc.evaluate('//table[@id="field-table"]//td[1][@class="title"][not(contains(./a, "Unpublished Note"))]', doc, nsResolver, XPathResult.ANY_TYPE, null); + var itemRe = /^https?:\/\/[^\/]*zotero\.org\/(?:groups\/)?[^\/]+\/items\/([0-9]+)/; + + var link = doc.evaluate('//link[@type="application/atom+xml" and @rel="alternate"]', doc, null, XPathResult.ANY_TYPE, null).iterateNext(); + var libraryURI = link.getAttribute('href'); + + var column = doc.evaluate('//table[@id="field-table"]//td[1][@class="title"][not(contains(./a, "Unpublished Note"))]', doc, null, XPathResult.ANY_TYPE, null); var elems = [], td; while (td = column.iterateNext()) { elems.push(td); @@ -175,14 +159,14 @@ function doWeb(doc, url) { return true; } - var apiURLs = [], itemID, apiURL; + var apiURIs = [], itemID, apiURI; for (var url in items) { itemID = url.match(itemRe)[1]; - apiURL = apiPrefix + "items/" + itemID + "?content=full"; - apiURLs.push(apiURL); + apiURI = libraryURI + "/" + itemID + "?content=full"; + apiURIs.push(apiURI); } - Zotero.Utilities.HTTP.doGet(apiURLs, function(text) { + Zotero.Utilities.HTTP.doGet(apiURIs, function(text) { // Strip XML declaration and convert to E4X var entry = new XML(text.replace(/<\?xml.*\?>/, '')); xmlToItem(entry.nsAtom::content.nsZXfer::item);