function headingfixer() {
var txt = document.editform.wpTextbox1;
// Format heading markup the way it is generated with the + tab
// Note: the ? after the * is not redundant, see http://www.regular-expressions.info/repeat.html#lazy
txt.value = txt.value.replace(/((^|\n)={2,})( |\t)*(.*?)( |\t)*(={2,})/g, '$1 $4 $6\n\n');
// 1 blank line before the headings
// (this is super-kludgy because of the newlines conflicting when one heading is right after another)
// (seems to work, though, for now. some other day...)
txt.value = txt.value.replace(/(\n+={2,}) (.*?) (={2,})/g, '\n\n$1 $2 $3');
// Remove all extra newlines?
txt.value = txt.value.replace(/(\n*){2,}/g, '\n\n');
// One space after * and # lists, and after : and ;
txt.value = txt.value.replace(/(^|\n)((\*|\#|\;|\:)+)\s*(\w|\[|\"|\'|\{\{)/g, '$1$2 $4');
// Format External links and See also according to the Manual of Style
txt.value = txt.value.replace(/\=\= external links? \=\=/ig, '== External links ==');
txt.value = txt.value.replace(/\=\= see also \=\=/ig, '== See also ==');
// Add a tag to the summary box
var txt = document.editform.wpSummary;
var summary = "]";
if (txt.value.indexOf(summary) == -1) {
if (txt.value.match(/?\s*$/)) {
txt.value += " | ";
}
txt.value += summary;
}
// Press the diff button to check it
if( typeof( autoDiffClick ) == 'undefined' || autoDiffClick === true ) {
document.editform.wpDiff.click();
}
}
$(function () {
if(document.forms.editform) {
mw.util.addPortletLink('p-cactions', 'javascript:headingfixer()', '_', 'ca-headingfixer', 'Fixes heading whitespace and deletes excess newlines', '-', '');
}
});