1
0
Fork 0
mirror of https://github.com/futurepress/epub.js.git synced 2025-10-03 14:59:18 +02:00

Fix location of marks in paginated columns

This commit is contained in:
Fred Chasen 2017-10-05 16:43:14 -07:00
parent bbb05616ab
commit 8999feb613
3 changed files with 39 additions and 5 deletions

View file

@ -1,6 +1,6 @@
{
"name": "epubjs",
"version": "0.3.56",
"version": "0.3.57",
"description": "Parse and Render Epubs",
"main": "lib/index.js",
"module": "src/index.js",

View file

@ -564,6 +564,10 @@ class IframeView {
mark(cfiRange, data={}, cb) {
if (!this.contents) {
return;
}
if (cfiRange in this.marks) {
let item = this.marks[cfiRange];
return item;
@ -580,12 +584,41 @@ class IframeView {
this.emit("markClicked", cfiRange, data);
};
let pos = parent.getBoundingClientRect();
if (range.collapsed && container.nodeType === 1) {
range = new Range();
range.selectNodeContents(container);
} else if (range.collapsed) { // Webkit doesn't like collapsed ranges
range = new Range();
range.selectNodeContents(parent);
}
let top, right, left;
if(this.layout.name === "pre-paginated" ||
this.settings.axis !== "horizontal") {
let pos = range.getBoundingClientRect();
top = pos.top;
right = pos.right;
} else {
// Element might break columns, so find the left most element
let rects = range.getClientRects();
let rect;
for (var i = 0; i != rects.length; i++) {
rect = rects[i];
if (!left || rect.left < left) {
left = rect.left;
right = left + this.layout.columnWidth - this.layout.gap;
top = rect.top;
}
}
}
let mark = this.document.createElement('a');
mark.setAttribute("ref", "epubjs-mk");
mark.style.position = "absolute";
mark.style.top = `${pos.top}px`;
mark.style.left = `${pos.right}px`;
mark.style.top = `${top}px`;
mark.style.left = `${right}px`;
mark.dataset["epubcfi"] = cfiRange;

View file

@ -778,7 +778,8 @@ class Rendition {
}
views () {
return this.manager ? this.manager.views : [];
let views = this.manager ? this.manager.views : undefined;
return views || [];
}
handleLinks(contents) {