Fix CHTML.getNode() to handle nested tags, and fix CHTMLchildNode() for munderover and msubsup elements. Resolves issue #1360

This commit is contained in:
Davide P. Cervone 2016-01-26 14:59:32 -05:00
parent 24a6cf7c25
commit 1318ffeb88

View File

@ -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]);
}
});
/********************************************************/