From 639d8a766fac93dcb4de64c34cd09f326a619e54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Wang?= Date: Fri, 29 Aug 2014 21:03:41 +0200 Subject: [PATCH] Separating MediaWiki specific files from MathJax module 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 --- Math.php | 10 +++- modules/ext.math.mathjax.enabler.js | 3 +- .../TeX => mediawiki-extensions}/texvc.js | 8 +-- .../wiki2jax.js | 52 ++++++++++--------- 4 files changed, 41 insertions(+), 32 deletions(-) rename modules/{MathJax/unpacked/extensions/TeX => mediawiki-extensions}/texvc.js (96%) rename modules/{MathJax/unpacked/extensions => mediawiki-extensions}/wiki2jax.js (51%) diff --git a/Math.php b/Math.php index d5d295e..c85bdb9 100644 --- a/Math.php +++ b/Math.php @@ -314,7 +314,13 @@ $wgResourceModules += array( 'ext.math.mathjax.extensions.TeX' => array( 'localBasePath' => __DIR__ . '/modules/MathJax/unpacked/extensions', 'remoteExtPath' => 'Math/modules/MathJax/unpacked/extensions', - 'scripts' => array( 'wiki2jax.js', 'TeX/noUndefined.js', 'TeX/AMSmath.js', 'TeX/AMSsymbols.js', 'TeX/boldsymbol.js', 'TeX/color.js', 'TeX/cancel.js', 'TeX/mathchoice.js', 'TeX/texvc.js' ), + 'scripts' => array( 'TeX/noUndefined.js', 'TeX/AMSmath.js', 'TeX/AMSsymbols.js', 'TeX/boldsymbol.js', 'TeX/color.js', 'TeX/cancel.js', 'TeX/mathchoice.js' ), + 'dependencies' => array( 'ext.math.mathjax.mathjax' ) + ), + 'ext.math.mathjax.extensions.mediawiki' => array( + 'localBasePath' => __DIR__ . '/modules/mediawiki-extensions', + 'remoteExtPath' => 'Math/modules/mediawiki-extensions', + 'scripts' => array( 'wiki2jax.js', 'texvc.js' ), 'dependencies' => array( 'ext.math.mathjax.mathjax' ) ), 'ext.math.mathjax.extensions.mml2jax' => array( @@ -324,7 +330,7 @@ $wgResourceModules += array( 'dependencies' => 'ext.math.mathjax.mathjax' ), 'ext.math.mathjax.extensions' => array( - 'dependencies' => array( 'ext.math.mathjax.extensions.ui', 'ext.math.mathjax.extensions.TeX', 'ext.math.mathjax.extensions.mml2jax' ) + 'dependencies' => array( 'ext.math.mathjax.extensions.ui', 'ext.math.mathjax.extensions.TeX', 'ext.math.mathjax.extensions.mediawiki', 'ext.math.mathjax.extensions.mml2jax' ) ), // MathJax module for representing MathML elements diff --git a/modules/ext.math.mathjax.enabler.js b/modules/ext.math.mathjax.enabler.js index ec56d1e..17d2ae0 100644 --- a/modules/ext.math.mathjax.enabler.js +++ b/modules/ext.math.mathjax.enabler.js @@ -104,7 +104,8 @@ // Configure MathJax MathJax.Hub.Config( mathJax.config ); MathJax.OutputJax.fontDir = mw.config.get( 'wgExtensionAssetsPath' ) + '/Math/modules/MathJax/fonts'; - + MathJax.Ajax.config.path = {}; + MathJax.Ajax.config.path.MediaWiki = mw.config.get( 'wgServer' ) + mw.config.get( 'wgExtensionAssetsPath' ) + 'Math/modules/mediawiki-extensions'; // Redefine MathJax.Hub.Startup.Jax MathJax.Hub.Startup.Jax = function () { var config, jax, i, k, name, queue, callback; diff --git a/modules/MathJax/unpacked/extensions/TeX/texvc.js b/modules/mediawiki-extensions/texvc.js similarity index 96% rename from modules/MathJax/unpacked/extensions/TeX/texvc.js rename to modules/mediawiki-extensions/texvc.js index 9561ac5..d47c235 100644 --- a/modules/MathJax/unpacked/extensions/TeX/texvc.js +++ b/modules/mediawiki-extensions/texvc.js @@ -1,9 +1,9 @@ /** * From https://en.wikipedia.org/wiki/User:Nageh/mathJax/config/TeX-AMS-texvc_HTML.js */ +/* global MathJax:true */ -MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () { - var VERSION = "1.0"; +MathJax.Hub.Register.StartupHook('TeX Jax Ready',function () { var MML = MathJax.ElementJax.mml; @@ -131,6 +131,6 @@ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () { }); }); -MathJax.Hub.Startup.signal.Post("TeX texvc Ready"); +MathJax.Hub.Startup.signal.Post('TeX texvc Ready'); -MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/texvc.js"); +MathJax.Ajax.loadComplete(MathJax.Ajax.config.path.MediaWiki + '/texvc.js'); diff --git a/modules/MathJax/unpacked/extensions/wiki2jax.js b/modules/mediawiki-extensions/wiki2jax.js similarity index 51% rename from modules/MathJax/unpacked/extensions/wiki2jax.js rename to modules/mediawiki-extensions/wiki2jax.js index 6520b6a..f567535 100644 --- a/modules/MathJax/unpacked/extensions/wiki2jax.js +++ b/modules/mediawiki-extensions/wiki2jax.js @@ -1,9 +1,10 @@ /** * 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", + version: '1.0', config: { element: null // The ID of the element to be processed @@ -12,8 +13,8 @@ MathJax.Extension.wiki2jax = { 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.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(); @@ -27,47 +28,48 @@ MathJax.Extension.wiki2jax = { }, setupPrefilter: function() { // used to fix a number of common wiki math hacks - MathJax.Hub.Register.StartupHook("TeX Jax Ready", function() { + 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; + 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) + mode = '', //Bug 61051 (heuristic unwanted by the community) tex; - if (node.nodeName == 'IMG') { + if (node.nodeName === 'IMG') { tex = node.alt; } else { - if (node.nodeName == 'STRONG') { - tex = $(node).text().replace(/^[^:]*: (.*)$/,"$1"); + if (node.nodeName === 'STRONG') { + tex = $(node).text().replace(/^[^:]*: (.*)$/,'$1'); } else { - tex = $(node).text().replace(/^\$/,"").replace(/\$$/,""); + tex = $(node).text().replace(/^\$/,'').replace(/\$$/,''); } - tex = tex.replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&").replace(/ /g," "); + 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"; + 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(/([^\\])%/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"); + 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"; + if (mode === '' && parent.firstChild === node) {mode = '; mode=display-nobreak';} - var script = document.createElement("script"); - script.type = "math/tex" + mode; + 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)} + if (node.nextSibling) {parent.insertBefore(script,node.nextSibling);} + else {parent.appendChild(script);} - var preview = MathJax.HTML.Element("span", { + var preview = MathJax.HTML.Element('span', { className: MathJax.Hub.config.preRemoveClass }); preview.appendChild(parent.removeChild(node)); @@ -76,5 +78,5 @@ MathJax.Extension.wiki2jax = { }; -MathJax.Hub.Register.PreProcessor(["PreProcess",MathJax.Extension.wiki2jax]); -MathJax.Ajax.loadComplete("[MathJax]/extensions/wiki2jax.js"); +MathJax.Hub.Register.PreProcessor(['PreProcess',MathJax.Extension.wiki2jax]); +MathJax.Ajax.loadComplete(MathJax.Ajax.config.path.MediaWiki + '/wiki2jax.js');