zotero/translators/ProQuest.js

212 lines
No EOL
6.5 KiB
JavaScript

{
"translatorID":"a77690cf-c5d1-8fc4-110f-d1fc765dcf88",
"translatorType":4,
"label":"ProQuest",
"creator":"Simon Kornblith",
"target":"^https?://[^/]+/pqdweb\\?((?:.*\\&)?did=.*&Fmt=[0-9]|(?:.*\\&)Fmt=[0-9].*&did=|(?:.*\\&)searchInterface=|(?:.*\\&)TS=[0-9])",
"minVersion":"1.0.0b3.r1",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-05-15 18:30:00"
}
function detectWeb(doc, url) {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
if(doc.evaluate('//img[substring(@src, string-length(@src)-32) = "/images/common/logo_proquest.gif" or substring(@src, string-length(@src)-38) = "/images/common/logo_proquest_small.gif"]',
doc, nsResolver, XPathResult.ANY_TYPE, null)) {
var xpath = '//table[@id="tableIndexTerms"]/tbody/tr/td[@class="textSmall"]';
var data= doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null);
var aitem;
var source;
while(aitem = data.iterateNext()) {
source=aitem.textContent;
if(source=="Source type:") {
source=data.iterateNext().textContent;
Zotero.debug("Item Source Type: "+source);
break;
}
}
if(doc.title == "Results") {
return "multiple";
} else if(doc.title == "Document View") {
switch (source) {
case 'Dissertation':
return "thesis";
break;
case 'Historical Newspaper':
case 'Newspaper':
return "newspaperArticle";
default:
return "journalArticle";
break;
}
}
}
}
//^https?://[^/]+/pqdweb\?((?:.*\&)?did=.*&Fmt=[0-9]|(?:.*\&)Fmt=[0-9].*&did=|(?:.*\&)searchInterface=)
function parseRIS(uris) {
Zotero.Utilities.HTTP.doGet(uris, function(text, xmlhttp, url){
// load translator for RIS
if(url.match("exportFormat=1")=="exportFormat=1") {
var translator = Zotero.loadTranslator("import");
translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
// Strip lines with just whitespace, which mess up RIS parsing
text = text.replace(/^\s*$\n/gm, '');
translator.setString(text);
//Set Handler fixes anomaly in Proquest RIS format. Properly formats author name as [last name], [first name]
translator.setHandler("itemDone", function(obj, item) {
var cre = new Array();
cre = item.creators;
for each(var e in cre) {
if(!e['firstName']) {
//check if there is a first name, if not, take the first word in the last name
var names = e['lastName'].split(" ");
e['firstName']=names[0];
e['lastName']="";
for(var i = 1; i<names.length; i++) {
e['lastName']+=names[i];
}
}
}
if (item.publicationTitle) item.publicationTitle = Zotero.Utilities.trimInternal(item.publicationTitle.replace(/\([\d\-]+\)/g, ""));
item.complete();
});
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 hostRegexp = new RegExp("^(https?://[^/]+)/");
var hMatch = hostRegexp.exec(url);
var host = hMatch[1];
if(doc.evaluate('//img[substring(@src, string-length(@src)-32) = "/images/common/logo_proquest.gif" or substring(@src, string-length(@src)-38) = "/images/common/logo_proquest_small.gif"]',
doc, nsResolver, XPathResult.ANY_TYPE, null)) {
if(doc.title == "Results") {
//Get Client ID
var xpath = '//a';
var data= doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null);
var aitem;
var clientID;
while(aitem = data.iterateNext()) {
clientID=aitem.href;
if(clientID.indexOf("clientId")!=-1) {
clientID = clientID.substr(clientID.indexOf("clientId")+9,clientID.length);
break;
}
}
var multXpath = '//input[@name="chk"][@type="checkbox"]';
var titleXpath = '//a[@class="bold"]';
var mInfos = doc.evaluate(multXpath, doc, nsResolver, XPathResult.ANY_TYPE, null);
var titleElmts = doc.evaluate(titleXpath, doc, nsResolver, XPathResult.ANY_TYPE, null);
var titleElmt;
var mInfo;
mInfo = mInfos.iterateNext();
titleElmt = titleElmts.iterateNext();
var items = new Array();
do {
//Get item ID
var str= mInfo.value;
str= str.replace("retrieveGroup", "sid");
var url = host+"/pqdweb?RQT=530&markedListInfo="+str+"1";
items[url] = Zotero.Utilities.trimInternal(titleElmt.textContent);
} while((mInfo = mInfos.iterateNext()) && (titleElmt = titleElmts.iterateNext()));
items = Zotero.selectItems(items);
if(!items) return true;
//Array of URLs for the doGet
var uris = new Array();
//Clear Basket
uris.push(host+"/pqdweb?RQT=531&clientId="+clientID);
uris.push(host+"/pqdweb?RQT=532&clientId="+clientID);
//Add URLS to the basket
for(var bibcode in items) {
uris.push(bibcode);
}
//Export basket as a RIS file
uris.push(host+"/pqdweb?RQT=532&clientId="+clientID);
uris.push(host+"/pqdweb?RQT=562&MRR=M&clientId="+clientID);
uris.push(host+"/pqdweb?RQT=562&exportFormat=1&clientId="+clientID);
parseRIS(uris);
} else {
//Get Client ID
var xpath = '//a';
var data= doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null);
var aitem;
var clientID;
while(aitem = data.iterateNext()) {
clientID=aitem.href;
if(clientID.indexOf("clientId")!=-1) {
clientID = clientID.substr(clientID.indexOf("clientId")+9,clientID.length);
break;
}
}
//Get item ID
var xpath = '//input[@name="marked"][@type="checkbox"]';
var str= doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().value;
str= str.replace("retrieveGroup", "sid");
//Array of URLs for the doGet
var uris = new Array();
//Clear Basket
uris.push(host+"/pqdweb?RQT=531&clientId="+clientID);
uris.push(host+"/pqdweb?RQT=532&clientId="+clientID);
//Create URL to add item to basket
url = host+"/pqdweb?RQT=530&markedListInfo="+str+"1";
Zotero.debug("RIS URL: "+url);
uris.push(url);
//Export basket as a RIS file
uris.push(host+"/pqdweb?RQT=532&clientId="+clientID);
uris.push(host+"/pqdweb?RQT=562&MRR=M&clientId="+clientID);
uris.push(host+"/pqdweb?RQT=562&exportFormat=1&clientId="+clientID);
parseRIS(uris);
}
}
}