User:Frietjes/indent.js: Difference between revisions
Appearance
Content deleted Content added
adjust per request |
wrong lang syntax |
||
Line 181: | Line 181: | ||
var oldtxt = mytxt; |
var oldtxt = mytxt; |
||
mytxt = wpUnsmall(mytxt); |
mytxt = wpUnsmall(mytxt); |
||
if (oldtxt |
if (oldtxt != mytxt) { |
||
mysummary = mysmallsummary; |
mysummary = mysmallsummary; |
||
} |
} |
Revision as of 14:17, 7 September 2020
jQuery(document).ready(function($) {
var myContent = document.getElementsByName('wpTextbox1')[0];
// -------------------------------------------------------------------------------- //
//var mysummary = "Indent templates using [[:en:User:Frietjes/indent.js|indent]]";
var mysummary = "";
//var mysmallsummary = "Indent templates and remove small tags per [[MOS:SMALL]] using [[:en:User:Frietjes/indent.js|indent]]";
var mysmallsummary = "Remove small tags per [[MOS:SMALL]]";
if(typeof indenteditsummary == 'string') {mysummary = indenteditsummary;}
var linktext = "Indent";
// -------------------------------------------------------------------------------- //
if(mw.config.get('wgNamespaceNumber') != -1 && myContent && (mw.config.get('wgUserName') == 'MB' || mw.config.get('wgUserName') == 'Hhkohh' || mw.config.get('wgUserName') == 'Frietjes')) {
mw.loader.using(['mediawiki.util']).done( function() {
var portletlink = mw.util.addPortletLink('p-tb', '#', linktext, 't-fdup');
$(portletlink).click(function(e) {
e.preventDefault();
wpIndentTemplates(0);
});
});
}
// -------------------------------------------------------------------------------- //
function wpIndent(s)
{
var alignflag = 0;
// Mangle file/image link
while(s.search(/(\[\[[\t _]*(?:image|file)[\t _]*:[^\[\]=]*)=/gi) >=0 ) {
s = s.replace(/(\[\[[\t _]*(?:image|file)[\t _]*:[^\[\]=]*)=/gi, '$1<!-- FIX EQ MARKER -->');
}
// Mark some spacing
s = s.replace(/(= ) (\|)/g, '$1<!-- SPACE MARKER -->$2');
// Space before end of line
while(s.search(/([^=])[\t ]+[\r\n]/g) >= 0) {
s = s.replace(/([^=])[\t ]+([\r\n])/g, '$1$2');
}
// Unroll infobox
if(s.search(/(?:[Ii]nfobox|[Ss]peciesbox|[Ff]ootball[_ ]*box)/g) >=0 ) {
s = s.replace(/([^\t \r\n])([\t ]*\|[\t ]*[^=\|\[\]\{\]\t ][^=\|\[\]\{\]]*=)/g, '$1\n$2');
s = s.replace(/(=)([\t ]*\|[\t ]*[^=\|\[\]\{\]\t ][^=\|\[\]\{\]]*=)/g, '$1\n$2');
}
// Add some markers
s = s.replace(/(\|[ ]*(?:[a-z_ ]+)[\t ]*=[^\r\n]*(?:[\r\n][\t ]*♦§[0-9][0-9]*§♦[\t ]*|)*)[\r\n]([\t ]*\|[\t ]*(?:pattern|left|right|body|shorts|socks))/g, '$1<!-- UNGAP MARKER -->\n\n$2');
s = s.replace(/(\|[ ]*(?:league|cup[0-9]+)(?:[ ]*result|)[\t ]*=[^\r\n]*(?:[\r\n][\t ]*♦§[0-9]+§♦[\t ]*|))[\r\n]([\t ]*\|[ ]*(?:[a-z]+ attendance|[a-z]+ topscorer|league scorer))/g, '$1<!-- UNGAP MARKER -->\n\n$2');
s = s.replace(/[\r\n]([\t ]*\|[ ]*prevseason[ ]*=)/g, '<!-- UNGAP MARKER -->\n\n$1');
s = s.replace(/[\t ]*[\r\n][\t ]*([\r\n][\t ]*\|[\t ]*[A-Za-z0-9_\-\t ]*=)/g, '\n<!--\n GAP MARKER\n -->$1');
s = s.replace(/([0-9])([\t ]*qualifiers?)([\t ]*=)/g, '$1$3<!-- FIX THIS $2 -->');
s = s.replace(/([A-Za-z])(_rank|_year)([\t ]*=)/g, '$1$3<!-- FIX THIS $2 -->');
s = s.replace(/(resting[_ ]*place)([\t _]*coordinates)([\t ]*=)/g, '$1$3<!-- FIX THIS $2 -->');
s = s.replace(/(conventional)([\t _]*long_name)([\t ]*=)/g, '$1$3<!-- FIX THIS $2 -->');
s = s.replace(/(population_density)([\t _]*[a-z]+[0-9]*_[a-z0-9]+)([\t ]*=)/g, '$1$3<!-- FIX THIS $2 -->');
s = s.replace(/[\r\n][\t ]*[\r\n]/g, '\n<!-- GAP MARKER -->\n');
// uniform pre-pipe indentation
var c0 = s.split(/[\r\n]\|/g).length;
var c1 = s.split(/[\r\n][\t ]\|/g).length;
var c2 = s.split(/[\r\n][\t ][\t ][\t ]*\|/g).length;
if (c0 >= c1 && c0 >= c2) {
s = s.replace(/([\r\n])[\s]*(\|)/g, '$1$2');
} else if (c1 >= c0 && c1 >= c2 ) {
s = s.replace(/([\r\n])[\s]*(\|)/g, '$1 $2');
} else {
s = s.replace(/([\r\n])[\s]*(\|)/g, '$1 $2');
}
// uniform post-pipe indentation
c0 = s.split(/[\r\n][\t ]*\|[^=\|\[\]\{\]\t ]/g).length;
c1 = s.split(/[\r\n][\t ]*\|[\t ][\t ]*[^=\|\[\]\{\]\t ]/g).length;
if (c1 >= c0) {
s = s.replace(/([\r\n][\t ]*\|)[\t ]*([^=\|\[\]\{\]\t ])/g, '$1 $2');
} else {
s = s.replace(/([\r\n][\t ]*\|)[\t ]*([^=\|\[\]\{\]\t ])/g, '$1$2');
}
// flip space and =
s = s.replace(/([^=\|\[\]\{\]\t ][\t ]*)(=)([\t ][\t ][\t ]*)/g, '$1$3$2');
if (s.split(/[^=\|\[\]\{\}][\s][\s][\s]*=/g).length > 2) {
// Unalign
s = s.replace(/[\s]*\|[\s]*[\r\n]([\s]*[^=\|\[\]\{\]]*?=)[\t ]*/g, '\n|$1 ');
s = s.replace(/(\|[\s ]*[^=\|\[\]\{\]]*?)[\s]*=[\t ]*/g, '$1 = ');
s = s.replace(/[\r\n]([\s]*[^\s\|])/g, '<!-- ♦§NEWLINE§♦ -->$1');
s = s.replace(/<!--[\s]*<!-- ♦§NEWLINE§♦ -->[\s]*GAP MARKER[\s]*<!-- ♦§NEWLINE§♦ -->[\s]*-->/g, '<!--\n GAP MARKER\n -->');
// Realign
for(var i=40; i>1; i--) {
var r1 = new RegExp('([\\r\\n][\\s]*\\|[^=\\|\\[\\]\\{\\}]{'+(i)+'}=[^\\r\\n]*[\\r\\n][\\s]*\\|[^=\\|\\[\\]\\{\\}]{0,'+(i-1)+'})(=)','g');
while( s.search(r1) > -1) {
s = s.replace(r1, '$1 $2');
}
var r2 = new RegExp('([\\r\\n][\\s]*\\|[^=\\|\\[\\]\\{\\}]{0,'+(i-1)+'})(=[^\\r\\n]*[\\r\\n][\\s]*\\|[^=\\|\\[\\]\\{\\}]{'+(i)+'}=)','g');
while( s.search(r2) > -1) {
s = s.replace(r2, '$1 $2');
}
}
}
s = s.replace(/<!-- ♦§NEWLINE§♦ -->/g, '\n');
s = s.replace(/<!-- FIX EQ MARKER -->/g, '=');
s = s.replace(/<!-- SPACE MARKER -->/g, ' ');
s = s.replace(/<!--[\s]*GAP MARKER[\s]*-->/g, '');
s = s.replace(/<!--[\s]*UNGAP MARKER[\s]*-->[\t ]*[\r\n][\t ]*[\r\n]*([\s]*)/g, '\n$1');
s = s.replace(/([0-9A-Za-z]|resting[_ ]*place|conventional|density)[\t ]*(=)[\t ]*<!-- FIX THIS ([^<>]*) -->[\t ]*/g, '$1$3 $2 ');
s = s.replace(/([^\|\{\t ])[\t ]*(\|)[\t ]*([\r\n])([^\*:;\{\|])/g, '$1$3$2$4');
return s;
}
// -------------------------------------------------------------------------------- //
function wpUnsmall(s)
{
var strlist = s.split(/(\{\{[\t \r\n]*(?:[Ii]nfobox|[Ss]peciesbox|[Ff]ootball[_ ]*box)(?:[^{}]|\{\{(?:(?:[^{}]|\{\{[^{}]*\}\})*|\{\{[^{}]*\}\})*\}\})*\}\})/);
for (i = 0; i < strlist.length; i++) {
s = strlist[i];
if(s.search(/(?:[Ii]nfobox|[Ss]peciesbox|[Ff]ootball[_ ]*box)/g) >=0 ) {
s = s.replace(/<[\t ]*\/?[\t ]*small[^<>]*>/gi, '');
s = s.replace(/\{\{small[\t ]*\|[\t ]*1[\t ]*=[\t ]*((?:[^{}]|\{\{(?:(?:[^{}]|\{\{[^{}]*\}\})*|\{\{[^{}]*\}\})*\}\})*?)[\t ]*\}\}/gi, '$1');
s = s.replace(/\{\{small[\t ]*\|((?:[^{}]|\{\{(?:(?:[^{}]|\{\{[^{}]*\}\})*|\{\{[^{}]*\}\})*\}\})*)\}\}/gi, '$1');
strlist[i] = s;
}
}
return strlist.join('');
}
// -------------------------------------------------------------------------------- //
function wpIndentTemplates(debugflag)
{
// Regular expression which matchs a template arg
var argexp = new RegExp("(\\|[\\s]*[^=\\|\\[\\]\\{\\}]*=[\\s]*)", "gm");
// Internal for and while loop variables
var i=0; var j=0; var loopcount=0;
// Array used to hold the list of unnested templates
var tlist = [];
// Copy the contents of the text window so we can modify it without problems
var mytxt = myContent.value;
// Remove comments
loopcount = 0;
while( (mytxt.search(/<!--.*?-->/g) >= 0) && (loopcount < 20) ) {
// Split into chunks, isolating the comments
var strlist = mytxt.split(/(<!--.*?-->)/);
// Loop through the chunks, removing the comments templates
for (i = 0; i < strlist.length; i++) {
if( strlist[i].search(/^<!--.*?-->$/) >= 0 ) {
tlist.push(strlist[i]);
strlist[i] = '♦§' + (tlist.length - 1) + '§♦';
}
}
// Join the chunks back together for the next iteration
mytxt = strlist.join('');
loopcount++;
}
var istart = tlist.length;
// Now start unnesting the templates
loopcount = 0;
while( (mytxt.search(/(?:\{\{|\}\})/g) >= 0) && (loopcount < 20) ) {
// Split into chunks, isolating the unnested templates
var strlist = mytxt.split(/(\{\{[^\{\}]*\}\})/);
// Loop through the chunks, removing the unnested templates
for (i = 0; i < strlist.length; i++) {
if( strlist[i].search(/^\{\{[^\{\}]*\}\}$/) >= 0 ) {
tlist.push(strlist[i]);
strlist[i] = '♦§' + (tlist.length - 1) + '§♦';
}
}
// Join the chunks back together for the next iteration
mytxt = strlist.join('');
loopcount++;
}
// Now start indenting the list of unnested templates
for(i=istart; i < tlist.length; ++i) {
tlist[i] = wpIndent(tlist[i]);
}
// Reassemble the article
while(mytxt.search(/♦§[0-9][0-9]*§♦/g) >= 0) {
var n = mytxt.match(/♦§[0-9][0-9]*§♦/)[0].replace(/♦§([0-9]*)§♦/, '$1');
mytxt = mytxt.replace(new RegExp('♦§' + n + '§♦', 'g'), tlist[Number(n)]);
}
mytxt = mytxt.replace(/[\t ]*[\r\n]*[\t ]*[\r\n][\t ]*(\{\{)[\t ]*((?:[Ii]nfobox|[Ss]peciesbox))/g, '\n$1$2');
mytxt = mytxt.replace(/(\{\{[^{}=\|\r\n]*)([\r\n])(\|)[\t ]*(\{\{)/g, '$1$3$2$4');
// Remove small tags (if opt-in)
if(typeof removesmalltags == 'string' && removesmalltags == 'yes') {
var oldtxt = mytxt;
mytxt = wpUnsmall(mytxt);
if (oldtxt != mytxt) {
mysummary = mysmallsummary;
}
}
myContent.value = mytxt;
var editsummary = document.getElementsByName('wpSummary')[0];
if(typeof editsummary == 'object') {
if (editsummary.value.indexOf(mysummary) == -1) {
if (editsummary.value.match(/[^\*\/\s][^\/\s]?\s*$/)) {
editsummary.value += '; ' + mysummary;
} else {
editsummary.value += mysummary;
}
}
}
}
// -------------------------------------------------------------------------------- //
});