Skip to content

Commit

Permalink
Fix Firefox XML namespace handling incompatibilities in package docum…
Browse files Browse the repository at this point in the history
…ent parser

by using getElementsByTagNameNS() instead of jQuery selectors that
behave differently on WebKit than on other engines.
  • Loading branch information
aadamowski committed Mar 23, 2014
1 parent 7b1aa11 commit 744c68a
Showing 1 changed file with 23 additions and 8 deletions.
31 changes: 23 additions & 8 deletions epub-modules/epub/src/models/package_document_parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -167,28 +167,43 @@ define(['require', 'module', 'jquery', 'underscore', 'backbone', 'epub-fetch/mar
return jsonSpine;
}

function findXmlElemByLocalNameAnyNS(rootElement, localName) {
return rootElement.getElementsByTagNameNS("*", localName)[0];
}

function getElemText(rootElement, localName) {
var foundElement = findXmlElemByLocalNameAnyNS(rootElement, localName);
if (foundElement) {
return foundElement.textContent;
} else {
return '';
}
}

function getJsonMetadata(xmlDom) {

var $metadata = $("metadata", xmlDom);
var metadataElem = xmlDom.getElementsByTagNameNS("*", "metadata")[0];
var jsonMetadata = {};

jsonMetadata.author = $("creator", $metadata).text();
jsonMetadata.description = $("description", $metadata).text();
jsonMetadata.author = getElemText(metadataElem, "creator");
jsonMetadata.description = getElemText(metadataElem, "description");
// TODO: Convert all jQuery queries (that get confused by XML namespaces on Firefox) to getElementsByTagNameNS().
jsonMetadata.epub_version =
$("package", xmlDom).attr("version") ? $("package", xmlDom).attr("version") : "";
jsonMetadata.id = $("identifier", $metadata).text();
jsonMetadata.language = $("language", $metadata).text();
jsonMetadata.id = getElemText(metadataElem,"identifier");
jsonMetadata.language = getElemText(metadataElem, "language");
jsonMetadata.layout = $("meta[property='rendition:layout']", $metadata).text();
jsonMetadata.modified_date = $("meta[property='dcterms:modified']", $metadata).text();
jsonMetadata.ncx = $("spine", xmlDom).attr("toc") ? $("spine", xmlDom).attr("toc") : "";
jsonMetadata.orientation = $("meta[property='rendition:orientation']", $metadata).text();
jsonMetadata.page_prog_dir = $("spine", xmlDom).attr("page-progression-direction") ?
$("spine", xmlDom).attr("page-progression-direction") : "";
jsonMetadata.pubdate = $("date", $metadata).text();
jsonMetadata.publisher = $("publisher", $metadata).text();
jsonMetadata.rights = $("rights").text();
jsonMetadata.pubdate = getElemText(metadataElem, "date");
jsonMetadata.publisher = getElemText(metadataElem, "publisher");
jsonMetadata.rights = getElemText(metadataElem, "rights");
jsonMetadata.spread = $("meta[property='rendition:spread']", $metadata).text();
jsonMetadata.title = $("title", $metadata).text();
jsonMetadata.title = getElemText(metadataElem, "title");


// Media part
Expand Down

0 comments on commit 744c68a

Please sign in to comment.