diff --git a/epub_content/accessible_epub_3/EPUB/bk01-toc.xhtml b/epub_content/accessible_epub_3/EPUB/bk01-toc.xhtml
index b591c28b5..7099b7127 100644
--- a/epub_content/accessible_epub_3/EPUB/bk01-toc.xhtml
+++ b/epub_content/accessible_epub_3/EPUB/bk01-toc.xhtml
@@ -1,4 +1,4 @@
-
+
diff --git a/epub_content/accessible_epub_3/EPUB/ch01.xhtml b/epub_content/accessible_epub_3/EPUB/ch01.xhtml
index 48197fead..21ff7457f 100644
--- a/epub_content/accessible_epub_3/EPUB/ch01.xhtml
+++ b/epub_content/accessible_epub_3/EPUB/ch01.xhtml
@@ -1,4 +1,4 @@
-
+
diff --git a/epub_content/accessible_epub_3/EPUB/index.xhtml b/epub_content/accessible_epub_3/EPUB/index.xhtml
index 2527390a3..2c0c75a8b 100644
--- a/epub_content/accessible_epub_3/EPUB/index.xhtml
+++ b/epub_content/accessible_epub_3/EPUB/index.xhtml
@@ -1,4 +1,4 @@
-
+
diff --git a/epub_content/accessible_epub_3/EPUB/package.opf b/epub_content/accessible_epub_3/EPUB/package.opf
index 2548ab635..3d83d15e0 100644
--- a/epub_content/accessible_epub_3/EPUB/package.opf
+++ b/epub_content/accessible_epub_3/EPUB/package.opf
@@ -1,4 +1,4 @@
-
+
diff --git a/epub_content/epub_library.opds b/epub_content/epub_library.opds
index 79f56e465..6ad1f43fc 100644
--- a/epub_content/epub_library.opds
+++ b/epub_content/epub_library.opds
@@ -1,4 +1,4 @@
-
+
READIUM_OPDS_0123456789
diff --git a/readium-js b/readium-js
index 7ea65e63d..472ba4859 160000
--- a/readium-js
+++ b/readium-js
@@ -1 +1 @@
-Subproject commit 7ea65e63de23733dae5240556c786c263574ff5e
+Subproject commit 472ba4859e34e7e946e6cd2cf94ba24c24c45fdc
diff --git a/src/js/EpubLibrary.js b/src/js/EpubLibrary.js
index 9806a0062..5b3d59165 100644
--- a/src/js/EpubLibrary.js
+++ b/src/js/EpubLibrary.js
@@ -21,7 +21,8 @@ define([
'Analytics',
'./Keyboard',
'./versioning/ReadiumVersioning',
-'readium_shared_js/helpers'],
+'readium_shared_js/helpers',
+'readium_shared_js/XmlParse'],
function(
moduleConfig,
@@ -46,7 +47,8 @@ Messages,
Analytics,
Keyboard,
Versioning,
-Helpers){
+Helpers,
+XmlParse){
var detailsDialogStr = DetailsDialog({strings: Strings});
@@ -190,8 +192,7 @@ Helpers){
$.get(urlContainerXml, function(data){
if(typeof(data) === "string" ) {
- var parser = new window.DOMParser;
- data = parser.parseFromString(data, 'text/xml');
+ data = XmlParse.fromString(data, "text/xml");
}
var $rootfile = $('rootfile', data);
var rootFilePath = $rootfile.attr('full-path');
@@ -255,8 +256,7 @@ Helpers){
// $.get(epub.rootUrl + "/META-INF/container.xml", function(data){
// if(typeof(data) === "string" ) {
- // var parser = new window.DOMParser;
- // data = parser.parseFromString(data, 'text/xml');
+ // data = XmlParse.fromString(data, "text/xml");
// }
// var $rootfile = $('rootfile', data);
// epub.packagePath = $rootfile.attr('full-path');
diff --git a/src/js/EpubLibraryManager.js b/src/js/EpubLibraryManager.js
index 22692bbb2..a6bf3ddbc 100644
--- a/src/js/EpubLibraryManager.js
+++ b/src/js/EpubLibraryManager.js
@@ -1,4 +1,4 @@
-define(['jquery', './ModuleConfig', './PackageParser', './workers/WorkerProxy', 'StorageManager', 'i18nStrings', 'URIjs', './EpubLibraryOPDS'], function ($, moduleConfig, PackageParser, WorkerProxy, StorageManager, Strings, URI, EpubLibraryOPDS) {
+define(['jquery', './ModuleConfig', './PackageParser', './workers/WorkerProxy', 'StorageManager', 'i18nStrings', 'URIjs', './EpubLibraryOPDS', 'readium_shared_js/XmlParse'], function ($, moduleConfig, PackageParser, WorkerProxy, StorageManager, Strings, URI, EpubLibraryOPDS, XmlParse) {
var LibraryManager = function(){
};
@@ -107,8 +107,7 @@ define(['jquery', './ModuleConfig', './PackageParser', './workers/WorkerProxy',
$.get(packageUrl, function(data){
if(typeof(data) === "string" ) {
- var parser = new window.DOMParser;
- data = parser.parseFromString(data, 'text/xml');
+ data = XmlParse.fromString(data, "text/xml");
}
var jsonObj = PackageParser.parsePackageDom(data, packageUrl);
jsonObj.coverHref = jsonObj.coverHref ? self._getFullUrl(packageUrl, jsonObj.coverHref) : undefined;
diff --git a/src/js/EpubLibraryOPDS.js b/src/js/EpubLibraryOPDS.js
index 556fbbb2c..ae08fd058 100644
--- a/src/js/EpubLibraryOPDS.js
+++ b/src/js/EpubLibraryOPDS.js
@@ -1,15 +1,15 @@
define([
'./ModuleConfig',
'jquery',
-'readium_shared_js/helpers',
-'URIjs'
+'URIjs',
+'readium_shared_js/XmlParse'
],
function(
moduleConfig,
$,
-Helpers,
-URI){
+URI,
+XmlParse){
var processOPDS = function(opdsURL, data, dataSuccess, dataFail) {
@@ -64,7 +64,7 @@ URI){
}
if (typeof data === "string") {
- data = $.parseXML(data);
+ data = XmlParse.fromString(data, "text/xml");
}
$xml = $(data);
diff --git a/src/js/EpubReader.js b/src/js/EpubReader.js
index 9575c1671..f2250d549 100644
--- a/src/js/EpubReader.js
+++ b/src/js/EpubReader.js
@@ -308,32 +308,44 @@ BookmarkData){
var tocNav;
var $navs = $('nav', dom);
- Array.prototype.every.call($navs, function(nav){
- if (nav.getAttributeNS('http://www.idpf.org/2007/ops', 'type') == 'toc'){
+ Array.prototype.every.call($navs, function(nav) {
+
+ var attr = Helpers.getEpubTypeRoleAttributeValue(nav);
+
+ if (attr && ((attr.indexOf('toc') >= 0) || (attr.indexOf('doc-toc') >= 0))) { // TODO: tighter regexp check, with token-separated values (space character? depends on EPUB3 epub:type vs. ARIA role?)
tocNav = nav;
return false;
}
+
return true;
});
-
+
var isRTL = false;
var pparent = tocNav;
- while (pparent && pparent.getAttributeNS)
+ while (pparent)
{
- var dir = pparent.getAttributeNS("http://www.w3.org/1999/xhtml", "dir") || pparent.getAttribute("dir");
-
+ var dir = undefined;
+ if (pparent.getAttributeNS) {
+ dir = pparent.getAttributeNS("http://www.w3.org/1999/xhtml", "dir");
+ }
+ if (!dir) {
+ if (pparent.getAttribute) {
+ dir = pparent.getAttribute("dir");
+ }
+ }
+
if (dir && dir === "rtl")
{
isRTL = true;
break;
}
+
pparent = pparent.parentNode;
}
var toc = (tocNav && $(tocNav).html()) || $('body', dom).html() || $(dom).html();
- var tocUrl = currentPackageDocument.getToc();
-
+
if (toc && toc.length)
{
var $toc = $(toc);
@@ -375,7 +387,7 @@ BookmarkData){
}
} else {
- var tocUrl = currentPackageDocument.getToc();
+ var tocUrl = currentPackageDocument.getTocURI();
$('#readium-toc-body').append("?? " + tocUrl);
}
@@ -520,13 +532,17 @@ BookmarkData){
{
try {
spin(true);
-
+
var href = $(this).attr('href');
+
+ //var tocUrl = currentPackageDocument.getTocURI();
//href = tocUrl ? new URI(href).absoluteTo(tocUrl).toString() : href;
_tocLinkActivated = true;
- readium.reader.openContentUrl(href, tocUrl, undefined);
+ var tocHref = currentPackageDocument.getToc();
+
+ readium.reader.openContentUrl(href, tocHref, undefined);
if (embedded) {
$('.toc-visible').removeClass('toc-visible');
diff --git a/src/js/workers/EpubLibraryWriter.js b/src/js/workers/EpubLibraryWriter.js
index 8ef1adcd5..e7874041f 100644
--- a/src/js/workers/EpubLibraryWriter.js
+++ b/src/js/workers/EpubLibraryWriter.js
@@ -131,7 +131,8 @@ define(['StorageManager', '../storage/ZipFileLoader', '../storage/UnpackedDirLoa
this.fileLoader.loadFile(path, function(blob){
if (blob){
fileReader.onload = function() {
- // var xmlDom = (new DOMParser()).parseFromString(this.result, "text/xml");
+ // readium_shared_js/XmlParse
+ // var xmlDom = XmlParse.fromString(this.result, "text/xml");
callback(this.result);
};
diff --git a/src/js/workers/WorkerProxy.js b/src/js/workers/WorkerProxy.js
index 06509c2d6..17852359d 100644
--- a/src/js/workers/WorkerProxy.js
+++ b/src/js/workers/WorkerProxy.js
@@ -1,4 +1,4 @@
-define(['../ModuleConfig', './Messages', 'jquery', '../PackageParser', 'readium_js/epub-fetch/encryption_handler'], function(moduleConfig, Messages, $, PackageParser, EncryptionHandler){
+define(['../ModuleConfig', './Messages', 'jquery', '../PackageParser', 'readium_js/epub-fetch/encryption_handler', 'readium_shared_js/XmlParse'], function(moduleConfig, Messages, $, PackageParser, EncryptionHandler, XmlParse){
var worker;
var cleanupWorker = function(){
@@ -60,7 +60,7 @@ define(['../ModuleConfig', './Messages', 'jquery', '../PackageParser', 'readium_
}
break;
case Messages.FIND_PACKAGE:
- var containerDom = (new DOMParser()).parseFromString(data.containerStr, "text/xml");
+ var containerDom = XmlParse.fromString(data.containerStr, "text/xml");
var $rootfile = $('rootfile', containerDom);
if (!$rootfile.length){
error(Messages.ERROR_EPUB);
@@ -71,7 +71,7 @@ define(['../ModuleConfig', './Messages', 'jquery', '../PackageParser', 'readium_
}
break;
case Messages.PARSE_PACKAGE:
- var packageDom = (new DOMParser()).parseFromString(data.packageStr, "text/xml");
+ var packageDom = XmlParse.fromString(data.packageStr, "text/xml");
var errors = $(packageDom).find('parsererror');
if (errors.length) {
error(Messages.ERROR_PACKAGE_PARSE, $(errors).find('div').text());
@@ -82,7 +82,7 @@ define(['../ModuleConfig', './Messages', 'jquery', '../PackageParser', 'readium_
var encryptionData;
if(data.encryptionStr) {
- var encryptionDom = (new DOMParser()).parseFromString(data.encryptionStr, "text/xml");
+ var encryptionDom = XmlParse.fromString(data.encryptionStr, "text/xml");
encryptionData = EncryptionHandler.CreateEncryptionData(packageObj.id, encryptionDom);
}