User:Omegatron/monobook.js/headingformattingfixer.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.

function headingfixer() {
    var txt = document.editform.wpTextbox1;
 
    // Format heading markup the way it is generated with the + tab
    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[ \t\v\r\f]*){2,}/g, '\n\n');
 
    // Spaces after * and # lists
    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 = "[[User:Omegatron#Regular expressions|Regex heading and whitespace 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) {
        addPortletLink('p-cactions', 'javascript:headingfixer()', '_', 'ca-headingfixer', 'Fixes heading whitespace and deletes excess newlines', '-', '');
    }
});