From aad3a6edc296d7d081a9b08053da7695b123f989 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Wang?= Date: Thu, 10 Oct 2013 12:50:30 +0200 Subject: [PATCH 1/2] Try to fix test failures #557. --- unpacked/extensions/mml2jax.js | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/unpacked/extensions/mml2jax.js b/unpacked/extensions/mml2jax.js index fe8ed4f32..b9955aac0 100644 --- a/unpacked/extensions/mml2jax.js +++ b/unpacked/extensions/mml2jax.js @@ -49,15 +49,16 @@ MathJax.Extension.mml2jax = { } if (typeof(element) === "string") {element = document.getElementById(element)} if (!element) {element = document.body} + var mathArray = []; // // Handle all math tags with no namespaces // - this.ProcessMathArray(element.getElementsByTagName("math")); + this.AppendMathElements(mathArray,element.getElementsByTagName("math")); // // Handle math with namespaces in XHTML // if (element.getElementsByTagNameNS) - {this.ProcessMathArray(element.getElementsByTagNameNS(this.MMLnamespace,"math"))} + {this.AppendMathElements(mathArray,element.getElementsByTagNameNS(this.MMLnamespace,"math"))} // // Handle math with namespaces in HTML // @@ -70,7 +71,7 @@ MathJax.Extension.mml2jax = { for (i = 0, m = document.namespaces.length; i < m; i++) { var ns = document.namespaces[i]; if (ns.urn === this.MMLnamespace) - {this.ProcessMathArray(element.getElementsByTagName(ns.name+":math"))} + {this.AppendMathElements(mathArray,element.getElementsByTagName(ns.name+":math"))} } } catch (err) {} } else { @@ -82,12 +83,19 @@ MathJax.Extension.mml2jax = { for (i = 0, m = html.attributes.length; i < m; i++) { var attr = html.attributes[i]; if (attr.nodeName.substr(0,6) === "xmlns:" && attr.nodeValue === this.MMLnamespace) - {this.ProcessMathArray(element.getElementsByTagName(attr.nodeName.substr(6)+":math"))} + {this.AppendMathElements(mathArray,element.getElementsByTagName(attr.nodeName.substr(6)+":math"))} } } } + this.ProcessMathArray(mathArray); }, + AppendMathElements: function(mathArray, math) { + if (math.length) { + for (var i = math.length-1; i >= 0; i--) {mathArray.push(math[i])} + } + }, + ProcessMathArray: function (math) { var i; if (math.length) { @@ -104,6 +112,7 @@ MathJax.Extension.mml2jax = { ProcessMath: function (math) { var parent = math.parentNode; + if (!parent || parent.className === "MathJax_Preview") return; var script = document.createElement("script"); script.type = "math/mml"; parent.insertBefore(script,math); @@ -123,6 +132,7 @@ MathJax.Extension.mml2jax = { ProcessMathFlattened: function (math) { var parent = math.parentNode; + if (!parent || parent.className === "MathJax_Preview") return; var script = document.createElement("script"); script.type = "math/mml"; parent.insertBefore(script,math); @@ -188,7 +198,7 @@ MathJax.Extension.mml2jax = { if (preview === "mathml") { isNodePreview = true; // mathml preview does not work with IE < 9, so fallback to alttext. - if (this.MathTagBug) {preview = "alttext"} else {preview = math} + if (this.MathTagBug) {preview = "alttext"} else {preview = math.cloneNode(false)} } if (preview === "alttext" || preview === "altimg") { isNodePreview = true; From a9d812398b6049c2f28311beafabb7bfbfd64740 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Wang?= Date: Thu, 10 Oct 2013 15:18:44 +0200 Subject: [PATCH 2/2] Address review comments. #557 --- unpacked/extensions/mml2jax.js | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/unpacked/extensions/mml2jax.js b/unpacked/extensions/mml2jax.js index b9955aac0..3e765e887 100644 --- a/unpacked/extensions/mml2jax.js +++ b/unpacked/extensions/mml2jax.js @@ -53,12 +53,12 @@ MathJax.Extension.mml2jax = { // // Handle all math tags with no namespaces // - this.AppendMathElements(mathArray,element.getElementsByTagName("math")); + mathArray.push.apply(mathArray,element.getElementsByTagName("math")); // // Handle math with namespaces in XHTML // if (element.getElementsByTagNameNS) - {this.AppendMathElements(mathArray,element.getElementsByTagNameNS(this.MMLnamespace,"math"))} + {mathArray.push.apply(mathArray,element.getElementsByTagNameNS(this.MMLnamespace,"math"))} // // Handle math with namespaces in HTML // @@ -71,7 +71,7 @@ MathJax.Extension.mml2jax = { for (i = 0, m = document.namespaces.length; i < m; i++) { var ns = document.namespaces[i]; if (ns.urn === this.MMLnamespace) - {this.AppendMathElements(mathArray,element.getElementsByTagName(ns.name+":math"))} + {mathArray.push.apply(mathArray,element.getElementsByTagName(ns.name+":math"))} } } catch (err) {} } else { @@ -83,36 +83,30 @@ MathJax.Extension.mml2jax = { for (i = 0, m = html.attributes.length; i < m; i++) { var attr = html.attributes[i]; if (attr.nodeName.substr(0,6) === "xmlns:" && attr.nodeValue === this.MMLnamespace) - {this.AppendMathElements(mathArray,element.getElementsByTagName(attr.nodeName.substr(6)+":math"))} + {mathArray.push.apply(mathArray,element.getElementsByTagName(attr.nodeName.substr(6)+":math"))} } } } this.ProcessMathArray(mathArray); }, - AppendMathElements: function(mathArray, math) { - if (math.length) { - for (var i = math.length-1; i >= 0; i--) {mathArray.push(math[i])} - } - }, - ProcessMathArray: function (math) { - var i; - if (math.length) { + var i, m = math.length; + if (m) { if (this.MathTagBug) { - for (i = math.length-1; i >= 0; i--) { + for (i = 0; i < m; i++) { if (math[i].nodeName === "MATH") {this.ProcessMathFlattened(math[i])} else {this.ProcessMath(math[i])} } } else { - for (i = math.length-1; i >= 0; i--) {this.ProcessMath(math[i])} + for (i = 0; i < m; i++) {this.ProcessMath(math[i])} } } }, ProcessMath: function (math) { var parent = math.parentNode; - if (!parent || parent.className === "MathJax_Preview") return; + if (!parent || parent.className === MathJax.Hub.config.preRemoveClass) return; var script = document.createElement("script"); script.type = "math/mml"; parent.insertBefore(script,math); @@ -132,7 +126,7 @@ MathJax.Extension.mml2jax = { ProcessMathFlattened: function (math) { var parent = math.parentNode; - if (!parent || parent.className === "MathJax_Preview") return; + if (!parent || parent.className === MathJax.Hub.config.preRemoveClass) return; var script = document.createElement("script"); script.type = "math/mml"; parent.insertBefore(script,math);