User:Mr. Stradivarius/chessboardfix.js

// /* This script fixes duplicate parameters in chess template invocations. To importScript('User:Mr. Stradivarius/chessboardfix.js'); // Linkback: User:Mr. Stradivarius/chessboardfix.js
 * install it, put the following code in Special:MyPage/skin.js:


 * To use the script, open the page you want to fix in edit view, highlight the
 * chess template invocation that you want to fix, and click the
 * "Fix chessboards" link in the toolbar (below "what links here").
 * If the chess template uses the previous standard invocation style, then it
 * will be converted to the new style. In other words, template invocations like
 * this:


 * Will be transformed into template invocations like this:


 * Please check that the script produces the correct output; there is a chance
 * that it may mangle the page code, particularly if it is used on unusual types
 * of chessboard template or on normal wikitext.

var myContent = document.getElementsByName( 'wpTextbox1' )[0];

function replaceSelection( replace ) { // Replace currently selected text with the replace variable. The replace // variable can be a string or a callback function. The callback function // takes the selection text as its first and only argument, and must return // the string to replace the selection with. var len = myContent.value.length; var start = myContent.selectionStart; var end = myContent.selectionEnd; var sel = myContent.value.substring( start, end );

if ( typeof( replace ) == 'function' ) { replace = replace( sel ); }

myContent.value = myContent.value.substring( 0, start ) + replace + myContent.value.substring( end, len ); }

function chessboardFix { replaceSelection( function ( sel ) {		sel = sel.replace( /\n *\d* *((?:\| *.. *)+)\| *= */g, '\n$1' );  // " 8 |rd|  |bd|  |  |rd|  |  |=" --> "|rd|  |bd|  |  |rd|  |  "		sel = sel.replace( /\n *\|= *\n+/g, '\n\n' );                      // "|=" --> ""		sel = sel.replace( /\n *(?:[a-zA-Z][a-zA-Z]?\b *)+\n+/g, '\n\n' ); // " a b c d e f g h" --> ""		sel = sel.replace( /\n *[bB]oard *\w+ *\n+/g, '\n' );              // "   Board A  " --> ""		sel = sel.replace( / *\|= *\n/g, '\n' );                           // "{{Chess diagram |=" --> "{{Chess diagram"		return sel;	} ); }

function addChessboardPortletLink { var portletLink = mw.util.addPortletLink(		'p-tb',		'#',		'Fix chessboards',		't-chessboardfix'	); $( portletLink ).click( function ( e ) {		e.preventDefault;		chessboardFix;	}); }

if ( mw.config.get( 'wgNamespaceNumber' ) != -1 && myContent ) { jQuery( document ).ready( addChessboardPortletLink ); }

//