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",
|
"name": "epubjs",
|
||||||
"version": "0.3.56",
|
"version": "0.3.57",
|
||||||
"description": "Parse and Render Epubs",
|
"description": "Parse and Render Epubs",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"module": "src/index.js",
|
"module": "src/index.js",
|
||||||
|
|
|
@ -564,6 +564,10 @@ class IframeView {
|
||||||
|
|
||||||
mark(cfiRange, data={}, cb) {
|
mark(cfiRange, data={}, cb) {
|
||||||
|
|
||||||
|
if (!this.contents) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (cfiRange in this.marks) {
|
if (cfiRange in this.marks) {
|
||||||
let item = this.marks[cfiRange];
|
let item = this.marks[cfiRange];
|
||||||
return item;
|
return item;
|
||||||
|
@ -580,12 +584,41 @@ class IframeView {
|
||||||
this.emit("markClicked", cfiRange, data);
|
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');
|
let mark = this.document.createElement('a');
|
||||||
mark.setAttribute("ref", "epubjs-mk");
|
mark.setAttribute("ref", "epubjs-mk");
|
||||||
mark.style.position = "absolute";
|
mark.style.position = "absolute";
|
||||||
mark.style.top = `${pos.top}px`;
|
mark.style.top = `${top}px`;
|
||||||
mark.style.left = `${pos.right}px`;
|
mark.style.left = `${right}px`;
|
||||||
|
|
||||||
mark.dataset["epubcfi"] = cfiRange;
|
mark.dataset["epubcfi"] = cfiRange;
|
||||||
|
|
||||||
|
|
|
@ -778,7 +778,8 @@ class Rendition {
|
||||||
}
|
}
|
||||||
|
|
||||||
views () {
|
views () {
|
||||||
return this.manager ? this.manager.views : [];
|
let views = this.manager ? this.manager.views : undefined;
|
||||||
|
return views || [];
|
||||||
}
|
}
|
||||||
|
|
||||||
handleLinks(contents) {
|
handleLinks(contents) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue