www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit bb695a2d9aa5c70a628a5e27ff2e28ed88347914
parent 9a05b341136e3ca7ee8e05d0a0e6aa2b09efeffd
Author: dpvc <dpvc@b8fd5906-0fad-46e2-a0d3-10d94ff285d1>
Date:   Sun, 10 Oct 2010 23:25:11 +0000

Work around MSIE bug where outerHTML doesn't put quotation marks around attribute values in some cases (resolves issue at https://sourceforge.net/projects/mathjax/forums/forum/948701/topic/3873440)

git-svn-id: https://mathjax.svn.sourceforge.net/svnroot/mathjax/trunk@622 b8fd5906-0fad-46e2-a0d3-10d94ff285d1

Diffstat:
Mmathjax/extensions/mml2jax.js | 2+-
Mmathjax/unpacked/extensions/mml2jax.js | 70++++++++++++++++++++++++++++++++++++++++++++++++++--------------------
2 files changed, 51 insertions(+), 21 deletions(-)

diff --git a/mathjax/extensions/mml2jax.js b/mathjax/extensions/mml2jax.js @@ -13,6 +13,6 @@ */ MathJax.Unpack([ - ['MathJax.Extension.mml2jax','={varsion:"1.0.3",config:{element:null,preview:"alttext"},','MMLnamespace',':"http://www.w3.org/1998/Math/MathML",','PreProcess',':function(','e){if(!','this.configured','){','MathJax.Hub.','Insert(','this.config',',(',9,'config.','mml2jax||{}));if(',11,'.Augment','){',9,10,'this,',11,17,')}',7,'=true}if(typeof(e)==="string"){e=document.getElementById(e)}if(!e){e=',11,'.element||document.body}','this.ProcessMathArray(e.getElementsByTagName','("math"));if','(e.getElementsByTagNameNS','){this.','ProcessMathArray',31,'(this.',2,',"math"))}var d=document.getElementsByTagName("html")[0];if(d){for(var c=0,b=d.attributes.length;c<b;c++){var a=d.attributes[c];if','(a.nodeName.substr(','0,6)==="xmlns:"&&a.nodeValue===this.',2,'){',29,38,'6)+":math"))}}}},',33,5,'b){var a;if(b.length){if',35,'msieMathTagBug','){','for(a=b.length-1;a>=0;a--){','if(b[a].nodeName==="MATH"){this.','msieProcessMath','(b[a])}else{','this.ProcessMath(b[a','])}}}else{',51,55,'])}}}},ProcessMath',5,'e){var d','=e.parentNode;var a=document.createElement("script");a.type="math/mml";','d','.insertBefore(','a,e);if',35,'msieScriptBug','){var b=e.outerHTML;b=b.replace(/<\\?import .*?>/i,"").replace(/<\\?xml:namespace .*?\\/>/i,"");a.text=b.replace(/&nbsp;/g,"&#xA0;");d.removeChild(e)}else{var ','c=MathJax.HTML.Element("span','");c.appendChild(e);MathJax.HTML.addText(a,c.innerHTML)}','if(this.config.preview!=="none"){this.createPreview(e,a)}},',53,5,'e){var c',62,'c',64,'a,e);var b="";while(e&&','e.nodeName','!=="/MATH"){if(',79,'==="#text"||',79,'==="#comment"){b+=e.nodeValue.replace(/&/g,"&#x26;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}else{b+=this.','toLowerCase','(e.outerHTML)}var d=e;e=e.nextSibling;d','.parentNode.removeChild(','d)}if(e&&',79,'==="/MATH"){e',87,'e)}a.text=b+"</math>";',71,85,5,'b){var d=b.split(/"/);for(var c=0,a=d.length;c<a;c+=2){d[c]=d[c].',85,'()}return d.join(\'"\')},createPreview',5,'b,a){var c;if(',11,'.preview','==="alttext"){var d=b.getAttribute("alttext");if(d!=null){c=[this.filterText(d)]}}else{if(',11,102,' instanceof Array){c=',11,102,'}}if(c){',69,'",{className:',9,14,'preRemoveClass},c);a.parentNode',64,'c,a)}},filterText',5,'a){return a}};',9,'Browser.Select({MSIE',5,'a){',9,10,0,',{',67,':true,',49,':true})}});',9,'Register.PreProcessor(["',4,'",',0,']);MathJax.Ajax.loadComplete("[MathJax]/extensions/mml2jax.js");'] + ['MathJax.','Extension.mml2jax','={varsion:"1.0.3",config:{element:null,preview:"alttext"},','MMLnamespace',':"http://www.w3.org/1998/Math/MathML",','PreProcess',':function(','e){if(!','this.','configured','){',0,'Hub.Insert(','this.config',',(',0,'Hub.config.','mml2jax||{}));if(',13,'.Augment','){',0,12,'this,',13,19,')}',8,'InitBrowser','();',8,9,'=true}if(typeof(e)==="string"){e=document.getElementById(e)}if(!e){e=',13,'.element||document.body}','this.ProcessMathArray(e.getElementsByTagName','("math"));if','(e.getElementsByTagNameNS','){',8,'ProcessMathArray',37,'(',8,3,',"math"))}var d=document.getElementsByTagName("html")[0];if(d){for(var c=0,b=','d.attributes','.length;c<b;c++){var a=',46,'[c];if','(a.nodeName.substr(','0,6)==="xmlns:"&&a.nodeValue===',8,3,'){',35,50,'6)+":math"))}}}},',40,6,'b){var a;if(b.length){if(',8,'msieMathTagBug','){','for(a=b.length-1;a>=0;a--){','if(b[a].nodeName==="MATH"){',8,'msieProcessMath','(b[a])}else{','this.ProcessMath(b[a','])}}}else{',64,69,'])}}}},ProcessMath',6,'e){var d','=e.parentNode;var a=document.createElement("script");a.type="math/mml";','d','.insertBefore(','a,e);if(',8,'msieScriptBug','){var b=',8,'msieOuterHTML','(e);b=b.replace(/<\\?import .*?>/i,"").replace(/<\\?xml:namespace .*?\\/>/i,"");a.text=b.replace(/&nbsp;/g,"&#xA0;");d.removeChild(e)}else{var c=',0,'HTML.Element("span','");c.appendChild(e);',0,'HTML.addText(a,c.innerHTML)}','if(this.config.preview!=="none"){this.createPreview(e,a)}},',67,6,'e){var c',76,'c',78,'a,e);var b="",d;while','(e&&e.nodeName','!=="/MATH"){d=e;e=e.nextSibling;b+=','this.msieNodeHTML(d',');d','.parentNode.removeChild(','d)}if',99,'==="/MATH"){e',103,'e)}a.text=b+"</math>";',91,'msieNodeHTML',6,'d){var c,b,a;if(','d.nodeName==="#','text"||',113,'comment"){c=d.','nodeValue.replace','(/&/g,"&#x26;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}else{if(',8,'msieAttributeBug','){c="<"+d.','nodeName.toLowerCase','();for(b=0,a=',46,'.length;b<a;b','++){if(',46,'[b].','specified){c+=" "+',46,128,122,'()+"=";c+=\'"\'+',46,128,117,'(/\\"/g,\'\\\\"\')+\'"\'}}c+=">"}else{c=',8,'toLowerCase','(d.outerHTML);var e=c.split(/"/);for(b=0,a=e',125,'+=2){e[b]=e',128,139,'()}c=e.join(\'"\')}}return c},',84,6,'d){if(d.nodeName.charAt(0)==="#"){return ',101,')}if(!',8,120,'){return d.outerHTML}var c=',101,');for(var b=0,a=','d.childNodes',125,'++){c+=',8,84,'(',156,'[b])}c+="</"+d.',122,'()+">";return c},createPreview',6,'b,a){var c;if(',13,'.preview','==="alttext"){var d=b.getAttribute("alttext");if(d!=null){c=[',8,'filterText','(d)]}}else{if(',13,169,' instanceof Array){c=',13,169,'}}if(c){c=',0,87,'",{className',':',0,16,'preRemoveClass},c);a.parentNode',78,'c,a)}},',172,6,'a){return a},',28,':function(){',0,'Hub.Browser.Select({MSIE',6,'a',82,0,87,182,':"mathjax"});',0,12,0,1,',{',81,':true,',62,209,120,':(b.outerHTML.substr(12)!==\'"\')})}})}};',0,'Hub.Register.PreProcessor(["',5,'",',0,1,']);',0,'Ajax.loadComplete("[MathJax]/extensions/mml2jax.js");'] ]); diff --git a/mathjax/unpacked/extensions/mml2jax.js b/mathjax/unpacked/extensions/mml2jax.js @@ -41,6 +41,7 @@ MathJax.Extension.mml2jax = { if (!this.configured) { MathJax.Hub.Insert(this.config,(MathJax.Hub.config.mml2jax||{})); if (this.config.Augment) {MathJax.Hub.Insert(this,this.config.Augment)} + this.InitBrowser(); this.configured = true; } if (typeof(element) === "string") {element = document.getElementById(element)} @@ -87,7 +88,7 @@ MathJax.Extension.mml2jax = { script.type = "math/mml"; parent.insertBefore(script,math); if (this.msieScriptBug) { - var html = math.outerHTML; + var html = this.msieOuterHTML(math); html = html.replace(/<\?import .*?>/i,"").replace(/<\?xml:namespace .*?\/>/i,""); script.text = html.replace(/&nbsp;/g,"&#xA0;"); parent.removeChild(math); @@ -103,23 +104,47 @@ MathJax.Extension.mml2jax = { var script = document.createElement("script"); script.type = "math/mml"; parent.insertBefore(script,math); - var mml = ""; + var mml = "", node; while (math && math.nodeName !== "/MATH") { - if (math.nodeName === "#text" || math.nodeName === "#comment") - {mml += math.nodeValue.replace(/&/g,"&#x26;").replace(/</g,"&lt;").replace(/>/g,"&gt;")} - else {mml += this.toLowerCase(math.outerHTML)} - var node = math; - math = math.nextSibling; + node = math; math = math.nextSibling; + mml += this.msieNodeHTML(node); node.parentNode.removeChild(node); } if (math && math.nodeName === "/MATH") {math.parentNode.removeChild(math)} script.text = mml + "</math>"; if (this.config.preview !== "none") {this.createPreview(math,script)} }, - toLowerCase: function (string) { - var parts = string.split(/"/); - for (var i = 0, m = parts.length; i < m; i += 2) {parts[i] = parts[i].toLowerCase()} - return parts.join('"'); + msieNodeHTML: function (node) { + var html, i, m; + if (node.nodeName === "#text" || node.nodeName === "#comment") + {html = node.nodeValue.replace(/&/g,"&#x26;").replace(/</g,"&lt;").replace(/>/g,"&gt;")} + else if (this.msieAttributeBug) { + // In IE, outerHTML doesn't properly quote attributes, so quote them by hand + html = "<"+node.nodeName.toLowerCase(); + for (i = 0, m = node.attributes.length; i < m; i++) { + if (node.attributes[i].specified) { + html += " "+node.attributes[i].nodeName.toLowerCase()+"="; + html += '"'+node.attributes[i].nodeValue.replace(/\"/g,'\\"')+'"'; + } + } + html += ">"; + } else { + html = this.toLowerCase(node.outerHTML) + var parts = html.split(/"/); + for (i = 0, m = parts.length; i < m; i += 2) {parts[i] = parts[i].toLowerCase()} + html = parts.join('"'); + } + return html; + }, + msieOuterHTML: function (node) { + // IE's outerHTML doesn't properly quote + if (node.nodeName.charAt(0) === "#") {return this.msieNodeHTML(node)} + if (!this.msieAttributeBug) {return node.outerHTML} + var html = this.msieNodeHTML(node); + for (var i = 0, m = node.childNodes.length; i < m; i++) + {html += this.msieOuterHTML(node.childNodes[i])} + html += "</"+node.nodeName.toLowerCase()+">" + return html; }, createPreview: function (math,script) { @@ -134,18 +159,23 @@ MathJax.Extension.mml2jax = { } }, - filterText: function (text) {return text} + filterText: function (text) {return text}, + + InitBrowser: function () { + MathJax.Hub.Browser.Select({ + MSIE: function (browser) { + var test = MathJax.HTML.Element("span",{className:"mathjax"}); + MathJax.Hub.Insert(MathJax.Extension.mml2jax,{ + msieScriptBug: true, + msieMathTagBug: true, + msieAttributeBug: (test.outerHTML.substr(12) !== '"') // attributes aren't quoted? + }) + } + }); + } }; -MathJax.Hub.Browser.Select({ - MSIE: function (browser) { - MathJax.Hub.Insert(MathJax.Extension.mml2jax,{ - msieScriptBug: true, - msieMathTagBug: true - }) - } -}); MathJax.Hub.Register.PreProcessor(["PreProcess",MathJax.Extension.mml2jax]); MathJax.Ajax.loadComplete("[MathJax]/extensions/mml2jax.js");