|
336 | 336 | ucMatch: HTML.ucMatch,
|
337 | 337 | setScript: HTML.setScript,
|
338 | 338 |
|
339 |
| - // |
340 |
| - // This replaces node.getElementsByTagName(type)[0] |
341 |
| - // and should be replaced by that if we go back to using |
342 |
| - // custom tags |
343 |
| - // |
344 |
| - getNode: (document.getElementsByClassName ? |
345 |
| - function (node,type) {return node.getElementsByClassName(type)[0]} : |
| 339 | + getNodesByClass: (document.getElementsByClassName ? |
| 340 | + function (node,type) {return node.getElementsByClassName(type)} : |
346 | 341 | function (node,type) {
|
| 342 | + var NODES = []; |
347 | 343 | var nodes = node.getElementsByTagName("span");
|
348 | 344 | var name = RegExp("\\b"+type+"\\b");
|
349 | 345 | for (var i = 0, m = nodes.length; i < m; i++) {
|
350 |
| - if (name.test(nodes[i].className)) return nodes[i]; |
| 346 | + if (name.test(nodes[i].className)) NODES.push = nodes[i]; |
351 | 347 | }
|
| 348 | + return NODES; |
352 | 349 | }
|
353 | 350 | ),
|
| 351 | + getNode: function (node,type) { |
| 352 | + var nodes = this.getNodesByClass(node,type); |
| 353 | + if (nodes.length === 1) return nodes[0]; |
| 354 | + var closest = nodes[0], N = this.getNodeDepth(node,closest); |
| 355 | + for (var i = 1, m = nodes.length; i < m; i++) { |
| 356 | + var n = this.getNodeDepth(node,nodes[i]); |
| 357 | + if (n < N) {closest = nodes[i]; N = n} |
| 358 | + } |
| 359 | + return closest; |
| 360 | + }, |
| 361 | + getNodeDepth: function (parent,node) { |
| 362 | + var n = 0; |
| 363 | + while (node && node !== parent) {node = node.parentNode; n++} |
| 364 | + return n; |
| 365 | + }, |
354 | 366 |
|
355 | 367 |
|
356 | 368 | /********************************************/
|
|
2072 | 2084 | //
|
2073 | 2085 | var under, over, nodes = [];
|
2074 | 2086 | if (stretch) {
|
2075 |
| - base = CHTML.getNode(node,"mjx-op"); |
2076 |
| - under = CHTML.getNode(node,"mjx-under"); |
2077 |
| - over = CHTML.getNode(node,"mjx-over"); |
| 2087 | + if (this.data[this.base]) base = CHTML.getNode(node,"mjx-op"); |
| 2088 | + if (this.data[this.under]) under = CHTML.getNode(node,"mjx-under"); |
| 2089 | + if (this.data[this.over]) over = CHTML.getNode(node,"mjx-over"); |
2078 | 2090 | nodes[0] = base; nodes[1] = under||over; nodes[2] = over;
|
2079 | 2091 | } else {
|
2080 | 2092 | var types = ["mjx-op","mjx-under","mjx-over"];
|
|
2258 | 2270 | this.CHTML = BBOX;
|
2259 | 2271 | },
|
2260 | 2272 | CHTMLstretchV: MML.mbase.CHTMLstretchV,
|
2261 |
| - CHTMLstretchH: MML.mbase.CHTMLstretchH |
| 2273 | + CHTMLstretchH: MML.mbase.CHTMLstretchH, |
| 2274 | + CHTMLchildNode: function (node,i) { |
| 2275 | + var types = ["mjx-op","mjx-under","mjx-over"]; |
| 2276 | + if (this.over === 1) types[1] = types[2]; |
| 2277 | + return CHTML.getNode(node,types[i]); |
| 2278 | + } |
2262 | 2279 | });
|
2263 | 2280 |
|
2264 | 2281 | /********************************************************/
|
|
2273 | 2290 | //
|
2274 | 2291 | var base, sub, sup;
|
2275 | 2292 | if (stretch) {
|
2276 |
| - base = CHTML.getNode(node,"mjx-base"); |
2277 |
| - sub = CHTML.getNode(node,"mjx-sub"); |
2278 |
| - sup = CHTML.getNode(node,"mjx-sup"); |
| 2293 | + if (this.data[this.base]) base = CHTML.getNode(node,"mjx-base"); |
| 2294 | + if (this.data[this.sub]) sub = CHTML.getNode(node,"mjx-sub"); |
| 2295 | + if (this.data[this.sup]) sup = CHTML.getNode(node,"mjx-sup"); |
2279 | 2296 | stack = CHTML.getNode(node,"mjx-stack");
|
2280 | 2297 | } else {
|
2281 | 2298 | var types = ["mjx-base","mjx-sub","mjx-sup"];
|
|
2364 | 2381 | return node;
|
2365 | 2382 | },
|
2366 | 2383 | CHTMLstretchV: MML.mbase.CHTMLstretchV,
|
2367 |
| - CHTMLstretchH: MML.mbase.CHTMLstretchH |
| 2384 | + CHTMLstretchH: MML.mbase.CHTMLstretchH, |
| 2385 | + CHTMLchildNode: function (node,i) { |
| 2386 | + var types = ["mjx-base","mjx-sub","mjx-sup"]; |
| 2387 | + if (this.over === 1) types[1] = types[2]; |
| 2388 | + return CHTML.getNode(node,types[i]); |
| 2389 | + } |
2368 | 2390 | });
|
2369 | 2391 |
|
2370 | 2392 | /********************************************************/
|
|
0 commit comments