mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Math
synced 2024-11-28 09:20:42 +00:00
639d8a766f
This commit separates the files wiki2jax.js and texvc.js from the MathJax modules. This allows for MathJax updates without affecting MediaWiki files. It also defines the MediaWiki path configuration, although this will really only be usable in MathJax 2.4. Finally, it fixes jshint errors in texvc.js and wiki2jax.js Moved texvc.js and wiki2jax.js to extensions/Math/modules/mediawiki-extensions directory Change-Id: I97d68c0555bc9fbdd6bf42912aa249d57b3d9359
83 lines
3.4 KiB
JavaScript
83 lines
3.4 KiB
JavaScript
/**
|
|
* From https://en.wikipedia.org/wiki/User:Nageh/mathJax/config/TeX-AMS-texvc_HTML.js
|
|
*/
|
|
/* global MathJax:true, $:true */
|
|
|
|
MathJax.Extension.wiki2jax = {
|
|
version: '1.0',
|
|
|
|
config: {
|
|
element: null // The ID of the element to be processed
|
|
// (defaults to full document)
|
|
},
|
|
|
|
PreProcess: function (element) {
|
|
if (!this.configured) {
|
|
this.config = MathJax.Hub.CombineConfig('wiki2jax', this.config);
|
|
if (this.config.Augment) {MathJax.Hub.Insert(this,this.config.Augment);}
|
|
|
|
this.previewClass = MathJax.Hub.config.preRemoveClass;
|
|
this.setupPrefilter();
|
|
this.configured = true;
|
|
}
|
|
var that = this;
|
|
$('.mwe-math-fallback-png-display, .mwe-math-fallback-png-inline, .mwe-math-fallback-source-display,'+
|
|
'.mwe-math-fallback-source-inline, strong.texerror', element || document).each(function(i, span) {
|
|
that.ConvertMath(span);
|
|
});
|
|
},
|
|
|
|
setupPrefilter: function() { // used to fix a number of common wiki math hacks
|
|
MathJax.Hub.Register.StartupHook('TeX Jax Ready', function() {
|
|
MathJax.InputJax.TeX.prefilterHooks.Add( function(data) {
|
|
data.math = data.math.replace(/^\s*\\scriptstyle(\W)/,'\\textstyle$1').replace(/^\s*\\scriptscriptstyle(\W)/,'\\scriptstyle$1');
|
|
if (data.script.type.match(/(;|\s|\n)mode\s*=\s*display-nobreak(;|\s|\n|$)/) !== null) {
|
|
data.math = '\\displaystyle ' + data.math;
|
|
}
|
|
});
|
|
});
|
|
},
|
|
|
|
ConvertMath: function (node) {
|
|
var parent = node.parentNode,
|
|
mode = '', //Bug 61051 (heuristic unwanted by the community)
|
|
tex;
|
|
if (node.nodeName === 'IMG') {
|
|
tex = node.alt;
|
|
} else {
|
|
if (node.nodeName === 'STRONG') {
|
|
tex = $(node).text().replace(/^[^:]*: (.*)$/,'$1');
|
|
} else {
|
|
tex = $(node).text().replace(/^\$/,'').replace(/\$$/,'');
|
|
}
|
|
tex = tex.replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&').replace(/ /g,' ');
|
|
}
|
|
if ( $( node ).hasClass( 'mwe-math-fallback-png-display') || $( node ).hasClass( 'mwe-math-fallback-source-display') ){
|
|
mode = '; mode=display';
|
|
}
|
|
// We don't allow comments (%) in texvc and escape all literal % by default.
|
|
tex = tex.replace(/([^\\])%/g, '$1\\%' );
|
|
|
|
tex = tex.replace(/\\iiint([^!]*)!\\!\\!\\!\\!.*\\subset\\!\\supset/g,'\\iiint$1mkern-2.5em\\subset\\!\\supset').replace(/\\iint([^!]*)!\\!\\!\\!\\!\\!\\!\\!\\!\\!\\!(.*)\\subset\\!\\supset/g,'\\iint$1mkern-1.65em$2\\subset\\!\\!\\supset').replace(/\\int\\!\\!\\!(\\!)+\\int\\!\\!\\!(\\!)+\\int([^!]*)!\\!\\!\\!\\!.*\\bigcirc(\\,)*/g,'\\iiint$3mkern-2.5em\\subset\\!\\supset').replace(/\\int\\!\\!\\!(\\!)+\\int([^!]*)!\\!\\!\\!\\!\\!\\!\\!\\!(.*)\\bigcirc(\\,)*/g,'\\iint$2mkern-1.65em$3\\subset\\!\\!\\supset');
|
|
|
|
if (mode === '' && parent.firstChild === node) {mode = '; mode=display-nobreak';}
|
|
|
|
var script = document.createElement('script');
|
|
script.type = 'math/tex' + mode;
|
|
MathJax.HTML.setScript(script, tex);
|
|
|
|
if (node.nextSibling) {parent.insertBefore(script,node.nextSibling);}
|
|
else {parent.appendChild(script);}
|
|
|
|
var preview = MathJax.HTML.Element('span', {
|
|
className: MathJax.Hub.config.preRemoveClass
|
|
});
|
|
preview.appendChild(parent.removeChild(node));
|
|
parent.insertBefore(preview, script);
|
|
}
|
|
|
|
};
|
|
|
|
MathJax.Hub.Register.PreProcessor(['PreProcess',MathJax.Extension.wiki2jax]);
|
|
MathJax.Ajax.loadComplete(MathJax.Ajax.config.path.MediaWiki + '/wiki2jax.js');
|