blob: 8376ccf375def30bec02e4226ea189140efcbe65 [file] [log] [blame]
var MathMLFragments = {
"annotation": "\
<semantics>\
<mrow></mrow>\
<annotation class='element text-container'></annotation>\
</semantics>",
"annotation-xml": "\
<semantics>\
<mrow></mrow>\
<annotation-xml class='element text-container foreign-container'></annotation-xml>\
</semantics>",
"maction": "\
<maction class='element' actiontype='statusline'>\
<mrow class='mathml-container'></mrow>\
<mtext class='text-container'></mtext>\
</maction>",
"menclose": "<menclose class='element mathml-container'></menclose>",
"merror": "<merror class='element mathml-container'></merror>",
"mfrac": "\
<mfrac class='element'>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
</mfrac>",
"mi": "<mi class='element text-container foreign-container'></mi>",
"mmultiscripts": "\
<mmultiscripts class='element'>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
</mmultiscripts>",
"mn": "<mn class='element text-container foreign-container'></mn>",
"mo": "<mo class='element text-container foreign-container'></mo>",
"mover": "\
<mover class='element'>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
</mover>",
"mpadded": "<mpadded class='element mathml-container'></mpadded>",
"mphantom": "<mphantom class='element mathml-container'></mphantom>",
"mprescripts": "\
<mmultiscripts>\
<mrow class='mathml-container'></mrow>\
<mprescripts class='element'/>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
</mmultiscripts>",
"mroot": "\
<mroot class='element'>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
</mroot>",
"mrow": "<mrow class='element mathml-container'></mrow>",
"ms": "<ms class='element text-container foreign-container'></ms>",
"mspace": "<mspace class='element'></mspace>",
"msqrt": "<msqrt class='element mathml-container'></msqrt>",
"mstyle": "<mstyle class='element mathml-container'></mstyle>",
"msub": "\
<msub class='element'>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
</msub>",
"msubsup": "\
<msubsup class='element'>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
</msubsup>",
"msup": "\
<msup class='element'>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
</msup>",
"mtable": "\
<mtable class='element'>\
<mtr>\
<mtd class='mathml-container'>\
</mtd>\
</mtr>\
</mtable>",
"mtd": "\
<mtable>\
<mtr>\
<mtd class='element mathml-container'>\
</mtd>\
</mtr>\
</mtable>",
"mtext": "<mtext class='element text-container foreign-container'></mtext>",
"mtr": "\
<mtable>\
<mtr class='element'>\
<mtd class='mathml-container'>\
</mtd>\
</mtr>\
</mtable>",
"munder": "\
<munder class='element'>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
</munder>",
"munderover": "\
<munderover class='element'>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
<mrow class='mathml-container'></mrow>\
</munderover>",
"none": "\
<mmultiscripts>\
<mrow class='mathml-container'></mrow>\
<none class='element'/>\
<mrow class='mathml-container'></mrow>\
</mmultiscripts>",
"semantics": "\
<semantics class='element'>\
<mrow class='mathml-container'></mrow>\
<annotation class='text-container'></annotation>\
</semantics>"
};
var FragmentHelper = {
mathml_namespace: "http://www.w3.org/1998/Math/MathML",
createElement: function(tag) {
return document.createElementNS(this.mathml_namespace, tag);
},
isValidChildOfMrow: function(tag) {
return !(tag == "annotation" ||
tag == "annotation-xml" ||
tag == "mprescripts" ||
tag == "none" ||
tag == "mtr" ||
tag == "mtd");
},
isEmpty: function(tag) {
return tag === "mspace" || tag == "mprescripts" || tag == "none";
},
element: function(fragment) {
return fragment.getElementsByClassName('element')[0];
},
appendChild: function(fragment, allowInvalid) {
var element = this.element(fragment) || fragment;
if (element.classList.contains("foreign-container")) {
var el = document.createElement("span");
el.textContent = "a";
return element.appendChild(el);
}
if (element.classList.contains("mathml-container") || allowInvalid) {
var el = this.createElement("mi");
el.textContent = "a";
return element.appendChild(el);
}
throw "Cannot append child to the element";
},
forceNonEmptyElement: function(fragment) {
var element = this.element(fragment) || fragment;
if (element.firstElementChild)
return element.firstElementChild;
return this.appendChild(fragment);
},
forceNonEmptyDescendants: function(fragment) {
var element = this.element(fragment) || fragment;
if (element.classList.contains("mathml-container") ||
element.classList.contains("foreign-container")) {
for (var i = 0; i < 10; i++)
this.appendChild(element);
return;
}
var child = element.firstElementChild;
if (child) {
for (; child; child = child.nextElementSibling) {
this.forceNonEmptyDescendants(child);
}
return;
}
},
}