User:Mr. Stradivarius/chessboardfix.js: Difference between revisions
Appearance
Content deleted Content added
replace other trailing "|=" instances, and add explanatory comments for the regexes |
nowiki the whole script |
||
Line 1: | Line 1: | ||
// <nowiki> |
|||
/* This script fixes duplicate parameters in chess template invocations. To |
/* This script fixes duplicate parameters in chess template invocations. To |
||
* install it, put the following code in [[Special:MyPage/skin.js]]: |
* install it, put the following code in [[Special:MyPage/skin.js]]: |
||
Line 100: | Line 101: | ||
jQuery( document ).ready( addChessboardPortletLink ); |
jQuery( document ).ready( addChessboardPortletLink ); |
||
} |
} |
||
// </nowiki> |
Latest revision as of 19:02, 19 April 2015
// <nowiki>
/* This script fixes duplicate parameters in chess template invocations. To
* install it, put the following code in [[Special:MyPage/skin.js]]:
importScript('User:Mr. Stradivarius/chessboardfix.js'); // Linkback: [[User:Mr. Stradivarius/chessboardfix.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:
{{Chess diagram
| tright
|
|=
8 |rd|nd|bd|qd|kd|bd|nd|rd|=
7 |pd|pd|pd|pd| |pd|pd|pd|=
6 | | | | | | | | |=
5 | | | | |pd| | | |=
4 | | | | |pl|pl| | |=
3 | | | | | | | | |=
2 |pl|pl|pl|pl| | |pl|pl|=
1 |rl|nl|bl|ql|kl|bl|nl|rl|=
a b c d e f g h
| The King's Gambit
}}
* Will be transformed into template invocations like this:
{{Chess diagram
| tright
|
|rd|nd|bd|qd|kd|bd|nd|rd
|pd|pd|pd|pd| |pd|pd|pd
| | | | | | | |
| | | | |pd| | |
| | | | |pl|pl| |
| | | | | | | |
|pl|pl|pl|pl| | |pl|pl
|rl|nl|bl|ql|kl|bl|nl|rl
| The King's Gambit
}}
* 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 );
}
// </nowiki>