User:Est. 2021/script/AutoCleanup.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
Documentation for this user script can be added at User:Est. 2021/script/AutoCleanup. |
/*
Fork of [[User:Tol/AutoCleanup.js]] via [[User:Qwerfjkl/scripts/autoCleanup.js]]
Licensing:
* Creative Commons Attribution-ShareAlike 3.0 (CC BY-SA 3.0)
*: https://creativecommons.org/licenses/by-sa/3.0/
* Creative Commons Attribution-ShareAlike 4.0 (CC BY-SA 4.0)
*: https://creativecommons.org/licenses/by-sa/4.0/
* GNU Lesser General Public License (GNU LGPL)
*: https://www.gnu.org/copyleft/lgpl.html
* GNU Free Documentation License (GNU FDL)
*: http://www.gnu.org/licenses/fdl-1.3.html
Attribution:
* [[User:Tol]] [https://en.wikipedia.org/wiki/User:Tol]
*/
// <syntaxhighlight lang="js">
$(function() {
function clean_wikitext(text) {
const replacements = [
[/'|'/g, '\''], // Replace curly single quotes with straight ones
[/"|"/g, '"'], // Replace curly double quotes with straight ones
[/(–)/g, '–'], // Replace "–" with "–" (CUSTOM)
[/( )/g, '{{nbs}}'], // Replace " " with "{{nbs}}" (CUSTOM)
[/ /g, ' '], // Replace wide spacing with normal spacing (CUSTOM)
[/(\n[^\|\}].+) +\n/g, '$1\n'], // Remove lines' trailing spaces (that don't start with "|" or "}"
// [/([^=])(=+)([^=])/g, '$1 $2 $3'], // Standardise spacing around equal sign (CUSTOM / OFF), watch out links
// [/ (=+) (.*) (=+) /g, '$1 $2 $3'], // Fix spacing around headers (CUSTOM / OFF)
[/^(=+) *(.*?) *\1$/gm, '$1 $2 $1'], // Standardise spacing inside headers
[/\n+^((=+) .*? \2)$/gm, '\n\n$1'], // Standardise spacing before headers
[/^((=+) .*? \2)$\n+/gm, '$1\n'], // Standardise spacing after headers (CUSTOM)
[/( )+/gm, '$1'], // Remove excess spacing (CUSTOM)
[/ </g, '<'], // Remove excess spacing before tags (CUSTOM)
[/\n{3,}/g, '\n\n'], // Replace three or more newlines with two newlines
[/((?:<ref[^>]*?>[^>]*?<\/ref>){1,})\. /gm, '.$1 '], // Taken from [[User:Novem Linguae/DraftCleaner.js]]
[/((?:<ref[^>]*?>[^>]*?<\/ref>){1,})\.\n/gm, ".$1\n"], // Fix ref punctuation
// [/(?<!\[)\[https?:\/\/en\.wikipedia\.org\/wiki\/([^ \]]*)(?: ([^\]]*))?\]/gs, function(match, p1, p2) {
// p1 = decodeURIComponent(p1);
// p1 = p1.replace(/_/g, ' ');
// if (p2 == undefined) {
// return `[[${p1}]]`;
// } else {
// return `[[${p1}|${p2}]]`;
// } }],
// Taken from [[User:Ingenuity/cleaner.js]]; clean up references (OFF, REPLACED BY [[User:Ingenuity/ReferenceFixer.js]])
[/ ?(<ref(?: name ?= ?"[^<>]{0,30}")?>(?:(?!<\/ref>).)+?<\/ref>)/gs, "$1"],
[/ ?(<ref name ?= ?"[^<>]{0,30}" ?\/>)/gs, "$1"],
[/(<ref(?: name ?= ?"[^<>]{0,30}")?>(?:(?!<\/ref>).)+?<\/ref>)[\n ]?([,\.\?\!\;])/gs, "$2$1"],
[/(<ref name ?= ?"[^<>]{0,30}" ?\/>)[\n ]?([,\.\?\!\;])/g, "$2$1"],
// Taken from pywikibot safe-syntax replaces, from the fixes.py script
[/\[\[(?<url>https?:\/\/[^\]]+?)\]\]/g, '[$1]'], // external link in double brackets
[/\[\[(?<url>https?:\/\/.+?)\]/g, '[$1]'], // external link starting with double bracket
[/\[(?<url>https?:\/\/[^\|\] \r\n]+?) +\| *(?<label>[^\|\]]+?)\]/, '[$1 $2]'], // external link and description separated by a dash, with whitespace in front of the dash, so that it is clear that the dash is not a legitimate part of the URL.
[/\[(?<url>https?:\/\/[^\|\] ]+?(\.pdf|\.html|\.htm|\.php|\.asp|\.aspx|\.jsp)) *\| *(?<label>[^\|\]]+?)\]/, '[$1 $3]'], // dash in external link, where the correct end of the URL can be detected from the file extension. It is very unlikely that this will cause mistakes.
[/\[\[([^\|\]]+)\|\1\]\]/, '[[$1]]'], // link equal to linktext
// Taken from [[User:Sam Sailor/Scripts/autoFormatterSettings.js]]
// [ 'use <ref>', 'use ref' ],
// [ / =\n/g, ' = \n' ], // add trailing space after = for empty infobox parameters (OFF)
[ /\{\{ /g, '{{' ], // remove space after {{
[ /\|tau\]\]/g, '|τ]]' ], // fix unwanted change in category sorting
[ /([\W])b\. *(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)/g, '$1born $2' ], // replace "b. Jan" with "born Jan" (CUSTOM)
[ /([\W])b\. *([0-9]{1,2}) *(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)/g, '$1born $2 $3' ], // replace "b. 31 Jan" with "born 31 Jan" (CUSTOM)
[ /([\W])b\. *([0-9]{1,4})/g, '$1born $2' ], // replace "b. 1987" with "born 1987" (CUSTOM)
[ /(born|b\.) \{\{ *birth ?date *\|/ig, 'born {{SUBST:User:Zyxw/bd|' ], // fix duplicated birth date templates
[ /(\| *height *= *\{\{convert\| *[1-2]),([0-9]{1,2} *\| *m)/ig, '$1.$2' ], // fix height with comma in {{convert}}
[ /\n\{\{Baseballstats/ig, '\n* {{Baseball stats' ], // start line with asterisk
[ /\n\{\{Basketballstats/ig, '\n* {{Basketball stats' ], // start line with asterisk
[ /\n\{\{Footballstats/ig, '\n* {{Football stats' ], // start line with asterisk
[ /\n(== *)External Links( *==)/, '\n$1External links$2' ],
[ /\n(== *)External Link( *==)/, '\n$1External links$2' ],
[ /\n(== *)External links( *==)/, '\n$1External links$2' ],
[ /\n(== *)Further Reading( *==)/, '\n$1Further reading$2' ],
[ /\n(== *)Published Papers( *==)/, '\n$1Published papers$2' ],
[ /\n(== *)See Also( *==)/, '\n$1See also$2' ],
[ /\n(== *)Selected Works( *==)/, '\n$1Selected works$2' ],
[ /([0-9]{4})-present/ig, '$1–present' ],
// templates renamed
[ /\{\{Infobox Airliner accident( |\||\}|\n)/ig, '{{Infobox aircraft occurrence$1' ],
[ /\{\{airport-dest-list( |\||\}|\n)/ig, '{{airport destination list$1' ],
[ /\{\{Baseballstats( |\||\}|\n)/ig, '{{Baseball stats$1' ],
[ /\{\{Basketballstats( |\||\}|\n)/ig, '{{Basketball stats$1' ],
[ /\{\{b-da( |\||\}|\n)/ig, '{{birth-date and age$1' ],
[ /\{\{bda( |\||\}|\n)/ig, '{{birth date and age$1' ],
[ /\{\{citebook( |\||\}|\n)/ig, '{{cite book$1' ],
[ /\{\{citenews( |\||\}|\n)/ig, '{{cite news$1' ],
[ /\{\{citeweb( |\||\}|\n)/ig, '{{cite web$1' ],
[ /\{\{Current Iowa Representatives( |\||\}|\n)/ig, '{{Iowa House of Representatives$1' ],
[ /\{\{d-da( |\||\}|\n)/ig, '{{death-date and age$1' ],
[ /\{\{dda( |\||\}|\n)/ig, '{{death date and age$1' ],
[ /\{\{eliteprospects( |\||\}|\n)/ig, '{{EliteProspects$1' ],
[ /\{\{empty category( |\||\}|\n)/ig, '{{Possibly empty category$1' ],
[ /\{\{Find a grave( |\||\}|\n)/ig, '{{Find a Grave$1' ],
[ /\{\{Findagrave( |\||\}|\n)/ig, '{{Find a Grave$1' ],
[ /\{\{FAG( |\||\}|\n)/ig, '{{Find a Grave$1' ],
[ /\{\{Fag( |\||\}|\n)/ig, '{{Find a Grave$1' ],
[ /\{\{Fg( |\||\}|\n)/ig, '{{Find a Grave$1' ],
[ /\{\{FIBT profile( |\||\}|\n)/ig, '{{IBSF$1' ],
[ /\{\{fig( |\||\}|\n)/ig, '{{FIG$1' ],
[ /\{\{footballbox collapsible( |\||\}|\n)/ig, '{{football box collapsible$1' ],
[ /\{\{Footballstats( |\||\}|\n)/ig, '{{Football stats$1' ],
[ /\{\{hockeydb( |\||\}|\n)/ig, '{{HockeyDB$1' ],
[ /\{\{Icehockeystats( |\||\}|\n)/ig, '{{Ice hockey stats$1' ],
[ /\{\{Ice Hockey Stats( |\||\}|\n)/ig, '{{Ice hockey stats$1' ],
[ /\{\{Ice Hockey Stats( |\||\}|\n)/ig, '{{Ice hockey stats$1' ],
[ /\{\{India Districts( |\||\}|\n)/ig, '{{Infobox India district$1' ],
[ /\{\{Infobox art( |\||\}|\n)/ig, '{{Infobox artwork$1' ],
[ /\{\{Infobox athlete( |\||\}|\n)/ig, '{{Infobox sportsperson$1' ],
[ /\{\{Infobox baseball player( |\||\}|\n)/ig, '{{Infobox baseball biography$1' ],
[ /\{\{Infobox basketball player( |\||\}|\n)/ig, '{{Infobox basketball biography$1' ],
[ /\{\{Infobox CFL player( |\||\}|\n)/ig, '{{Infobox CFL biography$1' ],
[ /\{\{Infobox Given Name( |\||\}|\n)/ig, '{{Infobox given name$1' ],
[ /\{\{Infobox Given name( |\||\}|\n)/ig, '{{Infobox given name$1' ],
[ /\{\{Infobox Given Name 2( |\||\}|\n)/ig, '{{Infobox given name$1' ],
[ /\{\{Infobox Given name 2( |\||\}|\n)/ig, '{{Infobox given name$1' ],
[ /\{\{Infobox Given Name Revised( |\||\}|\n)/ig, '{{Infobox given name$1' ],
[ /\{\{Infobox given name2( |\||\}|\n)/ig, '{{Infobox given name$1' ],
[ /\{\{Infobox given name( |\||\}|\n)/ig, '{{Infobox name$1' ],
[ /\{\{Infobox gridiron football person( |\||\}|\n)/ig, '{{Infobox CFL biography$1' ],
[ /\{\{Infobox Mandir( |\||\}|\n)/ig, '{{Infobox Hindu temple$1' ],
[ /\{\{Infobox Military Cemetery( |\||\}|\n)/ig, '{{Infobox military memorial$1' ],
[ /\{\{Infobox Military Memorial( |\||\}|\n)/ig, '{{Infobox military memorial$1' ],
[ /\{\{Infobox Military Structure( |\||\}|\n)/ig, '{{Infobox military installation$1' ],
[ /\{\{Infobox MLB player( |\||\}|\n)/ig, '{{Infobox baseball biography$1' ],
[ /\{\{Infobox mountain range( |\||\}|\n)/ig, '{{Infobox mountain $1' ],
[ /\{\{Infobox NBA biography( |\||\}|\n)/ig, '{{Infobox basketball biography$1' ],
[ /\{\{Infobox NFL player( |\||\}|\n)/ig, '{{Infobox NFL biography$1' ],
[ /\{\{Infobox painting( |\||\}|\n)/ig, '{{Infobox artwork$1' ],
[ /\{\{Infobox surname( |\||\}|\n)/ig, '{{Infobox name$1' ],
[ /\{\{Infobox volleyball player( |\||\}|\n)/ig, '{{Infobox volleyball biography$1' ],
[ /\{\{ISAF sailor( |\||\}|\n)/ig, '{{World Sailing profile$1' ],
[ /\{\{IBSF profile( |\||\}|\n)/ig, '{{IBSF$1' ],
[ /\{\{ISSF name( |\||\}|\n)/ig, '{{ISSF$1' ],
[ /\{\{ISU name( |\||\}|\n)/ig, '{{ISU figure skater$1' ],
[ /\{\{ITF (male|female) profile( |\||\}|\n)/ig, '{{ITF profile$2' ],
[ /\{\{(L)ang(?:uage)?[ \-]?icon( |\||\}|\n)/ig, '{{$1ink language$2' ],
[ /\{\{(P)ortalbar( |\||\}|\n)/ig, '{{Portal bar$1' ],
[ /\{\{Robert Awards chron( |\||\}|\n)/ig, '{{Robert Awards$1' ],
[ /\{\{spanish name( 2)?( |\||\}|\n)/ig, '{{Spanish name$2' ],
[ /\{\{url( |\||\}|\n)/ig, '{{URL$1' ],
[ /\{\{USAGymnastics name( |\||\}|\n)/ig, '{{USA Gymnastics$1' ],
[ /\{\{USAGymnasticsName( |\||\}|\n)/ig, '{{USA Gymnastics$1' ],
[ /\{\{wta( |\||\}|\n)/ig, '{{WTA$1' ],
[ /\{\{worldcurling( |\||\}|\n)/ig, '{{World Curling Federation$1' ],
[ /\{\{worldcurlingtour( |\||\}|\n)/ig, '{{World Curling Tour$1' ],
[ /\{\{worldcurl( |\||\}|\n)/ig, '{{World Curling Tour$1' ],
// convert {{USCSub}} with only two parameters to {{USC}}
[
/\|etseq\}\}/g,
'}} [[et seq.]]'
], // fix invalid subsection link
[
/\{\{USCSub\|([0-9]{1,2})\|([0-9a-z]{1,7})\}\}/ig,
'{{USC|$1|$2}}'
],
// renamed URLs
[ 'books.google.co.uk', 'books.google.com' ],
[ 'books.google.dk', 'books.google.com' ],
[ 'http://www.collegefootball.org/famersearch.php?id=', 'http://www.footballfoundation.org/Programs/CollegeFootballHallofFame/SearchDetail.aspx?id=' ],
[ 'http://www.collegefootball.org/famer_selected.php?id=', 'http://www.footballfoundation.org/Programs/CollegeFootballHallofFame/SearchDetail.aspx?id=' ],
[ 'http://www.profootballhof.com/hof/member.jsp?PLAYER_ID=', 'http://www.profootballhof.com/hof/member.aspx?PlayerId=' ],
[ 'http://www.profootballhof.com/hof/member.jsp?player_id=', 'http://www.profootballhof.com/hof/member.aspx?PlayerId=' ],
[ 'http://www.profootballhof.com/hof/member.aspx?PLAYER_ID=', 'http://www.profootballhof.com/hof/member.aspx?PlayerId=' ],
[ 'http://www.profootballhof.com/hof/member.aspx?player_id=', 'http://www.profootballhof.com/hof/member.aspx?PlayerId=' ],
// convert bare ISSF URL to ext link
[
/http:\/\/www\.issf-sports\.org\/athletes\/athlete\.ashx\?personissfid=([A-Z]{6}[0-9]{10})/g,
'\n==External links==\n* {{ISSF name | $1 }}'
],
// athletics related
[ /\{\{iaaf name/ig, '{{IAAF' ],
[ /\| *?letter *?= *?[A-Za-z] *?([\|\}])/g, '$1' ], // remove deprecated letter parameter and value from Template:IAAF
[ '{{AchievementTable', '{{AchievementTable|width=auto' ],
[ '{{AchievementTable|width=auto|width=auto', '{{AchievementTable|width=auto' ],
[
/\{\{MedalSport ?\| ?(Men's|Women's) \[\[Athletics \(sport\)\|Athletics\]\] ?\}\}/ig,
'{{MedalSport | $1 [[athletics (sport)|athletics]]}}'
],
[
/\{\{MedalSport ?\| ?(Men's|Women's) Athletics ?\}\}/ig,
'{{MedalSport | $1 [[athletics (sport)|athletics]]}}'
],
// rowing related
[
/\{\{MedalCountry ?\| ?(\{\{[A-Z]{3}\}\}) ?\}\}\n\{\{MedalSport ?\| ?\[\[Rowing at the Summer Olympics\|(Men's|Women's) Rowing\]\] ?\}\}\n\{\{MedalCompetition ?\| ?\[\[Olympic Games\]\] ?\}\}/ig,
'{{MedalSport | $2 [[rowing (sport)|rowing]] }}\n{{MedalCountry | $1 }}\n{{MedalCompetition | [[Rowing at the Summer Olympics|Olympic Games]]}}'
],
[
/\{\{MedalTop\}\}\n\{\{MedalSport ?\| ?(Men's|Women's) \[\[Rowing at the Summer Olympics\|Rowing\]\] ?\}\}/ig,
'{{MedalTableTop}}\n{{MedalSport | $1 [[rowing (sport)|rowing]] }}\n{{MedalCountry | {{unk}} }}\n{{MedalCompetition | [[Rowing at the Summer Olympics|Olympic Games]]}}'
],
[
/\{\{MedalSport ?\| ?(Men's|Women's) \[\[Rowing \(sport\)\|Rowing\]\] ?\}\}/ig,
'{{MedalSport | $1 [[rowing (sport)|rowing]]}}'
],
[
/\{\{(MedalSport|MedalCompetition|Medal\|Comp) ?\| ?\[\[Rowing World Championships/g,
'{{MedalCompetition | [[World Rowing Championships'
],
[
/\{\{(MedalSport|MedalCompetition|Medal\|Comp) ?\| ?\[\[(Olympic Games|World Rowing Championships|World Rowing Championships\|World Championships|European Rowing Championships|European Rowing Championships\|European Championships)\]\] ?\}\}/g,
'{{MedalCompetition | [[$2]]}}'
],
[ /\[\[Rowing \(sport\)\|row/ig, '[[rowing (sport)|row' ],
[ /\[\[Sport rowing\|/ig, '[[rowing (sport)|' ],
[ /\[\[Coxswain\|cox/ig, '[[coxswain (rowing)|cox' ],
// general medal template formatting
[ /\{\{Medal\|?Olympics?\}\}/ig, '{{MedalCompetition | [[Olympic Games]] }}' ],
[ /\{\{Medal\|?WorldChampionships\}\}/ig, '{{MedalCompetition | World Championships }}' ],
[ /\{\{Medal\|?EuropeanChampionships\}\}/ig, '{{MedalCompetition | European Championships }}' ],
[
/\{\{(Medal\|?(?:Sport|Country|Competition|Comp|Gold|Silver|Bronze|Disqualified)) *\| *(.*?) ?\}\}\n/g,
'{{$1 | $2 }}\n'
], // spacing for readability when editing
// [
// /\]\] *\| *(?![\|])/g,
// ']] | '
// ], // spacing before 2nd parameter - replace "]]|" with "]] | " unless followed by another | (OFF)
[
/\n(\}\}|\{\{MedalBottom\}\})\n?'''/g,
"\n$1\n\n'''"
], // blank line between end of infobox or medal templates and first sentence
[
/\[\[([0-9]{4}) (Summer Olympics|Winter Olympics|World Rowing Championships)\|(.+?(?= [0-9])) ([0-9]{4})\]\]/g,
'[[$1 $2|$4 $3]]'
], // from [[1984 Summer Olympics|Los Angeles 1984]] to [[1984 Summer Olympics|1984 Los Angeles]]
[ /\{\{MedalTop\|?\}\}/ig, '{{MedalTableTop | name = no | medals =\n{{MedalCompetition | [[Olympic Games]] }}' ],
[ /\{\{MedalTableTop\|?\}\}/ig, '{{MedalTableTop | medals =' ],
[ /\{\{MedalBottom\}\}/ig, '}}' ],
[
/(\{\{Medal\|?Country[^\n]*\n)(\{\{Medal\|?Sport[^\n]*\n)/i,
'$2$1'
], // place MedalCountry after MedalSport
// if no ref section
// [ /\.\n\n== ?External links ?==/g, '.\n\n== References ==' ], (OFF)
// sports-ref citations
[
/(>|\* *)\[?(http:\/\/www\.sports\-reference\.com\/olympics\/athletes\/[a-z]{2}\/[a-z1-9\-]{3,30}\.html) *[A-Za-z \]\-\.]*(\n|<\/ref>)/ig,
'$1{{cite Sports-Reference |url=$2}}$3'
],
[
/\{\{cite web *\| *title *= *Olympics *\| *url *= *(http:\/\/www\.sports\-reference\.com\/olympics\/athletes\/[a-z]{2}\/[a-z1-9\-]{3,30}\.html) *\| *publisher *= *sports\-reference *\| *accessdate *= */ig,
'{{cite Sports-Reference |url=$1 |accessdate='
],
[
/\{\{cite web *\| *url *= *(http:\/\/www\.sports\-reference\.com\/olympics\/athletes\/[a-z]{2}\/[a-z1-9\-]{3,30}\.html) *\| *title *= *([^\|]*)\| *publisher *= *Sports\-reference\.com *\| *accessdate *= */ig,
'{{cite Sports-Reference |url=$1 |title=$2|accessdate='
],
[
/\{\{Sports-reference *\| *id *= */ig,
'{{cite Sports-Reference |url=http://www.sports-reference.com/olympics/athletes/'
],
[
/\{\{Sports-reference *\|/ig,
'{{cite Sports-Reference |url=http://www.sports-reference.com/olympics/athletes/'
],
[
/\{\{Sports-reference\}\}/ig,
'{{cite Sports-Reference}}'
],
[
/\{\{cite Sports\-Reference \|url=([^0-9]*[0-9])([^\.])/ig,
'{{cite Sports-Reference |url=$1.html$2'
], // add .html if missing
[
/\{\{ *cite *sports\-reference *\| *1 *= *([^\|]*)\| *2 *= *([^\|]*)\| *3 *= *([^\}]*)}}/ig,
'{{cite Sports-Reference|title=$1|url=$2|accessdate=$3}}'
],
// replace link with template
[
/\[http:\/\/www\.databaseolympics\.com\/players\/playerpage\.htm\?ilkid=([A-Z0-9%]{5,30}) (Olympics profile|profile|databaseOlympics)\]/ig,
'{{databaseOlympics |id=$1}}'
],
// boxing related
[
/(==Professional boxing record==[\n\r]*?)\{\{[Ss]-start}}([\n\r]*?\|)/g,
'$1{| class="wikitable" style="text-align:center;"$2'
],
[
/\[(http:\/\/boxrec\.com\/list_bouts\.php\?human_id=[0-9]{1,6}&cat=boxer)]/g,
"<ref>[$1 Boxing record for {{PAGENAMEBASE}}]. ''[[BoxRec.com]]''.</ref>"
],
[ '{{boxrec|id=', '{{BoxRec|' ],
[ '|align="center" colspan=8', '| colspan="8"' ],
[ '| align="center" style="border-style:', '| style="border-style:' ],
[
/(\| *)([0-9]{2})\/([0-9]{2})\/([0-9]{4})/g,
'$1$4-$3-$2'
], // replace "| 31/12/2015" with "| 2015-12-31"
[
/(\| *)([0-9]{4})[–—−\/]([0-9]{2})[–—−\/]([0-9]{2})/g,
'$1$2-$3-$4'
], // replace "| 2015–12–31" with "| 2015-12-31" (endash/emdash/minus/slash to hyphen)
// cricket external links
[
/\{\{ *Cricinfo/ig,
'{{ESPNcricinfo'
],
[
/\{\{ *Cricketarchive/ig,
'{{CricketArchive'
],
[
/\{\{ *Yahoo!_Cricket/ig,
'{{Yahoo! Cricket'
],
[
/\{\{ESPNcricinfo *\| *ref *= *[a-z]*\/content\/player\/([0-9]*)\.html/ig,
'{{ESPNcricinfo |id= $1'
],
[
/\{\{CricketArchive *\| *ref *= *Archive\/Players\/[0-9]*\/[0-9]*\/([0-9]*)\.html/ig,
'{{CricketArchive |id= $1'
],
[
/\{\{Yahoo! Cricket *\| *ref *= *player\-profile\/([a-z0-9_\-]*)/ig,
'{{Yahoo! Cricket |id= $1'
],
// infobox image cleanup
[
/(\| *image *= *)(Image:|File:)/g,
'$1'
], // if "| image = File:name" is used, remove unneeded "File:"
// spaces after bullets
[
/(\n[*#]+) *([^\s*#:;R])/g,
'$1 $2'
], // space after one or more * or # at start of line
// table spacing for readability when editing
[
/\n\|(?![\s\n\-\+\}\|])/g,
"\n| "
], // space after | at start of line, if not followed by space newline - + } |
[
/\n(\!|\{\||\|\+|\|\-)(?![\s\n])/g,
"\n$1 "
], // space after ! {| |+ |- at start of line, if not followed by space or newline
// [
// /(\|\||\!\!)(?![\s\n])/g,
// "$1 "
// ], // space after || or !! if not followed by space or newline (OFF)
// [
// /([^\s\n])(\|\||\!\!)/g,
// "$1 $2"
// ], // space before || or !! if not preceded by space or newline (OFF)
[
/(\{\{[a-z]*) \|\| /ig,
"$1||"
], // fix templates changed from "{{abc||" to "{{abc || "
[
/align=("?)(left|right|center)("?) *\| */g,
'align=$1$2$3 | '
], // spacing around | in table rows with align="right", etc.
[
/(background: *|bgcolor=)("?)(#?\w{1,6}|[a-z]{3,20})("?) *\| */g,
'$1$2$3$4 | '
], // spacing around | in table rows with bgcolor=#F9E8C7, bgcolor="red", background: #F9E8C7, etc.
[
/scope=("?)(col|row)("?) *\| */g,
'scope=$1$2$3 | '
], // spacing around | in table rows with scope="col", etc.
[
/span=("?)([1-9]{1,3})("?) *\| */g,
'span=$1$2$3 | '
], // spacing around | in table rows with colspan="13", rowspan="2", etc.
[
/(width="?[0-9]{1,3}%?"?)\|/g,
'$1 | '
], // spacing around | in table rows with width="100", width="5%", etc.
[
/; *"\| */g,
';" | '
], // spacing around | in table rows with ;"
[
/\|\-\n\|\}/g,
'|}'
], // remove unneeded |- (<tr>) at end of table
[
/(\|\-\n)\n/g,
'$1'
], // remove extra blank line after |- in table
[
/\n(\n\|\})/g,
'$1'
], // remove extra blank line before |} in table
[
/(\n\! )\|/g,
'$1'
], // remove unneeded | after !
[
/\n\|\-(\n\|\-)/g,
'$1'
], // remove duplicate |-
];
for (const replacement of replacements) {
text = text.replace(...replacement);
}
return text;
}
function process_summary(summary) {
const ac_summary = 'cleanup via [[User:Est. 2021/script/AutoCleanup.js|script]]';
if (summary) {
if (/^\/\*.*?\*\/ $/.test(summary)) { // auto summary
return summary + ac_summary;
} else {
return summary + '; ' + ac_summary;
}
} else {
return ac_summary;
}
}
function main() {
mw.notify(
'Processing...',
{
tag: 'tol-autocleanup',
title: 'AutoCleanup',
type: 'info',
autoHide: true,
autoHideSeconds: 2
}
);
let text_box = $('#wpTextbox1');
let old_text = text_box.textSelection('getContents');
let new_text = clean_wikitext(old_text);
if (old_text != new_text) {
text_box.textSelection('setContents', new_text);
if (mw.util.getParamValue('section') != 'new') { // not section title instead of summary
let summary_box = $('#wpSummary');
summary_box.val(
process_summary(summary_box.val())
)}
mw.notify(
'Done',
{
tag: 'tol-autocleanup',
title: 'AutoCleanup',
type: 'success'
}
);
} else {
mw.notify(
'No changes made',
{
tag: 'tol-autocleanup',
title: 'AutoCleanup',
type: 'info'
}
);
}
}
function add_button() {
try {
if ($('editform').length) {
mw.loader.using(['oojs-ui', 'oojs-ui-widgets'], function() {
let button = new OO.ui.ButtonWidget({label: 'AutoCleanup'});
button.on('click', main);
$('.editButtons').append(button.$element);
});
}
} catch(error) {
alert(error);
}
}
//$(add_button);
if (mw.config.get('wgPageContentModel') === 'wikitext' && mw.config.get('wgAction') === 'edit' && mw.util.getParamValue( "ACdisable" ) != "1" ) {
mw.util.addPortletLink( "p-cactions", window.location.href + '&ACdisable=1', "Disable AutoCleanup", "pt-disableAC" );
$(main);
}
});
// </syntaxhighlight>