files_reader/vendor/epubjs/hooks/default/smartimages.js
Frank de Lange b190e180ef - Migrated from https://github.com/Yetangitu/owncloud-apps
- substantial bit rot accrued in 4 years of non-maintenance which made Reader unusable
 - Reader now works reliably on public pages - or at least it _Works For Me™_

 - Refactored a substantial part of the code to comply to the "current" (ha ha) Nextcloud API
 - Dropped Owncloud compatibility for lack of a testing installation
 - Dropped IE (<11) support
 - Dropped compatibility with older (<20) Nextcloud versions
 - Dropped app-specific ajax code, now handled by SettingsController
 - Updated dependencies where applicable
2022-09-24 00:00:03 +00:00

73 lines
2.1 KiB
JavaScript

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();
}