commit 60e5ff103c6a05103b4700c184dd47a1245e3a9c
parent 917910d1d0c4f4a53e4061df4205bd578b08ee9a
Author: Dan Stillman <dstillman@zotero.org>
Date: Wed, 15 Sep 2010 18:43:52 +0000
Fix COinS and unAPI on pages served as application/xhtml+xml
This requires testing, since it could easily break COinS/unAPI on some pages.
Diffstat:
2 files changed, 26 insertions(+), 6 deletions(-)
diff --git a/translators/COinS.js b/translators/COinS.js
@@ -8,7 +8,7 @@
"maxVersion":"",
"priority":300,
"inRepository":true,
- "lastUpdated":"2010-06-16 18:15:00"
+ "lastUpdated":"2010-09-15 18:42:44"
}
function detectWeb(doc, url) {
@@ -16,7 +16,15 @@ function detectWeb(doc, url) {
var encounteredType = false;
- var spans = doc.evaluate('//span[contains(@class, " Z3988") or contains(@class, "Z3988 ") or @class="Z3988"][@title]', doc, null, XPathResult.ANY_TYPE, null);
+ // This and the x: prefix in the XPath are to work around an issue with pages
+ // served as application/xhtml+xml
+ //
+ // https://developer.mozilla.org/en/Introduction_to_using_XPath_in_JavaScript#Implementing_a_default_namespace_for_XML_documents
+ function nsResolver() {
+ return 'http://www.w3.org/1999/xhtml';
+ }
+
+ var spans = doc.evaluate('//x:span[contains(@class, " Z3988") or contains(@class, "Z3988 ") or @class="Z3988"][@title]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var span;
while(span = spans.iterateNext()) {
// determine if it's a valid type
@@ -141,7 +149,13 @@ function doWeb(doc, url) {
var needFullItems = new Array();
var couldUseFullItems = new Array();
- var spans = doc.evaluate('//span[contains(@class, " Z3988") or contains(@class, "Z3988 ") or @class="Z3988"][@title]', doc, null, XPathResult.ANY_TYPE, null);
+
+ // See note in detectWeb()
+ function nsResolver() {
+ return 'http://www.w3.org/1999/xhtml';
+ }
+
+ var spans = doc.evaluate('//x:span[contains(@class, " Z3988") or contains(@class, "Z3988 ") or @class="Z3988"][@title]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var span;
while(span = spans.iterateNext()) {
var spanTitle = span.title;
diff --git a/translators/unAPI.js b/translators/unAPI.js
@@ -8,7 +8,7 @@
"maxVersion":"",
"priority":200,
"inRepository":true,
- "lastUpdated":"2010-09-04 20:28:04"
+ "lastUpdated":"2010-09-15 18:42:44"
}
var RECOGNIZABLE_FORMATS = ["mods", "marc", "endnote", "ris", "bibtex", "rdf"];
@@ -34,10 +34,16 @@ function detectWeb(doc, url) {
// Set the domain we're scraping
domain = doc.location.href.match(/https?:\/\/([^/]+)/);
- var nsResolver = doc.createNSResolver(doc.documentElement);
+ // This and the x: prefix in the XPath are to work around an issue with pages
+ // served as application/xhtml+xml
+ //
+ // https://developer.mozilla.org/en/Introduction_to_using_XPath_in_JavaScript#Implementing_a_default_namespace_for_XML_documents
+ function nsResolver() {
+ return 'http://www.w3.org/1999/xhtml';
+ }
// look for a resolver
- unAPIResolver = doc.evaluate('//link[@rel="unapi-server"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
+ unAPIResolver = doc.evaluate('//x:link[@rel="unapi-server"]', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
if(!unAPIResolver) return false;
unAPIResolver = unAPIResolver.getAttribute("href");