User:Pathoschild/regex.js

// /*************
 * Semi-auto regex replacement toolbar

if(wgAction=='edit' || wgAction=='submit') { /* create toolbar */ function regexReplaceMenu { /* get elements */ // note: these must be global. editbox = document.getElementById('wpTextbox1'); editreason = document.getElementById('wpSummary'); sidebar = document.getElementById('column-one');

/* create menu */ var container = document.createElement('div'); container.setAttribute('class','portlet'); container.setAttribute('id','p-regex'); sidebar.appendChild(container); var header = document.createElement('h5'); header.appendChild(document.createTextNode('Templates')); container.appendChild(header); var toolbox = document.createElement('div'); toolbox.setAttribute('class','p-body'); container.appendChild(toolbox); var toollist = document.createElement('ul'); toolbox.appendChild(toollist); /* define menu items */ function regexTool(name,functionname) { var newline = document.createElement('li'); newline.setAttribute('style','list-style:none !important;'); var newlink = document.createElement('a'); newlink.setAttribute('href','javascript:'+functionname); newlink.setAttribute('title',name); newlink.setAttribute('class','sidebar-link'); newlink.setAttribute('style','color:gray !important;'); // temporary hack, move to CSS later newlink.appendChild(document.createTextNode(name)); newline.appendChild(newlink); toollist.appendChild(newline); }		/* create menu */ regexTool('Redirect to talk','redirtalk'); regexTool('Block template cleanup','blockcleanup'); }	/* simplify code */ function regex(search,replace) { editbox.value = editbox.value.replace(search,replace); }	function reason(reason,mode) { if(mode=='append' && editreason.value.match(/[^\s]/)) { editreason.value = editreason.value+', '+reason; }		else { editreason.value = reason; }	}	/* define tools */ function redirtalk { // replace all with redirect editbox.value = '#REDIRECT '; reason('Redirected to talk page'); }

function blockcleanup { /* remove template modifiers */ regex(/{{(?:msg:|template:)/ig,'{{'); /* fix redirects */ // indefblockeduser regex(/{{(?:blockedindef|indef(?:block|blocked|blockuser|blockeduser-big|blockeduser-nocat|vandal)?|page(?:blank|move)vandal|vpblock)(?:\|[^\}]*)?}}/ig,'{{indefblockeduser}}'); // sockpuppeteer regex(/{{puppetmaster/ig,'{{sockpuppeteer'); regex(/{{sockpuppeteerProven}}/ig,'{{sockpuppeteer|blocked}}'); // sockpuppets regex(/{{blockedsock\|([^}]+)}}/ig,'{{sockpuppet|$1|2=blocked}}'); regex(/{{sockpuppet(?:proven|Block|Blocked)\|([^}]*)/ig,'{{sockpuppet|$1|2=blocked}}'); /* fix redundancy */ // multiple indefs (probably from redirect fixes) regex(/{{indefblockeduser}}([\s\S]*){{indefblockeduser}}/ig,'{{indefblockeduser}}$1');

/* adjust edit summary */ reason('template cleanup','append'); }	/* load script */ addOnloadHook(regexReplaceMenu); }

//