Merge branch 'zoom-update' into v2.0-candidate

This commit is contained in:
Davide P. Cervone 2011-09-11 11:51:14 -04:00
commit 3f4f54e2c0
44 changed files with 1212 additions and 589 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

16
extensions/MathEvents.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -12,5 +12,5 @@
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
*/ */
(function(){var c="1.1.1";var a=MathJax.Hub.CombineConfig("TeX.noErrors",{multiLine:true,inlineDelimiters:["",""],style:{"font-size":"80%","text-align":"left",color:"black",padding:"1px 3px",border:"1px solid"}});var b="\u00A0";MathJax.Extension["TeX/noErrors"]={version:c,config:a};MathJax.Hub.Register.StartupHook("TeX Jax Ready",function(){MathJax.InputJax.TeX.Augment({formatError:function(f,e,g,d){var i=a.inlineDelimiters;var h=(g||a.multiLine);if(!g){e=i[0]+e+i[1]}if(h){e=e.replace(/ /g,b)}else{e=e.replace(/\n/g," ")}return MathJax.ElementJax.mml.merror(e).With({isError:true,multiLine:h})}})});MathJax.Hub.Register.StartupHook("HTML-CSS Jax Config",function(){MathJax.Hub.Config({"HTML-CSS":{styles:{".MathJax .merror":MathJax.Hub.Insert({"font-style":null,"background-color":null,"vertical-align":(MathJax.Hub.Browser.isMSIE&&a.multiLine?"-2px":"")},a.style)}}})})})();MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function(){var a=MathJax.ElementJax.mml;var b=MathJax.OutputJax["HTML-CSS"];var c=a.math.prototype.toHTML;a.math.Augment({toHTML:function(d,e){if(this.data[0]&&this.data[0].data[0]&&this.data[0].data[0].isError){d=this.HTMLcreateSpan(d);d.bbox=this.data[0].data[0].toHTML(d).bbox;return d}return c.call(this,d,e)}});a.merror.Augment({toHTML:function(j){if(!this.isError){return a.mbase.prototype.toHTML.call(this,j)}j=this.HTMLcreateSpan(j);if(this.multiLine){j.style.display="inline-block"}var l=this.data[0].data[0].data.join("").split(/\n/);for(var g=0,e=l.length;g<e;g++){b.addText(j,l[g]);if(g!==e-1){b.addElement(j,"br")}}var n=b.getHD(j.parentNode),d=b.getW(j.parentNode);if(e>1){var k=(n.h+n.d)/2,h=b.TeX.x_height/2;var f=b.config.styles[".MathJax .merror"]["font-size"];if(f&&f.match(/%/)){h*=parseInt(f)/100}j.parentNode.style.verticalAlign=b.Em(n.d+(h-k));n.h=h+k;n.d=k-h}j.bbox={h:n.h,d:n.d,w:d,lw:0,rw:d};return j}});MathJax.Hub.Startup.signal.Post("TeX noErrors Ready")});MathJax.Hub.Register.StartupHook("NativeMML Jax Ready",function(){var b=MathJax.ElementJax.mml;var a=MathJax.Extension["TeX/noErrors"].config;var c=b.math.prototype.toNativeMML;b.math.Augment({toNativeMML:function(d){if(this.data[0]&&this.data[0].data[0]&&this.data[0].data[0].isError){return this.data[0].data[0].toNativeMML(d)}return c.call(this,d)}});b.merror.Augment({toNativeMML:function(g){if(!this.isError){return b.mbase.prototype.toNativeMML.call(this,g)}g=g.appendChild(document.createElement("span"));var h=this.data[0].data[0].data.join("").split(/\n/);for(var f=0,e=h.length;f<e;f++){g.appendChild(document.createTextNode(h[f]));if(f!==e-1){g.appendChild(document.createElement("br"))}}if(this.multiLine){g.style.display="inline-block";if(e>1){g.style.verticalAlign="middle"}}for(var j in a.style){if(a.style.hasOwnProperty(j)){var d=j.replace(/-./g,function(i){return i.charAt(1).toUpperCase()});g.style[d]=a.style[j]}}return g}});MathJax.Hub.Startup.signal.Post("TeX noErrors Ready")});MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/noErrors.js"); (function(){var c="1.1.1";var a=MathJax.Hub.CombineConfig("TeX.noErrors",{multiLine:true,inlineDelimiters:["",""],style:{"font-size":"80%","text-align":"left",color:"black",padding:"1px 3px",border:"1px solid"}});var b="\u00A0";MathJax.Extension["TeX/noErrors"]={version:c,config:a};MathJax.Hub.Register.StartupHook("TeX Jax Ready",function(){MathJax.InputJax.TeX.Augment({formatError:function(f,e,g,d){var i=a.inlineDelimiters;var h=(g||a.multiLine);if(!g){e=i[0]+e+i[1]}if(h){e=e.replace(/ /g,b)}else{e=e.replace(/\n/g," ")}return MathJax.ElementJax.mml.merror(e).With({isError:true,multiLine:h})}})});MathJax.Hub.Register.StartupHook("HTML-CSS Jax Config",function(){MathJax.Hub.Config({"HTML-CSS":{styles:{".MathJax .merror":MathJax.Hub.Insert({"font-style":null,"background-color":null,"vertical-align":(MathJax.Hub.Browser.isMSIE&&a.multiLine?"-2px":"")},a.style)}}})})})();MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function(){var a=MathJax.ElementJax.mml;var b=MathJax.OutputJax["HTML-CSS"];var c=a.math.prototype.toHTML;a.math.Augment({toHTML:function(d,e){if(this.data[0]&&this.data[0].data[0]&&this.data[0].data[0].isError){d=this.HTMLcreateSpan(d);d.bbox=this.data[0].data[0].toHTML(d).bbox;return d}return c.call(this,d,e)}});a.merror.Augment({toHTML:function(j){if(!this.isError){return a.mbase.prototype.toHTML.call(this,j)}j=this.HTMLcreateSpan(j);if(this.multiLine){j.style.display="inline-block"}var l=this.data[0].data[0].data.join("").split(/\n/);for(var g=0,e=l.length;g<e;g++){b.addText(j,l[g]);if(g!==e-1){b.addElement(j,"br",{isMathJax:true})}}var n=b.getHD(j.parentNode),d=b.getW(j.parentNode);if(e>1){var k=(n.h+n.d)/2,h=b.TeX.x_height/2;var f=b.config.styles[".MathJax .merror"]["font-size"];if(f&&f.match(/%/)){h*=parseInt(f)/100}j.parentNode.style.verticalAlign=b.Em(n.d+(h-k));n.h=h+k;n.d=k-h}j.bbox={h:n.h,d:n.d,w:d,lw:0,rw:d};return j}});MathJax.Hub.Startup.signal.Post("TeX noErrors Ready")});MathJax.Hub.Register.StartupHook("NativeMML Jax Ready",function(){var b=MathJax.ElementJax.mml;var a=MathJax.Extension["TeX/noErrors"].config;var c=b.math.prototype.toNativeMML;b.math.Augment({toNativeMML:function(d){if(this.data[0]&&this.data[0].data[0]&&this.data[0].data[0].isError){return this.data[0].data[0].toNativeMML(d)}return c.call(this,d)}});b.merror.Augment({toNativeMML:function(g){if(!this.isError){return b.mbase.prototype.toNativeMML.call(this,g)}g=g.appendChild(document.createElement("span"));var h=this.data[0].data[0].data.join("").split(/\n/);for(var f=0,e=h.length;f<e;f++){g.appendChild(document.createTextNode(h[f]));if(f!==e-1){g.appendChild(document.createElement("br"))}}if(this.multiLine){g.style.display="inline-block";if(e>1){g.style.verticalAlign="middle"}}for(var j in a.style){if(a.style.hasOwnProperty(j)){var d=j.replace(/-./g,function(i){return i.charAt(1).toUpperCase()});g.style[d]=a.style[j]}}return g}});MathJax.Hub.Startup.signal.Post("TeX noErrors Ready")});MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/noErrors.js");

BIN
images/CloseX-31.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
images/MenuArrow-15.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 725 B

View File

@ -12,5 +12,5 @@
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
*/ */
MathJax.InputJax.MathML=MathJax.InputJax({id:"MathML",version:"1.1.7",directory:MathJax.InputJax.directory+"/MathML",extensionDir:MathJax.InputJax.extensionDir+"/MathML",entityDir:MathJax.InputJax.directory+"/MathML/entities",config:{useMathMLspacing:false}});MathJax.InputJax.MathML.Register("math/mml");MathJax.InputJax.MathML.loadComplete("config.js"); MathJax.InputJax.MathML=MathJax.InputJax({id:"MathML",version:"1.1.8",directory:MathJax.InputJax.directory+"/MathML",extensionDir:MathJax.InputJax.extensionDir+"/MathML",entityDir:MathJax.InputJax.directory+"/MathML/entities",config:{useMathMLspacing:false}});MathJax.InputJax.MathML.Register("math/mml");MathJax.InputJax.MathML.loadComplete("config.js");

File diff suppressed because one or more lines are too long

View File

@ -12,5 +12,5 @@
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
*/ */
MathJax.InputJax.TeX=MathJax.InputJax({id:"TeX",version:"1.1.8",directory:MathJax.InputJax.directory+"/TeX",extensionDir:MathJax.InputJax.extensionDir+"/TeX",config:{TagSide:"right",TagIndent:"0.8em",MultLineWidth:"85%"}});MathJax.InputJax.TeX.Register("math/tex");MathJax.InputJax.TeX.loadComplete("config.js"); MathJax.InputJax.TeX=MathJax.InputJax({id:"TeX",version:"1.1.9",directory:MathJax.InputJax.directory+"/TeX",extensionDir:MathJax.InputJax.extensionDir+"/TeX",config:{TagSide:"right",TagIndent:"0.8em",MultLineWidth:"85%"}});MathJax.InputJax.TeX.Register("math/tex");MathJax.InputJax.TeX.loadComplete("config.js");

File diff suppressed because one or more lines are too long

View File

@ -12,5 +12,5 @@
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
*/ */
MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function(){var g="1.1.2";var c=MathJax.ElementJax.mml,e=MathJax.OutputJax["HTML-CSS"];var d,f,b;var a=e.config.tooltip=MathJax.Hub.Insert({delayPost:600,delayClear:600,offsetX:10,offsetY:5},e.config.tooltip||{});c.maction.Augment({HTMLtooltip:e.addElement(document.body,"div",{id:"MathJax_Tooltip"}),toHTML:function(k,h,m){k=this.HTMLhandleSize(this.HTMLcreateSpan(k));k.bbox=null;var i=this.getValues("actiontype","selection"),n;var j=this.data[i.selection-1];if(j){e.Measured(j.toHTML(k),k);if(m!=null){e.Remeasured(j.HTMLstretchV(k,h,m),k)}else{if(h!=null){e.Remeasured(j.HTMLstretchH(k,h),k)}}if(e.msieHitBoxBug){var l=e.addElement(k,"span");n=e.createFrame(l,k.bbox.h,k.bbox.d,k.bbox.w,0,"none");k.insertBefore(l,k.firstChild);l.style.marginRight=e.Em(-k.bbox.w);if(e.msieInlineBlockAlignBug){n.style.verticalAlign=e.Em(e.getHD(k).d-k.bbox.d)}}else{n=e.createFrame(k,k.bbox.h,k.bbox.d,k.bbox.w,0,"none");k.insertBefore(n,k.firstChild);n.style.marginRight=e.Em(-k.bbox.w)}n.className="MathJax_HitBox";n.id="MathJax-HitBox-"+this.spanID;if(this.HTMLaction[i.actiontype]){this.HTMLaction[i.actiontype].call(this,k,n,i.selection)}}this.HTMLhandleSpace(k);this.HTMLhandleColor(k);return k},HTMLstretchH:c.mbase.HTMLstretchH,HTMLstretchV:c.mbase.HTMLstretchV,HTMLaction:{toggle:function(i,j,h){this.selection=h;j.onclick=i.childNodes[1].onclick=MathJax.Callback(["HTMLclick",this]);j.style.cursor=i.childNodes[1].style.cursor="pointer"},statusline:function(i,j,h){j.onmouseover=i.childNodes[1].onmouseover=MathJax.Callback(["HTMLsetStatus",this]);j.onmouseout=i.childNodes[1].onmouseout=MathJax.Callback(["HTMLclearStatus",this]);j.onmouseover.autoReset=j.onmouseout.autoReset=true},tooltip:function(i,j,h){if(this.data[1]&&this.data[1].isToken){j.title=j.alt=i.childNodes[1].title=i.childNodes[1].alt=this.data[1].data.join("")}else{j.onmouseover=i.childNodes[1].onmouseover=MathJax.Callback(["HTMLtooltipOver",this]);j.onmouseout=i.childNodes[1].onmouseout=MathJax.Callback(["HTMLtooltipOut",this]);j.onmouseover.autoReset=j.onmouseout.autoReset=true}}},HTMLclick:function(i){this.selection++;if(this.selection>this.data.length){this.selection=1}var h=this;while(h.type!=="math"){h=h.inherit}MathJax.Hub.getJaxFor(h.inputID).Update();if(!i){i=window.event}if(i.preventDefault){i.preventDefault()}if(i.stopPropagation){i.stopPropagation()}i.cancelBubble=true;i.returnValue=false;return false},HTMLsetStatus:function(h){window.status=((this.data[1]&&this.data[1].isToken)?this.data[1].data.join(""):this.data[1].toString())},HTMLclearStatus:function(h){window.status=""},HTMLtooltipOver:function(i){if(!i){i=window.event}if(b){clearTimeout(b);b=null}if(f){clearTimeout(f)}var h=i.pageX;var k=i.pageY;if(h==null){h=i.clientX+document.body.scrollLeft+document.documentElement.scrollLeft;k=i.clientY+document.body.scrollTop+document.documentElement.scrollTop}var j=MathJax.Callback(["HTMLtooltipPost",this,h+a.offsetX,k+a.offsetY]);f=setTimeout(j,a.delayPost)},HTMLtooltipOut:function(h){if(f){clearTimeout(f);f=null}if(b){clearTimeout(b)}var i=MathJax.Callback(["HTMLtooltipClear",this,80]);b=setTimeout(i,a.delayClear)},HTMLtooltipPost:function(i,m){f=null;if(b){clearTimeout(b);b=null}var l=this.HTMLtooltip;l.style.display="block";l.style.opacity="";l.style.filter=e.config.styles["#MathJax_Tooltip"].filter;if(this===d){return}l.style.left=i+"px";l.style.top=m+"px";l.innerHTML='<span class="MathJax"><nobr></nobr></span>';e.getScales(l.firstChild,l.firstChild);var h=e.createStack(l.firstChild.firstChild);var k=e.createBox(h);try{e.Measured(this.data[1].toHTML(k),k)}catch(j){if(!j.restart){throw j}l.style.display="none";MathJax.Callback.After(["HTMLtooltipPost",this,i,m],j.restart)}e.placeBox(k,0,0);e.createRule(l.firstChild.firstChild,k.bbox.h,k.bbox.d,0);d=this},HTMLtooltipClear:function(i){var h=this.HTMLtooltip;if(i<=0){h.style.display="none";h.style.opacity=h.style.filter="";b=null}else{h.style.opacity=i/100;h.style.filter="alpha(opacity="+i+")";b=setTimeout(MathJax.Callback(["HTMLtooltipClear",this,i-20]),50)}}});MathJax.Hub.Browser.Select({MSIE:function(h){e.msieHitBoxBug=true}});MathJax.Hub.Startup.signal.Post("HTML-CSS maction Ready");MathJax.Ajax.loadComplete(e.autoloadDir+"/maction.js")}); MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function(){var g="1.1.4";var c=MathJax.ElementJax.mml,e=MathJax.OutputJax["HTML-CSS"];var d,f,b;var a=e.config.tooltip=MathJax.Hub.Insert({delayPost:600,delayClear:600,offsetX:10,offsetY:5},e.config.tooltip||{});c.maction.Augment({HTMLtooltip:e.addElement(document.body,"div",{id:"MathJax_Tooltip"}),toHTML:function(k,h,m){k=this.HTMLhandleSize(this.HTMLcreateSpan(k));k.bbox=null;var i=this.getValues("actiontype","selection"),n;var j=this.data[i.selection-1];if(j){e.Measured(j.toHTML(k),k);if(m!=null){e.Remeasured(j.HTMLstretchV(k,h,m),k)}else{if(h!=null){e.Remeasured(j.HTMLstretchH(k,h),k)}}if(e.msieHitBoxBug){var l=e.addElement(k,"span",{isMathJax:true});n=e.createFrame(l,k.bbox.h,k.bbox.d,k.bbox.w,0,"none");k.insertBefore(l,k.firstChild);l.style.marginRight=e.Em(-k.bbox.w);if(e.msieInlineBlockAlignBug){n.style.verticalAlign=e.Em(e.getHD(k).d-k.bbox.d)}}else{n=e.createFrame(k,k.bbox.h,k.bbox.d,k.bbox.w,0,"none");k.insertBefore(n,k.firstChild);n.style.marginRight=e.Em(-k.bbox.w)}n.className="MathJax_HitBox";n.id="MathJax-HitBox-"+this.spanID;if(this.HTMLaction[i.actiontype]){this.HTMLaction[i.actiontype].call(this,k,n,i.selection)}}this.HTMLhandleSpace(k);this.HTMLhandleColor(k);return k},HTMLstretchH:c.mbase.HTMLstretchH,HTMLstretchV:c.mbase.HTMLstretchV,HTMLaction:{toggle:function(i,j,h){this.selection=h;j.onclick=i.childNodes[1].onclick=MathJax.Callback(["HTMLclick",this]);j.style.cursor=i.childNodes[1].style.cursor="pointer"},statusline:function(i,j,h){j.onmouseover=i.childNodes[1].onmouseover=MathJax.Callback(["HTMLsetStatus",this]);j.onmouseout=i.childNodes[1].onmouseout=MathJax.Callback(["HTMLclearStatus",this]);j.onmouseover.autoReset=j.onmouseout.autoReset=true},tooltip:function(i,j,h){if(this.data[1]&&this.data[1].isToken){j.title=j.alt=i.childNodes[1].title=i.childNodes[1].alt=this.data[1].data.join("")}else{j.onmouseover=i.childNodes[1].onmouseover=MathJax.Callback(["HTMLtooltipOver",this]);j.onmouseout=i.childNodes[1].onmouseout=MathJax.Callback(["HTMLtooltipOut",this]);j.onmouseover.autoReset=j.onmouseout.autoReset=true}}},HTMLclick:function(l){this.selection++;if(this.selection>this.data.length){this.selection=1}var k=this;while(k.type!=="math"){k=k.inherit}var h=MathJax.Hub.getJaxFor(k.inputID),j=!!h.hover;h.Update();if(j){var i=document.getElementById(h.inputID+"-Span");MathJax.Extension.MathEvents.Hover.Hover(h,i)}return MathJax.Extension.MathEvents.Event.False(l)},HTMLsetStatus:function(h){window.status=((this.data[1]&&this.data[1].isToken)?this.data[1].data.join(""):this.data[1].toString())},HTMLclearStatus:function(h){window.status=""},HTMLtooltipOver:function(i){if(!i){i=window.event}if(b){clearTimeout(b);b=null}if(f){clearTimeout(f)}var h=i.pageX;var k=i.pageY;if(h==null){h=i.clientX+document.body.scrollLeft+document.documentElement.scrollLeft;k=i.clientY+document.body.scrollTop+document.documentElement.scrollTop}var j=MathJax.Callback(["HTMLtooltipPost",this,h+a.offsetX,k+a.offsetY]);f=setTimeout(j,a.delayPost)},HTMLtooltipOut:function(h){if(f){clearTimeout(f);f=null}if(b){clearTimeout(b)}var i=MathJax.Callback(["HTMLtooltipClear",this,80]);b=setTimeout(i,a.delayClear)},HTMLtooltipPost:function(i,m){f=null;if(b){clearTimeout(b);b=null}var l=this.HTMLtooltip;l.style.display="block";l.style.opacity="";l.style.filter=e.config.styles["#MathJax_Tooltip"].filter;if(this===d){return}l.style.left=i+"px";l.style.top=m+"px";l.innerHTML='<span class="MathJax"><nobr></nobr></span>';e.getScales(l.firstChild,l.firstChild);var h=e.createStack(l.firstChild.firstChild);var k=e.createBox(h);try{e.Measured(this.data[1].toHTML(k),k)}catch(j){if(!j.restart){throw j}l.style.display="none";MathJax.Callback.After(["HTMLtooltipPost",this,i,m],j.restart)}e.placeBox(k,0,0);e.createRule(l.firstChild.firstChild,k.bbox.h,k.bbox.d,0);d=this},HTMLtooltipClear:function(i){var h=this.HTMLtooltip;if(i<=0){h.style.display="none";h.style.opacity=h.style.filter="";b=null}else{h.style.opacity=i/100;h.style.filter="alpha(opacity="+i+")";b=setTimeout(MathJax.Callback(["HTMLtooltipClear",this,i-20]),50)}}});MathJax.Hub.Browser.Select({MSIE:function(h){e.msieHitBoxBug=true}});MathJax.Hub.Startup.signal.Post("HTML-CSS maction Ready");MathJax.Ajax.loadComplete(e.autoloadDir+"/maction.js")});

File diff suppressed because one or more lines are too long

View File

