commit 0fe124480650b1de6dfdda0e331d1b90b0c381de
parent 8a4a8bafbe86690b0bc7eb87d31930dcc6ab90a7
Author: Avram Lyon <ajlyon@gmail.com>
Date: Tue, 9 Nov 2010 13:00:28 +0000
Trans: Euclid fix. Doesn't do search results yet, but better than nothing
Diffstat:
| M | translators/Euclid.js | | | 97 | ++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------- |
1 file changed, 62 insertions(+), 35 deletions(-)
diff --git a/translators/Euclid.js b/translators/Euclid.js
@@ -1,14 +1,14 @@
{
- "translatorID":"2e1c09a0-3006-11de-8c30-0800200c9a66",
- "translatorType":4,
- "label":"Project Euclid",
- "creator":"Guy Freeman",
- "target":"https?://[^/]*projecteuclid\\.org[^/]*/",
- "minVersion":"1.0.0b4.r5",
- "maxVersion":"",
- "priority":100,
- "inRepository":true,
- "lastUpdated":"2009-05-05 07:15:00"
+ "translatorID":"2e1c09a0-3006-11de-8c30-0800200c9a66",
+ "label":"Project Euclid",
+ "creator":"Guy Freeman and Avram Lyon",
+ "target":"^https?://[^/]*projecteuclid\\.org[^/]*/",
+ "minVersion":"1.0",
+ "maxVersion":"",
+ "priority":100,
+ "inRepository":"1",
+ "translatorType":4,
+ "lastUpdated":"2010-11-09 11:49:57"
}
function detectWeb(doc, url){
@@ -17,7 +17,6 @@ function detectWeb(doc, url){
if (prefix == 'x') return namespace; else return null;
} : null;
-
var xpath = '//div[@class="abstract-text"]';
Zotero.debug(xpath);
if(doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
@@ -45,7 +44,7 @@ function doWeb(doc, url){
Zotero.debug(titleitem);
newItem.title = titleitem;
- var authorXPath = '//div[@id="main-text"]/p[@class="bold"]';
+ var authorXPath = '//div[@class="abs-page-text-bold"]/span';
var authoritem = doc.evaluate(authorXPath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.replace(/^\s*|\s*$/g, '');
if (authoritem.search(/\sand\s/) == -1) {
var authoritem2 = "";
@@ -68,47 +67,75 @@ function doWeb(doc, url){
var abstractitem = doc.evaluate(abstractXPath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext().textContent;
newItem.abstractNote = abstractitem;
- var journalXPath = '//div[@id="secondary-content-plain"]/h2';
- var journalitem = doc.evaluate(journalXPath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext().textContent;
+ var journalXPath = '//div[@id="main-image"]/img';
+ var journalitem = doc.evaluate(journalXPath, doc, nsResolver,XPathResult.ANY_TYPE, null).iterateNext()["alt"];
newItem.publicationTitle = journalitem;
- var journalabbXPath = '//div[@id="main-text"]/p[2]/a';
- var journalabbitem = doc.evaluate(journalXPath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
- newItem.journalAbbr = journalabbitem;
+ var journalabbXPath = '//div[@class="abs-page-text"]/a';
+ var journalabbitem = doc.evaluate(journalabbXPath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
+ newItem.journalAbbreviation = journalabbitem;
- var volumeetcXPath = '//div[@id="main-text"]/p[2]/text()';
+ var idXPath = '//div[@id="identifier"]/p';
+ var idresult = doc.evaluate(idXPath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().innerHTML;
+ var idrows = idresult.split('<br>');
+ var idrow, pieces;
+ var identifiers = [];
+ newItem.extra="";
+ for each (idrow in idrows) {
+ pieces = idrow.match(/\s*([^:]+)\s*:\s*(.+)/);
+ if (pieces && pieces[1] && pieces[2]) {
+ switch (pieces[1]) {
+ case "Digital Object Identifier":
+ newItem.DOI = pieces[2].match(/^\s*doi:(.*)/)[1];
+ break;
+ case "Mathematical Reviews number (MathSciNet)":
+ case "Zentralblatt MATH identifier":
+ identifiers.push(pieces[1] + ": " + pieces[2].match(/>(.*?)</)[1]);
+ break;
+ case "Permanent link to this document":
+ newItem.url = pieces[2];
+ break;
+ default:
+ Zotero.debug("Discarding identifier: " + pieces[1] + ": " + pieces[2] );
+ break;
+ }
+ pieces = null;
+ }
+ newItem.extra = identifiers.join("; ");
+ }
+
+ var volumeetcXPath = '//div[@class="abs-page-text"]/text()';
//var volumeetcitem = doc.evaluate(volumeetcXPath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().childNodes[2].textContent;
var volumeetcitem = doc.evaluate(volumeetcXPath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
Zotero.debug("volumeetcitem="+volumeetcitem);
var volumeetcitemarray = volumeetcitem.replace(/\s+/g," ").split(/\s/);
if (volumeetcitemarray[3].search(/Number/) == -1) {
- var volumeitem = volumeetcitemarray[2].match(/\d+/);
- var yearitem = volumeetcitemarray[3].match(/\d+/);
- var pagesitem = volumeetcitemarray[4].match(/[^\.]+/);
+ var volumeitem = volumeetcitemarray[2].match(/\d+/)[0];
+ var yearitem = volumeetcitemarray[3].match(/\d+/)[0];
+ var pagesitem = volumeetcitemarray[4].match(/[^\.]+/)[0];
newItem.volume = volumeitem;
newItem.pages = pagesitem;
newItem.date = yearitem;
} else {
- var volumeitem = volumeetcitemarray[2].match(/\d+/);
- var issueitem = volumeetcitemarray[4].match(/\d+/);
- var yearitem = volumeetcitemarray[5].match(/\d+/);
- var pagesitem = volumeetcitemarray[6].match(/[^\.]+/);
+ var volumeitem = volumeetcitemarray[2].match(/\d+/)[0];
+ var issueitem = volumeetcitemarray[4].match(/\d+/)[0];
+ var yearitem = volumeetcitemarray[5].match(/\d+/)[0];
+ var pagesitem = volumeetcitemarray[6].match(/[^\.]+/)[0];
newItem.volume = volumeitem;
newItem.pages = pagesitem;
newItem.issue = issueitem;
newItem.date = yearitem;
}
- var doixpath = '//div[@id="identifier"]/p';
- try {
- var doi = doc.evaluate(doixpath,doc,nsResolver,XPathResult.ANY_TYPE,null).iterateNext().childNodes[2].textContent.match(/\d.*/);
- newItem.DOI = doi;
- } catch (e) {
- // no doi, do nothing
- }
- var pdfurlxpath = '//div[@id="download-section"]/div/a';
- if (doc.evaluate(pdfurlxpath,doc,nsResolver,XPathResult.ANY_TYPE,null).iterateNext().textContent.search(/pdf/i) != -1) {
- var pdfurl = doc.evaluate(pdfurlxpath,doc,nsResolver,XPathResult.ANY_TYPE,null).iterateNext().href;
+ // From META tags
+ newItem.publisher = doc.evaluate('//meta[@name="citation_publisher"]',doc,nsResolver,XPathResult.ANY_TYPE,null).iterateNext().content;
+ newItem.date = doc.evaluate('//meta[@name="citation_date"]',doc,nsResolver,XPathResult.ANY_TYPE,null).iterateNext().content;
+ newItem.ISSN = doc.evaluate('//meta[@name="citation_issn"]',doc,nsResolver,XPathResult.ANY_TYPE,null).iterateNext().content;
+ newItem.language = doc.evaluate('//meta[@name="citation_language"]',doc,nsResolver,XPathResult.ANY_TYPE,null).iterateNext().content;
+
+ var pdfurlxpath = '//meta[@name="citation_pdf_url"]';
+ if (doc.evaluate(pdfurlxpath,doc,nsResolver,XPathResult.ANY_TYPE,null).iterateNext()) {
+ var pdfurl = doc.evaluate(pdfurlxpath,doc,nsResolver,XPathResult.ANY_TYPE,null).iterateNext().content;
newItem.attachments.push({url:pdfurl, title:"Euclid Project PDF", mimeType:"application/pdf"});
}