User:Frietjes/infoboxgap.js

$.when( $.ready, mw.loader.using( 'jquery.textSelection' ) ).then(function() {

var $textbox = $( '#wpTextbox1' );

var myContent = $textbox.textSelection('getContents');

if(mw.config.get('wgNamespaceNumber') == 10 && myContent) {

mw.loader.using(['mediawiki.util']).done( function() {

var portletlink1 = mw.util.addPortletLink('p-tb', '#', 'Infobox gap', 't-gap', 'Insert a numbering gap in an infobox', '');

$(portletlink1).click(function(e) {

e.preventDefault();

myContent = $textbox.textSelection('getContents'); // reload in case the content has changed after the script was loaded

myContent = wpInfoboxGap(myContent);

$textbox.textSelection('setContents', myContent);

});

var portletlink2 = mw.util.addPortletLink('p-tb', '#', 'Infobox renumber', 't-ren', 'Remove numbering gaps in an infobox', '');

$(portletlink2).click(function(e) {

e.preventDefault();

myContent = $textbox.textSelection('getContents'); // reload in case the content has changed after the script was loaded

myContent = wpInfoboxRenumber(myContent);

$textbox.textSelection('setContents', myContent);

});

});

}

// -------------------------------------------------------------------------------- //

function wpInfoboxGap(txt)

{

var i = 0;

var nums = txt.match(/(?:label|data|[^a-z0-9]header|class)[0-9]+(?:[a-z][ ]*=|[ ]*=)/g);

for(i = 0; i < nums.length; i++) {

nums[i] = nums[i].replace(/[^0-9]*([0-9]+)[^0-9]*/, '$1');

}

nums = nums.sort(function(a,b){return a-b});

var firstnum = Number(nums.shift());

var lastnum = Number(nums.pop());

var s = Number(prompt("Gap number (between " + String(firstnum) + " and " + String(lastnum) + ")?"));

if ( (s >= firstnum) && (s <= lastnum + 1) ) {

var firstgap = 0;

for(i = s; i < lastnum; i++) {

var re = new RegExp('(label|data|[^a-z0-9]header|class|rowstyle)' + String(i) + '([a-z][ ]*=|[ ]*=)', 'g');

if(txt.search(re) < 0) {

if(firstgap > 0) {

lastnum = i - 1;

}

} else {

firstgap = 1;

}

}

for(i = lastnum; i >= s; i--) {

var re = new RegExp('(label|data|[^a-z0-9]header|class|rowstyle)' + String(i) + '([a-z][ ]*=|[ ]*=)', 'g');

txt = txt.replace(re,'$1' + String(i+1) + '$2');

}

}

return txt;

}

function wpInfoboxRenumber(txt)

{

var i = 0;

var nums = txt.match(/(?:label|data|[^a-z0-9]header|class|rowstyle)[0-9]+(?:[a-z][ ]*=|[ ]*=)/g);

for(i = 0; i < nums.length; i++) {

nums[i] = parseInt(nums[i].replace(/[^0-9]*([0-9]+)[^0-9]*/, '$1'));

}

var k = 1;

var currnum = nums[0];

var lastnum = nums[0];

for(i = 0; i < nums.length; i++) {

currnum = nums[i];

if (currnum != lastnum) {

k = k + 1;

lastnum = currnum;

}

var re = new RegExp('(label|data|[^a-z0-9]header|class|rowstyle)' + String(nums[i]) + '([a-z][ ]*=|[ ]*=)', 'g');

txt = txt.replace(re,'$1 WPFOOMARK ' + String(k) + '$2');

}

txt = txt.replace(/ WPFOOMARK /g, '');

return txt;

}

});