- closes #407, error in EBSCOhost translator

- closes #430, Amazon translator causing utilities.js to throw exception
- officially deprecated Zotero.Utilities.getNodeString() (use doc.evaluate and nodeValue or textContent instead, or access attributes directly; these options take the nearly the same amount of code, should be faster, and don't unnecessarily bloat our utilities)
- updated word integration to the latest version
This commit is contained in:
Simon Kornblith 2006-12-11 20:54:22 +00:00
parent 654f9c205d
commit 6c80c879da
2 changed files with 126 additions and 123 deletions

View File

@ -285,6 +285,9 @@ Zotero.Utilities.Ingester.prototype.gatherElementsOnXPath = function(doc, parent
/* /*
* Gets a given node as a string containing all child nodes * Gets a given node as a string containing all child nodes
*
* WARNING: This is DEPRECATED and may be removed in the final release. Use
* doc.evaluate and the "nodeValue" or "textContent" property
*/ */
Zotero.Utilities.Ingester.prototype.getNodeString = function(doc, contextNode, xpath, nsResolver) { Zotero.Utilities.Ingester.prototype.getNodeString = function(doc, contextNode, xpath, nsResolver) {
var elmts = this.gatherElementsOnXPath(doc, contextNode, xpath, nsResolver); var elmts = this.gatherElementsOnXPath(doc, contextNode, xpath, nsResolver);

View File

@ -1,4 +1,4 @@
-- 117 -- 118
-- ***** BEGIN LICENSE BLOCK ***** -- ***** BEGIN LICENSE BLOCK *****
-- --
@ -22,9 +22,9 @@
-- Set the following timestamp to the most recent scraper update date -- Set the following timestamp to the most recent scraper update date
REPLACE INTO "version" VALUES ('repository', STRFTIME('%s', '2006-12-09 20:45:00')); REPLACE INTO "version" VALUES ('repository', STRFTIME('%s', '2006-12-11 15:44:00'));
REPLACE INTO translators VALUES ('96b9f483-c44d-5784-cdad-ce21b984fe01', '1.0.0b3.r1', '', '2006-11-26 09:05:00', 1, 100, 4, 'Amazon', 'Sean Takats', '^http://(?:www\.)amazon', REPLACE INTO translators VALUES ('96b9f483-c44d-5784-cdad-ce21b984fe01', '1.0.0b3.r1', '', '2006-12-11 11:24:00', 1, 100, 4, 'Amazon', 'Sean Takats', '^http://(?:www\.)amazon',
'function detectWeb(doc, url) { 'function detectWeb(doc, url) {
var suffixRe = new RegExp("http://(?:www\.)amazon\.([^/]+)/"); var suffixRe = new RegExp("http://(?:www\.)amazon\.([^/]+)/");
@ -34,7 +34,6 @@ REPLACE INTO translators VALUES ('96b9f483-c44d-5784-cdad-ce21b984fe01', '1.0.0b
if(searchRe.test(doc.location.href)) { if(searchRe.test(doc.location.href)) {
return "multiple"; return "multiple";
} else { } else {
var namespace = doc.documentElement.namespaceURI; var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) { var nsResolver = namespace ? function(prefix) {
if (prefix == ''x'') return namespace; else return null; if (prefix == ''x'') return namespace; else return null;
@ -42,8 +41,9 @@ REPLACE INTO translators VALUES ('96b9f483-c44d-5784-cdad-ce21b984fe01', '1.0.0b
var xpath = ''//input[@name="ASIN"]''; var xpath = ''//input[@name="ASIN"]'';
if(doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { if(doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) {
elmt = doc.evaluate(''//input[@name="storeID"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); var elmt = doc.evaluate(''//input[@name="storeID"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
var storeID = Zotero.Utilities.getNodeString(doc, elmt, ''./@value'', nsResolver); if(elmt) {
var storeID = elmt.value;
Zotero.Utilities.debug("store id: " + storeID); Zotero.Utilities.debug("store id: " + storeID);
if (storeID=="books"){ if (storeID=="books"){
return "book"; return "book";
@ -58,6 +58,10 @@ REPLACE INTO translators VALUES ('96b9f483-c44d-5784-cdad-ce21b984fe01', '1.0.0b
return "book"; return "book";
} }
} }
else {
return "book";
}
}
} }
} }
', ',
@ -87,8 +91,8 @@ REPLACE INTO translators VALUES ('96b9f483-c44d-5784-cdad-ce21b984fe01', '1.0.0b
var asinRe = new RegExp(''/(dp|product)/([^/]+)/''); var asinRe = new RegExp(''/(dp|product)/([^/]+)/'');
do { do {
var link = Zotero.Utilities.getNodeString(doc, elmt, ''../@href'', nsResolver); var link = doc.evaluate(''../@href'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue;
var searchTitle = Zotero.Utilities.getNodeString(doc, elmt, ''./text()'', nsResolver); var searchTitle = elmt.textContent;
availableItems[i] = searchTitle; availableItems[i] = searchTitle;
var asinMatch = asinRe.exec(link); var asinMatch = asinRe.exec(link);
asins[i] = asinMatch[2]; asins[i] = asinMatch[2];
@ -110,7 +114,7 @@ REPLACE INTO translators VALUES ('96b9f483-c44d-5784-cdad-ce21b984fe01', '1.0.0b
nsResolver, XPathResult.ANY_TYPE, null); nsResolver, XPathResult.ANY_TYPE, null);
var elmt; var elmt;
while(elmt = elmts.iterateNext()) { while(elmt = elmts.iterateNext()) {
var asin = Zotero.Utilities.getNodeString(doc, elmt, ''./@value'', nsResolver); var asin = elmt.value;
} }
uris.push("http://ecs.amazonaws." + suffix + "/onca/xml?Service=AWSECommerceService&Version=2006-06-28&Operation=ItemLookup&SubscriptionId=0H174V5J5R5BE02YQN02&ItemId=" + asin + "&ResponseGroup=ItemAttributes"); uris.push("http://ecs.amazonaws." + suffix + "/onca/xml?Service=AWSECommerceService&Version=2006-06-28&Operation=ItemLookup&SubscriptionId=0H174V5J5R5BE02YQN02&ItemId=" + asin + "&ResponseGroup=ItemAttributes");
} }
@ -407,7 +411,7 @@ function doWeb(doc, url) {
Zotero.wait(); Zotero.wait();
}'); }');
REPLACE INTO translators VALUES ('88915634-1af6-c134-0171-56fd198235ed', '1.0.0b2.r2', '', '2006-10-02 17:00:00', 1, 100, 4, 'LOC/Voyager WebVoyage', 'Simon Kornblith', 'Pwebrecon\.cgi', REPLACE INTO translators VALUES ('88915634-1af6-c134-0171-56fd198235ed', '1.0.0b2.r2', '', '2006-12-11 11:24:00', 1, 100, 4, 'LOC/Voyager WebVoyage', 'Simon Kornblith', 'Pwebrecon\.cgi',
'function detectWeb(doc, url) { 'function detectWeb(doc, url) {
var export_options = doc.forms.namedItem(''frm'').elements.namedItem(''RD'').options; var export_options = doc.forms.namedItem(''frm'').elements.namedItem(''RD'').options;
for(var i in export_options) { for(var i in export_options) {
@ -464,7 +468,7 @@ REPLACE INTO translators VALUES ('88915634-1af6-c134-0171-56fd198235ed', '1.0.0b
// Go through links // Go through links
for(var j=0; j<links.length; j++) { for(var j=0; j<links.length; j++) {
if(tagRegexp.test(links[j].href)) { if(tagRegexp.test(links[j].href)) {
var text = Zotero.Utilities.getNodeString(doc, links[j], ".//text()", null); var text = links[j].textContent;
if(text) { if(text) {
text = Zotero.Utilities.cleanString(text); text = Zotero.Utilities.cleanString(text);
if(!rejectRegexp.test(text)) { if(!rejectRegexp.test(text)) {
@ -801,7 +805,7 @@ function doWeb(doc, url) {
} }
}'); }');
REPLACE INTO translators VALUES ('4fd6b89b-2316-2dc4-fd87-61a97dd941e8', '1.0.0b3.r1', '', '2006-11-24 19:34:00', 1, 100, 4, 'InnoPAC', 'Simon Kornblith', '^http://[^/]+/(?:search/|record=)', REPLACE INTO translators VALUES ('4fd6b89b-2316-2dc4-fd87-61a97dd941e8', '1.0.0b3.r1', '', '2006-12-11 11:44:00', 1, 100, 4, 'InnoPAC', 'Simon Kornblith', '^http://[^/]+/(?:search/|record=)',
'function detectWeb(doc, url) { 'function detectWeb(doc, url) {
// First, check to see if the URL alone reveals InnoPAC, since some sites don''t reveal the MARC button // First, check to see if the URL alone reveals InnoPAC, since some sites don''t reveal the MARC button
var matchRegexp = new RegExp(''^(http://[^/]+/search/[^/]+/[^/]+/1\%2C[^/]+/)frameset(.+)$''); var matchRegexp = new RegExp(''^(http://[^/]+/search/[^/]+/[^/]+/1\%2C[^/]+/)frameset(.+)$'');
@ -969,8 +973,7 @@ function doWeb(doc, url) {
if(tagRegexp.test(link.href)) { if(tagRegexp.test(link.href)) {
if(!firstURL) firstURL = link.href; if(!firstURL) firstURL = link.href;
var text = Zotero.Utilities.getNodeString(doc, link, var text = link.textContent;
".//text()", null);
if(text) { if(text) {
text = Zotero.Utilities.cleanString(text); text = Zotero.Utilities.cleanString(text);
if(availableItems[link.href]) { if(availableItems[link.href]) {
@ -1007,7 +1010,7 @@ function doWeb(doc, url) {
Zotero.wait(); Zotero.wait();
}'); }');
REPLACE INTO translators VALUES ('add7c71c-21f3-ee14-d188-caf9da12728b', '1.0.0b3.r1', '', '2006-12-06 23:30:00', 1, 100, 4, 'SIRSI', 'Sean Takats', '/uhtbin/cgisirsi', REPLACE INTO translators VALUES ('add7c71c-21f3-ee14-d188-caf9da12728b', '1.0.0b3.r1', '', '2006-12-11 11:42:00', 1, 100, 4, 'SIRSI', 'Sean Takats', '/uhtbin/cgisirsi',
'function detectWeb(doc, url) { 'function detectWeb(doc, url) {
var namespace = doc.documentElement.namespaceURI; var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) { var nsResolver = namespace ? function(prefix) {
@ -1167,7 +1170,7 @@ function doWeb(doc, url){
// Go through table rows // Go through table rows
while(tableRow = tableRows.iterateNext()) { while(tableRow = tableRows.iterateNext()) {
var input = doc.evaluate(''.//input[@value="Details"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); var input = doc.evaluate(''.//input[@value="Details"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
var text = Zotero.Utilities.getNodeString(doc, tableRow, ''.//label/strong//text()'', nsResolver); var text = doc.evaluate(''.//label/strong'', tableRow, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
if(text) { if(text) {
availableItems[input.name] = text; availableItems[input.name] = text;
} }
@ -1190,7 +1193,7 @@ function doWeb(doc, url){
Zotero.wait(); Zotero.wait();
} }
} else{ //executes Simon''s SIRSI -2003 translator code } else{ //executes Simon''s SIRSI -2003 translator code
Zotero.Utilities.debug("Running SIRSI 2003+ code"); Zotero.Utilities.debug("Running SIRSI -2003 code");
var uri = doc.location.href; var uri = doc.location.href;
var recNumbers = new Array(); var recNumbers = new Array();
var xpath = ''//form[@name="hitlist"]/table/tbody/tr''; var xpath = ''//form[@name="hitlist"]/table/tbody/tr'';
@ -1207,7 +1210,7 @@ function doWeb(doc, url){
var checkbox = doc.evaluate(''.//input[@type="checkbox"]'', elmt, nsResolver, var checkbox = doc.evaluate(''.//input[@type="checkbox"]'', elmt, nsResolver,
XPathResult.ANY_TYPE, null).iterateNext(); XPathResult.ANY_TYPE, null).iterateNext();
// Collect title // Collect title
var title = Zotero.Utilities.getNodeString(doc, elmt, "./td[2]/text()", nsResolver); var title = doc.evaluate("./td[2]", elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
if(checkbox && title) { if(checkbox && title) {
items[checkbox.name] = Zotero.Utilities.cleanString(title); items[checkbox.name] = Zotero.Utilities.cleanString(title);
} }
@ -1241,7 +1244,7 @@ function doWeb(doc, url){
XPathResult.ANY_TYPE, null); XPathResult.ANY_TYPE, null);
while (elmt = elmts.iterateNext()) { while (elmt = elmts.iterateNext()) {
recNumbers.length = 0; recNumbers.length = 0;
var recNumber = doc.evaluate(''./@value'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue var recNumber = elmt.value;
recNumbers.push(recNumber); recNumbers.push(recNumber);
break; break;
} }
@ -1295,7 +1298,7 @@ function doWeb(doc, url){
}'); }');
REPLACE INTO translators VALUES ('a77690cf-c5d1-8fc4-110f-d1fc765dcf88', '1.0.0b3.r1', '', '2006-10-02 17:00:00', 1, 100, 4, 'ProQuest', 'Simon Kornblith', '^http://[^/]+/pqdweb\?((?:.*\&)?did=.*&Fmt=[0-9]|(?:.*\&)Fmt=[0-9].*&did=|(?:.*\&)searchInterface=)', REPLACE INTO translators VALUES ('a77690cf-c5d1-8fc4-110f-d1fc765dcf88', '1.0.0b3.r1', '', '2006-12-11 11:27:00', 1, 100, 4, 'ProQuest', 'Simon Kornblith', '^http://[^/]+/pqdweb\?((?:.*\&)?did=.*&Fmt=[0-9]|(?:.*\&)Fmt=[0-9].*&did=|(?:.*\&)searchInterface=)',
'function detectWeb(doc, url) { 'function detectWeb(doc, url) {
var namespace = doc.documentElement.namespaceURI; var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) { var nsResolver = namespace ? function(prefix) {
@ -1321,15 +1324,15 @@ REPLACE INTO translators VALUES ('a77690cf-c5d1-8fc4-110f-d1fc765dcf88', '1.0.0b
var elmt; var elmt;
// Title // Title
var xpath = ''/html/body/span[@class="textMedium"]/table/tbody/tr/td[@class="headerBlack"]/strong//text()''; var xpath = ''/html/body/span[@class="textMedium"]/table/tbody/tr/td[@class="headerBlack"]/strong'';
newItem.title = Zotero.Utilities.getNodeString(doc, doc, xpath, nsResolver); newItem.title = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
// Authors // Authors
var xpath = ''/html/body/span[@class="textMedium"]/table/tbody/tr/td[@class="textMedium"]/a/em''; var xpath = ''/html/body/span[@class="textMedium"]/table/tbody/tr/td[@class="textMedium"]/a/em'';
var elmts = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var elmts = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null);
while(elmt = elmts.iterateNext()) { while(elmt = elmts.iterateNext()) {
// there are sometimes additional tags representing higlighting // there are sometimes additional tags representing higlighting
var author = Zotero.Utilities.getNodeString(doc, elmt, ''.//text()'', nsResolver); var author = elmt.textContent;
if(author) { if(author) {
newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author")); newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author"));
} }
@ -1421,7 +1424,7 @@ REPLACE INTO translators VALUES ('a77690cf-c5d1-8fc4-110f-d1fc765dcf88', '1.0.0b
var subjects = doc.evaluate(".//a", elmt, nsResolver, XPathResult.ANY_TYPE, null); var subjects = doc.evaluate(".//a", elmt, nsResolver, XPathResult.ANY_TYPE, null);
var currentSubject; var currentSubject;
while(currentSubject = subjects.iterateNext()) { while(currentSubject = subjects.iterateNext()) {
var subjectValue = Zotero.Utilities.getNodeString(doc, currentSubject, ".//text()", nsResolver); var subjectValue = currentSubject.textContent;
subjectValue = Zotero.Utilities.superCleanString(subjectValue); subjectValue = Zotero.Utilities.superCleanString(subjectValue);
if(subjectValue) { if(subjectValue) {
newItem.tags.push(subjectValue); newItem.tags.push(subjectValue);
@ -1783,7 +1786,7 @@ function doWeb(doc, url) {
Zotero.wait(); Zotero.wait();
}'); }');
REPLACE INTO translators VALUES ('b047a13c-fe5c-6604-c997-bef15e502b09', '1.0.0b2.r2', '', '2006-10-02 17:00:00', 1, 100, 4, 'LexisNexis', 'Simon Kornblith', '^http://web\.lexis-?nexis\.com/universe/(?:document|doclist)', REPLACE INTO translators VALUES ('b047a13c-fe5c-6604-c997-bef15e502b09', '1.0.0b2.r2', '', '2006-12-11 11:28:00', 1, 100, 4, 'LexisNexis', 'Simon Kornblith', '^http://web\.lexis-?nexis\.com/universe/(?:document|doclist)',
'function detectWeb(doc, url) { 'function detectWeb(doc, url) {
var detailRe = new RegExp("^http://[^/]+/universe/document"); var detailRe = new RegExp("^http://[^/]+/universe/document");
if(detailRe.test(doc.location.href)) { if(detailRe.test(doc.location.href)) {
@ -1887,7 +1890,7 @@ function doWeb(doc, url) {
} }
}'); }');
REPLACE INTO translators VALUES ('cf87eca8-041d-b954-795a-2d86348999d5', '1.0.0b2.r2', '', '2006-11-27 22:45:00', 1, 100, 4, 'Aleph', 'Simon Kornblith', '^http://[^/]+/F(?:/[A-Z0-9\-]+(?:\?.*)?$|\?func=find|\?func=scan)', REPLACE INTO translators VALUES ('cf87eca8-041d-b954-795a-2d86348999d5', '1.0.0b2.r2', '', '2006-12-14 11:30:00', 1, 100, 4, 'Aleph', 'Simon Kornblith', '^http://[^/]+/F(?:/[A-Z0-9\-]+(?:\?.*)?$|\?func=find|\?func=scan)',
'function detectWeb(doc, url) { 'function detectWeb(doc, url) {
var singleRe = new RegExp("^http://[^/]+/F/[A-Z0-9\-]+\?.*(?:func=full-set-set.*\&format=[0-9]{3}|func=direct)"); var singleRe = new RegExp("^http://[^/]+/F/[A-Z0-9\-]+\?.*(?:func=full-set-set.*\&format=[0-9]{3}|func=direct)");
@ -1958,7 +1961,7 @@ REPLACE INTO translators VALUES ('cf87eca8-041d-b954-795a-2d86348999d5', '1.0.0b
var record = new marc.record(); var record = new marc.record();
while(elmt = elmts.iterateNext()) { while(elmt = elmts.iterateNext()) {
var field = Zotero.Utilities.superCleanString(doc.evaluate(''./TD[1]/text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue); var field = Zotero.Utilities.superCleanString(doc.evaluate(''./TD[1]/text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue);
var value = Zotero.Utilities.getNodeString(doc, elmt, ''./TD[2]//text()'', nsResolver); var value = doc.evaluate(''./TD[2]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
if(field == "LDR") { if(field == "LDR") {
record.leader = value; record.leader = value;
@ -1986,7 +1989,7 @@ REPLACE INTO translators VALUES ('cf87eca8-041d-b954-795a-2d86348999d5', '1.0.0b
Zotero.wait(); Zotero.wait();
}'); }');
REPLACE INTO translators VALUES ('774d7dc2-3474-2684-392c-f787789ec63d', '1.0.0b2.r2', '', '2006-10-02 17:00:00', 1, 100, 4, 'Dynix', 'Simon Kornblith', 'ipac\.jsp\?.*(?:uri=full=[0-9]|menu=search)', REPLACE INTO translators VALUES ('774d7dc2-3474-2684-392c-f787789ec63d', '1.0.0b2.r2', '', '2006-12-11 11:43:00', 1, 100, 4, 'Dynix', 'Simon Kornblith', 'ipac\.jsp\?.*(?:uri=full=[0-9]|menu=search)',
'function detectWeb(doc, url) { 'function detectWeb(doc, url) {
var detailsRe = new RegExp(''ipac\.jsp\?.*uri=full=[0-9]''); var detailsRe = new RegExp(''ipac\.jsp\?.*uri=full=[0-9]'');
if(detailsRe.test(doc.location.href)) { if(detailsRe.test(doc.location.href)) {
@ -2047,7 +2050,7 @@ REPLACE INTO translators VALUES ('774d7dc2-3474-2684-392c-f787789ec63d', '1.0.0b
var record = new marc.record(); var record = new marc.record();
while(elmt = elmts.iterateNext()) { while(elmt = elmts.iterateNext()) {
var field = Zotero.Utilities.superCleanString(newDoc.evaluate(''./TD[1]/A[1]/text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue); var field = Zotero.Utilities.superCleanString(newDoc.evaluate(''./TD[1]/A[1]/text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue);
var value = Zotero.Utilities.getNodeString(newDoc, elmt, ''./TD[2]/TABLE[1]/TBODY[1]/TR[1]/TD[1]/A[1]//text()'', nsResolver); var value = newDoc.evaluate(''./TD[2]/TABLE[1]/TBODY[1]/TR[1]/TD[1]/A[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent;
if(field == "LDR") { if(field == "LDR") {
record.leader = value; record.leader = value;
@ -2075,7 +2078,7 @@ REPLACE INTO translators VALUES ('774d7dc2-3474-2684-392c-f787789ec63d', '1.0.0b
Zotero.wait(); Zotero.wait();
}'); }');
REPLACE INTO translators VALUES ('63a0a351-3131-18f4-21aa-f46b9ac51d87', '1.0.0b2.r2', '', '2006-10-02 17:00:00', 1, 100, 4, 'VTLS', 'Simon Kornblith', '/chameleon(?:\?|$)', REPLACE INTO translators VALUES ('63a0a351-3131-18f4-21aa-f46b9ac51d87', '1.0.0b2.r2', '', '2006-12-11 11:59:00', 1, 100, 4, 'VTLS', 'Simon Kornblith', '/chameleon(?:\?|$)',
'function detectWeb(doc, url) { 'function detectWeb(doc, url) {
var node = doc.evaluate(''//tr[@class="intrRow"]/td/table/tbody/tr[th]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext(); var node = doc.evaluate(''//tr[@class="intrRow"]/td/table/tbody/tr[th]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext();
if(node) { if(node) {
@ -2110,7 +2113,7 @@ REPLACE INTO translators VALUES ('63a0a351-3131-18f4-21aa-f46b9ac51d87', '1.0.0b
var tableRows = doc.evaluate(''//tr[@class="intrRow"]'', doc, nsResolver, var tableRows = doc.evaluate(''//tr[@class="intrRow"]'', doc, nsResolver,
XPathResult.ANY_TYPE, null); XPathResult.ANY_TYPE, null);
var tableRow var tableRow;
// Go through table rows // Go through table rows
while(tableRow = tableRows.iterateNext()) { while(tableRow = tableRows.iterateNext()) {
var links = tableRow.getElementsByTagName("a"); var links = tableRow.getElementsByTagName("a");
@ -2128,12 +2131,13 @@ REPLACE INTO translators VALUES ('63a0a351-3131-18f4-21aa-f46b9ac51d87', '1.0.0b
nsResolver, XPathResult.ANY_TYPE, null); nsResolver, XPathResult.ANY_TYPE, null);
var field; var field;
while(field = fields.iterateNext()) { while(field = fields.iterateNext()) {
var header = doc.evaluate(''./th/text()'', fields[j], nsResolver, var header = doc.evaluate(''./th/text()'', field, nsResolver,
XPathResult.ANY_TYPE, null).iterateNext(); XPathResult.ANY_TYPE, null).iterateNext();
if(header.nodeValue == "Title") { if(header.nodeValue == "Title") {
var value = Zotero.Utilities.getNodeString(doc, fields[j], ''./td//text()'', nsResolver); var value = doc.evaluate(''./td'', field, nsResolver,
XPathResult.ANY_TYPE, null).iterateNext();
if(value) { if(value) {
items[url] = Zotero.Utilities.cleanString(value); items[url] = Zotero.Utilities.cleanString(value.textContent);
} }
} }
} }
@ -3252,7 +3256,7 @@ function doWeb(doc, url) {
Zotero.wait(); Zotero.wait();
}'); }');
REPLACE INTO translators VALUES ('d0b1914a-11f1-4dd7-8557-b32fe8a3dd47', '1.0.0b3.r1', '', '2006-10-02 17:00:00', 1, 100, 4, 'EBSCOhost', 'Simon Kornblith', '^http://[^/]+/ehost/(?:results|detail)', REPLACE INTO translators VALUES ('d0b1914a-11f1-4dd7-8557-b32fe8a3dd47', '1.0.0b3.r1', '', '2006-12-11 15:44:00', 1, 100, 4, 'EBSCOhost', 'Simon Kornblith', '^http://[^/]+/ehost/(?:results|detail)',
'function detectWeb(doc, url) { 'function detectWeb(doc, url) {
var namespace = doc.documentElement.namespaceURI; var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) { var nsResolver = namespace ? function(prefix) {
@ -3272,10 +3276,64 @@ REPLACE INTO translators VALUES ('d0b1914a-11f1-4dd7-8557-b32fe8a3dd47', '1.0.0b
return "journalArticle"; return "journalArticle";
} }
}', }',
'function fullEscape(text) { 'var viewStateMatch = /<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="([^"]+)" \/>/
var eventValidationMatch = /<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="([^"]+)" \/>/
var host;
function fullEscape(text) {
return escape(text).replace(/\//g, "%2F").replace(/\+/g, "%2B"); return escape(text).replace(/\//g, "%2F").replace(/\+/g, "%2B");
} }
/*
* given the text of the delivery page, downloads an item
*/
function downloadFunction(text) {
var postLocation = /<form name="aspnetForm" method="post" action="([^"]+)"/
var m = postLocation.exec(text);
var deliveryURL = m[1].replace(/&amp;/g, "&");
m = viewStateMatch.exec(text);
var downloadString = "__EVENTTARGET=&__EVENTARGUMENT=&__LASTFOCUS=&__VIEWSTATE="+fullEscape(m[1])+"&ctl00%24ctl00%24ToolbarArea%24toolbar%24drpLanguages=&ctl00%24ctl00%24MainContentArea%24MainContentArea%24ctl01%24chkRemoveFromFolder=on&ctl00%24ctl00%24MainContentArea%24MainContentArea%24ctl01%24btnSubmit=Save&ctl00%24ctl00%24MainContentArea%24MainContentArea%24ctl01%24BibFormat=1&ajax=enabled";
Zotero.Utilities.HTTP.doPost("http://"+host+"/ehost/"+deliveryURL,
downloadString, function(text) { // get marked records as RIS
/*var form = doc.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", "http://"+host+"/ehost/"+folderURL);
var args = [
["__EVENTARGUMENT", ""],
["__VIEWSTATE", folderViewState],
["__EVENTVALIDATION", folderEventValidation],
["__EVENTTARGET", "ctl00$ctl00$MainContentArea$MainContentArea$btnBack$lnkBack"]
];
for(var i in args) {
var input = doc.createElement("input");
input.setAttribute("type", "hidden");
input.setAttribute("name", args[i][0]);
input.setAttribute("value", args[i][1]);
form.appendChild(input);
}
var body = doc.getElementsByTagName("body");
body[0].appendChild(form);
form.submit();*/
// load translator for RIS
var translator = Zotero.loadTranslator("import");
translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
translator.setString(text);
translator.setHandler("itemDone", function(obj, item) {
if(item.notes && item.notes[0]) {
item.extra = item.notes[0].note;
delete item.notes;
item.notes = undefined;
}
item.complete();
});
translator.translate();
Zotero.done();
});
}
function doWeb(doc, url) { function doWeb(doc, url) {
var namespace = doc.documentElement.namespaceURI; var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) { var nsResolver = namespace ? function(prefix) {
@ -3284,7 +3342,7 @@ function doWeb(doc, url) {
var hostRe = new RegExp("^http://([^/]+)/"); var hostRe = new RegExp("^http://([^/]+)/");
var m = hostRe.exec(url); var m = hostRe.exec(url);
var host = m[1]; host = m[1];
var queryRe = /\?(.*)$/; var queryRe = /\?(.*)$/;
var m = queryRe.exec(url); var m = queryRe.exec(url);
@ -3327,9 +3385,25 @@ function doWeb(doc, url) {
var m = argRe.exec(i); var m = argRe.exec(i);
citations.push(m[1]); citations.push(m[1]);
} }
var saveString = "__EVENTTARGET=FolderItem:AddItem&IsCallBack=true&SearchTerm1=test&listDatabaseGroupings=pdh&SortOptionDropDown=date&__EVENTVALIDATION="+eventValidation+"&__EVENTARGUMENT="+citations.join(",")+"&";
var saveString = "__EVENTTARGET=FolderItem:AddItem&IsCallBack=true&SearchTerm1=test&SortOptionDropDown=date&__EVENTVALIDATION="+eventValidation+"&__EVENTARGUMENT="+citations.join(",")+"&";
var folderString = "__EVENTTARGET=ctl00%24ctl00%24ToolbarArea%24toolbar%24folderControl%24lnkFolder&__EVENTARGUMENT=&__LASTFOCUS=&__VIEWSTATE="+viewState+"&ctl00%24ctl00%24ToolbarArea%24toolbar%24drpLanguages=&ctl00%24ctl00%24MainContentArea%24MainContentArea%24ctl11%24SearchTerm1=test&ctl00%24ctl00%24MainContentArea%24MainContentArea%24DbSortOptionControl%24SortOptionDropDown=date&__EVENTVALIDATION="+eventValidation;
Zotero.Utilities.HTTP.doPost(url, saveString, function(text) { // mark records
Zotero.Utilities.HTTP.doPost(url, folderString, function(text) { // view folder
var postLocation = /<form name="aspnetForm" method="post" action="([^"]+)"/
var m = postLocation.exec(text);
var folderURL = m[1].replace(/&amp;/g, "&");
m = viewStateMatch.exec(text);
var folderViewState = m[1];
m = eventValidationMatch.exec(text);
var folderEventValidation = m[1];
var deliverString = "__EVENTTARGET=ctl00%24ctl00%24MainContentArea%24MainContentArea%24btnDelivery%24lnkExport&__EVENTARGUMENT=&__VIEWSTATE="+fullEscape(folderViewState)+"&__EVENTVALIDATION="+fullEscape(folderEventValidation)+"&ajax=enabled";
Zotero.Utilities.HTTP.doPost("http://"+host+"/ehost/"+folderURL,
deliverString, downloadFunction); // download records as RIS
});
});
} else { } else {
// If this is a view page, find the link to the citation // If this is a view page, find the link to the citation
var xpath = ''/html/body/div[@class="indent"]/center//a[@class="nav"]''; var xpath = ''/html/body/div[@class="indent"]/center//a[@class="nav"]'';
@ -3337,84 +3411,10 @@ function doWeb(doc, url) {
var saveCitation = elmts.iterateNext(); var saveCitation = elmts.iterateNext();
var viewSavedCitations = elmts.iterateNext(); var viewSavedCitations = elmts.iterateNext();
var saveString = "__EVENTTARGET=ctl00%24ctl00%24MainContentArea%24MainContentArea%24topAddToFolderControl%24lnkAddToFolder&__EVENTARGUMENT=&__VIEWSTATE="+viewState+"&__EVENTVALIDATION="+eventValidation; var deliverString = "ctl00%24ctl00%24MainContentArea%24MainContentArea%24topDeliveryControl%24deliveryButtonControl%24imgExport.x=18&ctl00%24ctl00%24MainContentArea%24MainContentArea%24topDeliveryControl%24deliveryButtonControl%24imgExport.y=9&__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE="+viewState+"&__EVENTVALIDATION="+eventValidation+"&ajax=enabled";
Zotero.Utilities.HTTP.doPost(url, deliverString, downloadFunction);
} }
var folderString = "__EVENTTARGET=ctl00%24ctl00%24ToolbarArea%24toolbar%24folderControl%24lnkFolder&__EVENTARGUMENT=&__VIEWSTATE="+viewState+"&__EVENTVALIDATION="+eventValidation;
var getString = "__EVENTTARGET=Tabs&IsCallBack=true&chkRemoveFromFolder=true&chkIncludeHTMLFT=true&chkIncludeHTMLLinks=true&CitationFormat=standard&lstFormatStandard=1&lstFormatIndustry=4&cfCommonAb=false&cfCommonAu=true&cfCommonTypDoc=true&cfCommonID=true&cfCommonISSN=true&cfCommonNote=false&cfCommonRevInfo=false&cfCommonSrc=true&cfCommonTi=true&__EVENTARGUMENT=1&"
var viewStateMatch = /<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="([^"]+)" \/>/
var eventValidationMatch = /<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="([^"]+)" \/>/
Zotero.Utilities.HTTP.doPost(url, saveString, function() { // mark records
Zotero.Utilities.HTTP.doPost(url, folderString, function(text) {
var postLocation = /<form name="aspnetForm" method="post" action="([^"]+)"/
var m = postLocation.exec(text);
var folderURL = m[1].replace(/&amp;/g, "&");
m = viewStateMatch.exec(text);
var folderViewState = m[1];
var folderBase = "__EVENTARGUMENT=&__VIEWSTATE="+fullEscape(folderViewState);
m = eventValidationMatch.exec(text);
var folderEventValidation = m[1];
folderBase += "&__EVENTVALIDATION="+fullEscape(folderEventValidation);
var deliverString = "__EVENTTARGET=ctl00%24ctl00%24MainContentArea%24MainContentArea%24btnDelivery%24lnkSave&"+folderBase
Zotero.Utilities.HTTP.doPost("http://"+host+"/ehost/"+folderURL,
deliverString, function(text) {
var postLocation = /<form name="aspnetForm" method="post" action="([^"]+)"/
var m = postLocation.exec(text);
var deliveryURL = m[1].replace(/&amp;/g, "&");
var m = viewStateMatch.exec(text);
var downloadString = "__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE="+fullEscape(m[1])+"&ctl00%24ctl00%24MainContentArea%24MainContentArea%24ctl01%24chkRemoveFromFolder=on&ctl00%24ctl00%24MainContentArea%24MainContentArea%24ctl01%24btnSubmit=Save&ctl00%24ctl00%24MainContentArea%24MainContentArea%24ctl01%24BibFormat=1";
Zotero.Utilities.HTTP.doPost("http://"+host+"/ehost/"+deliveryURL,
getString, function(text) {
Zotero.Utilities.HTTP.doPost("http://"+host+"/ehost/"+deliveryURL,
downloadString, function(text) { // get marked
var form = doc.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", "http://"+host+"/ehost/"+folderURL);
var args = [
["__EVENTARGUMENT", ""],
["__VIEWSTATE", folderViewState],
["__EVENTVALIDATION", folderEventValidation],
["__EVENTTARGET", "ctl00$ctl00$MainContentArea$MainContentArea$btnBack$lnkBack"]
];
for(var i in args) {
var input = doc.createElement("input");
input.setAttribute("type", "hidden");
input.setAttribute("name", args[i][0]);
input.setAttribute("value", args[i][1]);
form.appendChild(input);
}
var body = doc.getElementsByTagName("body");
body[0].appendChild(form);
form.submit();
// load translator for RIS
var translator = Zotero.loadTranslator("import");
translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7");
translator.setString(text);
translator.setHandler("itemDone", function(obj, item) {
if(item.notes && item.notes[0]) {
item.extra = item.notes[0].note;
delete item.notes;
item.notes = undefined;
}
item.complete();
});
translator.translate();
Zotero.done();
});
});
});
});
});
Zotero.wait(); Zotero.wait();
}'); }');