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); }