commit c4f59b07a67f3312196af8634b199466216a0fd5
parent dbf124ef907811383ec14207036bb29ec9d19398
Author: Matt Burton <mcburton@gmail.com>
Date: Tue, 26 May 2009 19:06:48 +0000
Fixes #1452, generic translator for Highwire 2.0 sites.
Diffstat:
3 files changed, 103 insertions(+), 155 deletions(-)
diff --git a/translators/Highwire 2.0.js b/translators/Highwire 2.0.js
@@ -0,0 +1,102 @@
+{
+ "translatorID":"8c1f42d5-02fa-437b-b2b2-73afc768eb07",
+ "translatorType":4,
+ "label":"Highwire 2.0",
+ "creator":"Matt Burton",
+ "target":"(content/([0-9]+/[0-9]+|current|firstcite)|search|cgi/collection/.+)",
+ "minVersion":"1.0.0b4.r5",
+ "maxVersion":"",
+ "priority":100,
+ "inRepository":true,
+ "lastUpdated":"2009-05-26 14:35:00"
+}
+
+function detectWeb(doc, url) {
+ if (
+ url.match("search") ||
+ url.match("content/by/section") ||
+ doc.title.match("Table of Contents") ||
+ doc.title.match("Early Edition") ||
+ url.match("cgi/collection/.+") ||
+ url.match("content/firstcite")
+ ) {
+ return "multiple";
+ } else if (url.match("content/[0-9]+")) {
+ return "journalArticle";
+ }
+}
+
+function doWeb(doc, url) {
+
+
+ var host = 'http://' + doc.location.host + "/";
+
+ var arts = new Array();
+ if (detectWeb(doc, url) == "multiple") {
+ var items = new Object();
+ if (doc.title.match("Table of Contents") || doc.title.match("Early Edition") || url.match("content/firstcite")) {
+ var searchx = '//li[contains(@class, "cit toc-cit") and not(ancestor::div/h2/a/text() = "Correction" or ancestor::div/h2/a/text() = "Corrections")]';
+ var titlex = './/h4';
+ } else if (url.match("content/by/section") || url.match("cgi/collection/.+")) {
+ var searchx = '//li[contains(@class, "results-cit cit")]';
+ var titlex = './/span[contains(@class, "cit-title"])';
+ }
+ else {
+ var searchx = '//div[contains(@class,"results-cit cit")]';
+ var titlex = './/span[contains(@class,"cit-title")]';
+ }
+ var linkx = './/a[1]';
+ var searchres = doc.evaluate(searchx, doc, null, XPathResult.ANY_TYPE, null);
+ var next_res;
+ while (next_res = searchres.iterateNext()) {
+ var title = doc.evaluate(titlex, next_res, null, XPathResult.ANY_TYPE, null).iterateNext().textContent;
+ var link = doc.evaluate(linkx, next_res, null, XPathResult.ANY_TYPE, null).iterateNext().href;
+ items[link] = title;
+ }
+ items = Zotero.selectItems(items);
+ for (var i in items) {
+ arts.push(i);
+ }
+ } else {
+ arts = [url];
+ }
+ var newurls = new Array();
+ for each (var i in arts) {
+ newurls.push(i);
+ }
+ Zotero.debug(arts.length);
+ if(arts.length == 0) {
+ Zotero.debug('no items');
+ return false;
+ }
+ Zotero.Utilities.HTTP.doGet(arts, function(text) {
+ var id = text.match(/=([^=]+)\">\s*Download to citation manager/)[1];
+ var newurl = newurls.shift();
+ if (newurl.match("cgi/content")) {
+ var pdfurl = newurl.replace(/cgi\/content\/abstract/, "content") + ".full.pdf";
+ } else {
+ // This is not ideal...todo: brew a regex that grabs the correct URL
+ var pdfurl = newurl.slice(0, newurl.lastIndexOf(".")) + ".full.pdf";
+ }
+ var get = host + 'citmgr?type=refman&gca=' + id;
+ Zotero.Utilities.HTTP.doGet(get, function(text) {
+ var translator = Zotero.loadTranslator("import");
+ translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
+ translator.setString(text);
+ if (text.match(/N1(.*)\n/)) {
+ var doi = text.match(/N1\s+\-\s+(.*)\n/)[1];
+ }
+ translator.setHandler("itemDone", function(obj, item) {
+ item.attachments = [
+ {url:newurl, title:"Snapshot", mimeType:"text/html"},
+ {url:pdfurl, title:"Full Text PDF", mimeType:"application/pdf"}
+ ];
+ if (doi) item.DOI = doi;
+ if (item.notes) item.notes = [];
+ item.complete();
+ });
+ translator.translate();
+ });
+ });
+ Zotero.wait();
+}
+\ No newline at end of file
diff --git a/translators/PNAS (HighWire 2.0).js b/translators/PNAS (HighWire 2.0).js
@@ -1,88 +0,0 @@
-{
- "translatorID":"8c1f42d5-02fa-437b-b2b2-73afc768eb07",
- "translatorType":4,
- "label":"PNAS",
- "creator":"Matt Burton",
- "target":"http://www\\.pnas\\.org/(content|search|cgi/collection/.+)",
- "minVersion":"1.0.0b4.r5",
- "maxVersion":"",
- "priority":100,
- "inRepository":true,
- "lastUpdated":"2008-12-27 20:50:00"
-}
-
-// This translator is for HighWire 2.0
-
-function detectWeb(doc, url) {
- if (url.match("search") || url.match("content/by/section") || doc.title.match("Table of Contents") || doc.title.match("Early Edition") || url.match("cgi/collection/.+")) {
- return "multiple";
- } else if (url.match("content/[0-9]")) {
- return "journalArticle";
- }
-}
-
-function doWeb(doc, url) {
- var arts = new Array();
- if (detectWeb(doc, url) == "multiple") {
- var items = new Object();
- if (doc.title.match("Table of Contents") || doc.title.match("Early Edition")) {
- var searchx = '//li[@class = "cit toc-cit" and not(ancestor::div/h2/a/text() = "Correction" or ancestor::div/h2/a/text() = "Corrections")]';
- var titlex = './/h4';
- } else if (url.match("content/by/section") || url.match("cgi/collection/.+")) {
- var searchx = '//li[contains(@class, "results-cit cit")]';
- var titlex = './/span[@class = "cit-title"]';
- }
- else {
- var searchx = '//div[@class = "results-cit cit"]';
- var titlex = './/span[@class = "cit-title"]';
- }
- var linkx = './/a[1]';
- var searchres = doc.evaluate(searchx, doc, null, XPathResult.ANY_TYPE, null);
- var next_res;
- while (next_res = searchres.iterateNext()) {
- var title = doc.evaluate(titlex, next_res, null, XPathResult.ANY_TYPE, null).iterateNext().textContent;
- var link = doc.evaluate(linkx, next_res, null, XPathResult.ANY_TYPE, null).iterateNext().href;
- items[link] = title;
- }
- items = Zotero.selectItems(items);
- for (var i in items) {
- arts.push(i);
- }
- } else {
- arts = [url];
- }
- var newurls = new Array();
- for each (var i in arts) {
- newurls.push(i);
- }
- Zotero.Utilities.HTTP.doGet(arts, function(text) {
- var id = text.match(/=([^=]+)\">\s*Download to citation manager/)[1];
- var newurl = newurls.shift();
- if (newurl.match("cgi/content")) {
- var pdfurl = newurl.replace(/cgi\/content\/abstract/, "content") + ".full.pdf";
- } else {
- // This is not ideal...todo: brew a regex that grabs the correct URL
- var pdfurl = newurl.slice(0, newurl.lastIndexOf(".")) + ".full.pdf";
- }
- var get = 'http://www.pnas.org/citmgr?type=refman&gca=' + id;
- Zotero.Utilities.HTTP.doGet(get, function(text) {
- var translator = Zotero.loadTranslator("import");
- translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
- translator.setString(text);
- if (text.match(/N1(.*)\n/)) {
- var doi = text.match(/N1\s+\-\s+(.*)\n/)[1];
- }
- translator.setHandler("itemDone", function(obj, item) {
- item.attachments = [
- {url:newurl, title:"PNAS Snapshot", mimeType:"text/html"},
- {url:pdfurl, title:"PNAS Full Text PDF", mimeType:"application/pdf"}
- ];
- if (doi) item.DOI = doi;
- if (item.notes) item.notes = [];
- item.complete();
- });
- translator.translate();
- });
- });
- Zotero.wait();
-}
-\ No newline at end of file
diff --git a/translators/Royal Society Publishing.js b/translators/Royal Society Publishing.js
@@ -1,65 +0,0 @@
-{
- "translatorID":"56ea09bc-57ee-4f50-976e-cf7cb1f6c6d8",
- "translatorType":4,
- "label":"Royal Society Publishing",
- "creator":"Michael Berkowitz",
- "target":"http://journals.royalsociety.org/",
- "minVersion":"1.0.0b4.r5",
- "maxVersion":"",
- "priority":100,
- "inRepository":true,
- "lastUpdated":"2008-04-23 09:45:00"
-}
-
-function detectWeb(doc, url) {
- if (doc.evaluate('//div[@class="listItemName"]/a', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
- return "multiple";
- } else if (doc.evaluate('//div[contains(@id, "ExportDiv")]/a', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) {
- return "journalArticle";
- }
-}
-
-function makeURL(str, type) {
- var m = str.match(/content\/([^/]+)/)[1];
- if (type == "ris") {
- return "http://journals.royalsociety.org/export.mpx?code=" + m + "&mode=ris";
- } else if (type == "pdf") {
- return "http://journals.royalsociety.org/content/" + m + "/fulltext.pdf";
- }
-}
-
-function doWeb(doc, url) {
- var arts = new Array();
- if (detectWeb(doc, url) == "multiple") {
- var items = new Object();
- var links = doc.evaluate('//div[@class="listItemName"]/a', doc, null, XPathResult.ANY_TYPE, null);
- var link;
- while (link = links.iterateNext()) {
- items[link.href] = link.textContent;
- }
- items = Zotero.selectItems(items);
- for (var i in items) {
- arts.push(i);
- }
- } else {
- arts = [url];
- }
- for each (var link in arts) {
- var newurl = makeURL(link, "ris");
- var pdfurl = makeURL(link, "pdf");
- Zotero.Utilities.HTTP.doGet(newurl, function(text) {
- Zotero.debug(text);
- var translator = Zotero.loadTranslator("import");
- translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
- translator.setString(text);
- translator.setHandler("itemDone", function(obj, item) {
- item.attachments = [
- {url:link, title:"Royal Society Snapshot", mimeType:"text/html"},
- {url:pdfurl, title:"Royal Society PDF", mimeType:"application/pdf"}
- ];
- item.complete();
- });
- translator.translate();
- });
- }
-}
-\ No newline at end of file