EPUBJS.Hooks.register("beforeChapterDisplay").endnotes = function(callback, renderer){ var notes = renderer.contents.querySelectorAll('a[href]'), items = Array.prototype.slice.call(notes), //[].slice.call() attr = "epub:type", type = "noteref", folder = EPUBJS.core.folder(location.pathname), cssPath = (folder + EPUBJS.cssPath) || folder, popups = {}; EPUBJS.core.addCss(cssPath + "popup.css", false, renderer.render.document.head); items.forEach(function(item){ var epubType = item.getAttribute(attr), href, id, el, pop, pos, left, top, txt; if(epubType != type) return; href = item.getAttribute("href"); id = href.replace("#", ''); el = renderer.render.document.getElementById(id); item.addEventListener("mouseover", showPop, false); item.addEventListener("mouseout", hidePop, false); function showPop(){ var poppos, iheight = renderer.height, iwidth = renderer.width, tip, pop, maxHeight = 225, itemRect; if(!txt) { pop = el.cloneNode(true); txt = pop.querySelector("p"); } // chapter.replaceLinks.bind(this) //TODO:Fred - update? //-- create a popup with endnote inside of it if(!popups[id]) { popups[id] = document.createElement("div"); popups[id].setAttribute("class", "popup"); pop_content = document.createElement("div"); popups[id].appendChild(pop_content); pop_content.appendChild(txt); pop_content.setAttribute("class", "pop_content"); renderer.render.document.body.appendChild(popups[id]); //-- TODO: will these leak memory? - Fred popups[id].addEventListener("mouseover", onPop, false); popups[id].addEventListener("mouseout", offPop, false); //-- Add hide on page change // chapter.book.listenUntil("book:pageChanged", "book:chapterDestroy", hidePop); // chapter.book.listenUntil("book:pageChanged", "book:chapterDestroy", offPop); renderer.on("renderer:pageChanged", hidePop, this); renderer.on("renderer:pageChanged", offPop, this); // chapter.book.on("renderer:chapterDestroy", hidePop, this); } pop = popups[id]; //-- get location of item itemRect = item.getBoundingClientRect(); left = itemRect.left; top = itemRect.top; //-- show the popup pop.classList.add("show"); //-- locations of popup popRect = pop.getBoundingClientRect(); //-- position the popup pop.style.left = left - popRect.width / 2 + "px"; pop.style.top = top + "px"; //-- Adjust max height if(maxHeight > iheight / 2.5) { maxHeight = iheight / 2.5; pop_content.style.maxHeight = maxHeight + "px"; } //-- switch above / below if(popRect.height + top >= iheight - 25) { pop.style.top = top - popRect.height + "px"; pop.classList.add("above"); }else{ pop.classList.remove("above"); } //-- switch left if(left - popRect.width <= 0) { pop.style.left = left + "px"; pop.classList.add("left"); }else{ pop.classList.remove("left"); } //-- switch right if(left + popRect.width / 2 >= iwidth) { //-- TEMP MOVE: 300 pop.style.left = left - 300 + "px"; popRect = pop.getBoundingClientRect(); pop.style.left = left - popRect.width + "px"; //-- switch above / below again if(popRect.height + top >= iheight - 25) { pop.style.top = top - popRect.height + "px"; pop.classList.add("above"); }else{ pop.classList.remove("above"); } pop.classList.add("right"); }else{ pop.classList.remove("right"); } } function onPop(){ popups[id].classList.add("on"); } function offPop(){ popups[id].classList.remove("on"); } function hidePop(){ setTimeout(function(){ popups[id].classList.remove("show"); }, 100); } }); if(callback) callback(); } EPUBJS.Hooks.register("beforeChapterDisplay").mathml = function(callback, renderer){ // check of currentChapter properties contains 'mathml' if(renderer.currentChapter.manifestProperties.indexOf("mathml") !== -1 ){ // Assign callback to be inside iframe window renderer.iframe.contentWindow.mathmlCallback = callback; // add MathJax config script tag to the renderer body var s = document.createElement("script"); s.type = 'text/x-mathjax-config'; s.innerHTML = '\ MathJax.Hub.Register.StartupHook("End",function () { \ window.mathmlCallback(); \ });\ MathJax.Hub.Config({jax: ["input/TeX","input/MathML","output/SVG"],extensions: ["tex2jax.js","mml2jax.js","MathEvents.js"],TeX: {extensions: ["noErrors.js","noUndefined.js","autoload-all.js"]},MathMenu: {showRenderer: false},menuSettings: {zoom: "Click"},messageStyle: "none"}); \ '; renderer.doc.body.appendChild(s); // add MathJax.js to renderer head EPUBJS.core.addScript("http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML", null, renderer.doc.head); } else { if(callback) callback(); } } 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){ function size() { 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'); } } item.addEventListener('load', size, false); renderer.on("renderer:resized", size); renderer.on("renderer:chapterUnloaded", function(){ item.removeEventListener('load', size); renderer.off("renderer:resized", size); }); size(); }); if(callback) callback(); } EPUBJS.Hooks.register("beforeChapterDisplay").transculsions = function(callback, renderer){ /* */ var trans = renderer.contents.querySelectorAll('[transclusion]'), items = Array.prototype.slice.call(trans); items.forEach(function(item){ var src = item.getAttribute("ref"), iframe = document.createElement('iframe'), orginal_width = item.getAttribute("width"), orginal_height = item.getAttribute("height"), parent = item.parentNode, width = orginal_width, height = orginal_height, ratio; function size() { width = orginal_width; height = orginal_height; if(width > chapter.colWidth){ ratio = chapter.colWidth / width; width = chapter.colWidth; height = height * ratio; } iframe.width = width; iframe.height = height; } size(); //-- resize event renderer.listenUntil("renderer:resized", "renderer:chapterUnloaded", size); iframe.src = src; // parent.replaceChild(iframe, item); }); if(callback) callback(); } //# sourceMappingURL=hooks.js.map