mirror of
https://github.com/futurepress/epub.js.git
synced 2025-10-05 15:32:55 +02:00
fix: navigation does not work in diff folders
This commit is contained in:
parent
536f680752
commit
14e3b4a0d0
3 changed files with 25 additions and 7 deletions
|
@ -502,9 +502,9 @@ class Book {
|
|||
this.opening.resolve(this);
|
||||
});
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(err);
|
||||
});
|
||||
.catch((err) => {
|
||||
console.error(err);
|
||||
});
|
||||
} else {
|
||||
// Resolve book opened promise
|
||||
this.loaded.displayOptions.then(() => {
|
||||
|
@ -547,7 +547,7 @@ class Book {
|
|||
|
||||
return this.load(navPath, "xml")
|
||||
.then((xml) => {
|
||||
this.navigation = new Navigation(xml);
|
||||
this.navigation = new Navigation(xml, navPath);
|
||||
this.pageList = new PageList(xml);
|
||||
return this.navigation;
|
||||
});
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
import {qs, qsa, querySelectorByType, filterChildren, getParentByTagName} from "./utils/core";
|
||||
import Path from "./utils/path";
|
||||
|
||||
/**
|
||||
* Navigation Parser
|
||||
* @param {document} xml navigation html / xhtml / ncx
|
||||
*/
|
||||
class Navigation {
|
||||
constructor(xml) {
|
||||
constructor(xml, navPath = "") {
|
||||
this.toc = [];
|
||||
this.tocByHref = {};
|
||||
this.tocById = {};
|
||||
|
@ -14,6 +15,11 @@ class Navigation {
|
|||
this.landmarksByType = {};
|
||||
|
||||
this.length = 0;
|
||||
|
||||
if (navPath) {
|
||||
this.tocPath = new Path(navPath);
|
||||
}
|
||||
|
||||
if (xml) {
|
||||
this.parse(xml);
|
||||
}
|
||||
|
@ -198,7 +204,8 @@ class Navigation {
|
|||
return;
|
||||
}
|
||||
|
||||
let src = content.getAttribute("href") || "";
|
||||
const href = content.getAttribute("href") || "";
|
||||
let src = this.tocPath.join(href);
|
||||
|
||||
if (!id) {
|
||||
id = src;
|
||||
|
@ -317,7 +324,7 @@ class Navigation {
|
|||
parentNode = item.parentNode,
|
||||
parent;
|
||||
|
||||
if(parentNode && (parentNode.nodeName === "navPoint" || parentNode.nodeName.split(':').slice(-1)[0] === "navPoint")) {
|
||||
if(parentNode && (parentNode.nodeName === "navPoint" || parentNode.nodeName.split(":").slice(-1)[0] === "navPoint")) {
|
||||
parent = parentNode.getAttribute("id");
|
||||
}
|
||||
|
||||
|
|
|
@ -58,6 +58,17 @@ class Path {
|
|||
return (what.charAt(what.length-1) === "/");
|
||||
}
|
||||
|
||||
/**
|
||||
* Join a paths
|
||||
*
|
||||
* https://nodejs.org/api/path.html#pathjoinpaths
|
||||
* @param {string} what
|
||||
* @returns {string} joined path
|
||||
*/
|
||||
join (what) {
|
||||
return path.join(this.directory, what);
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve a path against the directory of the Path
|
||||
*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue