User:Omegatron/monobook.js/mathcharacterfixer.js

Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
/* <pre><nowiki> */

function mathfixer() {
    var txt = document.editform.wpTextbox1;

    // Convert minus sign HTML entities into actual minus signs (overlaps with dashfixer.js)
    txt.value = txt.value.replace(/(&#x2212;|&#8722;|&minus;)/g, '−');

    // Convert times sign HTML entities into actual times signs
    txt.value = txt.value.replace(/(&#x00D7;|&#215;|&times;)/g, '×');

    // Convert plusorminus sign HTML entities into actual plusorminus signs
    txt.value = txt.value.replace(/(&#x00B1;|&#177;|&plusmn;)/g, '±');

    // Convert hyphen next to a number into a minus sign character
    txt.value = txt.value.replace(/([^a-zA-Z0-9\,\_\{])-(\d)/g, '$1−$2');

    // Changes 2x3 to 2×3
    txt.value = txt.value.replace(/(\d\s?)x(\s?\d)/g, '$1×$2');

    // Changes 10^3 to 10<sup>3</sup>
//    txt.value = txt.value.replace(/(\d+)\^(\d+)/g, '$1<sup>$2</sup>');
    
    // Changes x^3 to x<sup>3</sup>
    txt.value = txt.value.replace(/([0-9a-zA-Z])\^(\d+)/g, '$1<sup>$2</sup>');

    // Changes <sup> tags inside <math> tags back into carets
    // (don't know of a way to exclude them from the above statement)
    txt.value = txt.value.replace(/<math>(.*)<sup>(\d+)<\/sup>(.*)<\/math>/g, '<math>$1^$2$3</math>');

    // Changes 2 +/- 3 to 2±3
    txt.value = txt.value.replace(/(\s|\d)\+\/?(-|−|-)(\s|\d)/g, '$1±$3');

    // Add a tag to the summary box
    var txt = document.editform.wpSummary;
    var summary = "[[User:Omegatron#Regular expressions|Regex math character fixer]]";
	if (txt.value.indexOf(summary) == -1) {
		if (txt.value.match(/[^\*\/\s][^\/\s]?\s*$/)) {
			txt.value += " | ";
		}
		txt.value += summary;
	}

    // Press the diff button to check it
    document.editform.wpDiff.click()
}

addOnloadHook(function () {
    if(document.forms.editform) {
        mw.util.addPortletLink('p-cactions', 'javascript:mathfixer()', '±', 'ca-mathfixer', 'Fixes some math characters', '', '');
    }
});

/* </nowiki></pre> */