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", "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",

View file

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

View file

@ -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) {