@ -12,5 +12,5 @@
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
*/ */
MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function(){var c="1.1.1";var a=MathJax.ElementJax.mml,b=MathJax.OutputJax["HTML-CSS"];a.mglyph.Augment({toHTML:function(j,f){var i=j,k=this.getValues("src","width","height","valign","alt"),e;j=this.HTMLcreateSpan(j);if(k.src===""){var h=this.Get("index");if(h){f=this.HTMLgetVariant();var d=f.defaultFont;if(d){d.noStyleChar=true;d.testString=String.fromCharCode(h)+"ABCabc";if(b.Font.testFont(d)){this.HTMLhandleVariant(j,f,String.fromCharCode(h))}else{if(k.alt===""){k.alt="Bad font: "+d.family}e=a.merror(k.alt).With({mathsize:"75%"});this.Append(e);e.toHTML(j);this.data.pop();j.bbox=e.HTMLspanElement().bbox}}}}else{if(!this.img){this.img=a.mglyph.GLYPH[k.src]}if(!this.img){this.img=a.mglyph.GLYPH[k.src]={img:new Image(),status:"pending"};var g=this.img.img;g.onload=MathJax.Callback(["HTMLimgLoaded",this]);g.onerror=MathJax.Callback(["HTMLimgError",this]);g.src=k.src;MathJax.Hub.RestartAfter(g.onload)}if(this.img.status!=="OK"){e=a.merror("Bad mglyph: "+k.src).With({mathsize:"75%"});this.Append(e);e.toHTML(j);this.data.pop();j.bbox=e.HTMLspanElement().bbox}else{var l=this.HTMLgetMu(j);g=b.addElement(j,"img",{src:k.src,alt:k.alt,title:k.alt});if(k.width){if(String(k.width).match(/^\s*-?\d+\s*$/)){k.width+="px"}g.style.width=b.Em(b.length2em(k.width,l,this.img.img.width/b.em))}if(k.height){if(String(k.height).match(/^\s*-?\d+\s*$/)){k.height+="px"}g.style.height=b.Em(b.length2em(k.height,l,this.img.img.height/b.em))}j.bbox.w=j.bbox.rw=g.offsetWidth/b.em;j.bbox.h=g.offsetHeight/b.em;if(k.valign){if(String(k.valign).match(/^\s*-?\d+\s*$/)){k.valign+="px"}j.bbox.d=-b.length2em(k.valign,l,this.img.img.height/b.em);g.style.verticalAlign=b.Em(-j.bbox.d);j.bbox.h-=j.bbox.d}}}if(!i.bbox){i.bbox={w:j.bbox.w,h:j.bbox.h,d:j.bbox.d,rw:j.bbox.rw,lw:j.bbox.lw}}else{if(j.bbox){i.bbox.w+=j.bbox.w;if(i.bbox.w>i.bbox.rw){i.bbox.rw=i.bbox.w}if(j.bbox.h>i.bbox.h){i.bbox.h=j.bbox.h}if(j.bbox.d>i.bbox.d){i.bbox.d=j.bbox.d}}}this.HTMLhandleSpace(j);this.HTMLhandleColor(j);return j},HTMLimgLoaded:function(e,d){if(typeof(e)==="string"){d=e}this.img.status=(d||"OK")},HTMLimgError:function(){this.img.img.onload("error")}},{GLYPH:{}});MathJax.Hub.Startup.signal.Post("HTML-CSS mglyph Ready");MathJax.Ajax.loadComplete(b.autoloadDir+"/mglyph.js")}); MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function(){var c="1.1.1";var a=MathJax.ElementJax.mml,b=MathJax.OutputJax["HTML-CSS"];a.mglyph.Augment({toHTML:function(j,f){var i=j,k=this.getValues("src","width","height","valign","alt"),e;j=this.HTMLcreateSpan(j);if(k.src===""){var h=this.Get("index");if(h){f=this.HTMLgetVariant();var d=f.defaultFont;if(d){d.noStyleChar=true;d.testString=String.fromCharCode(h)+"ABCabc";if(b.Font.testFont(d)){this.HTMLhandleVariant(j,f,String.fromCharCode(h))}else{if(k.alt===""){k.alt="Bad font: "+d.family}e=a.merror(k.alt).With({mathsize:"75%"});this.Append(e);e.toHTML(j);this.data.pop();j.bbox=e.HTMLspanElement().bbox}}}}else{if(!this.img){this.img=a.mglyph.GLYPH[k.src]}if(!this.img){this.img=a.mglyph.GLYPH[k.src]={img:new Image(),status:"pending"};var g=this.img.img;g.onload=MathJax.Callback(["HTMLimgLoaded",this]);g.onerror=MathJax.Callback(["HTMLimgError",this]);g.src=k.src;MathJax.Hub.RestartAfter(g.onload)}if(this.img.status!=="OK"){e=a.merror("Bad mglyph: "+k.src).With({mathsize:"75%"});this.Append(e);e.toHTML(j);this.data.pop();j.bbox=e.HTMLspanElement().bbox}else{var l=this.HTMLgetMu(j);g=b.addElement(j,"img",{isMathJax:true,src:k.src,alt:k.alt,title:k.alt});if(k.width){if(String(k.width).match(/^\s*-?\d+\s*$/)){k.width+="px"}g.style.width=b.Em(b.length2em(k.width,l,this.img.img.width/b.em))}if(k.height){if(String(k.height).match(/^\s*-?\d+\s*$/)){k.height+="px"}g.style.height=b.Em(b.length2em(k.height,l,this.img.img.height/b.em))}j.bbox.w=j.bbox.rw=g.offsetWidth/b.em;j.bbox.h=g.offsetHeight/b.em;if(k.valign){if(String(k.valign).match(/^\s*-?\d+\s*$/)){k.valign+="px"}j.bbox.d=-b.length2em(k.valign,l,this.img.img.height/b.em);g.style.verticalAlign=b.Em(-j.bbox.d);j.bbox.h-=j.bbox.d}}}if(!i.bbox){i.bbox={w:j.bbox.w,h:j.bbox.h,d:j.bbox.d,rw:j.bbox.rw,lw:j.bbox.lw}}else{if(j.bbox){i.bbox.w+=j.bbox.w;if(i.bbox.w>i.bbox.rw){i.bbox.rw=i.bbox.w}if(j.bbox.h>i.bbox.h){i.bbox.h=j.bbox.h}if(j.bbox.d>i.bbox.d){i.bbox.d=j.bbox.d}}}this.HTMLhandleSpace(j);this.HTMLhandleColor(j);return j},HTMLimgLoaded:function(e,d){if(typeof(e)==="string"){d=e}this.img.status=(d||"OK")},HTMLimgError:function(){this.img.img.onload("error")}},{GLYPH:{}});MathJax.Hub.Startup.signal.Post("HTML-CSS mglyph Ready");MathJax.Ajax.loadComplete(b.autoloadDir+"/mglyph.js")});

View File

@ -12,5 +12,5 @@
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
*/ */
MathJax.OutputJax["HTML-CSS"]=MathJax.OutputJax({id:"HTML-CSS",version:"1.1.12",directory:MathJax.OutputJax.directory+"/HTML-CSS",extensionDir:MathJax.OutputJax.extensionDir+"/HTML-CSS",autoloadDir:MathJax.OutputJax.directory+"/HTML-CSS/autoload",fontDir:MathJax.OutputJax.directory+"/HTML-CSS/fonts",webfontDir:MathJax.OutputJax.fontDir+"/HTML-CSS",config:{scale:100,minScaleAdjust:50,availableFonts:["STIX","TeX"],preferredFont:"TeX",webFont:"TeX",imageFont:"TeX",undefinedFamily:"STIXGeneral,'Arial Unicode MS',serif",showMathMenu:true,styles:{".MathJax_Display":{"text-align":"center",margin:"1em 0em"},".MathJax .merror":{"background-color":"#FFFF88",color:"#CC0000",border:"1px solid #CC0000",padding:"1px 3px","font-family":"serif","font-style":"normal","font-size":"90%"},".MathJax_Preview":{color:"#888888"},"#MathJax_Tooltip":{"background-color":"InfoBackground",color:"InfoText",border:"1px solid black","box-shadow":"2px 2px 5px #AAAAAA","-webkit-box-shadow":"2px 2px 5px #AAAAAA","-moz-box-shadow":"2px 2px 5px #AAAAAA","-khtml-box-shadow":"2px 2px 5px #AAAAAA",filter:"progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')",padding:"3px 4px"}}}});if(MathJax.Hub.Browser.isMSIE&&document.documentMode>=9){delete MathJax.OutputJax["HTML-CSS"].config.styles["#MathJax_Tooltip"].filter}if(!MathJax.Hub.config.delayJaxRegistration){MathJax.OutputJax["HTML-CSS"].Register("jax/mml")}MathJax.Hub.Register.StartupHook("End Config",[function(b,c){var a=b.Insert({minBrowserVersion:{Firefox:3,Opera:9.52,MSIE:6,Chrome:0.3,Safari:2,Konqueror:4},inlineMathDelimiters:["$","$"],displayMathDelimiters:["$$","$$"],multilineDisplay:true,minBrowserTranslate:function(f){var e=b.getJaxFor(f),k=["[Math]"],j;var h=document.createElement("span",{className:"MathJax_Preview"});if(e.inputJax.id==="TeX"){if(e.root.Get("displaystyle")){j=a.displayMathDelimiters;k=[j[0]+e.originalText+j[1]];if(a.multilineDisplay){k=k[0].split(/\n/)}}else{j=a.inlineMathDelimiters;k=[j[0]+e.originalText.replace(/^\s+/,"").replace(/\s+$/,"")+j[1]]}}for(var g=0,d=k.length;g<d;g++){h.appendChild(document.createTextNode(k[g]));if(g<d-1){h.appendChild(document.createElement("br"))}}f.parentNode.insertBefore(h,f)}},(b.config["HTML-CSS"]||{}));if(b.Browser.version!=="0.0"&&!b.Browser.versionAtLeast(a.minBrowserVersion[b.Browser]||0)){c.Translate=a.minBrowserTranslate;b.Config({showProcessingMessages:false});MathJax.Message.Set("Your browser does not support MathJax",null,4000);b.Startup.signal.Post("MathJax not supported")}},MathJax.Hub,MathJax.OutputJax["HTML-CSS"]]);MathJax.OutputJax["HTML-CSS"].loadComplete("config.js"); MathJax.OutputJax["HTML-CSS"]=MathJax.OutputJax({id:"HTML-CSS",version:"1.1.13",directory:MathJax.OutputJax.directory+"/HTML-CSS",extensionDir:MathJax.OutputJax.extensionDir+"/HTML-CSS",autoloadDir:MathJax.OutputJax.directory+"/HTML-CSS/autoload",fontDir:MathJax.OutputJax.directory+"/HTML-CSS/fonts",webfontDir:MathJax.OutputJax.fontDir+"/HTML-CSS",config:{scale:100,minScaleAdjust:50,availableFonts:["STIX","TeX"],preferredFont:"TeX",webFont:"TeX",imageFont:"TeX",undefinedFamily:"STIXGeneral,'Arial Unicode MS',serif",styles:{".MathJax_Display":{"text-align":"center",margin:"1em 0em"},".MathJax .merror":{"background-color":"#FFFF88",color:"#CC0000",border:"1px solid #CC0000",padding:"1px 3px","font-family":"serif","font-style":"normal","font-size":"90%"},".MathJax_Preview":{color:"#888888"},"#MathJax_Tooltip":{"background-color":"InfoBackground",color:"InfoText",border:"1px solid black","box-shadow":"2px 2px 5px #AAAAAA","-webkit-box-shadow":"2px 2px 5px #AAAAAA","-moz-box-shadow":"2px 2px 5px #AAAAAA","-khtml-box-shadow":"2px 2px 5px #AAAAAA",filter:"progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')",padding:"3px 4px"}}}});if(MathJax.Hub.Browser.isMSIE&&document.documentMode>=9){delete MathJax.OutputJax["HTML-CSS"].config.styles["#MathJax_Tooltip"].filter}if(!MathJax.Hub.config.delayJaxRegistration){MathJax.OutputJax["HTML-CSS"].Register("jax/mml")}MathJax.Hub.Register.StartupHook("End Config",[function(b,c){var a=b.Insert({minBrowserVersion:{Firefox:3,Opera:9.52,MSIE:6,Chrome:0.3,Safari:2,Konqueror:4},inlineMathDelimiters:["$","$"],displayMathDelimiters:["$$","$$"],multilineDisplay:true,minBrowserTranslate:function(f){var e=b.getJaxFor(f),k=["[Math]"],j;var h=document.createElement("span",{className:"MathJax_Preview"});if(e.inputJax.id==="TeX"){if(e.root.Get("displaystyle")){j=a.displayMathDelimiters;k=[j[0]+e.originalText+j[1]];if(a.multilineDisplay){k=k[0].split(/\n/)}}else{j=a.inlineMathDelimiters;k=[j[0]+e.originalText.replace(/^\s+/,"").replace(/\s+$/,"")+j[1]]}}for(var g=0,d=k.length;g<d;g++){h.appendChild(document.createTextNode(k[g]));if(g<d-1){h.appendChild(document.createElement("br"))}}f.parentNode.insertBefore(h,f)}},(b.config["HTML-CSS"]||{}));if(b.Browser.version!=="0.0"&&!b.Browser.versionAtLeast(a.minBrowserVersion[b.Browser]||0)){c.Translate=a.minBrowserTranslate;b.Config({showProcessingMessages:false});MathJax.Message.Set("Your browser does not support MathJax",null,4000);b.Startup.signal.Post("MathJax not supported")}},MathJax.Hub,MathJax.OutputJax["HTML-CSS"]]);MathJax.OutputJax["HTML-CSS"].loadComplete("config.js");

View File

@ -12,5 +12,5 @@
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
*/ */
(function(b,c,a){var d="1.1";b.Register.LoadHook(c.fontDir+"/fontdata.js",function(){c.Augment({allowWebFonts:false,imgDir:c.webfontDir+"/png",imgPacked:(MathJax.isPacked?"":"/unpacked"),imgSize:["050","060","071","085",100,120,141,168,200,238,283,336,400,476],imgBaseIndex:4,imgSizeForEm:{},imgSizeForScale:{},imgZoom:1,handleImg:function(t,i,r,h,u){if(u.length){this.addText(t,u)}var s=r[5].orig;if(!s){s=r[5].orig=[r[0],r[1],r[2],r[3],r[4]]}var m=this.imgZoom;if(!t.scale){t.scale=1}var p=this.imgIndex(t.scale*m);if(p==this.imgEmWidth.length-1&&this.em*t.scale*m/this.imgEmWidth[p]>1.1){m=this.imgEmWidth[p]/(this.em*t.scale)}var q=this.imgEmWidth[p]/(this.em*(t.scale||1)*m);r[0]=s[0]*q;r[1]=s[1]*q;r[2]=s[2]*q;r[3]=s[3]*q;r[4]=s[4]*q;var k=this.imgDir+"/"+i.directory+"/"+this.imgSize[p];var l=h.toString(16).toUpperCase();while(l.length<4){l="0"+l}var j=k+"/"+l+".png";var o=r[5].img[p];var g={width:Math.floor(o[0]/m+0.5)+"px",height:Math.floor(o[1]/m+0.5)+"px"};if(o[2]){g.verticalAlign=Math.floor(-o[2]/m+0.5)+"px"}if(r[3]<0){g.marginLeft=this.Em(r[3]/1000)}if(r[4]!=r[2]){g.marginRight=this.Em((r[2]-r[4])/1000)}if(this.msieIE6){g.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+a.fileURL(j)+"', sizingMethod='scale')";j=this.directory+"/blank.gif"}this.addElement(t,"img",{src:a.fileURL(j),style:g});return""},defineImageData:function(i){for(var g in i){if(i.hasOwnProperty(g)){var h=c.FONTDATA.FONTS[g];if(h){g=i[g];for(var j in g){if(g.hasOwnProperty(j)&&h[j]){h[j][5]={img:g[j]}}}}}}},initImg:function(j){if(this.imgSizeForEm[this.em]){this.imgBaseIndex=this.imgSizeForEm[this.em]}for(var h=0,g=this.imgEmWidth.length-1;h<g;h++){if(this.em<=this.imgEmWidth[h]){break}}if(h&&this.imgEmWidth[h]-this.em>this.em-this.imgEmWidth[h-1]){h--}this.imgSizeForEm[this.em]=this.imgBaseIndex=h;this.imgZoom=this.imgBrowserZoom()},imgIndex:function(k){if(!k){return this.imgBaseIndex}if(!this.imgSizeForScale[this.em]){this.imgSizeForScale[this.em]={}}if(this.imgSizeForScale[this.em][k]){return this.imgSizeForScale[this.em][k]}var j=this.em*k;for(var h=0,g=this.imgEmWidth.length-1;h<g;h++){if(j<=this.imgEmWidth[h]){break}}if(h&&this.imgEmWidth[h]-j>j-this.imgEmWidth[h-1]){h--}this.imgSizeForScale[this.em][k]=h;return h},imgBrowserZoom:function(){return 1}});b.Browser.Select({Firefox:function(h){var g=c.addElement(document.body,"div",{style:{display:"none",visibility:"hidden",overflow:"scroll",position:"absolute",top:0,left:0,width:"200px",height:"200px",padding:0,border:0,margin:0}});var i=c.addElement(g,"div",{style:{position:"absolute",left:0,top:0,right:0,bottom:0,padding:0,border:0,margin:0}});c.Augment({imgSpaceBug:true,imgSpace:String.fromCharCode(160),imgZoomLevel:(h.isMac?{50:0.3,30:0.5,22:0.67,19:0.8,16:0.9,15:1,13:1.1,12:1.2,11:1.33,10:1.5,9:1.7,7:2,6:2.4,5:3,0:15}:{56:0.3,34:0.5,25:0.67,21:0.8,19:0.9,17:1,15:1.1,14:1.2,13:1.33,11:1.5,10:1.7,8:2,7:2.4,6:3,0:17}),imgZoomDiv:g,imgBrowserZoom:function(){var j=this.imgZoomLevel;g.style.display="";var k=(g.offsetWidth-i.offsetWidth);k=(j[k]?j[k]:j[0]/k);g.style.display="none";return k}})},Safari:function(g){c.Augment({imgBrowserZoom:function(){return 3}})},Chrome:function(g){c.Augment({imgHeightBug:true,imgBrowserZoom:function(){return 3}})},Opera:function(g){c.Augment({imgSpaceBug:true,imgSpace:String.fromCharCode(160)+String.fromCharCode(160),imgDoc:(document.compatMode=="BackCompat"?document.body:document.documentElement),imgBrowserZoom:function(){if(g.isMac){return 3}var h=this.imgDoc.clientHeight,i=Math.floor(15*h/window.innerHeight);if(this.imgDoc.clientWidth<this.imgDoc.scrollWidth-i){h+=i}return parseFloat((window.innerHeight/h).toFixed(1))}})}});var f=function(){var h=c.FONTDATA.FONTS.MathJax_Main[8212][5].img;c.imgEmWidth=[];for(var j=0,g=h.length;j<g;j++){c.imgEmWidth[j]=h[j][0]}};var e=c.imgDir+c.imgPacked;MathJax.Callback.Queue(["Require",a,e+"/imagedata.js"],f,["loadComplete",a,c.directory+"/imageFonts.js"])})})(MathJax.Hub,MathJax.OutputJax["HTML-CSS"],MathJax.Ajax); (function(b,c,a){var d="1.1.1";b.Register.LoadHook(c.fontDir+"/fontdata.js",function(){c.Augment({allowWebFonts:false,imgDir:c.webfontDir+"/png",imgPacked:(MathJax.isPacked?"":"/unpacked"),imgSize:["050","060","071","085",100,120,141,168,200,238,283,336,400,476],imgBaseIndex:4,imgSizeForEm:{},imgSizeForScale:{},imgZoom:1,handleImg:function(t,i,r,h,u){if(u.length){this.addText(t,u)}var s=r[5].orig;if(!s){s=r[5].orig=[r[0],r[1],r[2],r[3],r[4]]}var m=this.imgZoom;if(!t.scale){t.scale=1}var p=this.imgIndex(t.scale*m);if(p==this.imgEmWidth.length-1&&this.em*t.scale*m/this.imgEmWidth[p]>1.1){m=this.imgEmWidth[p]/(this.em*t.scale)}var q=this.imgEmWidth[p]/(this.em*(t.scale||1)*m);r[0]=s[0]*q;r[1]=s[1]*q;r[2]=s[2]*q;r[3]=s[3]*q;r[4]=s[4]*q;var k=this.imgDir+"/"+i.directory+"/"+this.imgSize[p];var l=h.toString(16).toUpperCase();while(l.length<4){l="0"+l}var j=k+"/"+l+".png";var o=r[5].img[p];var g={width:Math.floor(o[0]/m+0.5)+"px",height:Math.floor(o[1]/m+0.5)+"px"};if(o[2]){g.verticalAlign=Math.floor(-o[2]/m+0.5)+"px"}if(r[3]<0){g.marginLeft=this.Em(r[3]/1000)}if(r[4]!=r[2]){g.marginRight=this.Em((r[2]-r[4])/1000)}if(this.msieIE6){g.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+a.fileURL(j)+"', sizingMethod='scale')";j=this.directory+"/blank.gif"}this.addElement(t,"img",{src:a.fileURL(j),style:g,isMathJax:true});return""},defineImageData:function(i){for(var g in i){if(i.hasOwnProperty(g)){var h=c.FONTDATA.FONTS[g];if(h){g=i[g];for(var j in g){if(g.hasOwnProperty(j)&&h[j]){h[j][5]={img:g[j]}}}}}}},initImg:function(j){if(this.imgSizeForEm[this.em]){this.imgBaseIndex=this.imgSizeForEm[this.em]}for(var h=0,g=this.imgEmWidth.length-1;h<g;h++){if(this.em<=this.imgEmWidth[h]){break}}if(h&&this.imgEmWidth[h]-this.em>this.em-this.imgEmWidth[h-1]){h--}this.imgSizeForEm[this.em]=this.imgBaseIndex=h;this.imgZoom=this.imgBrowserZoom()},imgIndex:function(k){if(!k){return this.imgBaseIndex}if(!this.imgSizeForScale[this.em]){this.imgSizeForScale[this.em]={}}if(this.imgSizeForScale[this.em][k]){return this.imgSizeForScale[this.em][k]}var j=this.em*k;for(var h=0,g=this.imgEmWidth.length-1;h<g;h++){if(j<=this.imgEmWidth[h]){break}}if(h&&this.imgEmWidth[h]-j>j-this.imgEmWidth[h-1]){h--}this.imgSizeForScale[this.em][k]=h;return h},imgBrowserZoom:function(){return 1}});b.Browser.Select({Firefox:function(h){var g=c.addElement(document.body,"div",{style:{display:"none",visibility:"hidden",overflow:"scroll",position:"absolute",top:0,left:0,width:"200px",height:"200px",padding:0,border:0,margin:0}});var i=c.addElement(g,"div",{style:{position:"absolute",left:0,top:0,right:0,bottom:0,padding:0,border:0,margin:0}});c.Augment({imgSpaceBug:true,imgSpace:String.fromCharCode(160),imgZoomLevel:(h.isMac?{50:0.3,30:0.5,22:0.67,19:0.8,16:0.9,15:1,13:1.1,12:1.2,11:1.33,10:1.5,9:1.7,7:2,6:2.4,5:3,0:15}:{56:0.3,34:0.5,25:0.67,21:0.8,19:0.9,17:1,15:1.1,14:1.2,13:1.33,11:1.5,10:1.7,8:2,7:2.4,6:3,0:17}),imgZoomDiv:g,imgBrowserZoom:function(){var j=this.imgZoomLevel;g.style.display="";var k=(g.offsetWidth-i.offsetWidth);k=(j[k]?j[k]:j[0]/k);g.style.display="none";return k}})},Safari:function(g){c.Augment({imgBrowserZoom:function(){return 3}})},Chrome:function(g){c.Augment({imgHeightBug:true,imgBrowserZoom:function(){return 3}})},Opera:function(g){c.Augment({imgSpaceBug:true,imgSpace:String.fromCharCode(160)+String.fromCharCode(160),imgDoc:(document.compatMode=="BackCompat"?document.body:document.documentElement),imgBrowserZoom:function(){if(g.isMac){return 3}var h=this.imgDoc.clientHeight,i=Math.floor(15*h/window.innerHeight);if(this.imgDoc.clientWidth<this.imgDoc.scrollWidth-i){h+=i}return parseFloat((window.innerHeight/h).toFixed(1))}})}});var f=function(){var h=c.FONTDATA.FONTS.MathJax_Main[8212][5].img;c.imgEmWidth=[];for(var j=0,g=h.length;j<g;j++){c.imgEmWidth[j]=h[j][0]}};var e=c.imgDir+c.imgPacked;MathJax.Callback.Queue(["Require",a,e+"/imagedata.js"],f,["loadComplete",a,c.directory+"/imageFonts.js"])})})(MathJax.Hub,MathJax.OutputJax["HTML-CSS"],MathJax.Ajax);

