344 lines
15 KiB
JavaScript
Vendored
344 lines
15 KiB
JavaScript
Vendored
!function(s) {
|
|
var n, l = s.config.menuSettings, o = {}, r = "data-semantic-complexity", t = MathJax.Ajax.config.path;
|
|
t.a11y || (t.a11y = s.config.root + "/extensions/a11y");
|
|
var h = MathJax.Extension.collapsible = {
|
|
version: "1.6.0",
|
|
config: s.CombineConfig("collapsible", {
|
|
disabled: !1
|
|
}),
|
|
dependents: [],
|
|
COMPLEXATTR: r,
|
|
COMPLEXITY: {
|
|
TEXT: .5,
|
|
TOKEN: .5,
|
|
CHILD: 1,
|
|
SCRIPT: .8,
|
|
SQRT: 2,
|
|
SUBSUP: 2,
|
|
UNDEROVER: 2,
|
|
FRACTION: 2,
|
|
ACTION: 2,
|
|
PHANTOM: 0,
|
|
XML: 2,
|
|
GLYPH: 2
|
|
},
|
|
COLLAPSE: {
|
|
identifier: 3,
|
|
number: 3,
|
|
text: 10,
|
|
infixop: 15,
|
|
relseq: 15,
|
|
multirel: 15,
|
|
fenced: 18,
|
|
bigop: 20,
|
|
integral: 20,
|
|
fraction: 12,
|
|
sqrt: 9,
|
|
root: 12,
|
|
vector: 15,
|
|
matrix: 15,
|
|
cases: 15,
|
|
superscript: 9,
|
|
subscript: 9,
|
|
subsup: 9,
|
|
punctuated: {
|
|
endpunct: 1e7,
|
|
startpunct: 1e7,
|
|
value: 12
|
|
}
|
|
},
|
|
MARKER: {
|
|
identifier: "x",
|
|
number: "#",
|
|
text: "...",
|
|
appl: {
|
|
"limit function": "lim",
|
|
value: "f()"
|
|
},
|
|
fraction: "/",
|
|
sqrt: "\u221a",
|
|
root: "\u221a",
|
|
superscript: "\u25fd\u02d9",
|
|
subscript: "\u25fd.",
|
|
subsup: "\u25fd:",
|
|
vector: {
|
|
binomial: "(:)",
|
|
determinant: "|:|",
|
|
value: "\u27e8:\u27e9"
|
|
},
|
|
matrix: {
|
|
squarematrix: "[::]",
|
|
rowvector: "\u27e8\u22ef\u27e9",
|
|
columnvector: "\u27e8\u22ee\u27e9",
|
|
determinant: "|::|",
|
|
value: "(::)"
|
|
},
|
|
cases: "{:",
|
|
infixop: {
|
|
addition: "+",
|
|
subtraction: "\u2212",
|
|
multiplication: "\u22c5",
|
|
implicit: "\u22c5",
|
|
value: "+"
|
|
},
|
|
punctuated: {
|
|
text: "...",
|
|
value: ","
|
|
}
|
|
},
|
|
Enable: function(t, i) {
|
|
l.collapsible = !0, i && (o.collapsible = !0), this.config.disabled = !1, MathJax.Extension["semantic-enrich"].Enable(!1, i),
|
|
t && s.Queue([ "Reprocess", s ]);
|
|
},
|
|
Disable: function(t, i) {
|
|
l.collapsible = !1, i && (o.collapsible = !1), this.config.disabled = !0;
|
|
for (var e = this.dependents.length - 1; 0 <= e; e--) {
|
|
var a = this.dependents[e];
|
|
a.Disable && a.Disable(!1, i);
|
|
}
|
|
t && s.Queue([ "Reprocess", s ]);
|
|
},
|
|
Dependent: function(t) {
|
|
this.dependents.push(t);
|
|
},
|
|
Startup: function() {
|
|
n = MathJax.ElementJax.mml;
|
|
var t = MathJax.Extension["semantic-enrich"];
|
|
t && t.Dependent(this), s.postInputHooks.Add([ "Filter", h ], 100);
|
|
},
|
|
Filter: function(t, i, e) {
|
|
t.enriched && !this.config.disabled && (t.root = t.root.Collapse(), t.root.inputID = e.id);
|
|
},
|
|
Marker: function(t) {
|
|
return n.mtext("\u25c2" + t + "\u25b8").With({
|
|
mathcolor: "blue",
|
|
attr: {},
|
|
attrNames: []
|
|
});
|
|
},
|
|
MakeAction: function(t, i) {
|
|
var e = n.maction(t).With({
|
|
id: this.getActionID(),
|
|
actiontype: "toggle",
|
|
complexity: t.getComplexity(),
|
|
collapsible: !0,
|
|
attrNames: [ "id", "actiontype", "selection", r ],
|
|
attr: {},
|
|
selection: 2
|
|
});
|
|
if (e.attr[r] = e.complexity, "math" === i.type) {
|
|
var a = n.mrow().With({
|
|
complexity: i.complexity,
|
|
attrNames: [],
|
|
attr: {}
|
|
});
|
|
a.Append.apply(a, i.data[0].data), i.data[0].data = [];
|
|
for (var s, l = i.attrNames.length - 1; s = i.attrNames[l]; l--) "data-semantic-" === s.substr(0, 14) && (a.attr[s] = i.attr[s],
|
|
a.attrNames.push(s), delete i.attr[s], i.attrNames.splice(l, 1));
|
|
a.complexity = i.complexity, e.Append(a), i.Append(e), i.complexity = e.complexity,
|
|
e = i;
|
|
} else e.Append(i);
|
|
return e;
|
|
},
|
|
actionID: 1,
|
|
getActionID: function() {
|
|
return "MJX-Collapse-" + this.actionID++;
|
|
},
|
|
Collapse: function(t) {
|
|
t.getComplexity();
|
|
var i, e, a, s = (t.attr || {})["data-semantic-type"];
|
|
return s && (this["Collapse_" + s] ? t = this["Collapse_" + s](t) : this.COLLAPSE[s] && this.MARKER[s] && (i = t.attr["data-semantic-role"],
|
|
"number" != typeof (e = this.COLLAPSE[s]) && (e = e[i] || e.value), t.complexity > e && ("string" != typeof (a = this.MARKER[s]) && (a = a[i] || a.value),
|
|
t = this.MakeAction(this.Marker(a), t)))), t;
|
|
},
|
|
UncollapseChild: function(t, i, e) {
|
|
if (null == e && (e = 1), this.SplitAttribute(t, "children").length === e) {
|
|
var a = 1 === t.data.length && t.data[0].inferred ? t.data[0] : t;
|
|
if (a && a.data[i] && a.data[i].collapsible) return a.SetData(i, a.data[i].data[1]),
|
|
t.complexity = a.complexity = null, t.getComplexity(), 1;
|
|
}
|
|
return 0;
|
|
},
|
|
FindChildText: function(t, i) {
|
|
var e = this.FindChild(t, i);
|
|
return e ? (e.CoreMO() || e).data.join("") : "?";
|
|
},
|
|
FindChild: function(t, i) {
|
|
if (t) {
|
|
if (t.attr && t.attr["data-semantic-id"] === i) return t;
|
|
if (!t.isToken) for (var e = 0, a = t.data.length; e < a; e++) {
|
|
var s = this.FindChild(t.data[e], i);
|
|
if (s) return s;
|
|
}
|
|
}
|
|
return null;
|
|
},
|
|
SplitAttribute: function(t, i) {
|
|
return (t.attr["data-semantic-" + i] || "").split(/,/);
|
|
},
|
|
Collapse_fenced: function(t) {
|
|
var i;
|
|
return this.UncollapseChild(t, 1), t.complexity > this.COLLAPSE.fenced && "leftright" === t.attr["data-semantic-role"] && (i = t.data[0].data.join("") + t.data[t.data.length - 1].data.join(""),
|
|
t = this.MakeAction(this.Marker(i), t)), t;
|
|
},
|
|
Collapse_appl: function(t) {
|
|
var i;
|
|
return this.UncollapseChild(t, 2, 2) && (i = (i = this.MARKER.appl)[t.attr["data-semantic-role"]] || i.value,
|
|
t = this.MakeAction(this.Marker(i), t)), t;
|
|
},
|
|
Collapse_sqrt: function(t) {
|
|
return this.UncollapseChild(t, 0), t.complexity > this.COLLAPSE.sqrt && (t = this.MakeAction(this.Marker(this.MARKER.sqrt), t)),
|
|
t;
|
|
},
|
|
Collapse_root: function(t) {
|
|
return this.UncollapseChild(t, 0), t.complexity > this.COLLAPSE.sqrt && (t = this.MakeAction(this.Marker(this.MARKER.sqrt), t)),
|
|
t;
|
|
},
|
|
Collapse_enclose: function(t) {
|
|
var i, e;
|
|
return 1 !== this.SplitAttribute(t, "children").length || (i = 1 === t.data.length && t.data[0].inferred ? t.data[0] : t).data[0] && i.data[0].collapsible && (e = i.data[0],
|
|
i.SetData(0, e.data[1]), e.SetData(1, t), t = e), t;
|
|
},
|
|
Collapse_bigop: function(t) {
|
|
var i, e;
|
|
return (t.complexity > this.COLLAPSE.bigop || "mo" !== t.data[0].type) && (i = this.SplitAttribute(t, "content").pop(),
|
|
e = h.FindChildText(t, i), t = this.MakeAction(this.Marker(e), t)), t;
|
|
},
|
|
Collapse_integral: function(t) {
|
|
var i, e;
|
|
return (t.complexity > this.COLLAPSE.integral || "mo" !== t.data[0].type) && (i = this.SplitAttribute(t, "content")[0],
|
|
e = h.FindChildText(t, i), t = this.MakeAction(this.Marker(e), t)), t;
|
|
},
|
|
Collapse_relseq: function(t) {
|
|
var i, e;
|
|
return t.complexity > this.COLLAPSE.relseq && (i = this.SplitAttribute(t, "content"),
|
|
e = h.FindChildText(t, i[0]), 1 < i.length && (e += "\u22ef"), t = this.MakeAction(this.Marker(e), t)),
|
|
t;
|
|
},
|
|
Collapse_multirel: function(t) {
|
|
var i, e;
|
|
return t.complexity > this.COLLAPSE.multirel && (i = this.SplitAttribute(t, "content"),
|
|
e = h.FindChildText(t, i[0]) + "\u22ef", t = this.MakeAction(this.Marker(e), t)),
|
|
t;
|
|
},
|
|
Collapse_superscript: function(t) {
|
|
return this.UncollapseChild(t, 0, 2), t.complexity > this.COLLAPSE.superscript && (t = this.MakeAction(this.Marker(this.MARKER.superscript), t)),
|
|
t;
|
|
},
|
|
Collapse_subscript: function(t) {
|
|
return this.UncollapseChild(t, 0, 2), t.complexity > this.COLLAPSE.subscript && (t = this.MakeAction(this.Marker(this.MARKER.subscript), t)),
|
|
t;
|
|
},
|
|
Collapse_subsup: function(t) {
|
|
return this.UncollapseChild(t, 0, 3), t.complexity > this.COLLAPSE.subsup && (t = this.MakeAction(this.Marker(this.MARKER.subsup), t)),
|
|
t;
|
|
}
|
|
};
|
|
s.Register.StartupHook("End Extensions", function() {
|
|
null == l.collapsible ? l.collapsible = !h.config.disabled : h.config.disabled = !l.collapsible,
|
|
s.Register.StartupHook("MathMenu Ready", function() {
|
|
o = MathJax.Menu.cookie;
|
|
var t, i = MathJax.Menu.ITEM, e = MathJax.Menu.menu, a = i.CHECKBOX([ "CollapsibleMath", "Collapsible Math" ], "collapsible", {
|
|
action: function(t) {
|
|
h[l.collapsible ? "Enable" : "Disable"](!0, !0), MathJax.Menu.saveCookie();
|
|
}
|
|
}), s = (e.FindId("Accessibility") || {}).submenu;
|
|
s ? null !== (t = s.IndexOfId("CollapsibleMath")) ? s.items[t] = a : s.items.push(i.RULE(), a) : (t = e.IndexOfId("About"),
|
|
e.items.splice(t, 0, a, i.RULE()));
|
|
}, 15);
|
|
}, 15);
|
|
}(MathJax.Hub), MathJax.Ajax.Require("[a11y]/semantic-enrich.js"), MathJax.Hub.Register.StartupHook("Semantic Enrich Ready", function() {
|
|
var t = MathJax.ElementJax.mml, i = MathJax.Extension.collapsible, a = i.COMPLEXITY, s = i.COMPLEXATTR;
|
|
i.Startup(), t.mbase.Augment({
|
|
Collapse: function() {
|
|
return i.Collapse(this);
|
|
},
|
|
getComplexity: function() {
|
|
if (null == this.complexity) {
|
|
var t = 0;
|
|
if (this.isToken) t = a.TEXT * this.data.join("").length + a.TOKEN; else {
|
|
for (var i = 0, e = this.data.length; i < e; i++) this.data[i] && (this.SetData(i, this.data[i].Collapse()),
|
|
t += this.data[i].complexity);
|
|
1 < e && (t += e * a.CHILD);
|
|
}
|
|
!this.attrNames || "complexity" in this || this.attrNames.push(s), this.attr && (this.attr[s] = t),
|
|
this.complexity = t;
|
|
}
|
|
return this.complexity;
|
|
},
|
|
reportComplexity: function() {
|
|
!this.attr || !this.attrNames || s in this.attr || (this.attrNames.push(s), this.attr[s] = this.complexity);
|
|
}
|
|
}), t.mfrac.Augment({
|
|
getComplexity: function() {
|
|
return null == this.complexity && (this.SUPER(arguments).getComplexity.call(this),
|
|
this.complexity *= a.SCRIPT, this.complexity += a.FRACTION, this.attr[s] = this.complexity),
|
|
this.complexity;
|
|
}
|
|
}), t.msqrt.Augment({
|
|
getComplexity: function() {
|
|
return null == this.complexity && (this.SUPER(arguments).getComplexity.call(this),
|
|
this.complexity += a.SQRT, this.attr[s] = this.complexity), this.complexity;
|
|
}
|
|
}), t.mroot.Augment({
|
|
getComplexity: function() {
|
|
return null == this.complexity && (this.SUPER(arguments).getComplexity.call(this),
|
|
this.complexity -= (1 - a.SCRIPT) * this.data[1].getComplexity(), this.complexity += a.SQRT,
|
|
this.attr[s] = this.complexity), this.complexity;
|
|
}
|
|
}), t.msubsup.Augment({
|
|
getComplexity: function() {
|
|
var t;
|
|
return null == this.complexity && (t = 0, this.data[this.sub] && (t = this.data[this.sub].getComplexity() + a.CHILD),
|
|
this.data[this.sup] && (t = Math.max(this.data[this.sup].getComplexity(), t)), t *= a.SCRIPT,
|
|
this.data[this.sub] && (t += a.CHILD), this.data[this.sup] && (t += a.CHILD), this.data[this.base] && (t += this.data[this.base].getComplexity() + a.CHILD),
|
|
this.complexity = t + a.SUBSUP, this.reportComplexity()), this.complexity;
|
|
}
|
|
}), t.munderover.Augment({
|
|
getComplexity: function() {
|
|
var t;
|
|
return null == this.complexity && (t = 0, this.data[this.sub] && (t = this.data[this.sub].getComplexity() + a.CHILD),
|
|
this.data[this.sup] && (t = Math.max(this.data[this.sup].getComplexity(), t)), t *= a.SCRIPT,
|
|
this.data[this.base] && (t = Math.max(this.data[this.base].getComplexity(), t)),
|
|
this.data[this.sub] && (t += a.CHILD), this.data[this.sup] && (t += a.CHILD), this.data[this.base] && (t += a.CHILD),
|
|
this.complexity = t + a.UNDEROVER, this.reportComplexity()), this.complexity;
|
|
}
|
|
}), t.mphantom.Augment({
|
|
getComplexity: function() {
|
|
return this.complexity = a.PHANTOM, this.reportComplexity(), this.complexity;
|
|
}
|
|
}), t.ms.Augment({
|
|
getComplexity: function() {
|
|
return this.SUPER(arguments).getComplexity.call(this), this.complexity += this.Get("lquote").length * a.TEXT,
|
|
this.complexity += this.Get("rquote").length * a.TEXT, this.attr[s] = this.complexity,
|
|
this.complexity;
|
|
}
|
|
}), t.menclose.Augment({
|
|
getComplexity: function() {
|
|
return null == this.complexity && (this.SUPER(arguments).getComplexity.call(this),
|
|
this.complexity += a.ACTION, this.attr[s] = this.complexity), this.complexity;
|
|
}
|
|
}), t.maction.Augment({
|
|
getComplexity: function() {
|
|
return this.complexity = (this.collapsible ? this.data[0] : this.selected()).getComplexity(),
|
|
this.reportComplexity(), this.complexity;
|
|
}
|
|
}), t.semantics.Augment({
|
|
getComplexity: function() {
|
|
return null == this.complexity && (this.complexity = this.data[0] ? this.data[0].getComplexity() : 0,
|
|
this.reportComplexity()), this.complexity;
|
|
}
|
|
}), t["annotation-xml"].Augment({
|
|
getComplexity: function() {
|
|
return this.complexity = a.XML, this.reportComplexity(), this.complexity;
|
|
}
|
|
}), t.annotation.Augment({
|
|
getComplexity: function() {
|
|
return this.complexity = a.XML, this.reportComplexity(), this.complexity;
|
|
}
|
|
}), t.mglyph.Augment({
|
|
getComplexity: function() {
|
|
return this.complexity = a.GLYPH, this.reportComplexity(), this.complexity;
|
|
}
|
|
}), MathJax.Hub.Startup.signal.Post("Collapsible Ready"), MathJax.Ajax.loadComplete("[a11y]/collapsible.js");
|
|
}); |