1
0
Fork 0
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:
Victor Soares 2024-03-22 12:38:01 -03:00
parent 536f680752
commit 14e3b4a0d0
3 changed files with 25 additions and 7 deletions

View file

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

View file

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

View file

@ -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
*