-
Notifications
You must be signed in to change notification settings - Fork 0
/
Blackwell Synergy.js
91 lines (86 loc) · 3.21 KB
/
Blackwell Synergy.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
{
"translatorID":"cb48083-4d9-4ed-ac95-2e93dceea0ec",
"translatorType":4,
"label":"Blackwell Synergy",
"creator":"Michael Berkowitz",
"target":"https?://www\\.blackwell-synergy\\.com[^/]*/(?:action/doSearch|doi/|links/doi/)",
"minVersion":"1.0.0b3.r1",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-04-28 17:50:00"
}
function detectWeb(doc, url) {
if(url.indexOf("doSearch") != -1) {
return "multiple";
} else {
return "journalArticle";
}
}
function titleCase(str) {
var skipWords = ["but", "or", "yet", "so", "for", "and", "nor", "a", "an", "the", "at", "by", "from", "in", "into", "of", "on", "to", "with", "up", "down", "as"];
var words = str.toLowerCase().split(/\s+/);
var newstr = "";
for each (var word in words) {
if (skipWords.indexOf(word.replace(/[^a-zA-Z]+/, "")) != -1) {
newstr += " " + word;
} else if (word.indexOf("-") != -1) {
newword = word.split("-");
newstr += " " + newword[0][0].toUpperCase() + newword[0].substr(1) + "-" + newword[1][0].toUpperCase() + newword[1].substr(1);
} else {
newstr += " " + word[0].toUpperCase() + word.substr(1);
}
}
return Zotero.Utilities.trimInternal(newstr);
}
function doWeb(doc, url) {
var host = doc.location.host;
var articles = new Array();
if (detectWeb(doc, url) == "multiple") {
var items = new Object();
var rows = doc.evaluate('//div[@class="toc_item"]', doc, null, XPathResult.ANY_TYPE, null);
var row;
while (row = rows.iterateNext()) {
var title = Zotero.Utilities.trimInternal(doc.evaluate('.//label', row, null, XPathResult.ANY_TYPE, null).iterateNext().textContent);
var id = doc.evaluate('.//input[@name="doi"]', row, null, XPathResult.ANY_TYPE, null).iterateNext().value;
items[id] = title;
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
articles = [decodeURIComponent(url).match(/doi\/(abs\/)?([^\?]+)(\?|$)/)[2]];
}
var post = "";
for each (var doi in articles) {
post += "doi=" + encodeURIComponent(doi) + "&"
}
post += "include=abs&format=refman&submit=Download+references";
Zotero.Utilities.HTTP.doPost('http://www.blackwell-synergy.com/action/downloadCitation', post, function(text) {
text = text.replace(/(Y1\s+\-\s+)(\d{4}\/\d{2}).*\n/, "$1$2\n");
var translator = Zotero.loadTranslator("import");
translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
translator.setString(text);
translator.setHandler("itemDone", function(obj, item) {
item.DOI = Zotero.Utilities.trimInternal(item.notes[0]['note'].substr(4));
item.notes = new Array();
item.attachments = [
{url:item.url, title:"Blackwell Synergy Snapshot", mimeType:"text/html"},
{url:item.url.replace(/\/\/[^/]*/, "//" + host).replace("/doi/abs", "/doi/pdf"), title:"Blackwell Synergy Full Text PDF", mimeType:"application/pdf"}
];
// use fulltext if possible
var oldCreators = item.creators;
item.creators = []
for each (var author in oldCreators) {
if (author["lastName"] != "") {
item.creators.push({firstName:titleCase(author.firstName), lastName:titleCase(author.lastName), creatorType:"author"});
}
}
item.title = titleCase(item.title);
item.complete();
});
translator.translate();
Zotero.done();
});
}