Ticket #455: dspace.js

File dspace.js, 5.2 KB (added by stakats, 9 years ago)
Line 
1REPLACE INTO translators VALUES ('ee07b804-12a9-4fa3-8f83-cce177f68dfc', '1.0.0b3r1', '', '2007-08-07 10:33:28', '0', '100', '4', 'DSpace', 'Ramesh Srigiriraju', '', 
2'function detectWeb(doc, url)   {
3        var namespace=doc.documentElement.namespaceURI;
4        var nsResolver=namespace?function(prefix)       {
5                return (prefix=="x")?namespace:null;
6        }:null;
7        var xpath=''//tr[@class="navigationBarItem"]/td/a[contains(@href, "/mydspace")]'';
8        if(doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext())      {
9                var singpath=''//center/table[@class="itemDisplayTable"]'';
10                if(doc.evaluate(singpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext())
11                        return "book";
12                var searchpath=''//h3[text()="Item hits:"]'';
13                var browsdate=''//form[@method="get"][@action="browse-date"]'';
14                var browstitl=''//form[@method="get"][@action="browse-title"]'';
15                var other=''//tr/th[@class="oddRowEvenCol"]'';
16                if(doc.evaluate(searchpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()
17                        ||doc.evaluate(browsdate, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()
18                        ||doc.evaluate(browstitl, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()
19                        ||doc.evaluate(other, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext())
20                        return "multiple";
21        }
22}', 
23'function scrape(doc)   {
24        var namespace=doc.documentElement.namespaceURI;
25        var nsResolver=namespace?function(prefix)       {
26                return (prefix=="x")?namespace:null;
27        }:null;
28        var singpath=''//center/table[@class="itemDisplayTable"]'';
29        if(doc.evaluate(singpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext())   {
30                var labelpath=''//tr/td[@class="metadataFieldLabel"]'';
31                var labels=doc.evaluate(labelpath, doc, nsResolver, XPathResult.ANY_TYPE, null);
32                var valpath=''//tr/td[@class="metadataFieldValue"]'';
33                var values=doc.evaluate(valpath, doc, nsResolver, XPathResult.ANY_TYPE, null);
34                var temp
35                var newItem=new Zotero.Item("book");
36                while(temp=labels.iterateNext())        {
37                        var field=temp.textContent;
38                        field=Zotero.Utilities.cleanString(field);
39                        var temp2=values.iterateNext();
40                        var value=temp2.textContent;
41                        if(field.substring(0, 5)=="Title")
42                                newItem.title=value;
43                        else if(field.substring(0, 6)=="Author")        {
44                                var authtext=temp2.innerHTML;
45                                authtext=authtext.replace(/<br>/g, "\n");
46                                var authors=authtext.split("\n");
47                                for(var i=0; i<=authors.length-1; i++)  {
48                                        var comma=authors[i].indexOf(",");
49                                        if(comma!=-1)
50                                                newItem.creators.push({lastName:authors[i].substring(0, comma),
51                                                        firstName:authors[i].substring(comma+2), creatorType:"author"});
52                                        else
53                                                newItem.creators.push({lastName:authors[i], creatorType:"author"});
54                                }
55                        }
56                        else if(field.substring(0, 4)=="URI")
57                                newItem.url=value;
58                        else if(field.substring(0, 10)=="Issue Date")
59                                newItem.date=value;
60                        else if(field.substring(0, 9)=="Publisher")
61                                newItem.publisher=value;
62                        else if(field.substring(0, 8)=="Abstract")
63                                newItem.abstract=value;
64                        else if(field.substring(0, 11)=="Description")  {
65                                var pullre=new RegExp("\\|Pages ([^\\|]+)\\|");
66                                Zotero.debug(pullre);
67                                var matches=pullre.exec(value);
68                                if(matches)
69                                        newItem.pages=matches[1];
70                        }
71                }
72                var pdfpath=''//tr[td/text()="Adobe PDF"]/td/a'';
73                var pdflink=doc.evaluate(pdfpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
74                if(pdflink)
75                        newItem.attachments.push({url:pdflink.href, title:newItem.title, mimeType:"application/pdf"});
76                newItem.complete();
77        }
78}
79function doWeb(doc, url)        {
80        var namespace=doc.documentElement.namespaceURI;
81        var nsResolver=namespace?function(prefix)       {
82                return (prefix=="x")?namespace:null;
83        }:null;
84        var singpath=''//center/table[@class="itemDisplayTable"]'';
85        if(doc.evaluate(singpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext())
86                scrape(doc);
87        var searchpath=''//h3[text()="Item hits:"]'';
88        var browsdate=''//form[@method="get"][@action="browse-date"]'';
89        var browstitl=''//form[@method="get"][@action="browse-title"]'';
90        var other=''//tr/th[@class="oddRowEvenCol"]'';
91        if(doc.evaluate(searchpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()
92                ||doc.evaluate(browsdate, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()
93                ||doc.evaluate(browstitl, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()
94                ||doc.evaluate(other, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext())       {
95                var headerpath=''//tr[th/@class="oddRowEvenCol"]/th'';
96                var headers=doc.evaluate(headerpath, doc, nsResolver, XPathResult.ANY_TYPE, null);
97                var header;
98                var index=1;
99                while(header=headers.iterateNext())
100                        if(header.textContent.substring(0, 5)=="Title")
101                                break;
102                        else
103                                index++;
104                var titlpath=''//tbody[tr/th/@class="oddRowOddCol"]/tr/td[''+index+'']//a'';
105                var titles=doc.evaluate(titlpath, doc, nsResolver, XPathResult.ANY_TYPE, null);
106                var title;
107                var items=new Array();
108                while(title=titles.iterateNext())
109                        items[title.href]=title.textContent;
110                items=Zotero.selectItems(items);
111                var urls=new Array();
112                for(var link in items)
113                        urls.push(link);
114                Zotero.Utilities.processDocuments(urls, function(doc)   {
115                        scrape(doc);
116                }, function()   {
117                        Zotero.done();
118                });
119        }
120        Zotero.wait();
121}');