File diff suppressed because one or more lines are too long

View File

@ -12,5 +12,5 @@
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
*/ */
MathJax.OutputJax.NativeMML=MathJax.OutputJax({id:"NativeMML",version:"1.1.6",directory:MathJax.OutputJax.directory+"/NativeMML",extensionDir:MathJax.OutputJax.extensionDir+"/NativeMML",config:{scale:100,showMathMenu:true,showMathMenuMSIE:true,styles:{"DIV.MathJax_MathML":{"text-align":"center",margin:".75em 0px"}}}});if(!MathJax.Hub.config.delayJaxRegistration){MathJax.OutputJax.NativeMML.Register("jax/mml")}MathJax.OutputJax.NativeMML.loadComplete("config.js"); MathJax.OutputJax.NativeMML=MathJax.OutputJax({id:"NativeMML",version:"1.1.9",directory:MathJax.OutputJax.directory+"/NativeMML",extensionDir:MathJax.OutputJax.extensionDir+"/NativeMML",config:{scale:100,styles:{"DIV.MathJax_MathML":{"text-align":"center",margin:".75em 0px"}}}});if(!MathJax.Hub.config.delayJaxRegistration){MathJax.OutputJax.NativeMML.Register("jax/mml")}MathJax.OutputJax.NativeMML.loadComplete("config.js");

File diff suppressed because one or more lines are too long

View File

