Skip to content

Commit 1318ffe

Browse files
committed
Fix CHTML.getNode() to handle nested tags, and fix CHTMLchildNode() for munderover and msubsup elements. Resolves issue #1360
1 parent 24a6cf7 commit 1318ffe

File tree

1 file changed

+37
-16
lines changed
  • unpacked/jax/output/CommonHTML

1 file changed

+37
-16
lines changed

unpacked/jax/output/CommonHTML/jax.js

Lines changed: 37 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -334,21 +334,32 @@
334334
ucMatch: HTML.ucMatch,
335335
setScript: HTML.setScript,
336336

337-
//
338-
// This replaces node.getElementsByTagName(type)[0]
339-
// and should be replaced by that if we go back to using
340-
// custom tags
341-
//
342-
getNode: (document.getElementsByClassName ?
343-
function (node,type) {return node.getElementsByClassName(type)[0]} :
337+
getNodesByClass: (document.getElementsByClassName ?
338+
function (node,type) {return node.getElementsByClassName(type)} :
344339
function (node,type) {
340+
var NODES = [];
345341
var nodes = node.getElementsByTagName("span");
346342
var name = RegExp("\\b"+type+"\\b");
347343
for (var i = 0, m = nodes.length; i < m; i++) {
348-
if (name.test(nodes[i].className)) return nodes[i];
344+
if (name.test(nodes[i].className)) NODES.push = nodes[i];
349345
}
350346
}
351347
),
348+
getNode: function (node,type) {
349+
var nodes = this.getNodesByClass(node,type);
350+
if (nodes.length === 1) return nodes[0];
351+
var closest = nodes[0], N = this.getNodeDepth(node,closest);
352+
for (var i = 1, m = nodes.length; i < m; i++) {
353+
var n = this.getNodeDepth(node,nodes[i]);
354+
if (n < N) {closest = nodes[i]; N = n}
355+
}
356+
return closest;
357+
},
358+
getNodeDepth: function (parent,node) {
359+
var n = 0;
360+
while (node && node !== parent) {node = node.parentNode; n++}
361+
return n;
362+
},
352363

353364

354365
/********************************************/
@@ -2070,9 +2081,9 @@
20702081
//
20712082
var under, over, nodes = [];
20722083
if (stretch) {
2073-
base = CHTML.getNode(node,"mjx-op");
2074-
under = CHTML.getNode(node,"mjx-under");
2075-
over = CHTML.getNode(node,"mjx-over");
2084+
if (this.data[this.base]) base = CHTML.getNode(node,"mjx-op");
2085+
if (this.data[this.under]) under = CHTML.getNode(node,"mjx-under");
2086+
if (this.data[this.over]) over = CHTML.getNode(node,"mjx-over");
20762087
nodes[0] = base; nodes[1] = under||over; nodes[2] = over;
20772088
} else {
20782089
var types = ["mjx-op","mjx-under","mjx-over"];
@@ -2256,7 +2267,12 @@
22562267
this.CHTML = BBOX;
22572268
},
22582269
CHTMLstretchV: MML.mbase.CHTMLstretchV,
2259-
CHTMLstretchH: MML.mbase.CHTMLstretchH
2270+
CHTMLstretchH: MML.mbase.CHTMLstretchH,
2271+
CHTMLchildNode: function (node,i) {
2272+
var types = ["mjx-op","mjx-under","mjx-over"];
2273+
if (this.over === 1) types[1] = types[2];
2274+
return CHTML.getNode(node,types[i]);
2275+
}
22602276
});
22612277

22622278
/********************************************************/
@@ -2271,9 +2287,9 @@
22712287
//
22722288
var base, sub, sup;
22732289
if (stretch) {
2274-
base = CHTML.getNode(node,"mjx-base");
2275-
sub = CHTML.getNode(node,"mjx-sub");
2276-
sup = CHTML.getNode(node,"mjx-sup");
2290+
if (this.data[this.base]) base = CHTML.getNode(node,"mjx-base");
2291+
if (this.data[this.sub]) sub = CHTML.getNode(node,"mjx-sub");
2292+
if (this.data[this.sup]) sup = CHTML.getNode(node,"mjx-sup");
22772293
stack = CHTML.getNode(node,"mjx-stack");
22782294
} else {
22792295
var types = ["mjx-base","mjx-sub","mjx-sup"];
@@ -2362,7 +2378,12 @@
23622378
return node;
23632379
},
23642380
CHTMLstretchV: MML.mbase.CHTMLstretchV,
2365-
CHTMLstretchH: MML.mbase.CHTMLstretchH
2381+
CHTMLstretchH: MML.mbase.CHTMLstretchH,
2382+
CHTMLchildNode: function (node,i) {
2383+
var types = ["mjx-base","mjx-sub","mjx-sup"];
2384+
if (this.over === 1) types[1] = types[2];
2385+
return CHTML.getNode(node,types[i]);
2386+
}
23662387
});
23672388

23682389
/********************************************************/

0 commit comments

Comments
 (0)