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:
parent
bbb05616ab
commit
8999feb613
3 changed files with 39 additions and 5 deletions
|
@ -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",
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue