From 4e9c41e234cfd731b61b625f4d9333d7f50f4a86 Mon Sep 17 00:00:00 2001 From: frankdelange Date: Wed, 17 Aug 2016 18:32:27 +0200 Subject: [PATCH] files_reader: v0.7.2, raised maximum OC/NC version to 9.2 --- files_reader/appinfo/info.xml | 4 +- .../epubjs/hooks/default/smartimages.js | 73 +++++++++++++++++++ 2 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 files_reader/vendor/epubjs/hooks/default/smartimages.js diff --git a/files_reader/appinfo/info.xml b/files_reader/appinfo/info.xml index fde1781..89fcab9 100644 --- a/files_reader/appinfo/info.xml +++ b/files_reader/appinfo/info.xml @@ -11,14 +11,14 @@ Also in Settings you'll find the option to use ignore any internal formatting in the book by forcing a given font style and size. - 0.7.1 + 0.7.2 LGPL Frank de Lange false - + 167127 diff --git a/files_reader/vendor/epubjs/hooks/default/smartimages.js b/files_reader/vendor/epubjs/hooks/default/smartimages.js new file mode 100644 index 0000000..8c1ec5f --- /dev/null +++ b/files_reader/vendor/epubjs/hooks/default/smartimages.js @@ -0,0 +1,73 @@ +EPUBJS.Hooks.register("beforeChapterDisplay").smartimages = function(callback, renderer){ + var images = renderer.contents.querySelectorAll('img'), + items = Array.prototype.slice.call(images), + iheight = renderer.height,//chapter.bodyEl.clientHeight,//chapter.doc.body.getBoundingClientRect().height, + oheight; + + if(renderer.layoutSettings.layout != "reflowable") { + callback(); + return; //-- Only adjust images for reflowable text + } + + items.forEach(function(item){ + + var size = function() { + var itemRect = item.getBoundingClientRect(), + rectHeight = itemRect.height, + top = itemRect.top, + oHeight = item.getAttribute('data-height'), + height = oHeight || rectHeight, + newHeight, + fontSize = Number(getComputedStyle(item, "").fontSize.match(/(\d*(\.\d*)?)px/)[1]), + fontAdjust = fontSize ? fontSize / 2 : 0; + + iheight = renderer.contents.clientHeight; + if(top < 0) top = 0; + + if(height + top >= iheight) { + + if(top < iheight/2) { + // Remove top and half font-size from height to keep container from overflowing + newHeight = iheight - top - fontAdjust; + item.style.maxHeight = newHeight + "px"; + item.style.width= "auto"; + }else{ + if(height > iheight) { + item.style.maxHeight = iheight + "px"; + item.style.width= "auto"; + itemRect = item.getBoundingClientRect(); + height = itemRect.height; + } + item.style.display = "block"; + item.style["WebkitColumnBreakBefore"] = "always"; + item.style["breakBefore"] = "column"; + + } + + item.setAttribute('data-height', newHeight); + + }else{ + item.style.removeProperty('max-height'); + item.style.removeProperty('margin-top'); + } + } + + var unloaded = function(){ + // item.removeEventListener('load', size); // crashes in IE + renderer.off("renderer:resized", size); + renderer.off("renderer:chapterUnload", this); + }; + + item.addEventListener('load', size, false); + + renderer.on("renderer:resized", size); + + renderer.on("renderer:chapterUnload", unloaded); + + size(); + + }); + + if(callback) callback(); + +}