diff --git a/package.json b/package.json index 381b5e5..0d8e0c5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "epubjs", - "version": "0.3.50", + "version": "0.3.51", "description": "Parse and Render Epubs", "main": "lib/index.js", "module": "src/index.js", diff --git a/src/contents.js b/src/contents.js index d797e02..b1775aa 100644 --- a/src/contents.js +++ b/src/contents.js @@ -448,7 +448,7 @@ class Contents { var position; var targetPos = {"left": 0, "top": 0}; - if(!this.document) return; + if(!this.document) return targetPos; if(this.epubcfi.isCfiString(target)) { let range = new EpubCFI(target).toRange(this.document, ignoreClass); @@ -466,17 +466,22 @@ class Contents { if (isWebkit) { let container = range.startContainer; let newRange = new Range(); - - if (container.nodeType === ELEMENT_NODE) { - position = container.getBoundingClientRect(); - } else if (container.length + 2 < range.startOffset) { - newRange.setStart(container, range.startOffset); - newRange.setEnd(container, range.startOffset + 2); - position = newRange.getBoundingClientRect(); - } else { - newRange.setStart(container, range.startOffset - 2); - newRange.setEnd(container, range.startOffset); - position = newRange.getBoundingClientRect(); + try { + if (container.nodeType === ELEMENT_NODE) { + position = container.getBoundingClientRect(); + } else if (range.startOffset + 2 < container.length) { + newRange.setStart(container, range.startOffset); + newRange.setEnd(container, range.startOffset + 2); + position = newRange.getBoundingClientRect(); + } else if (range.startOffset - 2 > 0) { + newRange.setStart(container, range.startOffset - 2); + newRange.setEnd(container, range.startOffset); + position = newRange.getBoundingClientRect(); + } else { // empty, return the parent element + position = container.parentNode.getBoundingClientRect(); + } + } catch (e) { + console.error(e, e.stack); } } else { position = range.getBoundingClientRect(); diff --git a/src/rendition.js b/src/rendition.js index b2d1ff0..219823a 100644 --- a/src/rendition.js +++ b/src/rendition.js @@ -357,16 +357,16 @@ class Rendition { */ onResized(size){ - if (this.location && this.location.start) { - // this.manager.clear(); - this.display(this.location.start.cfi); - } - this.emit("resized", { width: size.width, height: size.height }); + if (this.location && this.location.start) { + // this.manager.clear(); + this.display(this.location.start.cfi); + } + } /** diff --git a/src/utils/core.js b/src/utils/core.js index b4c5bd0..4a7a335 100644 --- a/src/utils/core.js +++ b/src/utils/core.js @@ -279,7 +279,7 @@ export function createBase64Url(content, mime){ return; } - data = btoa(content); + data = btoa(encodeURIComponent(content)); datauri = "data:" + mime + ";base64," + data;