diff --git a/unpacked/extensions/MathZoom.js b/unpacked/extensions/MathZoom.js index a5a75e33b..87e91f26c 100644 --- a/unpacked/extensions/MathZoom.js +++ b/unpacked/extensions/MathZoom.js @@ -137,24 +137,26 @@ // // Create the DOM elements for the zoom box // - var Mw = Math.floor(.85*document.body.clientWidth), - Mh = Math.floor(.85*Math.max(document.body.clientHeight,document.documentElement.clientHeight)); + var container = this.findContainer(math); + var Mw = Math.floor(.85*container.clientWidth), + Mh = Math.max(document.body.clientHeight,document.documentElement.clientHeight); + if (this.getOverflow(container) !== "visible") {Mh = Math.min(container.clientHeight,Mh)} + Mh = Math.floor(.85*Mh); var div = HTML.Element( "span",{id:"MathJax_ZoomFrame"},[ ["span",{id:"MathJax_ZoomOverlay", onmousedown:this.Remove}], ["span",{ id:"MathJax_Zoom", onclick:this.Remove, - style:{ - visibility:"hidden", fontSize:this.settings.zscale, - "max-width":Mw+"px", "max-height":Mh+"px" - } + style:{visibility:"hidden", fontSize:this.settings.zscale} },[["span",{style:{display:"inline-block", "white-space":"nowrap"}}]] ]] ); var zoom = div.lastChild, span = zoom.firstChild, overlay = div.firstChild; math.parentNode.insertBefore(div,math); math.parentNode.insertBefore(math,div); // put div after math if (span.addEventListener) {span.addEventListener("mousedown",this.Remove,true)} - + var eW = zoom.offsetWidth; Mw -= eW; Mh -= eW; + zoom.style.maxWidth = Mw+"px"; zoom.style.maxHeight = Mh+"px"; + if (this.msieTrapEventBug) { var trap = HTML.Element("span",{id:"MathJax_ZoomEventTrap", onmousedown:this.Remove}); div.insertBefore(trap,zoom); @@ -187,7 +189,7 @@ if (zoom.offsetWidth > Mw) {zoom.style.width = Mw+"px"; zoom.style.height = (bbox.zH+this.scrollSize)+"px"} } if (this.operaPositionBug) {zoom.style.width = Math.min(Mw,bbox.zW)+"px"} // Opera gets width as 0? - if (zoom.offsetWidth && zoom.offsetWidth < Mw && zoom.offsetHeight < Mh) + if (zoom.offsetWidth > eW && zoom.offsetWidth < Mw && zoom.offsetHeight < Mh) {zoom.style.overflow = "visible"} // don't show scroll bars if we don't need to this.Position(zoom,bbox); if (this.msieTrapEventBug) { @@ -223,7 +225,7 @@ var XY = this.Resize(), x = XY.x, y = XY.y, W = bbox.mW; var dx = -W-Math.floor((zoom.offsetWidth-W)/2), dy = bbox.Y; zoom.style.left = Math.max(dx,10-x)+"px"; zoom.style.top = Math.max(dy,10-y)+"px"; - if (!ZOOM.msiePositionBug) {ZOOM.SetWH()} // refigure overlay width/height + this.Resize(); // refigure overlay position and size }, // @@ -233,13 +235,8 @@ if (ZOOM.onresize) {ZOOM.onresize(event)} var div = document.getElementById("MathJax_ZoomFrame"), overlay = document.getElementById("MathJax_ZoomOverlay"); - var xy = ZOOM.getXY(div); - var obj = div.parentNode, overflow = ZOOM.getOverflow(obj); - while (obj.parentNode && obj !== document.body && overflow === "visible") { - obj = obj.parentNode - overflow = ZOOM.getOverflow(obj); - } - if (overflow !== "visible") { + var xy = ZOOM.getXY(div), obj = ZOOM.findContainer(div); + if (ZOOM.getOverflow(obj) !== "visible") { overlay.scroll_parent = obj; // Save this for future reference. var XY = ZOOM.getXY(obj); // Remove container position xy.x -= XY.x; xy.y -= XY.y; @@ -247,7 +244,7 @@ xy.x -= XY.x; xy.y -= XY.y; } overlay.style.left = (-xy.x)+"px"; overlay.style.top = (-xy.y)+"px"; - if (ZOOM.msiePositionBug) {setTimeout(ZOOM.SetWH,0)} else {ZOOM.SetWH()} + setTimeout(ZOOM.SetWH,0); return xy; }, SetWH: function () { @@ -257,6 +254,12 @@ overlay.style.width = doc.scrollWidth + "px"; overlay.style.height = Math.max(doc.clientHeight,doc.scrollHeight) + "px"; }, + findContainer: function (obj) { + var obj = obj.parentNode; + while (obj.parentNode && obj !== document.body && ZOOM.getOverflow(obj) === "visible") + {obj = obj.parentNode} + return obj; + }, // // Look up CSS properties (use getComputeStyle if available, or currentStyle if not) //