User:AndyZ/monobook.js/units nbsp.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
Documentation for this user script can be added at User:AndyZ/monobook.js/units nbsp. |
//borrow from [[User:Bobblewik]]: (and changed a tiny bit by me)
winc('User:Omegatron/monobook.js/addlink.js');
function units_nbsp() {
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 is 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');
txt.value = txt.value.replace(/(\d) kilometer/gi, '$1 kilometer');
// 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');
txt.value = txt.value.replace(/(\d) centi/gi, '$1 centi');
txt.value = txt.value.replace(/(\d) milli/gi, '$1 milli');
txt.value = txt.value.replace(/(\d) deca([^g])/gi, '$1 deca$2');
txt.value = txt.value.replace(/(\d) inch/gi, '$1 inch');
txt.value = txt.value.replace(/(\d) yard/gi, '$1 yard');
txt.value = txt.value.replace(/(\d) feet/gi, '$1 feet');
txt.value = txt.value.replace(/(\d) foot/gi, '$1 foot');
//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');
// Ensure space is used
txt.value = txt.value.replace(/(\d)\s?(k|M|G)(bit|B)/g, '$1 $2$3');
// 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()
}
$(function () {
if(document.forms.editform) {
addLink('p-cactions', 'javascript:units_nbsp()', 'units_nbsp', 'ca-unitfixer', 'Fixes some unit formatting', '', '');
}
});