|
334 | 334 | ucMatch: HTML.ucMatch,
|
335 | 335 | setScript: HTML.setScript,
|
336 | 336 |
|
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)} : |
344 | 339 | function (node,type) {
|
| 340 | + var NODES = []; |
345 | 341 | var nodes = node.getElementsByTagName("span");
|
346 | 342 | var name = RegExp("\\b"+type+"\\b");
|
347 | 343 | 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]; |
349 | 345 | }
|
350 | 346 | }
|
351 | 347 | ),
|
| 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 | + }, |
352 | 363 |
|
353 | 364 |
|
354 | 365 | /********************************************/
|
|
2070 | 2081 | //
|
2071 | 2082 | var under, over, nodes = [];
|
2072 | 2083 | 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"); |
2076 | 2087 | nodes[0] = base; nodes[1] = under||over; nodes[2] = over;
|
2077 | 2088 | } else {
|
2078 | 2089 | var types = ["mjx-op","mjx-under","mjx-over"];
|
|
2256 | 2267 | this.CHTML = BBOX;
|
2257 | 2268 | },
|
2258 | 2269 | 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 | + } |
2260 | 2276 | });
|
2261 | 2277 |
|
2262 | 2278 | /********************************************************/
|
|
2271 | 2287 | //
|
2272 | 2288 | var base, sub, sup;
|
2273 | 2289 | 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"); |
2277 | 2293 | stack = CHTML.getNode(node,"mjx-stack");
|
2278 | 2294 | } else {
|
2279 | 2295 | var types = ["mjx-base","mjx-sub","mjx-sup"];
|
|
2362 | 2378 | return node;
|
2363 | 2379 | },
|
2364 | 2380 | 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 | + } |
2366 | 2387 | });
|
2367 | 2388 |
|
2368 | 2389 | /********************************************************/
|
|
0 commit comments