diff --git a/unpacked/jax/output/CommonHTML/jax.js b/unpacked/jax/output/CommonHTML/jax.js index a55922430..e00b8a6b0 100644 --- a/unpacked/jax/output/CommonHTML/jax.js +++ b/unpacked/jax/output/CommonHTML/jax.js @@ -334,21 +334,32 @@ ucMatch: HTML.ucMatch, setScript: HTML.setScript, - // - // This replaces node.getElementsByTagName(type)[0] - // and should be replaced by that if we go back to using - // custom tags - // - getNode: (document.getElementsByClassName ? - function (node,type) {return node.getElementsByClassName(type)[0]} : + getNodesByClass: (document.getElementsByClassName ? + function (node,type) {return node.getElementsByClassName(type)} : function (node,type) { + var NODES = []; var nodes = node.getElementsByTagName("span"); var name = RegExp("\\b"+type+"\\b"); for (var i = 0, m = nodes.length; i < m; i++) { - if (name.test(nodes[i].className)) return nodes[i]; + if (name.test(nodes[i].className)) NODES.push = nodes[i]; } } ), + getNode: function (node,type) { + var nodes = this.getNodesByClass(node,type); + if (nodes.length === 1) return nodes[0]; + var closest = nodes[0], N = this.getNodeDepth(node,closest); + for (var i = 1, m = nodes.length; i < m; i++) { + var n = this.getNodeDepth(node,nodes[i]); + if (n < N) {closest = nodes[i]; N = n} + } + return closest; + }, + getNodeDepth: function (parent,node) { + var n = 0; + while (node && node !== parent) {node = node.parentNode; n++} + return n; + }, /********************************************/ @@ -2070,9 +2081,9 @@ // var under, over, nodes = []; if (stretch) { - base = CHTML.getNode(node,"mjx-op"); - under = CHTML.getNode(node,"mjx-under"); - over = CHTML.getNode(node,"mjx-over"); + if (this.data[this.base]) base = CHTML.getNode(node,"mjx-op"); + if (this.data[this.under]) under = CHTML.getNode(node,"mjx-under"); + if (this.data[this.over]) over = CHTML.getNode(node,"mjx-over"); nodes[0] = base; nodes[1] = under||over; nodes[2] = over; } else { var types = ["mjx-op","mjx-under","mjx-over"]; @@ -2256,7 +2267,12 @@ this.CHTML = BBOX; }, CHTMLstretchV: MML.mbase.CHTMLstretchV, - CHTMLstretchH: MML.mbase.CHTMLstretchH + CHTMLstretchH: MML.mbase.CHTMLstretchH, + CHTMLchildNode: function (node,i) { + var types = ["mjx-op","mjx-under","mjx-over"]; + if (this.over === 1) types[1] = types[2]; + return CHTML.getNode(node,types[i]); + } }); /********************************************************/ @@ -2271,9 +2287,9 @@ // var base, sub, sup; if (stretch) { - base = CHTML.getNode(node,"mjx-base"); - sub = CHTML.getNode(node,"mjx-sub"); - sup = CHTML.getNode(node,"mjx-sup"); + if (this.data[this.base]) base = CHTML.getNode(node,"mjx-base"); + if (this.data[this.sub]) sub = CHTML.getNode(node,"mjx-sub"); + if (this.data[this.sup]) sup = CHTML.getNode(node,"mjx-sup"); stack = CHTML.getNode(node,"mjx-stack"); } else { var types = ["mjx-base","mjx-sub","mjx-sup"]; @@ -2362,7 +2378,12 @@ return node; }, CHTMLstretchV: MML.mbase.CHTMLstretchV, - CHTMLstretchH: MML.mbase.CHTMLstretchH + CHTMLstretchH: MML.mbase.CHTMLstretchH, + CHTMLchildNode: function (node,i) { + var types = ["mjx-base","mjx-sub","mjx-sup"]; + if (this.over === 1) types[1] = types[2]; + return CHTML.getNode(node,types[i]); + } }); /********************************************************/