User:Ahecht/Scripts/infoboxgap.js

// Based on 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') != -1 && 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) + ")?")); var t = Number(prompt("Size of gap to insert?", 1)); if ( (s >= firstnum) && (s <= lastnum + 1) && (t != 0) ) { var firstgap = 0; for(i = s; i < lastnum; i++) { var re1 = new RegExp('(label|data|[^a-z0-9]header|class|rowstyle)' + String(i) + '([a-z][ ]*=|[ ]*=)', 'g'); if(txt.search(re1) < 0) { if(firstgap > 0) { lastnum = i - 1; } 		} else { firstgap = 1; } 	} 	for(i = lastnum; i >= s; i--) { var re2 = new RegExp('(label|data|[^a-z0-9]header|class|rowstyle)' + String(i) + '([a-z][ ]*=|[ ]*=)', 'g'); txt = txt.replace(re2,'$1' + String(i+t) + '$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; }

});