zotero/translators/RePEc.js

181 lines
No EOL
4.7 KiB
JavaScript

{
"translatorID":"411f9a8b-64f3-4465-b7df-a3c988b602f3",
"translatorType":4,
"label":"RePEc",
"creator":"Asa Kusuma",
"target":"^https?://ideas\\.repec\\.org/",
"minVersion":"1.0.0b4.r1",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2011-01-11 04:31:00"
}
function detectWeb(doc, url) {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
var singXpath = '//html/body/a/table/tbody/tr/td/font/b';
var multXpath = '//html/body/h2';
if (doc.evaluate(multXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
if(doc.evaluate(multXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.indexOf("Search")!=-1)
return "multiple";
} else if(doc.evaluate(singXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
return "journalArticle";
}
}
function strrev(str) {
if (!str) return '';
var revstr='';
for (i = str.length-1; i>=0; i--)
revstr+=str.charAt(i)
return revstr;
}
function parseRIS(uris) {
Zotero.Utilities.HTTP.doGet(uris, function(text){
// load translator for RIS
var translator = Zotero.loadTranslator("import");
translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
translator.setString(text);
translator.translate();
Zotero.done();
}, function() {});
Zotero.wait();
}
function doWeb(doc, url) {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
var singXpath = '//html/body/a/table/tbody/tr/td/font/b';
var multXpath = '//html/body/h2';
if (doc.evaluate(multXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
if(doc.evaluate(multXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent.indexOf("Search")!=-1)
shortXpath = '//html/body/strong/a';
longXpath = '//html/body/dl/dt/strong/a';
var multXpath='';
if(doc.evaluate(shortXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
multXpath=shortXpath;
} else {
multXpath=longXpath;
}
var bibElmts = doc.evaluate(multXpath, doc, nsResolver, XPathResult.ANY_TYPE, null);
var titleElmts = doc.evaluate(multXpath, doc, nsResolver, XPathResult.ANY_TYPE, null);
var titleElmt;
var bibElmt;
bibElmt = bibElmts.iterateNext();
titleElmt = titleElmts.iterateNext();
var items = new Array();
do {
var bibcode = bibElmt.href;
bibcode=bibcode.substr(24);
bibcode=strrev(bibcode);
bibcode=bibcode.substr(5,bibcode.length);
bibcode=strrev(bibcode);
//Replace slashes with colons
bibcode=bibcode.replace("/",":","g");
//Insert colons between numbers and letters and letters and numbers
bibcode=bibcode.replace(/([A-Za-z])([0-9])/g,
function (str, p1, p2, offset, s) {
return p1 + ":" + p2;
}
)
bibcode=bibcode.replace(/([0-9])([A-Za-z])/g,
function (str, p1, p2, offset, s) {
return p1 + ":" + p2;
}
)
items[bibcode] = Zotero.Utilities.trimInternal(titleElmt.textContent);
} while((bibElmt = bibElmts.iterateNext()) && (titleElmt = titleElmts.iterateNext()));
items = Zotero.selectItems(items);
if(!items) return true;
var bibcodes="";
var uris = new Array();
for(var bibcode in items) {
var getURL = "http://ideas.repec.org/cgi-bin/ref.cgi?handle=RePEc";
getURL = getURL + bibcode + "&output=3";
uris.push(getURL);
}
parseRIS(uris);
} else if(doc.evaluate(singXpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
var bibcode = url;
bibcode=bibcode.substr(24);
bibcode=strrev(bibcode);
bibcode=bibcode.substr(5,bibcode.length);
bibcode=strrev(bibcode);
//Replace slashes with colons
bibcode=bibcode.replace("/",":","g");
//Insert colons between numbers and letters and letters and numbers
bibcode=bibcode.replace(/([A-Za-z])([0-9])/g,
function (str, p1, p2, offset, s) {
return p1 + ":" + p2;
}
)
bibcode=bibcode.replace(/([0-9])([A-Za-z])/g,
function (str, p1, p2, offset, s) {
return p1 + ":" + p2;
}
)
var getURL = "http://ideas.repec.org/cgi-bin/ref.cgi?handle=RePEc";
getURL = getURL + bibcode + "&output=3";
var idarray = new Array();
idarray.push(getURL);
parseRIS(idarray);
}
}