User:Atrian/monobook.js/unitformatter.js

From Wikipedia, the free encyclopedia

Note: After saving, you have to bypass your browser's cache to see the changes. In Internet Explorer and Firefox, hold down the Ctrl key and click the Refresh or Reload button. Opera users have to clear their caches through Tools→Preferences, see the instructions for Opera. Konqueror and Safari users can just click the Reload button.

//'winc' function allows buttons to be added toolbar
 
winc('User:Omegatron/monobook.js/addlink.js');
 
function formatunits() {
    var txt = document.editform.wpTextbox1;
 
    // Convert degree symbols into ° symbol, ensure preceding space
    txt.value = txt.value.replace(/°/g, '°');
    txt.value = txt.value.replace(/º/g, '°');
    txt.value = txt.value.replace(/°\s?([CF])/g, '°$1');
    txt.value = txt.value.replace(/°\s?(celsius)/gi, '°C');
    txt.value = txt.value.replace(/(\d)\s?(°[CF])/g, '$1 $2');
    //Fix spelling error
    txt.value = txt.value.replace(/celcius/gi, 'Celsius');
    //Fix common naming error (be careful with this one)
    txt.value = txt.value.replace(/centigrade/gi, 'Celsius');
 
 
    // Convert &sup into superscript ² symbol
    txt.value = txt.value.replace(/²/g, '²');
    txt.value = txt.value.replace(/³/g, '³');
 
    // Convert cubic inches into in³
    txt.value = txt.value.replace(/(\d)\s?cu[\s\-\.]in/gi, '$1 in³');
 
 
    // Convert the word ohm(s) or the html entity into the actual Ω symbol (Omega, not the actual ohm symbol Ω) and make sure it is spaced
    txt.value = txt.value.replace(/(\d)\s?(Y|Z|E|P|T|G|M|k|K|h|da|d|c|m|µ|μ|µ|n|p|f|a|z|y)?\s?(Ω|ohm|Ohm)s?([\s,.;:\)\(\\/)])/g, '$1 $2Ω$4');
 
    // Convert various micro symbols into the actual micro symbol, make sure it's spaced
    txt.value = txt.value.replace(/(\d)\s?(μ|μ|µ)(g|s|m|A|K|mol|cd|rad|sr|Hz|N|J|W|Pa|lm|lx|C|V|Ω|F|Wb|T|H|S|Bq|Gy|Sv|kat|M)([\s,.;:\)\(\\/)])/g, '$1 µ$3$4');
 
    // Convert capital K to lowercase k in units
    txt.value = txt.value.replace(/(\d)\s?K(g|s|m|A|K|mol|cd|rad|sr|Hz|N|J|W|Pa|lm|lx|C|V|Ω|F|Wb|T|H|S|Bq|Gy|Sv|kat|M)([\s,.;:\)\(\\/)])/g, '$1 k$2$3');
    txt.value = txt.value.replace(/(\d)\-K(g|s|m|A|K|mol|cd|rad|sr|Hz|N|J|W|Pa|lm|lx|C|V|Ω|F|Wb|T|H|S|Bq|Gy|Sv|kat|M)([\s,.;:\)\(\\/)])/g, '$1 k$2$3');
    txt.value = txt.value.replace(/(\d) K(g|s|m|A|K|mol|cd|rad|sr|Hz|N|J|W|Pa|lm|lx|C|V|Ω|F|Wb|T|H|S|Bq|Gy|Sv|kat|M)([\s,.;:\)\(\\/)])/g, '$1 k$2$3');
 
    // Hertz
    txt.value = txt.value.replace(/(\d)\s?(Y|Z|E|P|T|G|M|k|K|h|da|d|c|m|µ|μ|µ|n|p|f|a|z|y)?hz/gi, '$1 $2Hz');
    txt.value = txt.value.replace(/(\d)\-(Y|Z|E|P|T|G|M|k|K|h|da|d|c|m|µ|μ|µ|n|p|f|a|z|y)?hz/gi, '$1 $2Hz');
 
    // Fix kilometres
    txt.value = txt.value.replace(/(\d)\s?kms?([\s,.;:\)\(\\/)])/gi, '$1 km$2');
    txt.value = txt.value.replace(/(\d)\-kms?([\s,.;:\)\(\\/)])/gi, '$1 km$2');
    txt.value = txt.value.replace(/(\d) kms?([\s,.;:\)\(\\/)])/gi, '$1 km$2');
 
    // Standardise kilometres per hour
    txt.value = txt.value.replace(/km\/hr/gi, 'km/h');
    txt.value = txt.value.replace(/kph/gi, 'km/h');
    txt.value = txt.value.replace(/kmph/gi, 'km/h');
    txt.value = txt.value.replace(/(\d)\s?kmh/gi, '$1 km/h');
    txt.value = txt.value.replace(/km\/h/gi, 'km/h');
    txt.value = txt.value.replace(/(\d)\s?km\/h/gi, '$1 km/h');
    txt.value = txt.value.replace(/(\d)\-km\/h/gi, '$1 km/h');
    txt.value = txt.value.replace(/(\d) km\/h/gi, '$1 km/h');
 
    // Standardise 'per second'
    txt.value = txt.value.replace(/ft\/second/gi, 'ft/s');
    txt.value = txt.value.replace(/ft\/sec/gi, 'ft/s');
    txt.value = txt.value.replace(/m\/second/gi, 'm/s');
    txt.value = txt.value.replace(/m\/sec/gi, 'm/s');
 
    // Space before horsepower symbol
    txt.value = txt.value.replace(/(\d)\s?hp/gi, '$1 hp');
    txt.value = txt.value.replace(/(\d)\s?bhp/gi, '$1 bhp');
    txt.value = txt.value.replace(/(\d)\s?shp/gi, '$1 shp');
 
    // Space before units
    txt.value = txt.value.replace(/(\d)\s?cc([\s,.;:\)\(\\/)])/gi, '$1 cc$2');
    txt.value = txt.value.replace(/(\d)\-cc([\s,.;:\)\(\\/)])/gi, '$1 cc$2');
    txt.value = txt.value.replace(/(\d)\s?ft([\s,.;:\)\(\\/)])/gi, '$1 ft$2');
    txt.value = txt.value.replace(/(\d)\-ft([\s,.;:\)\(\\/)])/gi, '$1 ft$2');
    txt.value = txt.value.replace(/(\d)\s?rpm/gi, '$1 rpm');
    txt.value = txt.value.replace(/(\d)\-rpm/gi, '$1 rpm');
    txt.value = txt.value.replace(/(\d)\s?kg([\s,.;:\)\(\\/)])/gi, '$1 kg$2');
    txt.value = txt.value.replace(/(\d)\-kg([\s,.;:\)\(\\/)])/gi, '$1 kg$2');
    //space before 'm' only when lower case
    txt.value = txt.value.replace(/(\d)\s?m([\s,.;:\)\(\\/)])/g, '$1 m$2');
    txt.value = txt.value.replace(/(\d)\-m([\s,.;:\)\(\\/)])/g, '$1 m$2');
    //txt.value = txt.value.replace(/(\d)\s?ml([\s,.;:\)\(\\/)])/g, '$1 ml$2');
    //txt.value = txt.value.replace(/(\d)\-ml([\s,.;:\)\(\\/)])/g, '$1 ml$2');
    txt.value = txt.value.replace(/(\d)\s?m(\W)/g, '$1 m$2');
    txt.value = txt.value.replace(/(\d)\s?m(\w?\W)/g, '$1 m$2');
 
    // miles per hour
    txt.value = txt.value.replace(/m\.p\.h\./gi, 'mph');
    txt.value = txt.value.replace(/mph([\s,.;:\)\(\\/)])/gi, 'mph$1');
    txt.value = txt.value.replace(/(\d)\s?mph/gi, '$1 mph');
    txt.value = txt.value.replace(/(\d)\-mph/gi, '$1 mph');
 
    // Standardise symbol for pounds
    txt.value = txt.value.replace(/(\d)\s?lbs?/gi, '$1 lb');
    txt.value = txt.value.replace(/(\d\+?)\s?lbs?/gi, '$1 lb');
    txt.value = txt.value.replace(/(\d) lbs?/gi, '$1 lb');
    txt.value = txt.value.replace(/(\d)\s?(\[\[lbs\]\])/gi, '$1 \[\[Pound (mass)|lb\]\]');
 
    // Standardise symbol for newton metres
    //txt.value = txt.value.replace(/(N•m)/gi, 'N·m');
 
    // Standardise symbol for kilowatts
    //txt.value = txt.value.replace(/(\d)\s?kW([\s,.;:\)\(\\/)])/gi, '$1 kW$2');
    //txt.value = txt.value.replace(/(\d)\-kW([\s,.;:\)\(\\/)])/gi, '$1 kW$2');
 
    // Standardise symbol for foot pounds
    txt.value = txt.value.replace(/ft[ -.·•\/]lb[fs]/gi, 'ft·lbf');
    txt.value = txt.value.replace(/ft[ -.·•\/]lbf/gi, 'ft·lbf');
    txt.value = txt.value.replace(/ft[ -.·•\/]lbff/gi, 'ft·lbf');
    //the next two suspended until solution is found for wing loading (i.e. pounds per square foot)
    //txt.value = txt.value.replace(/lb[fs][ -.•\/]ft/gi, 'ft·lbf');
    //txt.value = txt.value.replace(/lb[ -.•\/]ft/gi, 'ft·lbf');
 
    // Symbols for feet and inches
    txt.value = txt.value.replace(/([^;°]\s)(\d{1,4})\s?['’]\s?(\d{1,2})\s?["”]/gi, '$1$2 ft $3 in');
 
    // Give digital value a percent symbol '%' instead of word
    txt.value = txt.value.replace(/(\d)\s?per ?cent([^aei])/gi, '$1%$2');
    txt.value = txt.value.replace(/(\d)\-per ?cent([^aei])/gi, '$1%$2');
 
    // Add a space before dB
    txt.value = txt.value.replace(/(\d)\s?(dB)\b/g, '$1 $2');
 
    // Add a space before several units that were missed before
    //txt.value = txt.value.replace(/(\d)\s?(G|M|k|K|h|da|d|c|m|µ|n)?(g|m|Hz|N|W|Pa|V|Ω|F|)([\s,.;:\)\(\\/)])/g, '$1 $2$3$4');
 
    // bps or b/s or bits/s --> bit/s
    txt.value = txt.value.replace(/([KkMmGgTtPpEeYyZz])(bps|bits?\/s|b\/s)/g, '$1bit/s');
    txt.value = txt.value.replace(/(\d)\s?(bps)/gi, '$1 bit/s');
 
    // Bps or byte/s or bytes/s --> B/s
    txt.value = txt.value.replace(/([KkMmGgTtPpEeYyZz])(Bps|bytes?\/s)/g, ' $1B/s');
 
    // Make capitalization correct
    txt.value = txt.value.replace(/K(bit|B)\/s/g, 'k$1/s');
    txt.value = txt.value.replace(/m(bit|B)\/s/g, 'M$1/s');
    txt.value = txt.value.replace(/g(bit|B)\/s/g, 'G$1/s');
 
    // Common error
    txt.value = txt.value.replace(/mibi(bit|byte)/g, 'mebi$1');
 
    // Add a tag to the summary box
    var txt = document.editform.wpSummary;
    var summary = "units";
	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) {
        addLink('p-cactions', 'javascript:formatunits()', 'units', 'ca-unitfixer', 'Fixes some unit formatting', '', '');
    }
});