@ -30,7 +30,7 @@ if (!window.MathJax) {window.MathJax= {}}
if (!MathJax.Hub) { // skip if already loaded if (!MathJax.Hub) { // skip if already loaded
MathJax.version = "1.1a"; MathJax.version = "1.1a";
MathJax.fileversion = "1.1.12"; MathJax.fileversion = "1.1.13";
/**********************************************************/ /**********************************************************/
@ -989,15 +989,17 @@ MathJax.HTML = {
match = keys[i].match(/([^:]+):(.*)/); match = keys[i].match(/([^:]+):(.*)/);
var value = match[2].replace(/&&/g,'&'); var value = match[2].replace(/&&/g,'&');
if (value === "true") {value = true} else if (value === "false") {value = false} if (value === "true") {value = true} else if (value === "false") {value = false}
else if (value.match(/^-?(\d+(\.\d+)?|\.\d+)$/)) {value = parseFloat(value)} else if (value.match(/^-?(\d+(\.\d+)?|\.\d+)$/)) {value = parseFloat(value)}
obj[match[1]] = value; obj[match[1]] = value;
} }
} }
return obj; return obj;
} }
} }
}; };
/**********************************************************/ /**********************************************************/
MathJax.Message = { MathJax.Message = {
@ -1189,17 +1191,21 @@ MathJax.Hub = {
"v1.0-compatible": true, // set to false to prevent loading of default configuration file "v1.0-compatible": true, // set to false to prevent loading of default configuration file
elements: [], // array of elements to process when none is given explicitly elements: [], // array of elements to process when none is given explicitly
showMathMenu: true, // attach math context menu to mathml?
showMathMenuMSIE: true, // separtely determine if MSIE should have math menu
// (since the code for that is a bit delicate)
preProcessors: [], // list of callbacks for preprocessing (initialized by extensions) preProcessors: [], // list of callbacks for preprocessing (initialized by extensions)
inputJax: {}, // mime-type mapped to input jax (by registration) inputJax: {}, // mime-type mapped to input jax (by registration)
outputJax: {order:{}}, // mime-type mapped to output jax list (by registration) outputJax: {order:{}}, // mime-type mapped to output jax list (by registration)
menuSettings: { menuSettings: {
//format: "MathML", // the Show Source format (set in MathMenu.js)
zoom: "None", // when to do MathZoom zoom: "None", // when to do MathZoom
CTRL: false, // require CTRL for MathZoom? CTRL: false, // require CTRL for MathZoom?
ALT: false, // require Alt or Option? ALT: false, // require Alt or Option?
CMD: false, // require CMD? CMD: false, // require CMD?
Shift: false, // require Shift? Shift: false, // require Shift?
discoverable: false, // make math menu discoverable on hover?
zscale: "200%", // the scaling factor for MathZoom zscale: "200%", // the scaling factor for MathZoom
renderer: "", // set when Jax are loaded renderer: "", // set when Jax are loaded
font: "Auto", // what font HTML-CSS should use font: "Auto", // what font HTML-CSS should use
@ -1364,8 +1370,12 @@ MathJax.Hub = {
for (var i = 0, m = scripts.length; i < m; i++) { for (var i = 0, m = scripts.length; i < m; i++) {
var script = scripts[i]; var script = scripts[i];
if (script.type && this.config.inputJax[script.type.replace(/ *;(.|\n)*/,"")]) { if (script.type && this.config.inputJax[script.type.replace(/ *;(.|\n)*/,"")]) {
if (script.MathJax && script.MathJax.state !== STATE.PENDING) if (script.MathJax) {
{this.scriptAction[action](script)} if (script.MathJax.elementJax && script.MathJax.elementJax.hover) {
MathJax.Extension.MathEvents.Hover.ClearHover(script.MathJax.elementJax);
}
if (script.MathJax.state !== STATE.PENDING) {this.scriptAction[action](script)}
}
if (!script.MathJax) {script.MathJax = {state: STATE.PENDING}} if (!script.MathJax) {script.MathJax = {state: STATE.PENDING}}
if (script.MathJax.state !== STATE.PROCESSED) {math.push(script)} if (script.MathJax.state !== STATE.PROCESSED) {math.push(script)}
} }
@ -1858,7 +1868,7 @@ MathJax.Hub.Startup = {
} }
},{ },{
id: "InputJax", id: "InputJax",
version: "1.1", version: "1.1.1",
directory: JAX.directory+"/input", directory: JAX.directory+"/input",
extensionDir: JAX.extensionDir extensionDir: JAX.extensionDir
}); });
@ -1881,10 +1891,11 @@ MathJax.Hub.Startup = {
Remove: function (jax) {} Remove: function (jax) {}
},{ },{
id: "OutputJax", id: "OutputJax",
version: "1.1", version: "1.1.1",
directory: JAX.directory+"/output", directory: JAX.directory+"/output",
extensionDir: JAX.extensionDir, extensionDir: JAX.extensionDir,
fontDir: ROOT+(BASE.isPacked?"":"/..")+"/fonts" fontDir: ROOT+(BASE.isPacked?"":"/..")+"/fonts",
imageDir: ROOT+(BASE.isPacked?"":"/..")+"/images"
}); });
/***********************************/ /***********************************/
@ -1916,6 +1927,7 @@ MathJax.Hub.Startup = {
return HUB.Process(script,callback); return HUB.Process(script,callback);
}, },
Remove: function () { Remove: function () {
if (this.hover) {this.hover.clear(this)}
this.outputJax.Remove(this); this.outputJax.Remove(this);
HUB.signal.Post(["Remove Math",this.inputID]); // wait for this to finish? HUB.signal.Post(["Remove Math",this.inputID]); // wait for this to finish?
this.Detach(); this.Detach();
@ -1955,7 +1967,7 @@ MathJax.Hub.Startup = {
} }
},{ },{
id: "ElementJax", id: "ElementJax",
version: "1.1", version: "1.1.1",
directory: JAX.directory+"/element", directory: JAX.directory+"/element",
extensionDir: JAX.extensionDir, extensionDir: JAX.extensionDir,
ID: 0, // jax counter (for IDs) ID: 0, // jax counter (for IDs)
@ -2061,6 +2073,8 @@ MathJax.Hub.Startup = {
else if (v > 500) {browser.version = "3.0"} else if (v > 500) {browser.version = "3.0"}
else if (v > 400) {browser.version = "2.0"} else if (v > 400) {browser.version = "2.0"}
else if (v > 85) {browser.version = "1.0"} else if (v > 85) {browser.version = "1.0"}
browser.isMobile = (navigator.appVersion.match(/Mobile/i) != null);
browser.noContextMenu = browser.isMobile;
}, },
Firefox: function (browser) { Firefox: function (browser) {
if (browser.version === "0.0" && navigator.product === "Gecko" && navigator.productSub) { if (browser.version === "0.0" && navigator.product === "Gecko" && navigator.productSub) {
@ -2069,6 +2083,8 @@ MathJax.Hub.Startup = {
else if (date >= "20080617") {browser.version = "3.0"} else if (date >= "20080617") {browser.version = "3.0"}
else if (date >= "20061024") {browser.version = "2.0"} else if (date >= "20061024") {browser.version = "2.0"}
} }
browser.isMobile = (navigator.appVersion.match(/Android/i) != null ||
navigator.userAgent.match(/ Fennec\//) != null);
}, },
Opera: function (browser) {browser.version = opera.version()}, Opera: function (browser) {browser.version = opera.version()},
MSIE: function (browser) { MSIE: function (browser) {

View File

@ -0,0 +1,525 @@
/*************************************************************
*
* MathJax/extensions/MathEvents.js
*
* Implements the event handlers needed by the output jax to perform
* menu, hover, and other events.
*
* ---------------------------------------------------------------------
*
* Copyright (c) 2011 Design Science, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function (HUB,HTML,AJAX,CALLBACK,OUTPUT,INPUT) {
var VERSION = "1.1";
var EXTENSION = MathJax.Extension;
var ME = EXTENSION.MathEvents = {version: VERSION};
var SETTINGS = HUB.config.menuSettings;
var CONFIG = {
hover: 500, // time required to be considered a hover
frame: {
x: 3.5, y: 5, // frame padding and
bwidth: 1, // frame border width (in pixels)
bcolor: "#A6D", // frame border color
hwidth: "15px", // haze width
hcolor: "#83A" // haze color
},
button: {
x: -4, y: -3, // menu button offsets
wx: -2, // button offset for full-width equations
src: AJAX.fileURL(OUTPUT.imageDir+"/MenuArrow-15.png") // button image
},
fadeinInc: .2, // increment for fade-in
fadeoutInc: .05, // increment for fade-out
fadeDelay: 50, // delay between fade-in or fade-out steps
fadeoutStart: 400, // delay before fade-out after mouseout
fadeoutDelay: 15*1000, // delay before automatic fade-out
styles: {
".MathJax_Hover_Frame": {
"border-radius": ".25em", // Opera 10.5 and IE9
"-webkit-border-radius": ".25em", // Safari and Chrome
"-moz-border-radius": ".25em", // Firefox
"-khtml-border-radius": ".25em", // Konqueror
"box-shadow": "0px 0px 15px #83A", // Opera 10.5 and IE9
"-webkit-box-shadow": "0px 0px 15px #83A", // Safari and Chrome
"-moz-box-shadow": "0px 0px 15px #83A", // Forefox
"-khtml-box-shadow": "0px 0px 15px #83A", // Konqueror
border: "1px solid #A6D ! important",
display: "inline-block", position:"absolute"
},
".MathJax_Hover_Arrow": {
position:"absolute",
width:"15px", height:"11px",
cursor:"pointer"
}
}
};
//
// Common event-handling code
//
var EVENT = ME.Event = {
LEFTBUTTON: 0, // the event.button value for left button
RIGHTBUTTON: 2, // the event.button value for right button
MENUKEY: "altKey", // the event value for alternate context menu
Mousedown: function (event) {return EVENT.Handler(event,"Mousedown",this)},
Mouseup: function (event) {return EVENT.Handler(event,"Mouseup",this)},
Mousemove: function (event) {return EVENT.Handler(event,"Mousemove",this)},
Mouseover: function (event) {return EVENT.Handler(event,"Mouseover",this)},
Mouseout: function (event) {return EVENT.Handler(event,"Mouseout",this)},
Click: function (event) {return EVENT.Handler(event,"Click",this)},
DblClick: function (event) {return EVENT.Handler(event,"DblClick",this)},
Menu: function (event) {return EVENT.Handler(event,"ContextMenu",this)},
//
// Call the output jax's event handler or the zoom handler
//
Handler: function (event,type,math) {
if (AJAX.loadingMathMenu) {return False(event)}
var jax = OUTPUT[math.jaxID];
if (!event) {event = window.event}
event.isContextMenu = (type === "ContextMenu");
if (jax[type]) {return jax[type](event,math)}
if (EXTENSION.MathZoom) {return EXTENSION.MathZoom.HandleEvent(event,type,math)}
},
//
// Try to cancel the event in every way we can
//
False: function (event) {
if (!event) {event = window.event}
if (event) {
if (event.preventDefault) {event.preventDefault()}
if (event.stopPropagation) {event.stopPropagation()}
event.cancelBubble = true;
event.returnValue = false;
}
return false;
},
//
// Load the contextual menu code, if needed, and post the menu
//
ContextMenu: function (event,math,force) {
//
// Check if we are showing menus
//
var JAX = OUTPUT[math.jaxID], jax = JAX.getJaxFromMath(math);
var show = (JAX.config.showMathMenu != null ? JAX : HUB).config.showMathMenu;
if (!show || (SETTINGS.context !== "MathJax" && !force)) return;
//
// Remove selections, remove hover fades
//
if (ME.msieEventBug) {event = window.event}
EVENT.ClearSelection(); HOVER.ClearHoverTimer();
if (jax.hover) {
if (jax.hover.remove) {clearTimeout(jax.hover.remove); delete jax.hover.remove}
jax.hover.nofade = true;
}
//
// If the menu code is loaded, post the menu
// Otherwse lad the menu code and try again
//
var MENU = MathJax.Menu;
if (MENU) {
MENU.jax = jax;
MENU.menu.Find("Show Math As").menu.items[1].name =
(INPUT[jax.inputJax.id].sourceMenuTitle||"Original Form");
return MENU.menu.Post(event);
} else {
if (!AJAX.loadingMathMenu) {
AJAX.loadingMathMenu = true;
var ev = {
pageX:event.pageX, pageY:event.pageY,
clientX:event.clientX, clientY:event.clientY
};
CALLBACK.Queue(
AJAX.Require("[MathJax]/extensions/MathMenu.js"),
function () {delete AJAX.loadingMathMenu; if (!MathJax.Menu) {MathJax.Menu = {}}},
["ContextMenu",this,ev,math,force] // call this function again
);
}
return EVENT.False(event);
}
},
//
// Mousedown handler for alternate means of accessing menu
//
AltContextMenu: function (event,math) {
var JAX = OUTPUT[math.jaxID];
var show = (JAX.config.showMathMenu != null ? JAX : HUB).config.showMathMenu;
if (show) {
if (SETTINGS.context === "MathJax") {
if (!ME.noContextMenuBug || event.button !== EVENT.RIGHTBUTTON) return;
} else {
if (!event[EVENT.MENUKEY] || event.button !== EVENT.LEFTBUTTON) return;
}
return JAX.ContextMenu(event,math,true);
}
},
ClearSelection: function () {
if (ME.safariContextMenuBug) {setTimeout("window.getSelection().empty()",0)}
if (document.selection) {setTimeout("document.selection.empty()",0)}
},
getBBox: function (span) {
span.appendChild(ME.topImg);
var h = ME.topImg.offsetTop, d = span.offsetHeight-h, w = span.offsetWidth;
span.removeChild(ME.topImg);
return {w:w, h:h, d:d};
}
};
//
// Handle hover "discoverability"
//
var HOVER = ME.Hover = {
//
// Check if we are moving from a non-MathJax element to a MathJax one
// and either start fading in again (if it is fading out) or start the
// timer for the hover
//
Mouseover: function (event,math) {
if (SETTINGS.discoverable) {
var from = event.fromElement || event.relatedTarget,
to = event.toElement || event.target;
if (from && to && from.isMathJax != to.isMathJax) {
var jax = this.getJaxFromMath(math);
if (jax.hover) {HOVER.ReHover(jax)} else {HOVER.HoverTimer(jax,math)}
return EVENT.False(event);
}
}
},
//
// Check if we are moving from a MathJax element to a non-MathJax one
// and either start fading out, or clear the timer if we haven't
// hovered yet
//
Mouseout: function (event,math) {
if (SETTINGS.discoverable) {
var from = event.fromElement || event.relatedTarget,
to = event.toElement || event.target;
if (from && to && from.isMathJax != to.isMathJax) {
var jax = this.getJaxFromMath(math);
if (jax.hover) {HOVER.UnHover(jax)} else {HOVER.ClearHoverTimer()}
return EVENT.False(event);
}
}
},
//
// Restart hover timer if the mouse moves
//
Mousemove: function (event,math) {
if (SETTINGS.discoverable) {
var jax = this.getJaxFromMath(math); if (jax.hover) return;
if (HOVER.lastX == event.clientX && HOVER.lastY == event.clientY) return;
HOVER.lastX = event.clientX; HOVER.lastY = event.clientY;
HOVER.HoverTimer(jax,math);
return EVENT.False(event);
}
},
//
// Clear the old timer and start a new one
//
HoverTimer: function (jax,math) {
this.ClearHoverTimer();
this.hoverTimer = setTimeout(CALLBACK(["Hover",this,jax,math]),CONFIG.hover);
},
ClearHoverTimer: function () {
if (this.hoverTimer) {clearTimeout(this.hoverTimer); delete this.hoverTimer}
},
//
// Handle putting up the hover frame
//
Hover: function (jax,math) {
//
// Check if Zoom handles the hover event
//
if (EXTENSION.MathZoom && EXTENSION.MathZoom.Hover({},math)) return;
//
// Get the hover data
//
var JAX = jax.outputJax,
span = JAX.getHoverSpan(jax,math),
bbox = JAX.getHoverBBox(jax,span,math),
show = (JAX.config.showMathMenu != null ? JAX : HUB).config.showMathMenu;
var dx = CONFIG.frame.x, dy = CONFIG.frame.y, dd = CONFIG.frame.bwidth; // frame size
if (ME.msieBorderWidthBug) {dd = 0}
jax.hover = {opacity:0, id:jax.inputID+"-Hover"};
//
// The frame and menu button
//
var frame = HTML.Element("span",{
id:jax.hover.id, isMathJax: true,
style:{display:"inline-block", width:0, height:0, position:"relative"}
},[["span",{
className:"MathJax_Hover_Frame", isMathJax: true,
style:{
display:"inline-block", position:"absolute",
top:this.Px(-bbox.h-dy-dd-(bbox.y||0)), left:this.Px(-dx-dd+(bbox.x||0)),
width:this.Px(bbox.w+2*dx), height:this.Px(bbox.h+bbox.d+2*dy),
opacity:0, filter:"alpha(opacity=0)"
}}
]]
);
var button = HTML.Element("span",{
isMathJax: true, id:jax.hover.id+"Menu",
style:{display:"inline-block", "z-index": 1, width:0, height:0, position:"relative"}
},[["img",{
className: "MathJax_Hover_Arrow", isMathJax: true, math: math,
src: CONFIG.button.src, onclick: this.HoverMenu, jax:JAX.id,
style: {
left:this.Px(bbox.w+dx+dd+(bbox.x||0)+CONFIG.button.x),
top:this.Px(-bbox.h-dy-dd-(bbox.y||0)-CONFIG.button.y),
opacity:0, filter:"alpha(opacity=0)"
}
}]]
);
if (bbox.width) {
frame.style.width = button.style.width = bbox.width;
frame.style.marginRight = button.style.marginRight = "-"+bbox.width;
frame.firstChild.style.width = bbox.width;
button.firstChild.style.left = "";
button.firstChild.style.right = this.Px(CONFIG.button.wx);
}
//
// Add the frame and button
//
span.parentNode.insertBefore(frame,span);
if (show) {span.parentNode.insertBefore(button,span)}
if (span.style) {span.style.position = "relative"} // so math is on top of hover frame
//
// Start the hover fade-in
//
this.ReHover(jax);
},
//
// Restart the hover fade in and fade-out timers
//
ReHover: function (jax) {
if (jax.hover.remove) {clearTimeout(jax.hover.remove)}
jax.hover.remove = setTimeout(CALLBACK(["UnHover",this,jax]),CONFIG.fadeoutDelay);
this.HoverFadeTimer(jax,CONFIG.fadeinInc);
},
//
// Start the fade-out
//
UnHover: function (jax) {
if (!jax.hover.nofade) {this.HoverFadeTimer(jax,-CONFIG.fadeoutInc,CONFIG.fadeoutStart)}
},
//
// Handle the fade-in and fade-out
//
HoverFade: function (jax) {
delete jax.hover.timer;
jax.hover.opacity = Math.max(0,Math.min(1,jax.hover.opacity + jax.hover.inc));
jax.hover.opacity = Math.floor(1000*jax.hover.opacity)/1000;
var frame = document.getElementById(jax.hover.id),
button = document.getElementById(jax.hover.id+"Menu");
frame.firstChild.style.opacity = jax.hover.opacity;
frame.firstChild.style.filter = "alpha(opacity="+Math.floor(100*jax.hover.opacity)+")";
if (button) {
button.firstChild.style.opacity = jax.hover.opacity;
button.firstChild.style.filter = frame.style.filter;
}
if (jax.hover.opacity === 1) {return}
if (jax.hover.opacity > 0) {this.HoverFadeTimer(jax,jax.hover.inc); return}
frame.parentNode.removeChild(frame);
if (button) {button.parentNode.removeChild(button)}
if (jax.hover.remove) {clearTimeout(jax.hover.remove)}
delete jax.hover;
},
//
// Set the fade to in or out (via inc) and start the timer, if needed
//
HoverFadeTimer: function (jax,inc,delay) {
jax.hover.inc = inc;
if (!jax.hover.timer) {
jax.hover.timer = setTimeout(CALLBACK(["HoverFade",this,jax]),(delay||CONFIG.fadeDelay));
}
},
//
// Handle a click on the menu button
//
HoverMenu: function (event) {
if (!event) {event = window.event}
return OUTPUT[this.jax].ContextMenu(event,this.math,true);
},
//
// Clear all hover timers
//
ClearHover: function (jax) {
if (jax.hover.remove) {clearTimeout(jax.hover.remove)}
if (jax.hover.timer) {clearTimeout(jax.hover.timer)}
HOVER.ClearHoverTimer();
delete jax.hover;
},
//
// Make a measurement in pixels
//
Px: function (m) {
if (Math.abs(m) < .006) {return "0px"}
return m.toFixed(2).replace(/\.?0+$/,"") + "px";
},
//
// Preload images so they show up with the menu
//
getImages: function () {
var menu = new Image();
menu.src = CONFIG.button.src;
}
};
//
// Handle touch events.
//
// Use double-tap-and-hold as a replacement for context menu event.
// Use double-tap as a replacement for double click.
//
var TOUCH = ME.Touch = {
last: 0, // time of last tap event
delay: 500, // delay time for double-click
//
// Check if this is a double-tap, and if so, start the timer
// for the double-tap and hold (to trigger the contextual menu)
//
start: function (event) {
var now = new Date().getTime();
var dblTap = (now - TOUCH.last < TOUCH.delay);
TOUCH.last = now;
if (dblTap) {
TOUCH.timeout = setTimeout(TOUCH.menu,TOUCH.delay,event,this);
event.preventDefault();
}
},
//
// Check if there is a timeout pending, i.e., we have a
// double-tap and were waiting to see if it is held long
// enough for the menu. Since we got the end before the
// timeout, it is a double-click, not a double-tap-and-hold.
// Prevent the default action and issue a double click.
//
end: function (event) {
if (TOUCH.timeout) {
clearTimeout(TOUCH.timeout);
delete TOUCH.timeout; TOUCH.last = 0;
event.preventDefault();
return EVENT.Handler((event.touches[0]||event.touch),"DblClick",this);
}
},
//
// If the timeout passes without an end event, we issue
// the contextual menu event.
//
menu: function (event,math) {
delete TOUCH.timeout; TOUCH.last = 0;
return EVENT.Handler((event.touches[0]||event.touch),"ContextMenu",math);
}
};
//
// Mobile screens are small, so use larger version of arrow
//
if (HUB.Browser.isMobile) {
var arrow = CONFIG.styles[".MathJax_Hover_Arrow"];
arrow.width = "25px"; arrow.height = "18px";
CONFIG.button.x = -6;
}
//
// Set up browser-specific values
//
HUB.Browser.Select({
MSIE: function (browser) {
var mode = (document.documentMode || 0);
var isIE8 = browser.versionAtLeast("8.0");
ME.msieBorderWidthBug = (document.compatMode === "BackCompat"); // borders are inside offsetWidth/Height
ME.msieEventBug = browser.isIE9; // must get event from window even though event is passed
ME.msieAlignBug = (!isIE8 || mode < 8); // inline-block spans don't rest on baseline
if (mode < 9) {EVENT.LEFTBUTTON = 1} // IE < 9 has wrong event.button values
},
Safari: function (browser) {
ME.safariContextMenuBug = true; // selection can be started by contextmenu event
},
Opera: function (browser) {
ME.operaPositionBug = true; // position is wrong unless border is used
},
Konqueror: function (browser) {
ME.noContextMenuBug = true; // doesn't produce contextmenu event
}
});
//
// Used in measuring zoom and hover positions
//
ME.topImg = (ME.msieAlignBug ?
HTML.Element("img",{style:{width:0,height:0,position:"relative"},src:"about:blank"}) :
HTML.Element("span",{style:{width:0,height:0,display:"inline-block"}})
);
if (1 || ME.operaPositionBug/* || ME.msieTopBug*/) {ME.topImg.style.border="1px solid"}
//
// Get configuration from user
//
ME.config = CONFIG = HUB.CombineConfig("MathEvents",CONFIG);
var SETFRAME = function () {
var haze = CONFIG.styles[".MathJax_Hover_Frame"];
haze.border = CONFIG.frame.bwidth+"px solid "+CONFIG.frame.bcolor+" ! important";
haze["box-shadow"] = haze["-webkit-box-shadow"] =
haze["-moz-box-shadow"] = haze["-khtml-box-shadow"] =
"0px 0px "+CONFIG.frame.hwidth+" "+CONFIG.frame.hcolor;
};
//
// Queue the events needed for startup
//
CALLBACK.Queue(
HUB.Register.StartupHook("End Config",{}), // wait until config is complete
[SETFRAME],
["getImages",HOVER],
["Styles",AJAX,CONFIG.styles],
["Post",HUB.Startup.signal,"MathEvents Ready"],
["loadComplete",AJAX,"[MathJax]/extensions/MathEvents.js"]
);
})(MathJax.Hub,MathJax.HTML,MathJax.Ajax,MathJax.Callback,MathJax.OutputJax,MathJax.InputJax);

View File

@ -23,8 +23,8 @@
* limitations under the License. * limitations under the License.
*/ */
(function (HUB,HTML,AJAX) { (function (HUB,HTML,AJAX,CALLBACK,OUTPUT) {
var VERSION = "1.1.4"; var VERSION = "1.1.8";
MathJax.Extension.MathMenu = {version: VERSION}; MathJax.Extension.MathMenu = {version: VERSION};
@ -34,6 +34,7 @@
var CONFIG = HUB.CombineConfig("MathMenu",{ var CONFIG = HUB.CombineConfig("MathMenu",{
delay: 150, // the delay for submenus delay: 150, // the delay for submenus
helpURL: "http://www.mathjax.org/help/user/", // the URL for the "MathJax Help" menu helpURL: "http://www.mathjax.org/help/user/", // the URL for the "MathJax Help" menu
closeImg: AJAX.fileURL(OUTPUT.imageDir+"/CloseX-31.png"), // image for close "X" for mobiles
showRenderer: true, // show the "Math Renderer" menu? showRenderer: true, // show the "Math Renderer" menu?
showFontMenu: false, // show the "Font Preference" menu? showFontMenu: false, // show the "Font Preference" menu?
@ -130,25 +131,22 @@
".MathJax_MenuActive": { ".MathJax_MenuActive": {
"background-color": (isPC ? "Highlight" : "#606872"), "background-color": (isPC ? "Highlight" : "#606872"),
color: (isPC ? "HighlightText" : "white") color: (isPC ? "HighlightText" : "white")
},
".MathJax_Menu_Close": {
position:"absolute",
width: "31px", height: "31px",
top:"-15px", left:"-15px"
} }
} }
}); });
/*************************************************************/ var FALSE, HOVER;
/* HUB.Register.StartupHook("MathEvents Ready",function () {
* Cancel event's default action (try everything we can) FALSE = MathJax.Extension.MathEvents.Event.False;
*/ HOVER = MathJax.Extension.MathEvents.Hover;
var FALSE = function (event) { });
if (!event) {event = window.event}
if (event) {
if (event.preventDefault) {event.preventDefault()}
if (event.stopPropagation) {event.stopPropagation()}
event.cancelBubble = true;
event.returnValue = false;
}
return false;
};
/*************************************************************/ /*************************************************************/
/* /*
* The main menu class * The main menu class
@ -170,14 +168,24 @@
if (!event) {event = window.event}; if (!event) {event = window.event};
var title = (!this.title ? null : [["div",{className: "MathJax_MenuTitle"},[this.title]]]); var title = (!this.title ? null : [["div",{className: "MathJax_MenuTitle"},[this.title]]]);
var div = document.getElementById("MathJax_MenuFrame"); var div = document.getElementById("MathJax_MenuFrame");
if (!div) {div = MENU.Background(this)} if (!div) {
div = MENU.Background(this);
delete ITEM.lastItem; delete ITEM.lastMenu;
delete MENU.skipUp;
}
var menu = HTML.addElement(div,"div",{ var menu = HTML.addElement(div,"div",{
onmouseup: MENU.Mouseup, ondblclick: this.False, onmouseup: MENU.Mouseup, ondblclick: FALSE,
ondragstart: this.False, onselectstart: this.False, oncontextmenu: this.False, ondragstart: FALSE, onselectstart: FALSE, oncontextmenu: FALSE,
menuItem: this, className: "MathJax_Menu" menuItem: this, className: "MathJax_Menu"
},title); },title);
for (var i = 0, m = this.items.length; i < m; i++) {this.items[i].Create(menu)} for (var i = 0, m = this.items.length; i < m; i++) {this.items[i].Create(menu)}
if (MENU.isMobile) {
HTML.addElement(menu,"img",{
className: "MathJax_Menu_Close", menu: parent, src: CONFIG.closeImg,
ontouchstart: MENU.Close, ontouchend: FALSE, onmousedown: MENU.Close
});
}
this.posted = true; this.posted = true;
menu.style.width = (menu.offsetWidth+2) + "px"; menu.style.width = (menu.offsetWidth+2) + "px";
@ -189,15 +197,16 @@
if (!parent) { if (!parent) {
if (x + menu.offsetWidth > document.body.offsetWidth - this.margin) if (x + menu.offsetWidth > document.body.offsetWidth - this.margin)
{x = document.body.offsetWidth - menu.offsetWidth - this.margin} {x = document.body.offsetWidth - menu.offsetWidth - this.margin}
MENU.skipUp = true; if (MENU.isMobile) {x = Math.max(5,x-Math.floor(menu.offsetWidth/2)); y -= 20}
MENU.skipUp = event.isContextMenu;
} else { } else {
var side = "left", mw = parent.offsetWidth; var side = "left", mw = parent.offsetWidth;
x = parent.offsetWidth - 2; y = 0; x = (MENU.isMobile ? 30 : mw - 2); y = 0;
while (parent && parent !== div) { while (parent && parent !== div) {
x += parent.offsetLeft; y += parent.offsetTop; x += parent.offsetLeft; y += parent.offsetTop;
parent = parent.parentNode; parent = parent.parentNode;
} }
if (x + menu.offsetWidth > document.body.offsetWidth - this.margin) if (x + menu.offsetWidth > document.body.offsetWidth - this.margin && !MENU.isMobile)
{side = "right"; x = Math.max(this.margin,x - mw - menu.offsetWidth + 6)} {side = "right"; x = Math.max(this.margin,x - mw - menu.offsetWidth + 6)}
if (!isPC) { if (!isPC) {
// in case these ever get implemented // in case these ever get implemented
@ -211,7 +220,7 @@
menu.style.left = x+"px"; menu.style.top = y+"px"; menu.style.left = x+"px"; menu.style.top = y+"px";
if (document.selection && document.selection.empty) {document.selection.empty()} if (document.selection && document.selection.empty) {document.selection.empty()}
return this.False(event); return FALSE(event);
}, },
/* /*
@ -223,24 +232,52 @@
div.parentNode.removeChild(div); div.parentNode.removeChild(div);
if (this.msieBackgroundBug) {detachEvent("onresize",MENU.Resize)} if (this.msieBackgroundBug) {detachEvent("onresize",MENU.Resize)}
} }
}, if (MENU.jax.hover) {
Mouseup: function (event,menu) { delete MENU.jax.hover.nofade;
if (MENU.skipUp) {delete MENU.skipUp} else {this.Remove(event,menu)} HOVER.UnHover(MENU.jax);
}
}, },
False: FALSE /*
* Find a named item in a menu (or submenu).
* A lsit of names means descend into submenus.
*/
Find: function (name) {
var names = [].slice.call(arguments,1);
for (var i = 0, m = this.items.length; i < m; i++) {
if (this.items[i].name === name) {
if (names.length) {
if (!this.items[i].menu) {return null}
return this.items[i].menu.Find.apply(this.items[i].menu,names);
}
return this.items[i];
}
}
return null;
}
},{ },{
config: CONFIG, config: CONFIG,
div: null, // the DOM elements for the menu and submenus div: null, // the DOM elements for the menu and submenus
Remove: function (event) {MENU.Event(event,this,"Remove")}, Close: function (event)
Mouseover: function (event) {MENU.Event(event,this,"Mouseover")}, {return MENU.Event(event,this.menu||this.parentNode,(this.menu?"Touchend":"Remove"))},
Mouseout: function (event) {MENU.Event(event,this,"Mouseout")}, Remove: function (event) {return MENU.Event(event,this,"Remove")},
Mousedown: function (event) {MENU.Event(event,this,"Mousedown")}, Mouseover: function (event) {return MENU.Event(event,this,"Mouseover")},
Mouseup: function (event) {MENU.Event(event,this,"Mouseup")}, Mouseout: function (event) {return MENU.Event(event,this,"Mouseout")},
Mousemove: function (event) {MENU.Event(event,this,"Mousemove")}, Mousedown: function (event) {return MENU.Event(event,this,"Mousedown")},
Event: function (event,menu,type) { Mouseup: function (event) {return MENU.Event(event,this,"Mouseup")},
Touchstart: function (event) {return MENU.Event(event,this,"Touchstart")},
Touchend: function (event) {return MENU.Event(event,this,"Touchend")},
Event: function (event,menu,type,force) {
if (MENU.skipMouseover && type === "Mouseover" && !force) {return FALSE(event)}
if (MENU.skipUp) {
if (type.match(/Mouseup|Touchend/)) {delete MENU.skipUp; return FALSE(event)}
if (type === "Touchstart" ||
(type === "Mousedown" && !MENU.skipMousedown)) {delete MENU.skipUp}
}
if (!event) {event = window.event} if (!event) {event = window.event}
var item = menu.menuItem; var item = menu.menuItem;
if (item && item[type]) {return item[type](event,menu)} if (item && item[type]) {return item[type](event,menu)}
@ -285,7 +322,14 @@
}, },
saveCookie: function () {HTML.Cookie.Set("menu",this.cookie)}, saveCookie: function () {HTML.Cookie.Set("menu",this.cookie)},
getCookie: function () {this.cookie = HTML.Cookie.Get("menu")} getCookie: function () {this.cookie = HTML.Cookie.Get("menu")},
//
// Preload images so they show up with the menu
//
getImages: function () {
if (MENU.isMobile) {var close = new Image(); close.src = CONFIG.closeImg}
}
}); });
@ -300,8 +344,9 @@
if (!this.hidden) { if (!this.hidden) {
var def = { var def = {
onmouseover: MENU.Mouseover, onmouseout: MENU.Mouseout, onmouseover: MENU.Mouseover, onmouseout: MENU.Mouseout,
onmouseup: MENU.Mouseup, onmousedown: this.False, onmouseup: MENU.Mouseup, onmousedown: MENU.Mousedown,
ondragstart: this.False, onselectstart: this.False, onselectend: this.False, ondragstart: FALSE, onselectstart: FALSE, onselectend: FALSE,
ontouchstart: MENU.Touchstart, ontouchend: MENU.Touchend,
className: "MathJax_MenuItem", menuItem: this className: "MathJax_MenuItem", menuItem: this
}; };
if (this.disabled) {def.className += " MathJax_MenuDisabled"} if (this.disabled) {def.className += " MathJax_MenuDisabled"}
@ -324,7 +369,7 @@
menus[m].parentNode.removeChild(menus[m]); menus[m].parentNode.removeChild(menus[m]);
m--; m--;
} }
if (this.Timer) {this.Timer(event,menu)} if (this.Timer && !MENU.isMobile) {this.Timer(event,menu)}
} }
}, },
Mouseout: function (event,menu) { Mouseout: function (event,menu) {
@ -332,7 +377,20 @@
if (this.timer) {clearTimeout(this.timer); delete this.timer} if (this.timer) {clearTimeout(this.timer); delete this.timer}
}, },
Mouseup: function (event,menu) {return this.Remove(event,menu)}, Mouseup: function (event,menu) {return this.Remove(event,menu)},
Touchstart: function (event,menu) {return this.TouchEvent(event,menu,"Mousedown")},
Touchend: function (event,menu) {return this.TouchEvent(event,menu,"Mouseup")},
TouchEvent: function (event,menu,type) {
if (this !== ITEM.lastItem) {
if (ITEM.lastMenu) {MENU.Event(event,ITEM.lastMenu,"Mouseout")}
MENU.Event(event,menu,"Mouseover",true);
ITEM.lastItem = this; ITEM.lastMenu = menu;
}
if (this.nativeTouch) {return null}
MENU.Event(event,menu,type);
return false;
},
Remove: function (event,menu) { Remove: function (event,menu) {
menu = menu.parentNode.menuItem; menu = menu.parentNode.menuItem;
return menu.Remove(event,menu); return menu.Remove(event,menu);
@ -341,8 +399,7 @@
Activate: function (menu) {this.Deactivate(menu); menu.className += " MathJax_MenuActive"}, Activate: function (menu) {this.Deactivate(menu); menu.className += " MathJax_MenuActive"},
Deactivate: function (menu) {menu.className = menu.className.replace(/ MathJax_MenuActive/,"")}, Deactivate: function (menu) {menu.className = menu.className.replace(/ MathJax_MenuActive/,"")},
With: function (def) {if (def) {HUB.Insert(this,def)}; return this}, With: function (def) {if (def) {HUB.Insert(this,def)}; return this}
False: FALSE
}); });
/*************************************************************/ /*************************************************************/
@ -356,10 +413,11 @@
this.name = name; this.action = action; this.name = name; this.action = action;
this.With(def); this.With(def);
}, },
Label: function (def,menu) {return [this.name]}, Label: function (def,menu) {return [this.name]},
Mouseup: function (event,menu) { Mouseup: function (event,menu) {
if (!this.disabled) {this.Remove(event,menu); this.action.call(this,event)} if (!this.disabled) {this.Remove(event,menu); this.action.call(this,event);}
return this.False(event); return FALSE(event);
} }
}); });
@ -377,13 +435,19 @@
this.menu = MENU.apply(MENU,[].slice.call(arguments,i)); this.menu = MENU.apply(MENU,[].slice.call(arguments,i));
}, },
Label: function (def,menu) { Label: function (def,menu) {
def.onmousemove = MENU.Mousemove; this.menu.posted = false; this.menu.posted = false;
return [this.name+" ",["span",{className:"MathJax_MenuArrow"},[this.marker]]]; return [this.name+" ",["span",{className:"MathJax_MenuArrow"},[this.marker]]];
}, },
Timer: function (event,menu) { Timer: function (event,menu) {
if (this.timer) {clearTimeout(this.timer)} if (this.timer) {clearTimeout(this.timer)}
event = {clientX: event.clientX, clientY: event.clientY}; // MSIE can't pass the event below event = {clientX: event.clientX, clientY: event.clientY}; // MSIE can't pass the event below
this.timer = setTimeout(MathJax.Callback(["Mouseup",this,event,menu]),CONFIG.delay); this.timer = setTimeout(CALLBACK(["Mouseup",this,event,menu]),CONFIG.delay);
},
Touchend: function (event,menu) {
var forceout = this.menu.posted;
var result = this.SUPER(arguments).Touchend.apply(this,arguments);
if (forceout) {this.Deactivate(menu); delete ITEM.lastItem; delete ITEM.lastMenu}
return result;
}, },
Mouseup: function (event,menu) { Mouseup: function (event,menu) {
if (!this.disabled) { if (!this.disabled) {
@ -402,7 +466,7 @@
} }
} }
} }
return this.False(event); return FALSE(event);
} }
}); });
@ -437,7 +501,7 @@
if (this.action) {this.action.call(MENU)} if (this.action) {this.action.call(MENU)}
} }
this.Remove(event,menu); this.Remove(event,menu);
return this.False(event); return FALSE(event);
} }
}); });
@ -465,7 +529,7 @@
if (this.action) {this.action.call(MENU)} if (this.action) {this.action.call(MENU)}
} }
this.Remove(event,menu); this.Remove(event,menu);
return this.False(event); return FALSE(event);
} }
}); });
@ -501,7 +565,7 @@
* Handle the ABOUT box * Handle the ABOUT box
*/ */
MENU.About = function () { MENU.About = function () {
var HTMLCSS = MathJax.OutputJax["HTML-CSS"] || {fontInUse: ""}; var HTMLCSS = OUTPUT["HTML-CSS"] || {fontInUse: ""};
var local = (HTMLCSS.webFonts ? "" : "local "), web = (HTMLCSS.webFonts ? " web" : ""); var local = (HTMLCSS.webFonts ? "" : "local "), web = (HTMLCSS.webFonts ? " web" : "");
var font = (HTMLCSS.imgFonts ? "Image" : local+HTMLCSS.fontInUse+web) + " fonts"; var font = (HTMLCSS.imgFonts ? "Image" : local+HTMLCSS.fontInUse+web) + " fonts";
var jax = ["MathJax.js v"+MathJax.fileversion,["br"]]; var jax = ["MathJax.js v"+MathJax.fileversion,["br"]];
@ -516,7 +580,7 @@
(HTMLCSS.webFonts ? " \u2014 "+HTMLCSS.allowWebFonts+" fonts" : "") (HTMLCSS.webFonts ? " \u2014 "+HTMLCSS.allowWebFonts+" fonts" : "")
]]); ]]);
MENU.About.div = MENU.Background(MENU.About); MENU.About.div = MENU.Background(MENU.About);
var about = MathJax.HTML.addElement(MENU.About.div,"div",{ var about = HTML.addElement(MENU.About.div,"div",{
id: "MathJax_About", onclick: MENU.About.Remove id: "MathJax_About", onclick: MENU.About.Remove
},[ },[
["b",{style:{fontSize:"120%"}},["MathJax"]]," v"+MathJax.version,["br"], ["b",{style:{fontSize:"120%"}},["MathJax"]]," v"+MathJax.version,["br"],
@ -542,10 +606,13 @@
if (MENU.About.div) {document.body.removeChild(MENU.About.div); delete MENU.About.div} if (MENU.About.div) {document.body.removeChild(MENU.About.div); delete MENU.About.div}
}; };
MENU.About.GetJax = function (jax,JAX,type,noTypeCheck) { MENU.About.GetJax = function (jax,JAX,type,noTypeCheck) {
var info = [];
for (var id in JAX) {if (JAX.hasOwnProperty(id) && JAX[id]) { for (var id in JAX) {if (JAX.hasOwnProperty(id) && JAX[id]) {
if ((noTypeCheck && JAX[id].version) || (JAX[id].isa && JAX[id].isa(JAX))) if ((noTypeCheck && JAX[id].version) || (JAX[id].isa && JAX[id].isa(JAX)))
{jax.push((JAX[id].id||id)+" "+type+" v"+JAX[id].version,["br"])} {info.push((JAX[id].id||id)+" "+type+" v"+JAX[id].version)}
}} }}
info.sort();
for (var i = 0, m = info.length; i < m; i++) {jax.push(info[i],["br"])}
return jax; return jax;
}; };
@ -564,21 +631,24 @@
if (!event) {event = window.event} if (!event) {event = window.event}
var EVENT = {screenX:event.screenX, screenY:event.screenY}; var EVENT = {screenX:event.screenX, screenY:event.screenY};
if (!MENU.jax) return; if (!MENU.jax) return;
if (CONFIG.settings.format === "MathML") { if (this.format === "MathML") {
var MML = MathJax.ElementJax.mml; var MML = MathJax.ElementJax.mml;
if (MML && typeof(MML.mbase.prototype.toMathML) !== "undefined") { if (MML && typeof(MML.mbase.prototype.toMathML) !== "undefined") {
// toMathML() can call MathJax.Hub.RestartAfter, so trap errors and check // toMathML() can call MathJax.Hub.RestartAfter, so trap errors and check
try {MENU.ShowSource.Text(MENU.jax.root.toMathML(),event)} catch (err) { try {MENU.ShowSource.Text(MENU.jax.root.toMathML(),event)} catch (err) {
if (!err.restart) {throw err} if (!err.restart) {throw err}
MathJax.Callback.After([this,arguments.callee,EVENT]); CALLBACK.After([this,MENU.ShowSource,EVENT]);
} }
} else if (!AJAX.loadingToMathML) { } else if (!AJAX.loadingToMathML) {
AJAX.loadingToMathML = true; AJAX.loadingToMathML = true;
MENU.ShowSource.Window(event); // WeBKit needs to open window on click event MENU.ShowSource.Window(event); // WeBKit needs to open window on click event
MathJax.Callback.Queue( CALLBACK.Queue(
AJAX.Require("[MathJax]/extensions/toMathML.js"), AJAX.Require("[MathJax]/extensions/toMathML.js"),
function () {delete AJAX.loadingToMathML}, function () {
[this,arguments.callee,EVENT] // call this function again delete AJAX.loadingToMathML;
if (!MML.mbase.prototype.toMathML) {MML.mbase.prototype.toMathML = function () {}}
},
[this,MENU.ShowSource,EVENT] // call this function again
); );
return; return;
} }
@ -599,19 +669,29 @@
var w = MENU.ShowSource.Window(event); var w = MENU.ShowSource.Window(event);
text = text.replace(/^\s*/,"").replace(/\s*$/,""); text = text.replace(/^\s*/,"").replace(/\s*$/,"");
text = text.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"); text = text.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
w.document.open(); if (MENU.isMobile) {
w.document.write("<html><head><title>MathJax Equation Source</title></head><body style='font-size:85%'>"); w.document.open();
w.document.write("<table><tr><td><pre>"+text+"</pre></td></tr></table>"); w.document.write("<html><head><meta name='viewport' content='width=device-width, initial-scale=1.0' /><title>MathJax Equation Source</title></head><body style='font-size:85%'>");
w.document.write("</body></html>"); w.document.close(); w.document.write("<pre>"+text+"</pre>");
var table = w.document.body.firstChild; w.document.write("<hr><input type='button' value='Close' onclick='window.close()' />");
var H = (w.outerHeight-w.innerHeight)||30, W = (w.outerWidth-w.innerWidth)||30; w.document.write("</body></html>");
W = Math.min(Math.floor(.5*screen.width),table.offsetWidth+W+25); w.document.close();
H = Math.min(Math.floor(.5*screen.height),table.offsetHeight+H+25); } else {
w.resizeTo(W,H); w.document.open();
if (event && event.screenX != null) { w.document.write("<html><head><title>MathJax Equation Source</title></head><body style='font-size:85%'>");
var x = Math.max(0,Math.min(event.screenX-Math.floor(W/2), screen.width-W-20)), w.document.write("<table><tr><td><pre>"+text+"</pre></td></tr></table>");
y = Math.max(0,Math.min(event.screenY-Math.floor(H/2), screen.height-H-20)); w.document.write("</body></html>");
w.moveTo(x,y); w.document.close();
var table = w.document.body.firstChild;
var H = (w.outerHeight-w.innerHeight)||30, W = (w.outerWidth-w.innerWidth)||30;
W = Math.min(Math.floor(.5*screen.width),table.offsetWidth+W+25);
H = Math.min(Math.floor(.5*screen.height),table.offsetHeight+H+25);
w.resizeTo(W,H);
if (event && event.screenX != null) {
var x = Math.max(0,Math.min(event.screenX-Math.floor(W/2), screen.width-W-20)),
y = Math.max(0,Math.min(event.screenY-Math.floor(H/2), screen.height-H-20));
w.moveTo(x,y);
}
} }
delete MENU.ShowSource.w; delete MENU.ShowSource.w;
}; };
@ -620,7 +700,7 @@
* Handle rescaling all the math * Handle rescaling all the math
*/ */
MENU.Scale = function () { MENU.Scale = function () {
var HTMLCSS = MathJax.OutputJax["HTML-CSS"], nMML = MathJax.OutputJax.NativeMML; var HTMLCSS = OUTPUT["HTML-CSS"], nMML = OUTPUT.NativeMML;
var SCALE = (HTMLCSS ? HTMLCSS.config.scale : nMML.config.scale); var SCALE = (HTMLCSS ? HTMLCSS.config.scale : nMML.config.scale);
var scale = prompt("Scale all mathematics (compared to surrounding text) by",SCALE+"%"); var scale = prompt("Scale all mathematics (compared to surrounding text) by",SCALE+"%");
if (scale) { if (scale) {
@ -651,11 +731,11 @@
MENU.Renderer = function () { MENU.Renderer = function () {
var jax = HUB.config.outputJax["jax/mml"]; var jax = HUB.config.outputJax["jax/mml"];
if (jax[0] !== CONFIG.settings.renderer) { if (jax[0] !== CONFIG.settings.renderer) {
MathJax.Callback.Queue( CALLBACK.Queue(
["Require",AJAX,"[MathJax]/jax/output/"+CONFIG.settings.renderer+"/config.js"], ["Require",AJAX,"[MathJax]/jax/output/"+CONFIG.settings.renderer+"/config.js"],
["Post",HUB.Startup.signal,CONFIG.settings.renderer+" output selected"], ["Post",HUB.Startup.signal,CONFIG.settings.renderer+" output selected"],
[function () { [function () {
var JAX = MathJax.OutputJax[CONFIG.settings.renderer]; var JAX = OUTPUT[CONFIG.settings.renderer];
for (var i = 0, m = jax.length; i < m; i++) for (var i = 0, m = jax.length; i < m; i++)
{if (jax[i] === JAX) {jax.splice(i,1); break}} {if (jax[i] === JAX) {jax.splice(i,1); break}}
jax.unshift(JAX); jax.unshift(JAX);
@ -669,7 +749,7 @@
* Handle setting the HTMLCSS fonts * Handle setting the HTMLCSS fonts
*/ */
MENU.Font = function () { MENU.Font = function () {
var HTMLCSS = MathJax.OutputJax["HTML-CSS"]; if (!HTMLCSS) return; var HTMLCSS = OUTPUT["HTML-CSS"]; if (!HTMLCSS) return;
document.location.reload(); document.location.reload();
}; };
@ -689,8 +769,14 @@
delete CONFIG.styles["#MathJax_About"].filter; delete CONFIG.styles["#MathJax_About"].filter;
delete CONFIG.styles[".MathJax_Menu"].filter; delete CONFIG.styles[".MathJax_Menu"].filter;
} }
},
Firefox: function (browser) {
MENU.skipMouseover = browser.isMobile && browser.versionAtLeast("6.0");
MENU.skipMousedown = browser.isMobile;
} }
}); });
MENU.isMobile = HUB.Browser.isMobile;
MENU.noContextMenu = HUB.Browser.noContextMenu;
/*************************************************************/ /*************************************************************/
@ -702,8 +788,6 @@
* it wasn't set in the cookie. * it wasn't set in the cookie.
*/ */
CONFIG.settings = HUB.config.menuSettings; CONFIG.settings = HUB.config.menuSettings;
if (!CONFIG.settings.format)
{CONFIG.settings.format = (MathJax.InputJax.TeX ? "Original" : "MathML")}
if (typeof(CONFIG.settings.showRenderer) !== "undefined") {CONFIG.showRenderer = CONFIG.settings.showRenderer} if (typeof(CONFIG.settings.showRenderer) !== "undefined") {CONFIG.showRenderer = CONFIG.settings.showRenderer}
if (typeof(CONFIG.settings.showFontMenu) !== "undefined") {CONFIG.showFontMenu = CONFIG.settings.showFontMenu} if (typeof(CONFIG.settings.showFontMenu) !== "undefined") {CONFIG.showFontMenu = CONFIG.settings.showFontMenu}
if (typeof(CONFIG.settings.showContext) !== "undefined") {CONFIG.showContext = CONFIG.settings.showContext} if (typeof(CONFIG.settings.showContext) !== "undefined") {CONFIG.showContext = CONFIG.settings.showContext}
@ -713,13 +797,12 @@
* The main menu * The main menu
*/ */
MENU.menu = MENU( MENU.menu = MENU(
ITEM.COMMAND("Show Source",MENU.ShowSource), ITEM.SUBMENU("Show Math As",
ITEM.SUBMENU("Format", ITEM.COMMAND("MathML Code", MENU.ShowSource, {nativeTouch: true, format: "MathML"}),
ITEM.RADIO("MathML", "format"), ITEM.COMMAND("Original Form", MENU.ShowSource, {nativeTouch: true})
ITEM.RADIO("Original", "format", {value: "Original"})
), ),
ITEM.RULE(), ITEM.RULE(),
ITEM.SUBMENU("Settings", ITEM.SUBMENU("Math Settings",
ITEM.SUBMENU("Zoom Trigger", ITEM.SUBMENU("Zoom Trigger",
ITEM.RADIO("Hover", "zoom", {action: MENU.Zoom}), ITEM.RADIO("Hover", "zoom", {action: MENU.Zoom}),
ITEM.RADIO("Click", "zoom", {action: MENU.Zoom}), ITEM.RADIO("Click", "zoom", {action: MENU.Zoom}),
@ -761,7 +844,9 @@
ITEM.RADIO("MathJax", "context"), ITEM.RADIO("MathJax", "context"),
ITEM.RADIO("Browser", "context") ITEM.RADIO("Browser", "context")
), ),
ITEM.COMMAND("Scale All Math ...",MENU.Scale) ITEM.COMMAND("Scale All Math ...",MENU.Scale),
ITEM.RULE().With({hidden: true}),
ITEM.CHECKBOX("Highlight on Hover", "discoverable", {hidden: true})
), ),
ITEM.RULE(), ITEM.RULE(),
ITEM.COMMAND("About MathJax",MENU.About), ITEM.COMMAND("About MathJax",MENU.About),
@ -772,23 +857,39 @@
MENU.showRenderer = function (show) { MENU.showRenderer = function (show) {
MENU.cookie.showRenderer = CONFIG.showRenderer = show; MENU.saveCookie(); MENU.cookie.showRenderer = CONFIG.showRenderer = show; MENU.saveCookie();
MENU.menu.items[3].menu.item[3].hidden = !show; MENU.menu.Find("Math Settings","Math Renderer").hidden = !show;
}; };
MENU.showFontMenu = function (show) { MENU.showFontMenu = function (show) {
MENU.cookie.showFontMenu = CONFIG.showFontMenu = show; MENU.saveCookie(); MENU.cookie.showFontMenu = CONFIG.showFontMenu = show; MENU.saveCookie();
MENU.menu.items[3].menu.items[4].hidden = !show MENU.menu.Find("Math Settings","Font Preference").hidden = !show;
}; };
MENU.showContext = function (show) { MENU.showContext = function (show) {
MENU.cookie.showContext = CONFIG.showContext = show; MENU.saveCookie(); MENU.cookie.showContext = CONFIG.showContext = show; MENU.saveCookie();
MENU.menu.items[3].menu.items[5].hidden = !show MENU.menu.Find("Math Settings","Contextual Menu").hidden = !show;
}; };
if (MENU.isMobile) {
(function () {
var settings = CONFIG.settings;
var trigger = MENU.menu.Find("Math Settings","Zoom Trigger").menu;
trigger.items[0].disabled = trigger.items[1].disabled = true;
if (settings.zoom === "Hover" || settings.zoom == "Click") {settings.zoom = "None"}
trigger.items = trigger.items.slice(0,4);
if (navigator.appVersion.match(/[ (]Android[) ]/)) {
MENU.ITEM.SUBMENU.Augment({marker: "\u00BB"});
}
})();
}
/*************************************************************/ /*************************************************************/
MathJax.Callback.Queue( CALLBACK.Queue(
HUB.Register.StartupHook("End Config",{}), // wait until config is complete
["getImages",MENU],
["Styles",AJAX,CONFIG.styles], ["Styles",AJAX,CONFIG.styles],
["Post",HUB.Startup.signal,"MathMenu Ready"], ["Post",HUB.Startup.signal,"MathMenu Ready"],
["loadComplete",AJAX,"[MathJax]/extensions/MathMenu.js"] ["loadComplete",AJAX,"[MathJax]/extensions/MathMenu.js"]
); );
})(MathJax.Hub,MathJax.HTML,MathJax.Ajax); })(MathJax.Hub,MathJax.HTML,MathJax.Ajax,MathJax.CallBack,MathJax.OutputJax);

View File

@ -23,11 +23,9 @@
*/ */
(function (HUB,HTML,AJAX,HTMLCSS,nMML) { (function (HUB,HTML,AJAX,HTMLCSS,nMML) {
var VERSION = "1.1"; var VERSION = "1.1.3";
var CONFIG = HUB.CombineConfig("MathZoom",{ var CONFIG = HUB.CombineConfig("MathZoom",{
delay: 400, // mouse must be still this long (milliseconds)
styles: { styles: {
// //
// The styles for the MathZoom display box // The styles for the MathZoom display box
@ -53,40 +51,39 @@
position:"absolute", left:0, top:0, "z-index":300, display:"inline-block", position:"absolute", left:0, top:0, "z-index":300, display:"inline-block",
width:"100%", height:"100%", border:0, padding:0, margin:0, width:"100%", height:"100%", border:0, padding:0, margin:0,
"background-color":"white", opacity:0, filter:"alpha(opacity=0)" "background-color":"white", opacity:0, filter:"alpha(opacity=0)"
},
"#MathJax_ZoomEventTrap": {
position:"absolute", left:0, top:0, "z-index":302,
display:"inline-block", border:0, padding:0, margin:0,
"background-color":"white", opacity:0, filter:"alpha(opacity=0)"
} }
} }
}); });
/*************************************************************/ var FALSE, HOVER, EVENT;
/* MathJax.Hub.Register.StartupHook("MathEvents Ready",function () {
* Cancel event's default action (try everything we can) EVENT = MathJax.Extension.MathEvents.Event;
*/ FALSE = MathJax.Extension.MathEvents.Event.False;
var FALSE = function (event) { HOVER = MathJax.Extension.MathEvents.Hover;
if (!event) {event = window.event} });
if (event) {
if (event.preventDefault) {event.preventDefault()}
if (event.stopPropagation) {event.stopPropagation()}
event.cancelBubble = true;
event.returnValue = false;
}
return false;
};
/*************************************************************/ /*************************************************************/
var ZOOM = MathJax.Extension.MathZoom = { var ZOOM = MathJax.Extension.MathZoom = {
version: VERSION, version: VERSION,
settings: HUB.config.menuSettings, settings: HUB.config.menuSettings,
scrollSize: 18, // width of scrool bars
// //
// Used to override HTMLCSS or nMML method of the same name // Process events passed from output jax
// //
HandleEvent: function (event,type,math) { HandleEvent: function (event,type,math) {
if (!event) {event = window.event}
if (ZOOM.settings.CTRL && !event.ctrlKey) return true; if (ZOOM.settings.CTRL && !event.ctrlKey) return true;
if (ZOOM.settings.ALT && !event.altKey) return true; if (ZOOM.settings.ALT && !event.altKey) return true;
if (ZOOM.settings.CMD && !event.metaKey) return true; if (ZOOM.settings.CMD && !event.metaKey) return true;
if (ZOOM.settings.Shift && !event.shiftKey) return true; if (ZOOM.settings.Shift && !event.shiftKey) return true;
if (!ZOOM[type]) return true;
return ZOOM[type](event,math); return ZOOM[type](event,math);
}, },
@ -94,63 +91,40 @@
// Zoom on click // Zoom on click
// //
Click: function (event,math) { Click: function (event,math) {
if (this.settings.zoom === "Click") {return this.Zoom(math,event)} if (this.settings.zoom === "Click") {return this.Zoom(event,math)}
}, },
// //
// Zoom on double click // Zoom on double click
// //
DblClick: function (event,math) { DblClick: function (event,math) {
if (this.settings.zoom === "Double-Click") {return this.Zoom(math,event)} if (this.settings.zoom === "Double-Click") {return this.Zoom(event,math)}
}, },
// //
// Zoom on hover // Zoom on hover (called by UI.Hover)
// //
Mouseover: function (event,math) { Hover: function (event,math) {
if (this.settings.zoom === "Hover") { if (this.settings.zoom === "Hover") {this.Zoom(event,math); return true}
ZOOM.oldMouseOver = math.onmouseover; return false;
math.onmouseover = null;
math.onmousemove = this.Mousemove;
math.onmouseout = this.Mouseout;
return ZOOM.Timer(event,math);
}
},
Mouseout: function (event) {
this.onmouseover = ZOOM.oldMouseOver; delete ZOOM.oldMouseOver;
this.onmousemove = this.onmouseout = null;
ZOOM.ClearTimer();
return FALSE(event);
},
Mousemove: function (event) {
return ZOOM.Timer(event||window.event,this);
},
Timer: function (event,math) {
this.ClearTimer();
this.timer = setTimeout(MathJax.Callback(["Zoom",this,math,{}]),CONFIG.delay);
return FALSE(event);
},
ClearTimer: function () {
if (this.timer) {clearTimeout(this.timer); delete this.timer}
}, },
// //
// Handle the actual zooming // Handle the actual zooming
// //
Zoom: function (math,event) { Zoom: function (event,math) {
this.ClearTimer(); this.Remove();
// //
// Find the jax and its type // Remove any other zoom and clear timers
// //
var parent = math.parentNode; this.Remove(); HOVER.ClearHoverTimer(); EVENT.ClearSelection();
if (parent.className === "MathJax_MathContainer") {parent = parent.parentNode}
if (parent.parentNode.className === "MathJax_MathContainer") {parent = parent.parentNode.parentNode} //
var script = (String(parent.className).match(/^MathJax_(MathML|Display)$/) ? parent : math).nextSibling; // Find the jax
var jax = HUB.getJaxFor(script), root = jax.root; //
var JAX = (HTMLCSS && jax.outputJax.isa(HTMLCSS.constructor) ? "HTMLCSS" : var JAX = MathJax.OutputJax[math.jaxID];
(nMML && jax.outputJax.isa(nMML.constructor) ? "MathML" : null)); var jax = JAX.getJaxFromMath(math), root = jax.root;
if (!JAX) return; // FIXME: report an error? if (jax.hover) {HOVER.UnHover(jax)}
// //
// Create the DOM elements for the zoom box // Create the DOM elements for the zoom box
@ -164,48 +138,57 @@
},[ },[
["span",{id:"MathJax_ZoomOverlay", onmousedown:this.Remove}], ["span",{id:"MathJax_ZoomOverlay", onmousedown:this.Remove}],
["span",{ ["span",{
id:"MathJax_Zoom", onclick: this.Remove, id:"MathJax_Zoom", onclick:this.Remove,
style:{ style:{
visibility:"hidden", fontSize:this.settings.zscale, visibility:"hidden", fontSize:this.settings.zscale,
"max-width":Mw+"px", "max-height":Mh+"px" "max-width":Mw+"px", "max-height":Mh+"px"
} }
},[["span"]]] },[["span",{style:{display:"inline-block", "white-space":"nowrap"}}]]
] ]]
); );
var zoom = div.lastChild, span = zoom.firstChild, overlay = div.firstChild; var zoom = div.lastChild, span = zoom.firstChild, overlay = div.firstChild;
math.parentNode.insertBefore(div,math); math.parentNode.insertBefore(div,math);
if (span.addEventListener) {span.addEventListener("mousedown",this.Remove,true)}
if (this.msieTrapEventBug) {
var trap = HTML.Element("span",{id:"MathJax_ZoomEventTrap", onmousedown:this.Remove});
div.insertBefore(trap,zoom);
}
// //
// Display the zoomed math // Display the zoomed math
// //
if (this.msieZIndexBug) { if (this.msieZIndexBug) {
// MSIE doesn't do z-index properly, so move the div to the document.body, // MSIE doesn't do z-index properly, so move the div to the document.body,
// and use an empty span as a tracker for the usual position // and use an image as a tracker for the usual position
var tracker = HTML.Element("img",{ var tracker = HTML.addElement(document.body,"img",{
src:"about:blank", id:"MathJax_ZoomTracker", src:"about:blank", id:"MathJax_ZoomTracker", width:0, height:0,
style:{width:0, height:0, position:"relative"} style:{width:0, height:0, position:"relative"}
}); });
document.body.appendChild(div); div.style.position = "relative";
div.style.position = "absolute";
div.style.zIndex = CONFIG.styles["#MathJax_ZoomOverlay"]["z-index"]; div.style.zIndex = CONFIG.styles["#MathJax_ZoomOverlay"]["z-index"];
div = tracker; div = tracker;
} }
var bbox = (this["Zoom"+JAX])(root,span,math);
var bbox = JAX.Zoom(root,span,math,Mw,Mh);
//
// Fix up size and position for browsers with bugs (IE)
//
if (this.msiePositionBug) { if (this.msiePositionBug) {
if (this.msieIE8Bug) { if (this.msieSizeBug)
// IE8 gets height completely wrong {zoom.style.height = bbox.zH+"px"; zoom.style.width = bbox.zW+"px"} // IE8 gets the dimensions completely wrong
span.style.position = "absolute"; zoom.style.height = span.offsetHeight; span.style.position = ""; if (zoom.offsetHeight > Mh) {zoom.style.height = Mh+"px"; zoom.style.width = (bbox.zW+this.scrollSize)+"px"} // IE doesn't do max-height?
if (zoom.offsetHeight <= Mh && zoom.offsetWidth <= Mw) {zoom.style.overflow = "visible"} if (zoom.offsetWidth > Mw) {zoom.style.width = Mw+"px"; zoom.style.height = (bbox.zH+this.scrollSize)+"px"}
} }
if (this.msieWidthBug) {zoom.style.width = Math.min(Mw,bbox.w)} if (this.operaPositionBug) {zoom.style.width = Math.min(Mw,bbox.zW)+"px"} // Opera gets width as 0?
else if (bbox.w > Mw) {zoom.style.width = Mw} if (zoom.offsetWidth < Mw && zoom.offsetHeight < Mh) {zoom.style.overflow = "visible"}
if (zoom.offsetHeight > Mh) {zoom.style.Height = Mh+"px"} // IE doesn't do max-height? this.Position(zoom,bbox);
if (math.nextSibling) {math.parentNode.insertBefore(div,math.nextSibling)} if (this.msieTrapEventBug) {
else {parent.appendChild(div)} // needs to be after to be above? trap.style.height = zoom.clientHeight+"px"; trap.style.width = zoom.clientWidth+"px";
} else if (this.operaPositionBug) { trap.style.left = (parseFloat(zoom.style.left)+zoom.clientLeft)+"px";
zoom.style.width = Math.min(Mw,span.offsetWidth)+"px"; // gets width as 0? trap.style.top = (parseFloat(zoom.style.top)+zoom.clientTop)+"px";
} }
this.Position(zoom,bbox,(JAX === "MathML" && parent.nodeName.toLowerCase() === "div"));
zoom.style.visibility = ""; zoom.style.visibility = "";
// //
@ -216,53 +199,19 @@
else if (window.attachEvent) {attachEvent("onresize",this.Resize)} else if (window.attachEvent) {attachEvent("onresize",this.Resize)}
else {this.onresize = window.onresize; window.onresize = this.Resize} else {this.onresize = window.onresize; window.onresize = this.Resize}
// //
// Canel further actions // Canel further actions
// //
return FALSE(event); return FALSE(event);
}, },
//
// Handle the jax-specific output
//
ZoomHTMLCSS: function (root,span,math) {
span.className = "MathJax";
HTMLCSS.idPostfix = "-zoom";
HTMLCSS.getScales(span,span);
root.toHTML(span,span);
var bbox = root.HTMLspanElement().bbox;
HTMLCSS.idPostfix = "";
if (bbox.width && bbox.width !== "100%") {
// Handle full-width displayed equations
// FIXME: this is a hack for now
var Mw = Math.floor(.85*document.body.clientWidth);
span.style.width = Mw+"px"; span.style.display="inline-block";
var id = (root.id||"MathJax-Span-"+root.spanID)+"-zoom";
var child = document.getElementById(id).firstChild;
while (child && child.style.width !== bbox.width) {child = child.nextSibling}
if (child) {child.style.width = "100%"}
}
span.appendChild(this.topImg); var top = this.topImg.offsetTop; span.removeChild(this.topImg);
var W = (this.msieWidthBug ? HTMLCSS.getW(math)*HTMLCSS.em : math.offsetWidth);
return {w:bbox.w*HTMLCSS.em, Y:-top, W:W};
},
ZoomMathML: function (root,span,math) {
root.toNativeMML(span,span); var top;
span.appendChild(this.topImg); top = this.topImg.offsetTop; span.removeChild(this.topImg);
var W = (this.ffMMLwidthBug ? math.parentNode : math).offsetWidth;
return {w:span.offsetWidth, Y:-top, W:W}
},
// //
// Set the position of the zoom box and overlay // Set the position of the zoom box and overlay
// //
Position: function (zoom,bbox,MMLdisplay) { Position: function (zoom,bbox) {
var XY = this.Resize(), x = XY.x, y = XY.y, W = bbox.W; var XY = this.Resize(), x = XY.x, y = XY.y, W = bbox.mW;
if (this.msiePositionBug) {W = -W}
if (MMLdisplay && this.ffMMLcenterBug) {W = 0}
var dx = -Math.floor((zoom.offsetWidth-W)/2), dy = bbox.Y; var dx = -Math.floor((zoom.offsetWidth-W)/2), dy = bbox.Y;
zoom.style.left = Math.max(dx,20-x)+"px"; zoom.style.top = Math.max(dy,20-y)+"px"; zoom.style.left = Math.max(dx,10-x)+"px"; zoom.style.top = Math.max(dy,10-y)+"px";
}, },
// //
@ -271,15 +220,13 @@
Resize: function (event) { Resize: function (event) {
if (ZOOM.onresize) {ZOOM.onresize(event)} if (ZOOM.onresize) {ZOOM.onresize(event)}
var x = 0, y = 0, var x = 0, y = 0,
div = document.getElementById("MathJax_ZoomFrame"), div = document.getElementById("MathJax_ZoomFrame"), obj = div,
overlay = document.getElementById("MathJax_ZoomOverlay"); overlay = document.getElementById("MathJax_ZoomOverlay");
var obj = (ZOOM.msieZIndexBug ? document.getElementById("MathJax_ZoomTracker") : div);
if (ZOOM.operaPositionBug) {div.style.border = "1px solid"} // to get vertical position right if (ZOOM.operaPositionBug) {div.style.border = "1px solid"} // to get vertical position right
if (obj.offsetParent) { if (obj.offsetParent) {
do {x += obj.offsetLeft; y += obj.offsetTop} while (obj = obj.offsetParent); do {x += obj.offsetLeft; y += obj.offsetTop} while (obj = obj.offsetParent);
} }
if (ZOOM.operaPositionBug) {div.style.border = ""} if (ZOOM.operaPositionBug) {div.style.border = ""}
if (ZOOM.msieZIndexBug) {div.style.left = x+"px"; div.style.top = y+"px"}
overlay.style.left = (-x)+"px"; overlay.style.top = (-y)+"px"; overlay.style.left = (-x)+"px"; overlay.style.top = (-y)+"px";
if (ZOOM.msiePositionBug) {setTimeout(ZOOM.SetWH,0)} else {ZOOM.SetWH()} if (ZOOM.msiePositionBug) {setTimeout(ZOOM.SetWH,0)} else {ZOOM.SetWH()}
return {x:x, y:y}; return {x:x, y:y};
@ -306,9 +253,9 @@
var overlay = HTML.addElement(document.body,"div",{ var overlay = HTML.addElement(document.body,"div",{
style:{position:"fixed", left:0, top:0, width:"100%", height:"100%", style:{position:"fixed", left:0, top:0, width:"100%", height:"100%",
backgroundColor:"white", opacity:0}, backgroundColor:"white", opacity:0},
id: "MathJax_OperaDiv" id: "MathJax_OperaDiv"
}); });
document.body.removeChild(overlay); document.body.removeChild(overlay);
} }
if (window.removeEventListener) {removeEventListener("resize",ZOOM.Resize,false)} if (window.removeEventListener) {removeEventListener("resize",ZOOM.Resize,false)}
else if (window.detachEvent) {detachEvent("onresize",ZOOM.Resize)} else if (window.detachEvent) {detachEvent("onresize",ZOOM.Resize)}
@ -319,88 +266,39 @@
}; };
//
// Hook into the HTML-CSS and NativeMML event handling
//
HUB.Register.StartupHook("HTML-CSS Jax Ready",function () {
HTMLCSS = MathJax.OutputJax["HTML-CSS"];
HTMLCSS.Augment({HandleEvent: ZOOM.HandleEvent});
});
HUB.Register.StartupHook("NativeMML Jax Ready", function () {
nMML = MathJax.OutputJax.NativeMML;
nMML.Augment({
HandleEvent: ZOOM.HandleEvent,
MSIEmouseup: function (event,math,span) {
if (this.trapUp) {delete this.trapUp; return true}
if (this.MSIEzoomKeys(event)) {return true}
return false;
},
MSIEclick: function (event,math,span) {
if (this.trapClick) {delete this.trapClick; return true}
if (!this.MSIEzoomKeys(event)) return false;
if (!this.settings.zoom.match(/Click/)) return false;
return (ZOOM.Click(event,math) === false);
},
MSIEdblclick: function (event,math,span) {
if (!this.MSIEzoomKeys(event)) return false;
return (ZOOM.DblClick(event,math) === false);
},
MSIEmouseover: function (event,math,span) {
if (this.settings.zoom !== "Hover") {return false}
ZOOM.Timer(event,math); return true;
},
MSIEmouseout: function (event,math,span) {
if (this.settings.zoom !== "Hover") {return false}
ZOOM.ClearTimer(); return true;
},
MSIEmousemove: function (event,math,span) {
if (this.settings.zoom !== "Hover") {return false}
ZOOM.Timer(event,math); return true;
},
MSIEzoomKeys: function (event) {
if (this.settings.CTRL && !event.ctrlKey) return false;
if (this.settings.CMD && !event.metaKey) return false;
if (this.settings.ALT && !event.altKey) return false;
if (this.settings.Shift && !event.shiftKey) return false;
return true;
}
});
});
/*************************************************************/ /*************************************************************/
HUB.Browser.Select({ HUB.Browser.Select({
MSIE: function (browser) { MSIE: function (browser) {
var quirks = (document.compatMode === "BackCompat"); var mode = (document.documentMode || 0);
var isIE8 = browser.versionAtLeast("8.0") && document.documentMode > 7; var isIE9 = (mode >= 9);
ZOOM.msiePositionBug = true; ZOOM.msiePositionBug = !isIE9;
ZOOM.msieWidthBug = !quirks; ZOOM.msieSizeBug = browser.versionAtLeast("7.0") &&
ZOOM.msieIE8Bug = isIE8; (!document.documentMode || mode === 7 || mode === 8);
ZOOM.msieZIndexBug = !isIE8; ZOOM.msieZIndexBug = (mode <= 7);
ZOOM.msieInlineBlockAlignBug = (!isIE8 || quirks); ZOOM.msieInlineBlockAlignBug = (mode <= 7);
if (document.documentMode >= 9) {delete CONFIG.styles["#MathJax_Zoom"].filter} ZOOM.msieTrapEventBug = !window.addEventListener;
if (document.compatMode === "BackCompat") {ZOOM.scrollSize = 52} // don't know why this is so far off
if (isIE9) {delete CONFIG.styles["#MathJax_Zoom"].filter}
}, },
Opera: function (browser) { Opera: function (browser) {
ZOOM.operaPositionBug = true; ZOOM.operaPositionBug = true;
ZOOM.operaRefreshBug = true; ZOOM.operaRefreshBug = true;
},
Firefox: function (browser) {
ZOOM.ffMMLwidthBug = true;
ZOOM.ffMMLcenterBug = true;
} }
}); });
ZOOM.topImg = (ZOOM.msieInlineBlockAlignBug ? ZOOM.topImg = (ZOOM.msieInlineBlockAlignBug ?
HTML.Element("img",{style:{width:0,height:0},src:"about:blank"}) : HTML.Element("img",{style:{width:0,height:0,position:"relative"},src:"about:blank"}) :
HTML.Element("span",{style:{width:0,height:0,display:"inline-block"}}) HTML.Element("span",{style:{width:0,height:0,display:"inline-block"}})
); );
if (ZOOM.operaPositionBug) {ZOOM.topImg.style.border="1px solid"} if (ZOOM.operaPositionBug || ZOOM.msieTopBug) {ZOOM.topImg.style.border="1px solid"}
/*************************************************************/ /*************************************************************/
MathJax.Callback.Queue( MathJax.Callback.Queue(
["StartupHook",MathJax.Hub.Register,"Begin Styles",{}],
["Styles",AJAX,CONFIG.styles], ["Styles",AJAX,CONFIG.styles],
["Post",HUB.Startup.signal,"MathZoom Ready"], ["Post",HUB.Startup.signal,"MathZoom Ready"],
["loadComplete",AJAX,"[MathJax]/extensions/MathZoom.js"] ["loadComplete",AJAX,"[MathJax]/extensions/MathZoom.js"]

View File

@ -156,7 +156,7 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
var text = this.data[0].data[0].data.join("").split(/\n/); var text = this.data[0].data[0].data.join("").split(/\n/);
for (var i = 0, m = text.length; i < m; i++) { for (var i = 0, m = text.length; i < m; i++) {
HTMLCSS.addText(span,text[i]); HTMLCSS.addText(span,text[i]);
if (i !== m-1) {HTMLCSS.addElement(span,"br")} if (i !== m-1) {HTMLCSS.addElement(span,"br",{isMathJax:true})}
} }
var HD = HTMLCSS.getHD(span.parentNode), W = HTMLCSS.getW(span.parentNode); var HD = HTMLCSS.getHD(span.parentNode), W = HTMLCSS.getW(span.parentNode);
if (m > 1) { if (m > 1) {

View File

@ -24,7 +24,7 @@
MathJax.InputJax.MathML = MathJax.InputJax({ MathJax.InputJax.MathML = MathJax.InputJax({
id: "MathML", id: "MathML",
version: "1.1.7", version: "1.1.8",
directory: MathJax.InputJax.directory + "/MathML", directory: MathJax.InputJax.directory + "/MathML",
extensionDir: MathJax.InputJax.extensionDir + "/MathML", extensionDir: MathJax.InputJax.extensionDir + "/MathML",
entityDir: MathJax.InputJax.directory + "/MathML/entities", entityDir: MathJax.InputJax.directory + "/MathML/entities",

View File

@ -135,6 +135,8 @@
/************************************************************************/ /************************************************************************/
MATHML.Augment({ MATHML.Augment({
sourceMenuTitle: "Original MathML",
Translate: function (script) { Translate: function (script) {
if (!this.ParseXML) {this.ParseXML = this.createParser()} if (!this.ParseXML) {this.ParseXML = this.createParser()}
var mml, math; var mml, math;

View File

@ -24,7 +24,7 @@
MathJax.InputJax.TeX = MathJax.InputJax({ MathJax.InputJax.TeX = MathJax.InputJax({
id: "TeX", id: "TeX",
version: "1.1.8", version: "1.1.9",
directory: MathJax.InputJax.directory + "/TeX", directory: MathJax.InputJax.directory + "/TeX",
extensionDir: MathJax.InputJax.extensionDir + "/TeX", extensionDir: MathJax.InputJax.extensionDir + "/TeX",

View File

@ -1760,6 +1760,8 @@
MAXBUFFER: 5*1024 // maximum size of TeX string to process MAXBUFFER: 5*1024 // maximum size of TeX string to process
}, },
sourceMenuTitle: "TeX Commands",
Translate: function (script) { Translate: function (script) {
var mml, math = script.innerHTML.replace(/^\s+/,"").replace(/\s+$/,""); var mml, math = script.innerHTML.replace(/^\s+/,"").replace(/\s+$/,"");
if (MathJax.Hub.Browser.isKonqueror) if (MathJax.Hub.Browser.isKonqueror)

View File

@ -22,7 +22,7 @@
*/ */
MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () { MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
var VERSION = "1.1.2"; var VERSION = "1.1.4";
var MML = MathJax.ElementJax.mml, var MML = MathJax.ElementJax.mml,
HTMLCSS = MathJax.OutputJax["HTML-CSS"]; HTMLCSS = MathJax.OutputJax["HTML-CSS"];
@ -50,7 +50,7 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
else if (HW != null) {HTMLCSS.Remeasured(selected.HTMLstretchH(span,HW),span)} else if (HW != null) {HTMLCSS.Remeasured(selected.HTMLstretchH(span,HW),span)}
if (HTMLCSS.msieHitBoxBug) { if (HTMLCSS.msieHitBoxBug) {
// margin-left doesn't work on inline-block elements in IE, so put it in a SPAN // margin-left doesn't work on inline-block elements in IE, so put it in a SPAN
var box = HTMLCSS.addElement(span,"span"); var box = HTMLCSS.addElement(span,"span",{isMathJax:true});
frame = HTMLCSS.createFrame(box,span.bbox.h,span.bbox.d,span.bbox.w,0,"none"); frame = HTMLCSS.createFrame(box,span.bbox.h,span.bbox.d,span.bbox.w,0,"none");
span.insertBefore(box,span.firstChild); // move below the content span.insertBefore(box,span.firstChild); // move below the content
box.style.marginRight = HTMLCSS.Em(-span.bbox.w); box.style.marginRight = HTMLCSS.Em(-span.bbox.w);
@ -110,13 +110,13 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
this.selection++; this.selection++;
if (this.selection > this.data.length) {this.selection = 1} if (this.selection > this.data.length) {this.selection = 1}
var math = this; while (math.type !== "math") {math = math.inherit} var math = this; while (math.type !== "math") {math = math.inherit}
MathJax.Hub.getJaxFor(math.inputID).Update(); var jax = MathJax.Hub.getJaxFor(math.inputID), hover = !!jax.hover;
if (!event) {event = window.event} jax.Update();
if (event.preventDefault) {event.preventDefault()} if (hover) {
if (event.stopPropagation) {event.stopPropagation()} var span = document.getElementById(jax.inputID+"-Span");
event.cancelBubble = true; MathJax.Extension.MathEvents.Hover.Hover(jax,span);
event.returnValue = false; }
return false; return MathJax.Extension.MathEvents.Event.False(event);
}, },
// //

View File

@ -230,7 +230,7 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
return svg; return svg;
}, },
HTMLsvgElement: function (svg,type,def) { HTMLsvgElement: function (svg,type,def) {
var obj = document.createElementNS(SVGNS,type); var obj = document.createElementNS(SVGNS,type); obj.isMathJax = true;
if (def) {for (var id in def) {if (def.hasOwnProperty(id)) {obj.setAttributeNS(null,id,def[id].toString())}}} if (def) {for (var id in def) {if (def.hasOwnProperty(id)) {obj.setAttributeNS(null,id,def[id].toString())}}}
svg.appendChild(obj); svg.appendChild(obj);
return obj; return obj;
@ -242,7 +242,7 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
return vml; return vml;
}, },
HTMLvmlElement: function (vml,type,def) { HTMLvmlElement: function (vml,type,def) {
var obj = HTMLCSS.addElement(vml,vmlns+":"+type); var obj = HTMLCSS.addElement(vml,vmlns+":"+type,{isMathJax:true});
obj.style.position = "absolute"; obj.style.left = obj.style.top = 0; obj.style.position = "absolute"; obj.style.left = obj.style.top = 0;
MathJax.Hub.Insert(obj,def); // IE8 needs to do this after obj is added to the page MathJax.Hub.Insert(obj,def); // IE8 needs to do this after obj is added to the page
if (!def.fillcolor) {obj.fillcolor = "none"} if (!def.fillcolor) {obj.fillcolor = "none"}

View File

@ -62,7 +62,7 @@ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
span.bbox = err.HTMLspanElement().bbox; span.bbox = err.HTMLspanElement().bbox;
} else { } else {
var mu = this.HTMLgetMu(span); var mu = this.HTMLgetMu(span);
img = HTMLCSS.addElement(span,"img",{src:values.src, alt:values.alt, title:values.alt}); img = HTMLCSS.addElement(span,"img",{isMathJax:true, src:values.src, alt:values.alt, title:values.alt});
if (values.width) { if (values.width) {
if (String(values.width).match(/^\s*-?\d+\s*$/)) {values.width += "px"} if (String(values.width).match(/^\s*-?\d+\s*$/)) {values.width += "px"}
img.style.width = HTMLCSS.Em(HTMLCSS.length2em(values.width,mu,this.img.img.width/HTMLCSS.em)); img.style.width = HTMLCSS.Em(HTMLCSS.length2em(values.width,mu,this.img.img.width/HTMLCSS.em));

View File

@ -24,7 +24,7 @@
MathJax.OutputJax["HTML-CSS"] = MathJax.OutputJax({ MathJax.OutputJax["HTML-CSS"] = MathJax.OutputJax({
id: "HTML-CSS", id: "HTML-CSS",
version: "1.1.12", version: "1.1.13",
directory: MathJax.OutputJax.directory + "/HTML-CSS", directory: MathJax.OutputJax.directory + "/HTML-CSS",
extensionDir: MathJax.OutputJax.extensionDir + "/HTML-CSS", extensionDir: MathJax.OutputJax.extensionDir + "/HTML-CSS",
autoloadDir: MathJax.OutputJax.directory + "/HTML-CSS/autoload", autoloadDir: MathJax.OutputJax.directory + "/HTML-CSS/autoload",
@ -39,8 +39,6 @@ MathJax.OutputJax["HTML-CSS"] = MathJax.OutputJax({
imageFont: "TeX", imageFont: "TeX",
undefinedFamily: "STIXGeneral,'Arial Unicode MS',serif", undefinedFamily: "STIXGeneral,'Arial Unicode MS',serif",
showMathMenu: true,
styles: { styles: {
".MathJax_Display": { ".MathJax_Display": {
"text-align": "center", "text-align": "center",

View File

@ -22,7 +22,7 @@
*/ */
(function (HUB,HTMLCSS,AJAX) { (function (HUB,HTMLCSS,AJAX) {
var VERSION = "1.1"; var VERSION = "1.1.1";
HUB.Register.LoadHook(HTMLCSS.fontDir + "/fontdata.js",function () { HUB.Register.LoadHook(HTMLCSS.fontDir + "/fontdata.js",function () {
@ -61,7 +61,7 @@
"AlphaImageLoader(src='"+AJAX.fileURL(file)+"', sizingMethod='scale')"; "AlphaImageLoader(src='"+AJAX.fileURL(file)+"', sizingMethod='scale')";
file = this.directory+"/blank.gif" file = this.directory+"/blank.gif"
} }
this.addElement(span,"img",{src:AJAX.fileURL(file), style:style}); this.addElement(span,"img",{src:AJAX.fileURL(file), style:style, isMathJax:true});
return ""; return "";
}, },

View File

@ -83,9 +83,9 @@
return false; return false;
}, },
styleChar: String.fromCharCode(0xEFFD), // width encodes style styleChar: "\uEFFD", // width encodes style
versionChar: String.fromCharCode(0xEFFE), // width encodes version versionChar: "\uEFFE", // width encodes version
compChar: String.fromCharCode(0xEFFF), // "standard" width to compare to compChar: "\uEFFF", // "standard" width to compare to
testStyleChar: function (font,size) { testStyleChar: function (font,size) {
var n = 3 + (font.weight ? 2 : 0) + (font.style ? 4 : 0); var n = 3 + (font.weight ? 2 : 0) + (font.style ? 4 : 0);
@ -182,7 +182,9 @@
return def; return def;
} }
}); });
var EVENT, TOUCH, HOVER; // filled in later
HTMLCSS.Augment({ HTMLCSS.Augment({
config: { config: {
styles: { styles: {
@ -230,7 +232,7 @@
}, },
".MathJax nobr": { ".MathJax nobr": {
"white-space": "nowrap" "white-space": "nowrap ! important"
}, },
".MathJax img": { ".MathJax img": {
@ -245,7 +247,7 @@
".MathJax .MathJax_HitBox": { ".MathJax .MathJax_HitBox": {
cursor: "text" cursor: "text"
}, },
"#MathJax_Tooltip": { "#MathJax_Tooltip": {
position: "absolute", left: 0, top: 0, position: "absolute", left: 0, top: 0,
width: "auto", height: "auto", width: "auto", height: "auto",
@ -259,9 +261,6 @@
}, },
settings: HUB.config.menuSettings, settings: HUB.config.menuSettings,
LEFTBUTTON: (HUB.Browser.isMSIE ? 1 : 0), // the event.button value for left button
MENUKEY: "altKey", // the event value for alternate context menu
Font: null, // created by Config() below Font: null, // created by Config() below
Config: function () { Config: function () {
@ -301,9 +300,20 @@
} }
HUB.Startup.signal.Post("HTML-CSS Jax - no valid font"); HUB.Startup.signal.Post("HTML-CSS Jax - no valid font");
} }
this.require.push(MathJax.OutputJax.extensionDir+"/MathEvents.js");
}, },
Startup: function () { Startup: function () {
// Set up event handling
EVENT = MathJax.Extension.MathEvents.Event;
TOUCH = MathJax.Extension.MathEvents.Touch;
HOVER = MathJax.Extension.MathEvents.Hover;
this.ContextMenu = EVENT.ContextMenu;
this.Mousedown = EVENT.AltContextMenu;
this.Mouseover = HOVER.Mouseover;
this.Mouseout = HOVER.Mouseout;
this.Mousemove = HOVER.Mousemove;
// Set up default fonts // Set up default fonts
var family = [], fonts = this.FONTDATA.VARIANT.normal.fonts; var family = [], fonts = this.FONTDATA.VARIANT.normal.fonts;
if (!(fonts instanceof Array)) {fonts = [fonts]} if (!(fonts instanceof Array)) {fonts = [fonts]}
@ -381,11 +391,17 @@
var prev = script.previousSibling; var prev = script.previousSibling;
if (prev && String(prev.className).match(/^MathJax(_MathML|_Display)?$/)) if (prev && String(prev.className).match(/^MathJax(_MathML|_Display)?$/))
{prev.parentNode.removeChild(prev)} {prev.parentNode.removeChild(prev)}
var math = script.MathJax.elementJax.root, span, div, frame; var jax = script.MathJax.elementJax, math = jax.root, span, div, frame;
span = div = frame = this.Element("span",{ span = div = frame = this.Element("span",{
className:"MathJax", oncontextmenu:this.ContextMenu, onmousedown: this.Mousedown, className:"MathJax", isMathJax:true, jaxID:this.id, id:jax.inputID+"-Span",
onmouseover:this.Mouseover, onclick:this.Click, ondblclick:this.DblClick oncontextmenu:EVENT.Menu, onmousedown: EVENT.Mousedown,
onmouseover:EVENT.Mouseover, onmouseout: EVENT.Mouseout, onmousemove: EVENT.Mousemove,
onclick:EVENT.Click, ondblclick:EVENT.DblClick
}); });
if (MathJax.Hub.Browser.noContextMenu) {
span.ontouchstart = TOUCH.start;
span.ontouchend = TOUCH.end;
}
var blockMode = (math.Get("display") === "block"); var blockMode = (math.Get("display") === "block");
if (blockMode) { if (blockMode) {
div = frame = this.Element("div",{className:"MathJax_Display", style:{width:"100%", position:"relative"}}); div = frame = this.Element("div",{className:"MathJax_Display", style:{width:"100%", position:"relative"}});
@ -400,6 +416,7 @@
script.parentNode.insertBefore(frame,script); var isHidden; script.parentNode.insertBefore(frame,script); var isHidden;
try {this.getScales(span); isHidden = (this.em === 0 || String(this.em) === "NaN")} catch (err) {isHidden = true} try {this.getScales(span); isHidden = (this.em === 0 || String(this.em) === "NaN")} catch (err) {isHidden = true}
if (isHidden) {this.hiddenDiv.appendChild(frame); this.getScales(span)} if (isHidden) {this.hiddenDiv.appendChild(frame); this.getScales(span)}
jax.em = this.em; jax.outerEm = this.outerEm; jax.scale = this.scale;
this.initImg(span); this.initImg(span);
this.initHTML(math,span); this.initHTML(math,span);
math.setTeXclass(); math.setTeXclass();
@ -411,57 +428,45 @@
if (this.useProcessingFrame) frame.parentNode.replaceChild(div,frame); if (this.useProcessingFrame) frame.parentNode.replaceChild(div,frame);
}, },
/* getJaxFromMath: function (math) {
* Autoload the MathMenu code, when needed if (math.parentNode.className === "MathJax_Display") {math = math.parentNode}
*/ return HUB.getJaxFor(math.nextSibling);
ContextMenu: function (event,force) {
if (HTMLCSS.config.showMathMenu && (HTMLCSS.settings.context === "MathJax" || force)) {
if (HTMLCSS.safariContextMenuBug) {setTimeout('window.getSelection().empty()',0)}
if (!event || HTMLCSS.msieEventBug) {event = window.event}
var MENU = MathJax.Menu;
if (MENU) {
var math = (this.parentNode.className === "MathJax_Display" ? this.parentNode : this)
MENU.jax = HUB.getJaxFor(math.nextSibling);
MENU.menu.items[1].menu.items[1].name =
(MENU.jax.inputJax.id === "MathML" ? "Original" : MENU.jax.inputJax.id);
return MENU.menu.Post(event);
} else {
if (!AJAX.loadingMathMenu) {
AJAX.loadingMathMenu = true;
var EVENT = {pageX:event.pageX, pageY:event.pageY, clientX:event.clientX, clientY:event.clientY};
MathJax.Callback.Queue(
AJAX.Require("[MathJax]/extensions/MathMenu.js"),
function () {delete AJAX.loadingMathMenu},
[this,arguments.callee,EVENT,force] // call this function again
);
}
if (!event) {event = window.event}
if (event.preventDefault) {event.preventDefault()}
if (event.stopPropagation) {event.stopPropagation()}
event.cancelBubble = true;
event.returnValue = false;
return false;
}
}
}, },
Mousedown: function (event) { getHoverSpan: function (jax) {return jax.root.HTMLspanElement()},
if (HTMLCSS.config.showMathMenu) { getHoverBBox: function (jax,span) {
if (!event) {event = window.event} var bbox = span.bbox, em = jax.outerEm;
if (HTMLCSS.settings.context === "MathJax") { var BBOX = {w:bbox.w*em, h:bbox.h*em, d:bbox.d*em};
if (!HTMLCSS.noContextMenuBug || event.button !== 2) return if (bbox.width) {BBOX.width = bbox.width}
} else { return BBOX;
if (!event[HTMLCSS.MENUKEY] || event.button !== HTMLCSS.LEFTBUTTON) return },
}
return HTMLCSS.ContextMenu.call(this,event,true); Zoom: function (root,span,math,Mw,Mh) {
} //
// Re-render at larger size
//
span.className = "MathJax"; this.getScales(span,span);
this.idPostfix = "-zoom"; root.toHTML(span,span); this.idPostfix = "";
var width = root.HTMLspanElement().bbox.width;
if (width) {
// Handle full-width displayed equations
// FIXME: this is a hack for now
span.style.width = Math.floor(Mw-1.5*HTMLCSS.em)+"px"; span.style.display="inline-block";
var id = (root.id||"MathJax-Span-"+root.spanID)+"-zoom";
var child = document.getElementById(id).firstChild;
while (child && child.style.width !== width) {child = child.nextSibling}
if (child) {child.style.width = "100%"}
}
//
// Get height and width of zoomed math and original math
//
span.style.position = math.style.position = "absolute";
var zW = span.offsetWidth, zH = span.offsetHeight,
mH = math.offsetHeight, mW = math.offsetWidth;
if (mW === 0) {mW = math.parentNode.offsetWidth}; // IE7 gets mW == 0?
span.style.position = math.style.position = "";
//
return {Y:-EVENT.getBBox(span).h, mW:mW, mH:mH, zW:zW, zH:zH};
}, },
/*
* Used for zooming, when that is enabled by the MathMenu
*/
Mouseover: function (event) {HTMLCSS.HandleEvent(event,"Mouseover",this)},
Click: function (event) {HTMLCSS.HandleEvent(event,"Click",this)},
DblClick: function (event) {HTMLCSS.HandleEvent(event,"DblClick",this)},
HandleEvent: function (event,type,math) {},
initImg: function (span) {}, initImg: function (span) {},
initHTML: function (math,span) {}, initHTML: function (math,span) {},
@ -599,6 +604,7 @@
createStrut: function (span,h,before) { createStrut: function (span,h,before) {
var strut = this.Element("span",{ var strut = this.Element("span",{
isMathJax: true,
style:{display:"inline-block", overflow:"hidden", height:h+"px", style:{display:"inline-block", overflow:"hidden", height:h+"px",
width:"1px", marginRight:"-1px"} width:"1px", marginRight:"-1px"}
}); });
@ -607,13 +613,14 @@
}, },
createBlank: function (span,w,before) { createBlank: function (span,w,before) {
var blank = this.Element("span",{ var blank = this.Element("span",{
isMathJax: true,
style: {display:"inline-block", overflow:"hidden", height:"1px", width:this.Em(w)} style: {display:"inline-block", overflow:"hidden", height:"1px", width:this.Em(w)}
}); });
if (before) {span.insertBefore(blank,span.firstChild)} else {span.appendChild(blank)} if (before) {span.insertBefore(blank,span.firstChild)} else {span.appendChild(blank)}
return blank; return blank;
}, },
createShift: function (span,w,before) { createShift: function (span,w,before) {
var space = this.Element("span",{style:{marginLeft:this.Em(w)}}); var space = this.Element("span",{style:{marginLeft:this.Em(w)}, isMathJax:true});
if (before) {span.insertBefore(space,span.firstChild)} else {span.appendChild(space)} if (before) {span.insertBefore(space,span.firstChild)} else {span.appendChild(space)}
return space; return space;
}, },
@ -627,7 +634,7 @@
}; };
span.style.height = H; span.style.verticalAlign = D; span.style.height = H; span.style.verticalAlign = D;
} else { } else {
span = this.addElement(span,"span",{style: {height:H, verticalAlign:D}}); span = this.addElement(span,"span",{style: {height:H, verticalAlign:D}, isMathJax:true});
} }
if (w >= 0) { if (w >= 0) {
span.style.width = this.Em(w); span.style.width = this.Em(w);
@ -655,7 +662,7 @@
var rule = this.addElement(span,"span",{ var rule = this.addElement(span,"span",{
style: {borderLeft: color, display: "inline-block", overflow:"hidden", style: {borderLeft: color, display: "inline-block", overflow:"hidden",
width:0, height:H, verticalAlign:D}, width:0, height:H, verticalAlign:D},
bbox: {h:h, d:d, w:w, rw:w, lw:0}, noAdjust: true bbox: {h:h, d:d, w:w, rw:w, lw:0}, noAdjust: true, isMathJax: true
}); });
if (w > 0 && rule.offsetWidth == 0) {rule.style.width = this.Em(w)} if (w > 0 && rule.offsetWidth == 0) {rule.style.width = this.Em(w)}
if (span.isBox || span.className == "mspace") {span.bbox = rule.bbox} if (span.isBox || span.className == "mspace") {span.bbox = rule.bbox}
@ -667,7 +674,7 @@
var B = this.Em(t)+" "+style; var B = this.Em(t)+" "+style;
var frame = this.addElement(span,"span",{ var frame = this.addElement(span,"span",{
style: {border: B, display:"inline-block", overflow:"hidden", width:W, height:H}, style: {border: B, display:"inline-block", overflow:"hidden", width:W, height:H},
bbox: {h:h, d:d, w:w, rw:w, lw:0}, noAdjust: true bbox: {h:h, d:d, w:w, rw:w, lw:0}, noAdjust: true, isMathJax: true
}); });
if (D) {frame.style.verticalAlign = D} if (D) {frame.style.verticalAlign = D}
return frame; return frame;
@ -678,7 +685,7 @@
var relativeW = String(w).match(/%$/); var relativeW = String(w).match(/%$/);
var W = (!relativeW && w != null ? w : 0); var W = (!relativeW && w != null ? w : 0);
span = this.addElement(span,"span",{ span = this.addElement(span,"span",{
noAdjust: true, noAdjust: true, isMathJax: true,
style: {display:"inline-block", position:"relative", style: {display:"inline-block", position:"relative",
width:(relativeW ? "100%" : this.Em(W)), height:0} width:(relativeW ? "100%" : this.Em(W)), height:0}
}); });
@ -692,7 +699,7 @@
return span; return span;
}, },
createBox: function (span,w) { createBox: function (span,w) {
var box = this.addElement(span,"span",{style:{position:"absolute"}, isBox: true}); var box = this.addElement(span,"span",{style:{position:"absolute"}, isBox: true, isMathJax:true});
if (w != null) {box.style.width = w} if (w != null) {box.style.width = w}
return box; return box;
}, },
@ -701,6 +708,7 @@
return span.appendChild(box); return span.appendChild(box);
}, },
placeBox: function (span,x,y,noclip) { placeBox: function (span,x,y,noclip) {
span.isMathJax = true;
var parent = span.parentNode, bbox = span.bbox, BBOX = parent.bbox; var parent = span.parentNode, bbox = span.bbox, BBOX = parent.bbox;
if (this.msiePlaceBoxBug) {this.addText(span,this.NBSP)} if (this.msiePlaceBoxBug) {this.addText(span,this.NBSP)}
if (this.imgSpaceBug) {this.addText(span,this.imgSpace)} if (this.imgSpaceBug) {this.addText(span,this.imgSpace)}
@ -708,9 +716,14 @@
var HH = span.offsetHeight/this.em + 1, dx = 0; var HH = span.offsetHeight/this.em + 1, dx = 0;
if (span.noAdjust) {HH -= 1} else { if (span.noAdjust) {HH -= 1} else {
if (this.msieInlineBlockAlignBug) { if (this.msieInlineBlockAlignBug) {
this.addElement(span,"img",{className:"MathJax_strut",border:0,src:"about:blank",style:{width:0,height:this.Em(HH)}}); this.addElement(span,"img",{
className:"MathJax_strut", border:0, src:"about:blank", isMathJax:true,
style:{width:0,height:this.Em(HH)}
});
} else { } else {
this.addElement(span,"span",{style:{display:"inline-block",width:0,height:this.Em(HH)}}); this.addElement(span,"span",{
isMathJax: true, style:{display:"inline-block",width:0,height:this.Em(HH)}
});
} }
} }
span.style.top = this.Em(-y-HH); span.style.top = this.Em(-y-HH);
@ -892,6 +905,7 @@
this.setStackWidth(stack,span.bbox.w); this.setStackWidth(stack,span.bbox.w);
}, },
createChar: function (span,data,scale,font) { createChar: function (span,data,scale,font) {
span.isMathJax = true;
var SPAN = span, text = "", variant = {fonts: [data[1]], noRemap:true}; var SPAN = span, text = "", variant = {fonts: [data[1]], noRemap:true};
if (font && font === MML.VARIANT.BOLD) {variant.fonts = [data[1]+"-bold",data[1]]} if (font && font === MML.VARIANT.BOLD) {variant.fonts = [data[1]+"-bold",data[1]]}
if (typeof(data[1]) !== "string") {variant = data[1]} if (typeof(data[1]) !== "string") {variant = data[1]}
@ -899,7 +913,9 @@
for (var i = 0, m = data[0].length; i < m; i++) {text += String.fromCharCode(data[0][i])} for (var i = 0, m = data[0].length; i < m; i++) {text += String.fromCharCode(data[0][i])}
} else {text = String.fromCharCode(data[0])} } else {text = String.fromCharCode(data[0])}
if (scale !== 1) { if (scale !== 1) {
SPAN = this.addElement(span,"span",{style:{fontSize: this.Percent(scale)}, scale:scale}); SPAN = this.addElement(span,"span",{
style:{fontSize: this.Percent(scale)}, scale:scale, isMathJax: true
});
this.handleVariant(SPAN,variant,text); this.handleVariant(SPAN,variant,text);
span.bbox = SPAN.bbox; span.bbox = SPAN.bbox;
} else {this.handleVariant(span,variant,text)} } else {this.handleVariant(span,variant,text)}
@ -979,7 +995,7 @@
if (newtext.length) {this.addText(SPAN,newtext); newtext = ""} if (newtext.length) {this.addText(SPAN,newtext); newtext = ""}
SPAN = span; SPANV = spanv; SPAN = span; SPANV = spanv;
if (variant !== SPANV) if (variant !== SPANV)
{if (SPANV) {SPAN = this.addElement(span,"span")} else {spanv = variant}} {if (SPANV) {SPAN = this.addElement(span,"span",{isMathJax:true})} else {spanv = variant}}
this.handleFont(SPAN,font,SPAN !== span); this.handleFont(SPAN,font,SPAN !== span);
SPANV = variant; SPANV = variant;
} }
@ -1287,15 +1303,15 @@
return SPAN; return SPAN;
} }
} }
if (this.href) {span = HTMLCSS.addElement(span,"a",{href:this.href})} if (this.href) {span = HTMLCSS.addElement(span,"a",{href:this.href, isMathJax:true})}
span = HTMLCSS.addElement(span,"span",{className: this.type}); span = HTMLCSS.addElement(span,"span",{className: this.type, isMathJax:true});
if (HTMLCSS.imgHeightBug) {span.style.display = "inline-block"} if (HTMLCSS.imgHeightBug) {span.style.display = "inline-block"}
if (this["class"] != null) {span.className += " "+this["class"]} if (this["class"] != null) {span.className += " "+this["class"]}
if (this.style) { if (this.style) {
span.style.cssText = this.style; span.style.cssText = this.style;
if (span.style.fontSize) {this.mathsize = span.style.fontSize; span.style.fontSize = ""} if (span.style.fontSize) {this.mathsize = span.style.fontSize; span.style.fontSize = ""}
} }
this.spanID = HTMLCSS.GetID(); if (!this.spanID) {this.spanID = HTMLCSS.GetID()}
span.id = (this.id || "MathJax-Span-"+this.spanID) + HTMLCSS.idPostfix; span.id = (this.id || "MathJax-Span-"+this.spanID) + HTMLCSS.idPostfix;
span.bbox = {w:0, h:0, d:0, lw:0, lr:0}; span.bbox = {w:0, h:0, d:0, lw:0, lr:0};
if (this.href) {span.parentNode.bbox = span.bbox} if (this.href) {span.parentNode.bbox = span.bbox}
@ -1339,6 +1355,7 @@
var H = span.bbox.h + span.bbox.d, D = -span.bbox.d; var H = span.bbox.h + span.bbox.d, D = -span.bbox.d;
if (W > 0) {W += 2*dd; lW -= dd}; if (H > 0) {H += 2*dd; D -= dd}; rW = -W-lW; if (W > 0) {W += 2*dd; lW -= dd}; if (H > 0) {H += 2*dd; D -= dd}; rW = -W-lW;
var frame = HTMLCSS.Element("span",{id:"MathJax-Color-"+this.spanID+HTMLCSS.idPostfix, var frame = HTMLCSS.Element("span",{id:"MathJax-Color-"+this.spanID+HTMLCSS.idPostfix,
isMathJax: true,
style:{display:"inline-block", backgroundColor:values.mathbackground, style:{display:"inline-block", backgroundColor:values.mathbackground,
width: HTMLCSS.Em(W), height:HTMLCSS.Em(H), verticalAlign: HTMLCSS.Em(D), width: HTMLCSS.Em(W), height:HTMLCSS.Em(H), verticalAlign: HTMLCSS.Em(D),
marginLeft: HTMLCSS.Em(lW), marginRight: HTMLCSS.Em(rW)} marginLeft: HTMLCSS.Em(lW), marginRight: HTMLCSS.Em(rW)}
@ -1347,7 +1364,7 @@
frame.style.position = "relative"; frame.style.width = frame.style.height = 0; frame.style.position = "relative"; frame.style.width = frame.style.height = 0;
frame.style.verticalAlign = frame.style.marginLeft = frame.style.marginRight = ""; frame.style.verticalAlign = frame.style.marginLeft = frame.style.marginRight = "";
HTMLCSS.placeBox(HTMLCSS.addElement(frame,"span",{ HTMLCSS.placeBox(HTMLCSS.addElement(frame,"span",{
noAdjust: true, noAdjust: true, isMathJax: true,
style: {display:"inline-block", position:"absolute", overflow:"hidden", style: {display:"inline-block", position:"absolute", overflow:"hidden",
width: HTMLCSS.Em(W), height: HTMLCSS.Em(H), width: HTMLCSS.Em(W), height: HTMLCSS.Em(H),
background: values.mathbackground} background: values.mathbackground}
@ -2081,7 +2098,7 @@
MML.math.Augment({ MML.math.Augment({
toHTML: function (span,node) { toHTML: function (span,node) {
var alttext = this.Get("alttext"); if (alttext) {node.setAttribute("aria-label",alttext)} var alttext = this.Get("alttext"); if (alttext) {node.setAttribute("aria-label",alttext)}
var nobr = HTMLCSS.addElement(span,"nobr"); var nobr = HTMLCSS.addElement(span,"nobr",{isMathJax: true});
span = this.HTMLcreateSpan(nobr); span = this.HTMLcreateSpan(nobr);
var stack = HTMLCSS.createStack(span), box = HTMLCSS.createBox(stack), math; var stack = HTMLCSS.createStack(span), box = HTMLCSS.createBox(stack), math;
// Move font-size from outer span to stack to avoid line separation // Move font-size from outer span to stack to avoid line separation
@ -2131,7 +2148,8 @@
} }
} }
return span; return span;
} },
HTMLspanElement: MML.mbase.prototype.HTMLspanElement
}); });
MML.TeXAtom.Augment({ MML.TeXAtom.Augment({
@ -2169,6 +2187,7 @@
}); });
HUB.Register.StartupHook("End Config",function () { HUB.Register.StartupHook("End Config",function () {
// //
// Handle browser-specific setup // Handle browser-specific setup
// //
@ -2186,7 +2205,6 @@
HTMLCSS.Augment({ HTMLCSS.Augment({
getMarginScale: HTMLCSS.getMSIEmarginScale, getMarginScale: HTMLCSS.getMSIEmarginScale,
PaddingWidthBug: true, PaddingWidthBug: true,
msieEventBug: browser.isIE9,
msieAccentBug: true, msieAccentBug: true,
msieColorBug: true, msieColorBug: true,
msieColorPositionBug: true, // needs position:relative to put color behind text msieColorPositionBug: true, // needs position:relative to put color behind text
@ -2229,7 +2247,6 @@
Safari: function (browser) { Safari: function (browser) {
var v3p0 = browser.versionAtLeast("3.0"); var v3p0 = browser.versionAtLeast("3.0");
var v3p1 = browser.versionAtLeast("3.1"); var v3p1 = browser.versionAtLeast("3.1");
browser.isMobile = (navigator.appVersion.match(/Mobile/i) != null);
var android = (navigator.appVersion.match(/ Android (\d+)\.(\d+)/)); var android = (navigator.appVersion.match(/ Android (\d+)\.(\d+)/));
var forceImages = (v3p1 && browser.isMobile && ( var forceImages = (v3p1 && browser.isMobile && (
(navigator.platform.match(/iPad|iPod|iPhone/) && !browser.versionAtLeast("5.0")) || (navigator.platform.match(/iPad|iPod|iPhone/) && !browser.versionAtLeast("5.0")) ||
@ -2248,7 +2265,6 @@
rfuzz: .011, rfuzz: .011,
AccentBug: true, AccentBug: true,
AdjustSurd: true, AdjustSurd: true,
safariContextMenuBug: true,
safariNegativeSpaceBug: true, safariNegativeSpaceBug: true,
safariVerticalAlignBug: !v3p1, safariVerticalAlignBug: !v3p1,
safariTextNodeBug: !v3p0, safariTextNodeBug: !v3p0,
@ -2303,8 +2319,7 @@
Konqueror: function (browser) { Konqueror: function (browser) {
HTMLCSS.Augment({ HTMLCSS.Augment({
konquerorVerticalAlignBug: true, konquerorVerticalAlignBug: true
noContextMenuBug: true
}); });
} }
}); });

View File

@ -24,15 +24,13 @@
MathJax.OutputJax.NativeMML = MathJax.OutputJax({ MathJax.OutputJax.NativeMML = MathJax.OutputJax({
id: "NativeMML", id: "NativeMML",
version: "1.1.6", version: "1.1.9",
directory: MathJax.OutputJax.directory + "/NativeMML", directory: MathJax.OutputJax.directory + "/NativeMML",
extensionDir: MathJax.OutputJax.extensionDir + "/NativeMML", extensionDir: MathJax.OutputJax.extensionDir + "/NativeMML",
config: { config: {
scale: 100, // scaling factor for all math scale: 100, // scaling factor for all math
showMathMenu: true, // attach math context menu to mathml?
showMathMenuMSIE: true, // separtely determine if MSIE should have math menu
// (since the code for that is a bit delicate)
styles: { styles: {
"DIV.MathJax_MathML": { "DIV.MathJax_MathML": {
"text-align": "center", "text-align": "center",

View File

@ -22,21 +22,33 @@
* limitations under the License. * limitations under the License.
*/ */
(function (nMML,HUB,AJAX) { (function (nMML,HUB,AJAX,HTML) {
var MML, isMSIE = HUB.Browser.isMSIE; var MML, isMSIE = HUB.Browser.isMSIE;
var EVENT, TOUCH, HOVER, ZOOM; // filled in later
HUB.Register.StartupHook("MathZoom Ready",function () {ZOOM = MathJax.Extension.MathZoom});
nMML.Augment({ nMML.Augment({
LEFTBUTTON: (isMSIE ? 1 : 0), // the event.button value for left button
MENUKEY: "altKey", // the event value for alternate context menu
noContextMenuBug: HUB.Browser.isKonequeror,
msieQuirks: (isMSIE && !(document.compatMode === "BackCompat")),
msieEventBug: HUB.Browser.isIE9,
// //
// User can configure styles // User can configure styles
// //
config: {styles: {}}, settings: HUB.config.menuSettings, config: {styles: {}},
Startup: function () {return MathJax.Ajax.Styles(this.config.styles)}, settings: HUB.config.menuSettings,
Startup: function () {
// Set up event handling
EVENT = MathJax.Extension.MathEvents.Event;
TOUCH = MathJax.Extension.MathEvents.Touch;
HOVER = MathJax.Extension.MathEvents.Hover;
this.ContextMenu = EVENT.ContextMenu;
this.Mousedown = EVENT.AltContextMenu;
this.Mouseover = HOVER.Mouseover;
this.Mouseout = HOVER.Mouseout;
this.Mousemove = HOVER.Mousemove;
// Set up styles
return AJAX.Styles(this.config.styles);
},
Config: function () { Config: function () {
this.SUPER(arguments).Config.call(this); this.SUPER(arguments).Config.call(this);
if (this.settings.scale) {this.config.scale = this.settings.scale} if (this.settings.scale) {this.config.scale = this.settings.scale}
@ -52,13 +64,14 @@
"div.MathJax_MathContainer > span": {"text-align": align+"!important"} "div.MathJax_MathContainer > span": {"text-align": align+"!important"}
}); });
} }
this.require.push(MathJax.OutputJax.extensionDir+"/MathEvents.js");
}, },
// //
// Set up MathPlayer for IE on the first time through. // Set up MathPlayer for IE on the first time through.
// //
InitializeMML: function () { InitializeMML: function () {
this.initialized = true; this.initialized = true;
if (MathJax.Hub.Browser.isMSIE) { if (HUB.Browser.isMSIE) {
try { try {
// //
// Insert data needed to use MathPlayer for MathML output // Insert data needed to use MathPlayer for MathML output
@ -97,25 +110,35 @@
{prev.parentNode.removeChild(prev)} {prev.parentNode.removeChild(prev)}
var math = script.MathJax.elementJax.root; var math = script.MathJax.elementJax.root;
var type = (math.Get("display") === "block" ? "div" : "span"); var type = (math.Get("display") === "block" ? "div" : "span");
var span = document.createElement(type), container = span; var span = HTML.Element(type,{
span.className = "MathJax_MathML"; span.style.fontSize = this.config.scale+"%"; className: "MathJax_MathML", style: {"font-size": this.config.scale+"%"}
if (isMSIE && this.config.showMathMenuMSIE) { },[["span",{
container = MathJax.HTML.addElement(span,"span",{ className:"MathJax_MathContainer", isMathJax: true, jaxID:this.id,
className:"MathJax_MathContainer", style:{position:"relative", display:"inline-block", "white-space":"nowrap"}
style:{display:"inline-block",position:"relative"} }, [["span",{isMathJax:true, style:{display:"inline-block"}}]] // for Firefox hover and zoom
}); ]]), container = span.firstChild;
} math.toNativeMML(container.firstChild);
math.toNativeMML(container);
script.parentNode.insertBefore(span,script); script.parentNode.insertBefore(span,script);
if (isMSIE) { if (isMSIE) {
if (this.config.showMathMenuMSIE) {this.MSIEoverlay(span)} if (container.addEventListener) {
container.addEventListener("contextmenu",EVENT.Menu,true);
container.addEventListener("mouseover",EVENT.Mouseover,true);
container.addEventListener("mouseout",EVENT.Mouseout,true);
container.addEventListener("mousedown",EVENT.Mousedown,true);
container.addEventListener("mouseup",EVENT.False,true);
container.addEventListener("click",EVENT.Click,true);
container.addEventListener("dblclick",EVENT.DblClick,true);
} else {
var config = (this.config.showMathMenuMSIE != null ? this : HUB).config;
if (config.showMathMenuMSIE) {this.MSIEoverlay(container)}
}
} else { } else {
math = span.firstChild; container.oncontextmenu = EVENT.Menu;
math.oncontextmenu = this.ContextMenu; container.onmouseover = EVENT.Mouseover;
math.onmouseover = this.Mouseover; container.onmouseout = EVENT.Mouseout;
math.onmousedown = this.Mousedown; container.onmousedown = EVENT.Mousedown;
math.onclick = this.Click; container.onclick = EVENT.Click;
math.ondblclick = this.DblClick; container.ondblclick = EVENT.DblClick;
} }
}, },
// //
@ -139,109 +162,56 @@
// //
MSIEoverlay: function (span) { MSIEoverlay: function (span) {
var math = span.firstChild; var math = span.firstChild;
span.style.position = "absolute"; // so we can measure height/depth if (math.nodeName.toLowerCase() === "span") {math = math.firstChild}
var HD = span.scrollHeight, W = span.offsetWidth; var bbox = this.getHoverBBox(null,math,{});
var tmp = MathJax.HTML.addElement(span,"img",{src:"about:blank",style:{width:0,height:HD+"px"}}); HTML.addElement(span,"span",{
var D = span.scrollHeight - HD; span.removeChild(tmp);
span.style.position = ""; // back to normal
var top, left, isDisplay = (span.parentNode.nodeName.toLowerCase() === "div");
if (isDisplay && this.quirks) {top = -HD; left = Math.floor(-W/2)} else {top = D-HD, left = -W}
MathJax.HTML.addElement(span,"span",{
style:{display:"inline-block", width:0, height:0, position:"relative"} style:{display:"inline-block", width:0, height:0, position:"relative"}
},[["span",{ },[["span",{isMathJax: true, className: "MathJax_MathPlayer_Overlay",
style:{display:"inline-block", position:"absolute", left:left+"px", top:top+"px", style:{
width:math.offsetWidth+"px", height:HD+"px", cursor:"pointer", display:"inline-block", position:"absolute",
"background-color":"white", filter:"alpha(opacity=0)"}, left:HOVER.Px(-bbox.w), top:HOVER.Px(-bbox.h-(bbox.y||0)-1),
onmousedown: this.MSIEevent, oncontextmenu: this.MSIEevent, onclick: this.MSIEevent, width:HOVER.Px(bbox.w), height:HOVER.Px(bbox.h+bbox.d), cursor:"pointer",
/*onmouseup: this.MSIEevent,*/ onmousemove: this.MSIEevent, ondblclick: this.MSIEevent, "background-color":"white", filter:"alpha(opacity=0)"
onmouseover: this.MSIEevent, onmouseout: this.MSIEevent }
}]]); }]]);
HUB.Insert(span,{
msieMath: math,
onmousedown: this.MSIEevent, oncontextmenu: this.MSIEevent, onclick: this.MSIEevent,
onmouseup: this.MSIEevent, onmousemove: this.MSIEevent, ondblclick: this.MSIEevent,
onmouseover: this.MSIEevent, onmouseout: this.MSIEevent
});
}, },
MSIEmath: function (span) { MSIEevents: {
// display="block" seems to produce an extra span, so need extra firstChild mousedown:"Mousedown", contextmenu:"ContextMenu", click:"Click",
var math = span.parentNode.previousSibling.firstChild; mouseup:"Mouseup", mousemove:"Mousemove", dblclick: "DblClick",
return (math.nodeName.toLowerCase() === "span" ? math.firstChild : math); mouseover:"Mouseover", mouseout:"Mouseout"
}, },
MSIEevent: function () { MSIEevent: function () {
var math = nMML.MSIEmath(this);
var event = window.event; var event = window.event;
var action = nMML["MSIE"+event.type]; var type = nMML.MSIEevents[event.type];
if (action && action.call(nMML,event,math,this)) {return false} if (nMML[type] && nMML[type](event,this) === false) {return false}
math.fireEvent("on"+event.type,event); if (ZOOM && ZOOM.HandleEvent(event,type,this) === false) {return false}
return false; if (event.srcElement.className === "MathJax_MathPlayer_Overlay" && this.msieMath.fireEvent) {
}, // for now, ignore all other events. This will disable MathPlayer's zoom
MSIEmousedown: function (event,math,span) { // feature, but also its <maction> support.
if (event[this.MENUKEY] && event.button === this.LEFTBUTTON && this.settings.context !== "MathJax") { if (type === "ContextMenu") {this.msieMath.fireEvent("on"+event.type,event)}
this.trapUp = this.trapClick = true;
this.ContextMenu.call(span,event,true);
return true;
} }
if (this.MSIEzoomKeys && this.MSIEzoomKeys(event)) {this.trapUp = true; return true} return EVENT.False(event);
return false;
}, },
MSIEcontextmenu: function (event,math,span) {
if (this.settings.context === "MathJax") {
this.trapUp = this.trapClick = true;
this.ContextMenu.call(span,event,true);
return true;
}
return false;
},
// Other event handlers are in MathZoom.js
// getJaxFromMath: function (math) {return HUB.getJaxFor(math.parentNode.nextSibling)},
// Autoload the MathMenu code, when needed getHoverSpan: function (jax,math) {return math.firstChild},
// getHoverBBox: function (jax,span,math) {return EVENT.getBBox(span.parentNode)},
ContextMenu: function (event,force) {
if (nMML.config.showMathMenu && (nMML.settings.context === "MathJax" || force)) { Zoom: function (root,span,math,Mw,Mh) {
if (nMML.safariContextMenuBug) {setTimeout('window.getSelection().empty()',0)} root.toNativeMML(span,span);
if (!event || nMML.msieEventBug) {event = window.event} if (this.msieIE8HeightBug) {span.style.position = "absolute"}
var MENU = MathJax.Menu; var mW = math.offsetWidth || math.scrollWidth,
if (MENU) { mH = math.offsetHeight || math.scrollHeight;
if (document.selection) {setTimeout("document.selection.empty()",0)} var zW = span.offsetWidth, zH = span.offsetHeight;
var script = (isMSIE ? this.parentNode.parentNode.nextSibling : this.parentNode.nextSibling); if (this.msieIE8HeightBug) {span.style.position = ""}
MENU.jax = HUB.getJaxFor(script); return {Y:-EVENT.getBBox(span.parentNode).h, mW:mW, mH:mH, zW:zW, zH:zH}
MENU.menu.items[1].menu.items[1].name =
(MENU.jax.inputJax.id === "MathML" ? "Original" : MENU.jax.inputJax.id);
delete nMML.trapClick; delete nMML.trapUp;
return MENU.menu.Post(event);
} else {
if (!AJAX.loadingMathMenu) {
AJAX.loadingMathMenu = true;
var EVENT = {pageX:event.pageX, pageY:event.pageY, clientX:event.clientX, clientY:event.clientY};
MathJax.Callback.Queue(
AJAX.Require("[MathJax]/extensions/MathMenu.js"),
function () {delete AJAX.loadingMathMenu},
[this,arguments.callee,EVENT,force] // call this function again
);
}
if (!event) {event = window.event}
if (event.preventDefault) {event.preventDefault()}
if (event.stopPropagation) {event.stopPropagation()}
event.cancelBubble = true;
event.returnValue = false;
return false;
}
}
}, },
Mousedown: function (event) {
if (nMML.config.showMathMenu) {
if (!event) {event = window.event}
if (nMML.settings.context === "MathJax") {
if (!nMML.noContextMenuBug || event.button !== 2) return
} else {
if (!event[nMML.MENUKEY] || event.button !== nMML.LEFTBUTTON) return
}
return nMML.ContextMenu.call(this,event,true);
}
},
/*
* Used for zooming, when that is enabled by the MathMenu
*/
Mouseover: function (event) {nMML.HandleEvent(event,"Mouseover",this)},
Click: function (event) {nMML.HandleEvent(event,"Click",this)},
DblClick: function (event) {nMML.HandleEvent(event,"DblClick",this)},
HandleEvent: function (event,type,math) {},
NAMEDSPACE: { NAMEDSPACE: {
negativeveryverythinmathspace: "-.0556em", negativeveryverythinmathspace: "-.0556em",
@ -307,11 +277,12 @@
// //
// Create a MathML element // Create a MathML element
// //
NativeMMLelement: ( NativeMMLelement: function (type) {
isMSIE ? var math = (isMSIE ? document.createElement("mjx:"+type) :
function (type) {return document.createElement("mjx:"+type)} : document.createElementNS(nMML.MMLnamespace,type));
function (type) {return document.createElementNS(nMML.MMLnamespace,type)} math.isMathJax = true;
) return math;
}
}); });
MML.mrow.Augment({ MML.mrow.Augment({
@ -366,7 +337,7 @@
} }
}); });
if (MathJax.Hub.Browser.isFirefox) { if (HUB.Browser.isFirefox) {
MML.mtable.Augment({ MML.mtable.Augment({
toNativeMML: function (parent) { toNativeMML: function (parent) {
// //
@ -504,10 +475,25 @@
// //
setTimeout(MathJax.Callback(["loadComplete",nMML,"jax.js"]),0); setTimeout(MathJax.Callback(["loadComplete",nMML,"jax.js"]),0);
}); });
//
// Determine browser characteristics
//
HUB.Browser.Select({
MSIE: function (browser) {
var mode = (document.documentMode || 0);
nMML.msieIE8HeightBug = (mode === 8);
},
Opera: function (browser) {
nMML.operaPositionBug = true;
}
});
HUB.Register.StartupHook("End Cookie",function () { HUB.Register.StartupHook("End Cookie",function () {
if (HUB.config.menuSettings.zoom !== "None") if (HUB.config.menuSettings.zoom !== "None")
{AJAX.Require("[MathJax]/extensions/MathZoom.js")} {AJAX.Require("[MathJax]/extensions/MathZoom.js")}
}); });
})(MathJax.OutputJax.NativeMML, MathJax.Hub, MathJax.Ajax); })(MathJax.OutputJax.NativeMML, MathJax.Hub, MathJax.Ajax, MathJax.HTML);