Wikipedia testwiki https://test.wikipedia.org/wiki/Main_Page MediaWiki 1.46.0-wmf.22 first-letter Media Special Talk User User talk Wikipedia Wikipedia talk File File talk MediaWiki MediaWiki talk Template Template talk Help Help talk Category Category talk Thread Thread talk Summary Summary talk Test namespace 1 Test namespace 1 talk Test namespace 2 Test namespace 2 talk Draft Draft talk Campaign Campaign talk TimedText TimedText talk Module Module talk SecurePoll SecurePoll talk CNBanner CNBanner talk Translations Translations talk Event Event talk Topic Newsletter Newsletter talk Page370 0 49441 735981 649164 2026-04-02T09:31:38Z ~2026-20342-53 73381 735981 wikitext text/x-wiki '''Page370''' This in test page No. 370. Test 2. Test 3. [[Category:Category with multiple files]] rjilif32sroa2gj90tiirwaf30sbps2 SyntaxHighlight GeSHi 0 49894 735982 690445 2026-04-02T09:46:57Z ~2026-20444-29 73382 735982 wikitext text/x-wiki Testing the [[mw:Extension:SyntaxHighlight GeSHi|Extension:SyntaxHighlight GeSHi]] extension. Test! ==Examples == ;Normal pre, no extension <pre> if (blah) { // stuff } </pre> ;Basic example (pre mode): <source lang="c"> if (blah) { // stuff } </source> ;Div mode: <source lang=c enclose=div> if (blah) { // stuff } </source> ;Light on black may be easier to read than light on white - dark on light may be better. {| | style="background:black" | <source lang=c enclose=div> if (blah) { // stuff } </source> | style="background:darkgray" | <source lang=c enclose=div> if (blah) { // stuff } </source> | style="background:gray" | <source lang=c enclose=div> if (blah) { // stuff } </source> | style="background:lightgrey" | <source lang=c enclose=div> if (blah) { // stuff } </source> | style="background:WhiteSmoke" | <source lang=c enclose=div> if (blah) { // stuff } </source> |} ;Line numbered (forces div mode): <source lang="c" line> if (blah) { // stuff } </source> ;Line numbered with offset: <source lang="c" line start=20> if (blah) { // stuff } </source> ;Non-strict: <source lang="php"> $x = 'y'; <?php $x = 'y'; ?> </source> ;Strict: <source lang="php" strict> $x = 'y'; <?php $x = 'y'; ?> </source> <source lang="sql" > INSERT into arsearch2 (Findindex,Word,Src,session) SELECT STRAIGHT_JOIN ind0.Findindex,ind0.Subject,ind0.Src,25765 FROM arindex as ind0 ,arindex as ind1,arindex as ind2 WHERE ind0.Subject='WIRING' AND ind1.Subject='DIAGRAM' AND ind2.Subject='LUCAS' AND ind0.FindIndex=ind1.FindIndex AND ind0.FindIndex=ind2.FindIndex AND ind0.Src=ind1.Src AND ind0.Src=ind2.Src </source> ;Long lines, yuck. <source lang=python> try: self._site = getSite(otherlang, familyName) except ValueError: raise NoPage('%s is not a local page on %s, and the %s family is not supported by PyWikipediaBot!' % (title, self.site(), familyName )) </source> ==More examples == * [[SyntaxHighlight GeSHi/Hello world]] ===BNF=== <source lang=bnf> <postal-address> ::= <name-part> <street-address> <zip-part> <name-part> ::= <personal-part> <last-name> <opt-jr-part> <EOL> | <personal-part> <name-part> <personal-part> ::= <first-name> | <initial> "." <street-address> ::= <opt-apt-num> <house-num> <street-name> <EOL> <zip-part> ::= <town-name> "," <state-code> <ZIP-code> <EOL> </source> ===Diff=== ==== Context format ==== <source lang=diff> *** /path/to/original ''timestamp'' --- /path/to/new ''timestamp'' *************** *** 1,3 **** --- 1,9 ---- + This is an important + notice! It should + therefore be located at + the beginning of this + document! + This part of the document has stayed the same from version to *************** *** 5,20 **** be shown if it doesn't change. Otherwise, that would not be helping to ! compress the size of the ! changes. ! ! This paragraph contains ! text that is outdated. ! It will be deleted in the ! near future. It is important to spell ! check this dokument. On the other hand, a misspelled word isn't the end of the world. --- 11,20 ---- be shown if it doesn't change. Otherwise, that would not be helping to ! compress anything. It is important to spell ! check this document. On the other hand, a misspelled word isn't the end of the world. *************** *** 22,24 **** --- 22,28 ---- this paragraph needs to be changed. Things can be added after it. + + This paragraph contains + important new additions + to this document. </source> ==== Unified format ==== <source lang=diff> --- original ''timestamp'' +++ new ''timestamp'' @@ -1,3 +1,9 @@ +This is an important +notice! It should +therefore be located at +the beginning of this +document! + This part of the document has stayed the same from version to @@ -5,16 +11,10 @@ be shown if it doesn't change. Otherwise, that would not be helping to -compress the size of the -changes. - -This paragraph contains -text that is outdated. -It will be deleted in the -near future. +compress anything. It is important to spell -check this dokument. On +check this document. On the other hand, a misspelled word isn't the end of the world. @@ -22,3 +22,7 @@ this paragraph needs to be changed. Things can be added after it. + +This paragraph contains +important new additions +to this document. </source> ===INI=== <source lang=ini> [section1] ; some comment on section1 var1 = abc var2 = 451 [section2] ; another comment var1 = 123 var2 = dfg </source> f8lamvd6vz1wjq2uc91a46dl079dg2p MediaWiki:Titleblacklist 8 80922 735872 673666 2026-04-01T18:15:12Z Tanbiruzzaman 57483 735872 wikitext text/x-wiki # This is a title blacklist. Titles and users that match a regular expression here cannot be created. # Use "#" for comments. # This is case insensitive by default # Reiterated creations of Trisha Louis articles .*Trisha.*[Ll]ouis.* <sysop> <errmsg=Reiterated Creations that Violate [[Wikipedia:What Test Wiki is not]]> #AlvaroMolina 15/02/2017 # Editnotice pseudospace Template:Editnotices\/.* <autoconfirmed|noedit|errmsg=titleblacklist-custom-editnotice> # [[meta:Meta:FormWizard]] ([[phab:T129058]]) Wikipedia:FormWizard\/Config\/.* <noedit> # [[phab:T160432]] and [[phab:T199071]] test, used by Pywikibot in edit_failure_tests.py User:UpsandDowns1234\/Blacklisttest #Test requested on talk Bad title Talk:Bad title #Other test Autoconfirmed title blacklist test.* <autoconfirmed|noedit> Sysop title blacklist test.* <noedit> ^Wn\/.* <noedit|errmsg=wikinews-closed> 8uwxgfy38py782rnin5170pxp40z0kr 735881 735872 2026-04-01T19:20:29Z Tanbiruzzaman 57483 735881 wikitext text/x-wiki # This is a title blacklist. Titles and users that match a regular expression here cannot be created. # Use "#" for comments. # This is case insensitive by default # Reiterated creations of Trisha Louis articles .*Trisha.*[Ll]ouis.* <sysop> <errmsg=Reiterated Creations that Violate [[Wikipedia:What Test Wiki is not]]> #AlvaroMolina 15/02/2017 # Editnotice pseudospace Template:Editnotices\/.* <autoconfirmed|noedit|errmsg=titleblacklist-custom-editnotice> # [[meta:Meta:FormWizard]] ([[phab:T129058]]) Wikipedia:FormWizard\/Config\/.* <noedit> # [[phab:T160432]] and [[phab:T199071]] test, used by Pywikibot in edit_failure_tests.py User:UpsandDowns1234\/Blacklisttest #Test requested on talk Bad title Talk:Bad title #Other test Autoconfirmed title blacklist test.* <autoconfirmed|noedit> Sysop title blacklist test.* <noedit> ^(Wn\/|[A-Za-z]+:Wn\/.*) <noedit|errmsg=wikinews-closed> 2unot2d5ldx7bfbdxs4niqg42cgawv2 735885 735881 2026-04-01T19:25:10Z Tanbiruzzaman 57483 735885 wikitext text/x-wiki # This is a title blacklist. Titles and users that match a regular expression here cannot be created. # Use "#" for comments. # This is case insensitive by default # Reiterated creations of Trisha Louis articles .*Trisha.*[Ll]ouis.* <sysop> <errmsg=Reiterated Creations that Violate [[Wikipedia:What Test Wiki is not]]> #AlvaroMolina 15/02/2017 # Editnotice pseudospace Template:Editnotices\/.* <autoconfirmed|noedit|errmsg=titleblacklist-custom-editnotice> # [[meta:Meta:FormWizard]] ([[phab:T129058]]) Wikipedia:FormWizard\/Config\/.* <noedit> # [[phab:T160432]] and [[phab:T199071]] test, used by Pywikibot in edit_failure_tests.py User:UpsandDowns1234\/Blacklisttest #Test requested on talk Bad title Talk:Bad title #Other test Autoconfirmed title blacklist test.* <autoconfirmed|noedit> Sysop title blacklist test.* <noedit> ^(Wn\/|[A-Za-z ]+:Wn\/.*) <noedit|errmsg=wikinews-closed> 83xhnw2duik1ehkajs3yirijglb5wvw 735891 735885 2026-04-01T19:37:16Z Tanbiruzzaman 57483 Reverted edits by [[Special:Contributions/Tanbiruzzaman|Tanbiruzzaman]] ([[User talk:Tanbiruzzaman|talk]]) to last revision by [[User:X-Savitar|X-Savitar]] 673666 wikitext text/x-wiki # This is a title blacklist. Titles and users that match a regular expression here cannot be created. # Use "#" for comments. # This is case insensitive by default # Reiterated creations of Trisha Louis articles .*Trisha.*[Ll]ouis.* <sysop> <errmsg=Reiterated Creations that Violate [[Wikipedia:What Test Wiki is not]]> #AlvaroMolina 15/02/2017 # Editnotice pseudospace Template:Editnotices\/.* <autoconfirmed|noedit|errmsg=titleblacklist-custom-editnotice> # [[meta:Meta:FormWizard]] ([[phab:T129058]]) Wikipedia:FormWizard\/Config\/.* <noedit> # [[phab:T160432]] and [[phab:T199071]] test, used by Pywikibot in edit_failure_tests.py User:UpsandDowns1234\/Blacklisttest #Test requested on talk Bad title Talk:Bad title #Other test Autoconfirmed title blacklist test.* <autoconfirmed|noedit> Sysop title blacklist test.* <noedit> dtucmnhuxuuljkecc08qd03cztxxm01 735892 735891 2026-04-01T19:40:51Z Tanbiruzzaman 57483 Undid revision [[Special:Diff/735891|735891]] by [[Special:Contributions/Tanbiruzzaman|Tanbiruzzaman]] ([[User talk:Tanbiruzzaman|talk]]) 735892 wikitext text/x-wiki # This is a title blacklist. Titles and users that match a regular expression here cannot be created. # Use "#" for comments. # This is case insensitive by default # Reiterated creations of Trisha Louis articles .*Trisha.*[Ll]ouis.* <sysop> <errmsg=Reiterated Creations that Violate [[Wikipedia:What Test Wiki is not]]> #AlvaroMolina 15/02/2017 # Editnotice pseudospace Template:Editnotices\/.* <autoconfirmed|noedit|errmsg=titleblacklist-custom-editnotice> # [[meta:Meta:FormWizard]] ([[phab:T129058]]) Wikipedia:FormWizard\/Config\/.* <noedit> # [[phab:T160432]] and [[phab:T199071]] test, used by Pywikibot in edit_failure_tests.py User:UpsandDowns1234\/Blacklisttest #Test requested on talk Bad title Talk:Bad title #Other test Autoconfirmed title blacklist test.* <autoconfirmed|noedit> Sysop title blacklist test.* <noedit> ^(Wn\/|[A-Za-z ]+:Wn\/.*) <noedit|errmsg=wikinews-closed> 83xhnw2duik1ehkajs3yirijglb5wvw 735896 735892 2026-04-01T19:43:40Z Tanbiruzzaman 57483 735896 wikitext text/x-wiki # This is a title blacklist. Titles and users that match a regular expression here cannot be created. # Use "#" for comments. # This is case insensitive by default # Reiterated creations of Trisha Louis articles .*Trisha.*[Ll]ouis.* <sysop> <errmsg=Reiterated Creations that Violate [[Wikipedia:What Test Wiki is not]]> #AlvaroMolina 15/02/2017 # Editnotice pseudospace Template:Editnotices\/.* <autoconfirmed|noedit|errmsg=titleblacklist-custom-editnotice> # [[meta:Meta:FormWizard]] ([[phab:T129058]]) Wikipedia:FormWizard\/Config\/.* <noedit> # [[phab:T160432]] and [[phab:T199071]] test, used by Pywikibot in edit_failure_tests.py User:UpsandDowns1234\/Blacklisttest #Test requested on talk Bad title Talk:Bad title #Other test Autoconfirmed title blacklist test.* <autoconfirmed|noedit> Sysop title blacklist test.* <noedit> ^(?:Wn\/|[A-Za-z ]+:Wn\/.*) <noedit|errmsg=wikinews-closed> 5vc2n40l112y8p4nlgm3ashyodxnn4l 735900 735896 2026-04-01T19:47:13Z Tanbiruzzaman 57483 Restored revision 735891 by [[Special:Contributions/Tanbiruzzaman|Tanbiruzzaman]] ([[en:w:User:BrandonXLF/Restorer|Restorer]]) 735900 wikitext text/x-wiki # This is a title blacklist. Titles and users that match a regular expression here cannot be created. # Use "#" for comments. # This is case insensitive by default # Reiterated creations of Trisha Louis articles .*Trisha.*[Ll]ouis.* <sysop> <errmsg=Reiterated Creations that Violate [[Wikipedia:What Test Wiki is not]]> #AlvaroMolina 15/02/2017 # Editnotice pseudospace Template:Editnotices\/.* <autoconfirmed|noedit|errmsg=titleblacklist-custom-editnotice> # [[meta:Meta:FormWizard]] ([[phab:T129058]]) Wikipedia:FormWizard\/Config\/.* <noedit> # [[phab:T160432]] and [[phab:T199071]] test, used by Pywikibot in edit_failure_tests.py User:UpsandDowns1234\/Blacklisttest #Test requested on talk Bad title Talk:Bad title #Other test Autoconfirmed title blacklist test.* <autoconfirmed|noedit> Sysop title blacklist test.* <noedit> dtucmnhuxuuljkecc08qd03cztxxm01 735901 735900 2026-04-01T19:47:35Z Tanbiruzzaman 57483 Restored revision 735885 by [[Special:Contributions/Tanbiruzzaman|Tanbiruzzaman]] ([[en:w:User:BrandonXLF/Restorer|Restorer]]) 735901 wikitext text/x-wiki # This is a title blacklist. Titles and users that match a regular expression here cannot be created. # Use "#" for comments. # This is case insensitive by default # Reiterated creations of Trisha Louis articles .*Trisha.*[Ll]ouis.* <sysop> <errmsg=Reiterated Creations that Violate [[Wikipedia:What Test Wiki is not]]> #AlvaroMolina 15/02/2017 # Editnotice pseudospace Template:Editnotices\/.* <autoconfirmed|noedit|errmsg=titleblacklist-custom-editnotice> # [[meta:Meta:FormWizard]] ([[phab:T129058]]) Wikipedia:FormWizard\/Config\/.* <noedit> # [[phab:T160432]] and [[phab:T199071]] test, used by Pywikibot in edit_failure_tests.py User:UpsandDowns1234\/Blacklisttest #Test requested on talk Bad title Talk:Bad title #Other test Autoconfirmed title blacklist test.* <autoconfirmed|noedit> Sysop title blacklist test.* <noedit> ^(Wn\/|[A-Za-z ]+:Wn\/.*) <noedit|errmsg=wikinews-closed> 83xhnw2duik1ehkajs3yirijglb5wvw 735904 735901 2026-04-01T19:48:05Z Tanbiruzzaman 57483 735904 wikitext text/x-wiki # This is a title blacklist. Titles and users that match a regular expression here cannot be created. # Use "#" for comments. # This is case insensitive by default # Reiterated creations of Trisha Louis articles .*Trisha.*[Ll]ouis.* <sysop> <errmsg=Reiterated Creations that Violate [[Wikipedia:What Test Wiki is not]]> #AlvaroMolina 15/02/2017 # Editnotice pseudospace Template:Editnotices\/.* <autoconfirmed|noedit|errmsg=titleblacklist-custom-editnotice> # [[meta:Meta:FormWizard]] ([[phab:T129058]]) Wikipedia:FormWizard\/Config\/.* <noedit> # [[phab:T160432]] and [[phab:T199071]] test, used by Pywikibot in edit_failure_tests.py User:UpsandDowns1234\/Blacklisttest #Test requested on talk Bad title Talk:Bad title #Other test Autoconfirmed title blacklist test.* <autoconfirmed|noedit> Sysop title blacklist test.* <noedit> ^(Wn\/|[A-Za-z ]+:Wn\/.*) <noedit|errmsg=wikinews-closed> ^(Wn\/|[A-Za-z]+:Wn\/.*) <noedit|errmsg=wikinews-closed> eo51j7l20fd76l53irkjpxzx1juatrj 735908 735904 2026-04-01T19:49:48Z Tanbiruzzaman 57483 735908 wikitext text/x-wiki # This is a title blacklist. Titles and users that match a regular expression here cannot be created. # Use "#" for comments. # This is case insensitive by default # Reiterated creations of Trisha Louis articles .*Trisha.*[Ll]ouis.* <sysop> <errmsg=Reiterated Creations that Violate [[Wikipedia:What Test Wiki is not]]> #AlvaroMolina 15/02/2017 # Editnotice pseudospace Template:Editnotices\/.* <autoconfirmed|noedit|errmsg=titleblacklist-custom-editnotice> # [[meta:Meta:FormWizard]] ([[phab:T129058]]) Wikipedia:FormWizard\/Config\/.* <noedit> # [[phab:T160432]] and [[phab:T199071]] test, used by Pywikibot in edit_failure_tests.py User:UpsandDowns1234\/Blacklisttest #Test requested on talk Bad title Talk:Bad title #Other test Autoconfirmed title blacklist test.* <autoconfirmed|noedit> Sysop title blacklist test.* <noedit> ^Wn\/.* <noedit|errmsg=wikinews-closed> ^(Wn\/|[A-Za-z ]+:Wn\/.*) <noedit|errmsg=wikinews-closed> khvbwlltwadj5jrrwew8bdj6rgaptk6 735917 735908 2026-04-01T19:57:35Z Tanbiruzzaman 57483 Reverted edits by [[Special:Contributions/Tanbiruzzaman|Tanbiruzzaman]] ([[User talk:Tanbiruzzaman|talk]]) to last revision by [[User:X-Savitar|X-Savitar]] 673666 wikitext text/x-wiki # This is a title blacklist. Titles and users that match a regular expression here cannot be created. # Use "#" for comments. # This is case insensitive by default # Reiterated creations of Trisha Louis articles .*Trisha.*[Ll]ouis.* <sysop> <errmsg=Reiterated Creations that Violate [[Wikipedia:What Test Wiki is not]]> #AlvaroMolina 15/02/2017 # Editnotice pseudospace Template:Editnotices\/.* <autoconfirmed|noedit|errmsg=titleblacklist-custom-editnotice> # [[meta:Meta:FormWizard]] ([[phab:T129058]]) Wikipedia:FormWizard\/Config\/.* <noedit> # [[phab:T160432]] and [[phab:T199071]] test, used by Pywikibot in edit_failure_tests.py User:UpsandDowns1234\/Blacklisttest #Test requested on talk Bad title Talk:Bad title #Other test Autoconfirmed title blacklist test.* <autoconfirmed|noedit> Sysop title blacklist test.* <noedit> dtucmnhuxuuljkecc08qd03cztxxm01 Testesd 0 91714 735998 657025 2026-04-02T10:33:24Z PieWriter 72123 Tagging broken redirect for deletion ([[:m:User:PieWriter/BR.js|BR]]) 735998 wikitext text/x-wiki {{delete|Broken redirect|delete gsr}} #REDIRECT [[Usuario:!Silent/Taller]] 0y3a99mybx7n50x1ub2zqa0hedlm87l 735999 735998 2026-04-02T10:33:49Z PieWriter 72123 Restored revision 657025 by [[Special:Contributions/Cooldudeseven7|Cooldudeseven7]] ([[User talk:Cooldudeseven7|talk]]) (TwinkleGlobal) 735999 wikitext text/x-wiki #REDIRECT [[Usuario:!Silent/Taller]] d8srzm82eeghpsd2f9v6jd5vmsnnyib Dufi 0 99732 735996 351701 2026-04-02T10:27:47Z PieAlt 73198 Tagging broken redirect for deletion ([[:m:User:PieWriter/BR.js|BR]]) 735996 wikitext text/x-wiki {{delete|Broken redirect}} #REDIRECT [[Dufí]] aow0ewhuo8zqvhk4xwag9qdfdtry3g9 736000 735996 2026-04-02T10:34:16Z PieWriter 72123 Reverted edits by PieAlt via [[:m:User:PieWriter/massundo.js|massundo]] 736000 wikitext text/x-wiki #REDIRECT [[Dufí]] dy58mrlbqq8aqnpusask53zfmyha95b Wikipedia:Sandbox 4 107092 735824 734288 2026-04-01T12:55:33Z ToadetteEdit 59028 /* Please start your testing below this line */ android app testing 735824 wikitext text/x-wiki <noinclude>{{Sandbox}}</noinclude> == Please start your testing below this line == Android app testing l3vg6qp9sqspb6eo7klavj7pdog04vh 735945 735824 2026-04-01T21:00:53Z Cewbot 33876 Clear the sandbox. If you want to keep it longer, please test it in [[Special:MyPage/Sandbox|personal sandbox]], you can also check the revision history of the sandbox. 735945 wikitext text/x-wiki <noinclude>{{Sandbox}}</noinclude> == Please start your testing below this line == 9v37rcaxoiwjar8n3q9n7dcsjdvcyin Global sysops/Requests 0 110000 736004 735490 2026-04-02T10:34:20Z PieWriter 72123 Reverted edits by PieAlt via [[:m:User:PieWriter/massundo.js|massundo]] 736004 wikitext text/x-wiki {{Dynamite|title=:Global sysops/Requests/header}} <!-- Edit below this line. New requests to the bottom. --> * Please block {{LockHide|1=A2093064-test2|2=test2wiki:}}: aa. --[[User:A2093064-test|A2093064-test]] ([[User talk:A2093064-test|talk]]) 05:41, 13 May 2020 (UTC) * Please block {{LockHide|1=A2093064-test2|2=q:zh:}}: Vandalism. Spam / spambot. BB. --[[User:A2093064-test|A2093064-test]] ([[User talk:A2093064-test|talk]]) 05:43, 13 May 2020 (UTC) * Please block {{LockHide|1=A2093064-test2|2=null:}}: Vandalism. --[[User:A2093064-test|A2093064-test]] ([[User talk:A2093064-test|talk]]) 08:42, 13 May 2020 (UTC) * Please block https://wikimania.wikimedia.org/wiki/Special:Contributions/A2093064-test2: Vandalism. --[[User:A2093064-test|A2093064-test]] ([[User talk:A2093064-test|talk]]) 08:47, 13 May 2020 (UTC) * Please block {{LockHide|1=A2093064-test2|2=test2wiki:}}: Vandalism. --[[User:A2093064-test|A2093064-test]] ([[User talk:A2093064-test|talk]]) 08:48, 13 May 2020 (UTC) * [[:testwiki:File:Foo.svg]]: Broken redirect. [[User:PieAlt|PieAlt]] ([[User talk:PieAlt|talk]]) 04:43, 29 March 2026 (UTC) 4j0djofacfr1h8bxlqjd1go2oj73i1g Vernonanthura polyanthes 0 115181 735988 442366 2026-04-02T10:17:02Z PieAlt 73198 Tagging broken redirect for deletion 735988 wikitext text/x-wiki {{delete|Broken redirect}} #REDIRECT [[Vernonanthura polyanthes moved]] lud0nddr8z812iv2lopdkro293rl3hl 735990 735988 2026-04-02T10:18:02Z PieAlt 73198 Tagging broken redirect for deletion using [[:m:User:PieWriter/BR.js]] 735990 wikitext text/x-wiki {{delete|Broken redirect}} {{delete|Broken redirect}} #REDIRECT [[Vernonanthura polyanthes moved]] 670nnmri9oyr6ati3atdpn9unqv2yop 736002 735990 2026-04-02T10:34:18Z PieWriter 72123 Reverted edits by PieAlt via [[:m:User:PieWriter/massundo.js|massundo]] 736002 wikitext text/x-wiki {{delete|Broken redirect}} #REDIRECT [[Vernonanthura polyanthes moved]] lud0nddr8z812iv2lopdkro293rl3hl Testing BDP C 0 117058 735946 732738 2026-04-02T00:03:31Z InternetArchiveBot 34092 Rescuing 4 sources and tagging 0 as dead.) #IABot (v2.0.9.5 735946 wikitext text/x-wiki {{redirect confusion| Bataille des trois empereurs| Bataille des Trois Rois{{!}}Bataille des trois rois}} {{Voir homonymes|Austerlitz}} {{Infobox Conflit militaire | conflit = Bataille d’Austerlitz | guerre = [[Troisième Coalition]] | image = Austerlitz-baron-Pascal.jpg | légende = ''Napoléon à la bataille d'Austerlitz'' par [[François Gérard]]. | date = {{date|2|décembre|1805}} | lieu = [[Slavkov u Brna|Austerlitz]] (<small>[[Couronne de Bohême|royaume de Bohême-Moravie]], [[Empire d'Autriche]], [[Saint-Empire romain germanique]]</small>) | issue = Victoire française décisive *[[Traité de Presbourg]] *Dissolution du [[Saint-Empire romain germanique]] *Création de la [[confédération du Rhin]] | combattants1 = {{Empire français}} | combattants2 = {{Russie impériale}}<br />{{Empire d'Autriche}} | commandant1 = {{drapeau|Empire français}} {{Napoléon Ier}}<br />{{drapeau|Empire français}} [[Édouard Mortier]]<br />{{drapeau|Empire français}} [[Jean-Baptiste Bessières]]<br />{{drapeau|Empire français}} [[Charles XIV Jean|Jean-Baptiste Bernadotte]]<br />{{drapeau|Empire français}} [[Louis Nicolas Davout]]<br />{{drapeau|Empire français}} [[Jean-de-Dieu Soult]]<br />{{drapeau|Empire français}} [[Jean Lannes]]<br />{{drapeau|Empire français}} [[Joachim Murat]] | commandant2 = {{drapeau|Empire russe}} {{souverain2|Alexandre Ier (empereur de Russie)| de Russie}}<br />{{drapeau|Empire russe}} [[Mikhaïl Koutouzov]]<br />{{drapeau|Empire russe}} [[Piotr Ivanovitch Bagration|Pierre de Bagration]]<br />{{drapeau|Monarchie de Habsbourg}} {{souverain2|François Ier (empereur d'Autriche)|d'Autriche}}<br />{{drapeau|Monarchie de Habsbourg}} [[Franz von Weyrother]]<br />{{drapeau|Monarchie de Habsbourg}} {{souverain2|Jean Ier (prince de Liechtenstein)|de Liechtenstein}} | forces1 = 75 000<br /> 139 canons{{sfn|Chandler|1966|p=417}} | forces2 = {{nobr|85 000}}<br />278 canons{{sfn|Clodfelter|2008|p=159-160}} | pertes1 = {{unité|1305|morts}}<br />{{nombre|6940|blessés}}<br />573 prisonniers<br/> 1 drapeau{{sfn|Clodfelter|2008|p=159-160}} | pertes2 = {{nombre|13000}} morts ou blessés<br/> {{nombre|11500 prisonniers}} 180 canons<br /> 45 à 50 drapeaux{{sfn|Clodfelter|2008|p=159-160}} | batailles = {{Troisième coalition}} | géolocalisation = République tchèque/Europe | cause = }} La '''bataille d’Austerlitz''' est un affrontement décisif de la [[Campagne d'Allemagne (1805)|campagne d'Allemagne]] qui s'est déroulé le lundi {{date|2|décembre|1805}}{{Note|groupe=Note|11 [[frimaire]] an XIV selon le [[calendrier républicain]] en usage en France jusqu'à la fin de 1805, 20 novembre 1805 selon le calendrier russe avant la [[Passage du calendrier julien au calendrier grégorien|réforme de 1918]].}} entre [[Brno|Brünn]] et [[Slavkov u Brna|Austerlitz]], dans le sud de la [[Moravie]] (alors une [[Monarchie de Habsbourg|possession autrichienne]], aujourd'hui en [[Tchéquie]]). Cette bataille oppose la [[Grande Armée]] commandée par [[Napoléon Ier|Napoléon Bonaparte]], sacré [[Sacre de Napoléon Ier|empereur des Français]] un an jour pour jour auparavant, aux troupes de {{souverain2|François Ier (empereur d'Autriche)}}, empereur d'[[Empire d'Autriche|Autriche]] et du [[Saint-Empire romain germanique]], et aux [[Armée russe dans les guerres de la Révolution et de l'Empire|forces russes]] d'{{souverain2|Alexandre Ier (empereur de Russie)}}, [[Liste des monarques de Russie|tsar de Russie]]. Les trois souverains sont présents sur le champ de bataille, d'où son surnom de « bataille des Trois Empereurs ». Après neuf heures de combat, la Grande Armée de Napoléon, malgré son infériorité numérique, met en déroute, encercle et bat de façon décisive les forces de la [[Troisième Coalition]] qui se dissout à la suite de la bataille, obligeant l'Autriche à signer la [[traité de Presbourg|paix de Presbourg]]. Outre son importance stratégique, cette bataille, la [[Campagne d'Allemagne (1805)|campagne qui l'a précédée]], menant la Grande Armée de [[Camp de Boulogne (Napoléon)|Boulogne-sur-Mer]] (Pas-de-Calais) jusqu’à Austerlitz, et les ruses de Napoléon, sont considérées comme un [[chef-d'œuvre]] tactique de {{souverain-|Napoléon Ier}}, enseignée dans toutes les académies militaires au monde. Le [[Royaume-Uni de Grande-Bretagne et d'Irlande|Royaume-Uni]], membre et financeur de la coalition, n'a que marginalement contribué aux opérations terrestres : ses petits contingents débarqués en Italie et en Allemagne du nord n'ont pas affronté la [[Grande Armée]]. Victorieux sur mer à la [[bataille de Trafalgar]] en {{date|octobre 1805}}, le [[Royaume-Uni]] demeure la seule grande puissance à continuer de s’opposer à l'[[Premier Empire|empire napoléonien]]. == Contexte == {{Article détaillé|Troisième Coalition|Ordre de bataille des unités françaises ayant participé à la bataille d'Austerlitz}} Après la capitulation des Autrichiens à Ulm, Napoléon avait donné l'ordre à ses troupes de marcher rapidement sur Vienne, la capitale autrichienne. En {{date|novembre 1805}}, la Grande Armée française, forte d'environ 200 000 hommes, avait franchi la frontière autrichienne et progressait le long du Danube, s'emparant de villes importantes et sécurisant des ponts stratégiques{{sfn|Horne|1979|p=117-119}}. Les Autrichiens s'étaient retirés pour se regrouper et rejoindre l'avancée des troupes russes commandées par le général Mikhaïl Koutouzov. Le retrait autrichien rendit Vienne vulnérable et, le {{date|13 novembre 1805}}, les Français pénétrèrent dans la ville sans rencontrer de résistance. Napoléon s'empara des ressources de Vienne, dont l'arsenal et les réserves, pour renforcer son armée{{sfn|Chandler|1966|p=407}}. Koutouzov tenta d'éviter une confrontation directe avec Napoléon jusqu'à l'arrivée de renforts. Les Russes se retirèrent en direction de la Moravie, où il livra plusieurs combats avec les Français à Dürrenstein ({{date|11 novembre}}) et Schöngrabern ({{date|16 novembre}}). Le {{date|18 novembre}}, Koutouzov atteignit Wischau, où il fit sa jonction avec le corps de Frédéric de Buxhoeveden et les Autrichiens de Jean de Liechtenstein{{sfn|Goetz|2005|p=77, 83 et 85}}. === Les conditions météorologiques === Les {{1er}} et {{date|2 décembre}} sont marqués en milieu de journée par un soleil éclatant, d'où l'expression du {{citation|Soleil d'Austerlitz}} qui passa à la postérité, surtout avec la citation prononcée par Napoléon {{citation|Voilà le soleil d'Austerlitz !}} en 1812 avant la [[bataille de la Moskova]]<ref>{{Lien web|url= https://www.lepoint.fr/culture/1er-decembre-1805-les-illuminations-d-austerlitz-01-12-2017-2176636_3.php|titre={{1er}} décembre 1805 : les illuminations d'Austerlitz |site= Le Point|date=01-12-2017}}</ref>{{,}}<ref>{{Lien web|url= https://francearchives.fr/fr/commemo/recueil-2005/38810|titre= Le "soleil" d'Austerlitz ou la bataille des trois Empereurs|site= France Archives|date= 2005}}</ref>{{,}}<ref>{{Lien web|url= https://www.herodote.net/2_decembre_1805-evenement-18051202.php|titre= 2 décembre 1805 Napoléon triomphe au soleil d'Austerlitz|site= Hérodote.net|date= 24 septembre 2019}}</ref>. <center> {| class="wikitable" !Date || {{précision nécessaire|Température}} || Vent || Précipitations |- |29/11 || {{unité|1.1|°C}} || faible || Pluie, brume |- |30/11 || {{unité|2.0|°C}} || faible || Neige |- |1/12 || {{unité|2.5|°C}} || moyen || Pluie |- |2/12 || {{unité|5.2|°C}} || faible || Brume, pluie |- |3/12 || {{unité|2.5|°C}} || faible || Neige |} </center> === Le plan et le dispositif français === {{Article détaillé|Ordre de bataille des unités françaises ayant participé à la bataille d'Austerlitz}} Le plan de Napoléon prévoyait que les corps de Soult et de Lannes, accompagnés de Murat, progresseraient au total d'environ 53 000 hommes en direction de Brno et de Wischau, afin d'attirer l'attention de l'ennemi en prenant possession de la ville d'Austerlitz et des hauteurs voisines de Pratzen. Napoléon spécula sur le fait que les Alliés, avec leur supériorité numérique, seraient tentés de s'engager dans une bataille où les chances étaient presque deux contre une en leur faveur. Dès que l'ennemi aurait mordu à l'hameçon, les corps de Bernadotte et de Davout devraient avancer depuis Iglau et Vienne, respectivement, afin de porter ses troupes à un effectif de 75 000 hommes pour la bataille proprement dite, réduisant ainsi les chances à un rapport plus raisonnable{{sfn|Chandler|1966|p=410}}. Napoléon avait déjà transmis son plan à ses généraux la veille, le {{date|1 décembre 1805}} à 20h30. À son aile gauche se trouvait le Vème Corps (Lannes) qui devait occuper la route d'Olmütz avec les divisions du général Caffarelli et de Suchet. Napoléon mit également à sa disposition la cavalerie de Murat, composée des cuirassiers des généraux d'Hautpoul et Nansouty, des dragons des généraux Walther et Beaumont et des chasseurs des généraux Milhaud et Kellermann. Au centre, derrière le Goldbach, se trouvait le IVe Corps (Soult) qui, avec les divisions de Vandamme et de St. Hilaire, traversa le ruisseau près des villages de Girzikowitz et de Puntowitz et prit possession du plateau de Pratzen. Un peu plus loin, derrière, il plaça la troisième division du général Legrand. À environ 2,5 km de là, près de Groß Raigern, se trouvait la division du général Friant. La réserve était constituée par le 1er corps (Bernadotte), la garde impériale et la division du général Oudinot. De cette façon, il tenait une masse de 25.000 hommes prêts à se rendre sur tout point où ils seraient nécessaires{{sfn|Thiers|1893|p=63}}. === Le plan et le dispositif allié === {{Article détaillé|Ordre de bataille des armées russes et autrichiennes ayant participé à la bataille d’Austerlitz}} Le soir du {{date|1 décembre}}, environ 85 000 soldats alliés et 278 pièces d'artillerie sont arrivés sur le terrain. Après leur arrivée, le tsar et l'empereur d'Autriche, qui avaient établi leur quartier général commun dans le village de Krenowitz, avaient discuté toute l'après-midi du {{date|1 décembre}} de la marche à suivre. Alors que l'empereur François Ier continuait à conseiller la prudence, le tsar Alexandre Ier, encouragé par le prince Dolgoroukov et d'autres nobles, exigeait une action immédiate. Soutenu par le chef d'état-major autrichien Weyrother, Alexandre Ier réussit à s'imposer. Pour mettre en œuvre le plan, Weyrother a divisé l'armée alliée en sept divisions. La 1ère et la 2ème colonnes (Buxhöwden) formaient l'aile droite. Les 4e et 5e colonnes (Liechtenstein) formaient l'aile gauche et la 3e colonne (Bagration) le centre. Menée par l'avant-garde du FML Kienmayer, les 13 600 hommes de la 1re colonne du lieutenant-général Dochturow devaient s'emparer du village de Tellnitz, pivoter vers le nord pour rejoindre la 2e colonne (11 700 hommes) du lieutenant-général Langeron et traverser ensemble le Goldbach{{sfn|Chandler|1966|p=415-416}}. Avant de faire la jonction avec Dochturow, Langeron devait s'emparer de Zokolnitz avec la 3e colonne (10 000 hommes) de Przbysewskis. Après avoir traversé la rivière, tous trois devaient lancer une attaque résolue contre le centre français qui, à ce moment-là, tiendrait probablement un nouveau front de Puntowitz à Turas. Au même moment, la 4e colonne (23 900 hommes), sous les ordres du Feldzeugmeister Kollowrath et du lieutenant-général Miloradovitch, devait, après une avancée directe depuis les hauteurs de Pratzen, lancer une attaque frontale à l'arrière de la ligne de combat française qui se trouvait au point d'appui à Puntowitz. Entre-temps, Bagration devait mener avec 13 000 hommes une deuxième attaque contre le flanc gauche de Napoléon le long de la route Olomouc-Brno afin de lier les troupes françaises stationnées là pendant les manœuvres décisives au sud. En réserve se trouvait derrière le centre la garde impériale russe (10.000 hommes) sous le grand-duc Constantin{{sfn|Chandler|1966|p=415-416}}. == La bataille == === Sud === [[Image:Battle of Austerlitz, Situation at 1800, 1 December 1805.png|300px|vignette|gauche|Les positions françaises (en bleu) et alliées (en rouge) vers 18 heures le {{date|1|décembre|1805}}. Carte du Département d’histoire de l’[[Académie militaire]] des [[États-Unis]].]] A 7 heures du matin, l'avant-garde du général Kienmayer avait commencé à attaquer le village de Telnitz. Le village était défendu par le 3e régiment d'infanterie de ligne et un bataillon de chasseurs corses, que la nature du terrain rendait invisibles. Les Français ont réussi à repousser plusieurs attaques, mais lorsque la 1ère colonne (Dochturow) est arrivée à 08h00, ils se sont retirés. Après avoir traversé le Goldbach, Kienmayer lança ses quatorze escadrons dans la plaine derrière Telnitz contre la cavalerie légère du général Margaron. Margaron résista à plusieurs assauts, mais ne put tenir tête à une telle masse de cavalerie. Comme la division de Friant, sous le commandement du maréchal Davout, n'était pas encore arrivée de Gross Raigern, la droite française était fortement débordée. Mais le général Buxhövden, après avoir attendu longtemps, dut à son tour attendre la 2e colonne (Langeron). La majeure partie de la cavalerie, qui devait occuper la plaine à droite des Russes et à gauche des Français, avait mal compris l'ordre qui lui prescrivait cette position : elle s'était donc dirigée vers Pratzen et y avait pris position{{sfn|Thiers|1893|p=68-70}}. Dès qu'elle s'est aperçue de son erreur, elle a essayé de revenir à sa place, retardant ainsi la pré-archivage des deux colonnes. Après que le général Langeron soit enfin arrivé devant Sokolnitz, il a commencé à attaquer la ville. Entre-temps, le général Friant était arrivé de Gross Raigern avec sa division composée de cinq régiments d'infanterie et de six régiments de dragons. Cela permit aux Français de lancer une contre-attaque sur Sokolnitz. Après avoir occupé Sokolnitz, le général Friant a laissé le 48e régiment d'infanterie pour reprendre le château de Sokolnitz à la colonne de Pribyschewski. Au même moment, la colonne de Langeron avait lancé une nouvelle attaque sur Sokolnitz et Friant avait rappelé le 111e régiment d'infanterie pour faire face à la nouvelle menace. Pour le reste de la matinée, 8.000 fantassins français et 2.800 cavaliers se sont battus contre 35.000 alliés dans une pénible bataille d'usure{{sfn|Thiers|1893|p=68-70}}. === Centre === Pendant les combats sur la droite des Français, le maréchal Soult a lancé son attaque au centre à 9 heures. Les deux divisions de Vandamme et de St. Hilaire, formées en colonnes serrées, se déplaçaient rapidement vers la colline de Pratzen. La division de Vandamme se dirigeait vers la gauche, celle de Saint-Hilaire vers la droite du village de Pratzen, profondément encastré dans un ravin qui se termine par le cours du ruisseau Goldbach près de Puntowitz. Avant même que Soult ne commence son attaque, la 4e colonne (Kollowrath, Miloradovitch) s'était déployée sur la colline Kollowarth avec deux escadrons du régiment autrichien de dragons n°1, les 2e et 3e bataillons du Novgorod et le 1er bataillon de grenadiers du régiment d'infanterie d'Abşeron sur le Staré Vinohrady. Et Miloradovitch avec les brigades de Repninsky et de Berg. Sur la droite, le général St. Hilaire s'approchait rapidement de son objectif, le village de Pratzen. Une première attaque fut repoussée par les Russes ; mais après une autre, ils durent se replier. Pendant ce temps, le 10e régiment d'infanterie légère, à la tête de la division Saint-Hilaire, contournait Pratzen et se dirigeait vers la colline de Pratze. Au sud, Sergei Kamensky avait entendu le début des combats sur Pratze. Faisant preuve d'une excellente initiative, il a immédiatement prévenu Langeron et a avancé avec ses deux régiments en direction du Pratzeberg{{sfn|Castle|2004|p=51-61}}. Les éléments de tête de sa brigade s'approchèrent vers 10h00 du seul bataillon du 10e régiment d'infanterie légère de Morand sur le Pratzeberg. Morand signala immédiatement l'approche de la colonne ennemie à St. Hilaire, qui déplaça le 1er bataillon du 10e régiment d'infanterie légère et le 1er bataillon du 36e régiment d'infanterie du nord-est vers le sud-est et plaça trois de ses pièces divisionnaires sous le commandement de Morand. Peu après, St. Hilaire reçut la nouvelle de l'approche d'une colonne venant du nord et, comme il n'était pas clair s'il s'agissait d'une colonne autrichienne ou bavaroise, St. Hilaire ordonna à ses troupes de s'arrêter et d'observer la colonne qui s'approchait. Comme trois de ses cinq bataillons disponibles étaient déjà engagés pour faire face aux six bataillons de Kamensky, il ne restait plus que deux bataillons pour faire face à cette nouvelle menace. Au total, St. Hilaire disposait d'environ 4.000 hommes. Face à lui, les six bataillons de Kamensky comptaient environ 3.000 hommes, ainsi que cinq bataillons autrichiens avec 2.500 hommes supplémentaires. Au même moment, Vandamme lança une attaque sur la ligne autrichienne, derrière laquelle les Russes de Miloradovich se repliaient{{sfn|Castle|2004|p=51-61}}. La ligne autrichienne a résisté à la première attaque française. Le bataillon de grenadiers du régiment d'infanterie Salzbourg n° 23 a repoussé une partie de l'infanterie française vers le nord-ouest dans une contre-attaque à la baïonnette. Les grenadiers furent alors attaqués et repoussés par une unité de dragons français. Sur la colline, Kollowrath a réagi rapidement. Il ordonna au 6e bataillon du régiment d'infanterie Auersperg n° 24 de combler la brèche qui séparait le bataillon de grenadiers de la ligne principale. L'avancée du 6e bataillon a permis aux grenadiers de se détacher des dragons français et de se regrouper. La contre-attaque des grenadiers fut coûteuse, mais elle stoppa l'avancée de Schiner et donna aux bataillons russes de Miloradovitch le temps de se regrouper{{sfn|Goetz|2005|p=197}}. Lorsque la situation s'est stabilisée sur sa gauche, Vandamme a dirigé le 2e bataillon du 4e régiment d'infanterie vers Blaziowitz. Après que l'avance autrichienne vers Blaziowitz ait été repoussée par les dragons français, Vandamme a déplacé ses troupes vers le nord pour lancer une attaque groupée sur la droite autrichienne. À l'extrême gauche, Vandamme renforça le brigadier Schiner avec le 1er bataillon du 4e régiment d'infanterie et ordonna à Schiner d'attaquer la position autrichienne par le nord-ouest. Le brigadier Ferey devait attaquer avec sa propre brigade (57e et 46e régiments d'infanterie) et le 55e régiment d'infanterie de la brigade de Varé. Le brigadier Candras prit une position de réserve avec le 28e régiment d'infanterie. Le général de brigade Varé avec le 43e régiment d'infanterie devait relier le côté gauche de Vandamme au côté droit de St Hilaire, qui se trouvait à Pratze. Vandamme avait, sans le savoir, privé St. Hilaire de toute possibilité de récupérer une partie de la brigade de Varé pour faire face à la menace inattendue de Kamensky, en entraînant la moitié de la brigade de Varé dans les combats de Stare Vinohrady{{sfn|Goetz|2005|p=198}}. Entre-temps, les premiers bataillons de Kamensky étaient arrivés à proximité du Pratzeberg. Ignorant la situation, Miloradovich Kamensky a immédiatement engagé ses bataillons de tête pour attaquer les Français qui occupaient le Pratzeberg. Le 2e bataillon du 10e régiment d'infanterie légère était désavantagé en termes de nombre, mais grâce à une meilleure formation, il a pu stopper l'avancée russe de manière décisive. Les Russes ont riposté, mais leur expérience insuffisante du combat et l'apparition d'une forte colonne française derrière eux ont réduit leur efficacité, tandis que le feu français a causé de lourdes pertes. Les troupes de Koutouzov, désormais réunies avec celles du général Jurczik, se préparèrent à l'attaque. Peu après 10h00, les bataillons autrichiens sous le commandement de Jurczik avancèrent pour attaquer la 2e brigade de St. Hilaire, dirigée par le brigadier Thiébault{{sfn|Goetz|2005|p=198-205}}. Les trois bataillons de tête de Jurczik, le 6e bataillon du régiment d'infanterie Reuss-Greitz n° 55, le 3e bataillon du régiment d'infanterie de Württemberg n° 38 et le régiment d'infanterie Beaulieu n° 58, se sont emparés de Thiébault. 58, avancèrent vers la position de Thiébault, tandis que les deux bataillons restants de Jurczik, le 6e bataillon du régiment d'infanterie de Kerpen n°49 et le régiment d'infanterie de Lindenau n°29, restèrent en réserve sur une basse colline à l'arrière. Pendant que les Autrichiens avançaient, les Français retenaient leur feu jusqu'à ce que les Autrichiens soient arrivés à trente ou quarante mètres. L'avance autrichienne ralentit et finit par s'arrêter, ce qui poussa les Français à contre-attaquer{{sfn|Goetz|2005|p=198-205}}. Au même moment, Vandamme lança une attaque décisive sur la position clé alliée de Stare Vinohrady, tandis que l'attaque alliée sur Pratze et Pratzeberg s'enlisait. À 10h30, le brigadier Ferey et ses six bataillons avancèrent contre la position autrichienne et attaquèrent frontalement la ligne autrichienne par le nord-ouest. La brigade renforcée de Ferey était numériquement équivalente à toute la première ligne autrichienne à Stare Vinohrady. Pendant que Ferey occupait les Autrichiens, Schiner positionnait ses trois bataillons pour les attaquer par le nord. Peu après que Ferey eut lancé son attaque sur le côté gauche des Autrichiens, Schiner attaqua avec trois bataillons le côté droit des Autrichiens. Sur toute la longueur des hauteurs de Pratzen, de Stare Vinohrady à Pratzeberg, de violents combats firent rage pendant au moins une demi-heure. Alerté par des rapports inquiétants, Langeron arriva au Pratzeberg vers 10h30. Langeron comprit l'inutilité d'un affrontement avec l'infanterie française mieux entraînée et ordonna à Kamensky de lancer une attaque à la baïonnette. Morand mena la contre-attaque, ce qui permit aux Français de se rapprocher à environ 200 pas de la ligne de défense russe. Après l'échec de l'attaque, Langeron envoya un officier à Buxhövden pour décrire la situation et demander d'urgence des renforts{{sfn|Goetz|2005|p=198-205}}. Vandamme a profité de sa supériorité numérique pour élargir son front et augmenter la pression sur les flancs de Kollowrath. Après environ une heure de combat, la résistance des Autrichiens a finalement cédé. Malgré le recul des Autrichiens sur la droite, Koutouzov ordonna de poursuivre l'attaque sur le Pratzeberg, dans l'espoir de reprendre la crête des hauteurs au sud et donc une position d'où il pourrait éviter un désastre sur son armée. L'attaque s'est enlisée et l'infanterie alliée a de nouveau reculé. Alors que les troupes de Vandamme avançaient vers la ligne de Miloradovitch, Koutouzov ordonna une dernière attaque qui échoua à nouveau. Avec la défaite de la ligne de Kollowrath et l'échec simultané des Alliés à reconquérir le Pratzeberg, la première phase du plan de bataille de Napoléon avait complètement réussi. Malgré l'arrivée d'une forte colonne alliée là où on ne l'attendait pas, les hauteurs furent sécurisées après deux heures de combats intenses. Alors que Koutouzov faisait une dernière tentative désespérée pour déloger les Français du Pratzeberg afin de prendre un certain avantage sur les hauteurs, Vandamme fit une pause pour reformer ses bataillons épuisés{{sfn|Goetz|2005|p=198-205}}. === Nord === Selon le plan, Bagration devait maintenir sa position sur les collines autour de Posoritz jusqu'à ce qu'il soit clair que la bataille avait commencé. Il devait alors avancer et pousser les Français devant lui. La Vème colonne du Liechtenstein, entièrement composée de cavalerie, occuperait la vaste plaine légèrement ondulée entre Bagration et la IVème colonne. La garde impériale russe, commandée par le grand-duc Constantin, soutenait ces deux corps. En face de Bagration, à environ cinq kilomètres à l'ouest, se trouvaient le 5e corps de Lannes et la réserve de cavalerie de Murat. La confusion qui régnait à l'aube du côté autrichien avait empêché le Liechtenstein d'atteindre à temps ses positions entre les villages de Blazowitz et Krug. Bagration était déjà en mouvement lorsque la cavalerie russe est arrivée. Sa gauche s'appuyait sur les villages de Krug et Holubitz tandis que sa droite s'étendait au-delà de la route Brno-Olmütz jusqu'aux hauteurs au nord-ouest de la maison de poste de Posoritz. Comme Bagration, Lannes avait reçu l'ordre de ne rien faire avant le début de la bataille et d'avancer ensuite le long de la route Brno-Olmütz. Il avait placé la division de Suchet à gauche de la route et celle de Caffarelli à droite. Les bataillons du 17e régiment d'infanterie légère se trouvaient sur la colline de Santon, et devant le village de Bosenitz. Les quatre régiments de cavalerie légère des brigades de Picard et de Marizy se trouvaient en avant de l'infanterie. À gauche de Suchet se trouvaient les brigades de cavalerie de Milhaud et de Trelliard, à droite de Caffarelli les dragons du brigadier Boyé. Derrière l'infanterie, les divisions de cavalerie du général Walther, de Nansouty et de d`Hautpoul formaient la réserve{{sfn|Castle|2004|p=51-61}}. Napoléon avait observé la bataille victorieuse de Pratzenhöhe depuis son poste de commandement sur Zuranhöhe. Des rapports provenant de la partie inférieure du Goldbach indiquaient que les troupes alliées avaient été sévèrement harcelées le long du Goldbach, de Tellnitz à Sokolnitz. À sa gauche, le long de la route de Brno à Olomouc, le reste de la première ligne de Napoléon avait commencé à avancer vers 9h15. À 10 heures, la résistance farouche rencontrée par les troupes du maréchal Lannes obligea cependant Napoléon à réévaluer son plan initial, qui consistait à contourner la droite alliée et à pousser toute son armée vers le sud. La confusion qui régnait à l'aube du côté autrichien avait empêché le Liechtenstein d'atteindre à temps ses positions entre les villages de Blazowitz et Krug. L'ordre de la colonne était maintenant inversé : les cuirassiers autrichiens du FML Friedrich Ludwig Hohenlohe menaient la colonne, suivis du lieutenant-général von Essen avec la brigade de Shepelev. La brigade d'Uvarov avait déjà reçu l'ordre de soutenir Bagration sur la gauche, tandis que Hohenlohe avait pris position à 8h30 près du village de Blaziowitz. À 9h00, Shepelev avait pris position entre Hohenlohe et Uvarov. À 09h00 également, la garde impériale russe sous le grand-duc Constantin atteignit la colline à l'est de Blaziowitz{{sfn|Goetz|2005|p=172-192}}. Vers 9h15, Lannes donna l'ordre d'avancer. Avec la cavalerie légère de Kellermann en tête, toute la troupe avança dans la plaine entre Bosenitz et Blaziowitz. Le mouvement des Français était immédiatement visible pour les Alliés et suscitait une inquiétude considérable. Liechtenstein, dont la cavalerie était la plus proche des Français qui avançaient, ordonna une attaque immédiate vers 9h30. La soudaineté et la force de l'attaque russe laissèrent peu de temps à Kellermann pour réagir. Il ordonna à ses troupes de pivoter vers la gauche afin de dégager la ligne de tir pour l'infanterie. Entre-temps, Kellermann avait reformé ses quatre régiments sur le côté gauche (nord) des colonnes françaises pour lancer une contre-attaque. Après 15 minutes de combat, les ulans russes ont été contraints de se retirer. Bagration prit l'initiative et ordonna à ses troupes d'avancer afin de combler l'écart entre ses troupes et la 5e colonne. Uvarov donna alors l'ordre d'avancer contre la droite de Kellermann. Contraint d'abandonner la poursuite des ulans russes, Kellermann dirigea ses trois régiments restants directement vers la nouvelle menace au sud{{sfn|Goetz|2005|p=172-192}}. Au cours d'une bataille brève mais violente, les hussards français repoussèrent les hussards d'Elisabetgrad vers le sud. Après une pause qui leur permit de se remettre de la série d'attaques déroutantes, les hussards de Kellermann se retrouvèrent bientôt sous le feu de l'artillerie russe au sud et sur la route principale. Uvarov n'a cependant pas pu profiter de l'occasion pour lancer une nouvelle attaque contre Kellermann, car une crise se développait sur sa gauche autour de Blaziowitz. Pendant ce temps, les tirs d'artillerie français atteignaient la garde russe à l'est de Blaziowitz, causant de lourdes pertes. Constantin comprit que les Français risquaient de s'emparer de Blaziowitz et de diviser les lignes alliées. Il ordonna au GM St. Priest de sécuriser Blaziowitz avec le bataillon de chasseurs de la garde personnelle et deux pièces d'artillerie. Simultanément, les troupes de Lannes et le 13e régiment d'infanterie légère du colonel Castex avancèrent en sens inverse vers Blaziowitz, tandis que les dragons français prenaient position au sud du village{{sfn|Goetz|2005|p=172-192}}. Le bataillon de chasseurs de St. Priest atteignit Blaziowitz en premier, occupant les maisons et les jardins et surprenant les Français qui perdirent leur première attaque. Le colonel Castex a été tué lors d'une attaque et des combats acharnés ont eu lieu. En infériorité numérique, Saint-Priest demanda des renforts à Constantin, qui décida de n'envoyer qu'un soutien limité, tout en gardant des réserves pour des avancées plus larges des Français. Les Français, renforcés par le 51e régiment d'infanterie, attaquèrent à nouveau par l'ouest et contournèrent les lignes russes. Sans renforts supplémentaires, il ordonna cependant la retraite à 11h00 tandis que les Français s'emparaient de Blaziowitz. Au même moment, le Liechtenstein déplaça sa cavalerie autrichienne au sud du village pour soutenir les troupes sur les hauteurs de Stare Vinohrady, laissant à Uvarov le soin de couvrir l'espace entre Blaziowitz et Krug. Les cuirassiers du Liechtenstein arrivèrent vers 10h30 et trouvèrent les Autrichiens sous le feu nourri des Français. Le général Caramelli profita de l'occasion pour diriger le régiment de cuirassiers lorrains n° 7 contre l'infanterie avancée de Bernadotte, mais il subit de lourdes pertes{{sfn|Goetz|2005|p=172-192}}. Une autre attaque du régiment de cuirassiers Nassau n° 5 ne put pas non plus arrêter les Français et ne retarda leur avance que de trente minutes. En déplaçant sa cavalerie vers Stare Vinohrady, Lichtenstein permit à Bernadotte, avec la division de Rivaud, de reprendre sa progression au sud de Blaziowitz. À 11h30, les Français avaient atteint le village et creusaient l'écart entre la colonne russe de Constantin et la ligne alliée. Afin d'éviter une scission de l'armée, Constantin ordonna à la Garde russe d'avancer sur Blaziowitz. Les bataillons de la Garde lancèrent une attaque à la baïonnette, mais l'attaque perdit rapidement de son élan, car les gardes étaient épuisés lorsqu'ils atteignirent la ligne principale de Rivaud. Le feu français leur infligea de lourdes pertes et, bien que l'attaque russe ait repoussé la première ligne de Rivaud, elle fut stoppée par la seconde{{sfn|Goetz|2005|p=172-192}}. Alors que les combats s'intensifiaient, Konstantin reçut de Koutouzov l'ordre de se retirer globalement des hauteurs. Après avoir consulté le Liechtenstein, Constantin décida de se retirer en direction de Krenowitz afin de soutenir la 4e colonne et de garder le contact avec l'armée principale. Liechtenstein ordonna au Kaiser-Kürassier-Regiment Nr. 1 de soutenir Konstantin, tandis que les autres régiments autrichiens couvraient la retraite de la 4e colonne et maintenaient ouverte la route vers Krenowitz. À 12h30, l'infanterie de la garde russe, soutenue par la cavalerie et les cavaliers impériaux, s'était détachée, reformée et se retirait en direction de Krenowitz. À 11h00, Bagration ordonna une attaque de diversion sur Bosenitz. Le 5e régiment de chasseurs sous Fedor Gogel y surprend le détachement français et le repousse en direction de Santon{{sfn|Goetz|2005|p=172-192}}. Cependant, lorsque le 17e régiment d'infanterie légère retranché sur le santon ouvrit le feu, l'attaque russe fut repoussée avec de lourdes pertes. Les hommes de Gogel se retirèrent vers Bosenitz, mais furent bientôt repoussés par une contre-attaque française menée par le 17e régiment d'infanterie légère et la cavalerie de Milhaud et Trelliard. L'attaque de Bagration sur Bosenitz n'a eu que peu de succès, mais a retardé l'avance française de trente minutes. Les combats à Blaziowitz et les lourdes pertes subies par les alliés empêchèrent Napoléon de réaliser l'enveloppement prévu. L'infanterie française resta liée par les tirs d'artillerie russes sur la route Brno-Olmütz. Néanmoins, les événements sur les hauteurs de Pratzen éclipsèrent ces revers{{sfn|Goetz|2005|p=172-192}}. === Retraite === A midi, les troupes de Napoléon avaient réussi à contenir Bagration sur la droite des Alliés, Soult contrôlait Pratzen au centre et Davout ralentissait l'avancée des Alliés, tandis que les grenadiers d'Oudinot soutenaient l'arrière-garde. Napoléon réorganisa les forces françaises, retira le corps de Bernadotte des combats avec Bagration et mit en place une masse de décision sur le Goldbach. En outre, il déplaça le quartier général impérial sur la colline de Pratzen. Napoléon déplaça le centre français vers la droite pour encercler le commandement de Buxhowden. À ce moment-là, seule la garde impériale russe était encore disponible pour combler le vide qui se créait au centre des alliés. Vers 13h00, le grand-duc Ferdinand fit venir quatre nouveaux bataillons pour attaquer la division du général Vandamme{{sfn|Chandler|1966|p=428 et 430-432}}. La garde russe perça la ligne française sans grande difficulté et ne fut arrêtée que par le feu concentré de la deuxième ligne. La garde russe se replia finalement sur Krzenowitz pour se regrouper. C'est à ce moment que Vandamme reçut l'ordre de Napoléon de pivoter vers la droite, ce qui mit toutefois inévitablement en danger son flanc gauche et son arrière-garde. Le grand-duc Constantin en profita pour donner l'ordre d'envoyer la cavalerie contre le flanc de Vandamme, suivi d'une nouvelle attaque frontale de l'infanterie de la garde russe. Malgré le succès de la contre-attaque russe, les Alliés ne disposaient pas de réserves pour l'exploiter. Une contre-attaque française repoussa les restes de la garde impériale russe en direction de Krzenowitz. Avec ce revers, le centre allié cessa d'exister. En réaction à ces développements, Napoléon émit une série de nouveaux ordres{{sfn|Chandler|1966|p=428 et 430-432}}. La prise des Pratzenhöhen fut confiée à Bernadotte ; la Garde, les grenadiers d'Oudinot et le IVe corps devaient se déplacer vers le sud pour encercler Buxhowden par le nord et l'est, tandis que Davout attaquerait par l'ouest. À 14h30, Buxhowden était complètement isolée et aucun ordre ne pouvait être reçu de Koutouzov ou du tsar. Peu après, Vandamme occupait Augezd et le IIIe corps (Davout) avançait vers les villages de Sokolnitz et Tellnitz. Le maréchal russe ordonna alors à la moitié de ses troupes de se retirer vers l'est avant que les Français ne leur coupent la route. Les troupes restantes ont reçu l'ordre de se regrouper uniquement de manière défensive le long de la rive ouest du Goldbach. À 15 heures, les Russes avaient reculé jusqu'aux lacs et marais gelés du sud. La division de Przbysewski et la moitié de la division de Langeron ont été capturées. La colonne de Buxhowden, qui s'est repliée vers l'est, a été divisée en deux par Vandamme depuis Augezd ; Buxhöwden n'a réussi à s'échapper qu'avec son avant-garde en direction d'Austerlitz. Les survivants de la 1ère colonne (Doctorov), tentèrent de s'échapper par les lacs gelés, mais Napoléon ordonna de bombarder la glace avec 25 canons. Au nord, Bagration commença également à se replier et à 16h30, les combats étaient terminés. Les Français étaient trop épuisés pour poursuivre Bagration ; dans les 40 heures qui suivirent, il parvint à mettre 60 kilomètres de terrain entre lui et le champ de bataille{{sfn|Chandler|1966|p=428 et 430-432}}. == Les conséquences == Dans la nuit du 2 au {{date|3 décembre}}, les deux parties de l'armée de coalition se rencontrèrent à nouveau à Czeitsch, sur la route de la Hongrie. Au petit matin, le prince Jean de Liechtenstein se rendit au quartier général de Napoléon afin de convenir d'une entrevue entre les empereurs François et Napoléon. L'armée poursuivit sa retraite sans être inquiétée par les Français, qui la croyaient en route pour Olomouc. Ce n'est que lorsqu'ils atteignirent Austerlitz que Napoléon se rendit compte de son erreur et rappela Murat et Lannes. Le {{date|4 décembre}}, les coalisés traversèrent la March à Holic. Le même jour, Napoléon et François se rencontrèrent pour conclure un armistice qui entra en vigueur le lendemain. Le tsar Alexandre accepta les conditions approuvées par François, qui stipulaient que l'armée russe devait retourner à ses frontières. Austerlitz fut une victoire écrasante de Napoléon. Son armée, qui avait reçu un excellent entraînement dans les camps de campagne de la Manche, contourna complètement les manœuvres maladroites et non coordonnées des coalisés. Influencé par la présence du tsar Alexandre, qui avait pris le commandement en chef et s'était laissé abuser par un entourage aussi arrogant qu'inexpérimenté, Napoléon parvint à attirer l'armée de la coalition sur le champ de bataille qu'il avait choisi{{sfn|Castle|2004|p=87-89}}. === Pertes === La bataille d'Austerlitz a entraîné de lourdes pertes dans les deux camps. Chez les Alliés, les Russes déplorèrent 11 000 morts et blessés (dont environ 2 000 qui se noyèrent dans les lacs), tandis que les Autrichiens enregistrèrent 600 tués, 1 200 blessés et un total de 11 453 prisonniers de guerre (9 767 Russes et 1 686 Autrichiens). Au total, 32 % de l'armée austro-russe, 45 drapeaux et 180 canons furent perdus. Les vainqueurs français, quant à eux, eurent à déplorer 1 305 tués, 6 940 blessés et 573 prisonniers de guerre. Pendant toute la campagne de 1805, l'Autriche a subi au total environ 90.000 pertes, la Russie 50.000 et la France et ses alliés 35.000{{sfn|Clodfelter|2008|p=159-160}}. == La légende napoléonienne == === Le discours de l'empereur === [[Fichier:Austerlitz Perrier Benoit.jpg|vignette|372x372px|Vue actuelle du château d'Austerlitz, appartenant en 1805 à la [[Noblesse autrichienne|famille de Kaunitz]]. L'Empereur a prononcé son discours depuis le balcon du premier étage.]] {{citation bloc|De notre camp impérial d’Austerlitz le 12 frimaire an 14 Soldats, je suis content de vous. Vous avez, à la journée d'Austerlitz, justifié tout ce que j'attendais de votre intrépidité ; vous avez décoré vos aigles d'une immortelle gloire. Une armée de {{nombre|100000|hommes}}, commandée par les empereurs de Russie et d'Autriche, a été, en moins de quatre heures, ou coupée ou dispersée. Ce qui a échappé à votre fer s'est noyé dans les lacs. Quarante drapeaux, les étendards de la garde impériale de Russie, cent vingt pièces de canon, vingt généraux, plus de {{nombre|30000 prisonniers}}, sont le résultat de cette journée à jamais célèbre. Cette infanterie tant vantée, et en nombre supérieur, n'a pu résister à votre choc, et désormais vous n'avez plus de rivaux à redouter. Ainsi, en deux mois, cette Troisième Coalition a été vaincue et dissoute. La paix ne peut plus être éloignée ; mais, comme je l'ai promis à mon peuple avant de passer le Rhin, je ne ferai qu'une paix qui nous donne des garanties et assure des récompenses à nos alliés. Soldats, lorsque le peuple français plaça sur ma tête la couronne impériale, je me confiais à vous pour la maintenir toujours dans ce haut éclat de gloire qui seul pouvait lui donner du prix à mes yeux. Mais dans le même moment nos ennemis pensaient à la détruire et à l'avilir ! Et cette couronne de fer, conquise par le sang de tant de Français, ils voulaient m'obliger à la placer sur la tête de nos plus cruels ennemis ! Projets téméraires et insensés que, le jour même de l'anniversaire du couronnement de votre Empereur, vous avez anéantis et confondus ! Vous leur avez appris qu'il est plus facile de nous braver et de nous menacer que de nous vaincre. Soldats, lorsque tout ce qui est nécessaire pour assurer le bonheur et la prospérité de notre patrie sera accompli, je vous ramènerai en France ; là, vous serez l'objet de mes plus tendres sollicitudes. Mon peuple vous reverra avec joie, et il vous suffira de dire, “J'étais à la bataille d'Austerlitz”, pour que l'on réponde, “Voilà un brave”<ref>[http://www.servicehistorique.sga.defense.gouv.fr/La-proclamation-d-Austerlitz-2.html?var_recherche=austerlitz Texte original sur le site du service historique de la Défense.]</ref>}} == Postérité == === Commémoration de la bataille === Les élèves officiers de l'[[École spéciale militaire de Saint-Cyr]] à [[Coëtquidan]] identifient par les lettres du nom « Austerlitz » chacun des dix mois de leur scolarité en commençant par octobre (A) (décembre est donc S, par exemple). Août et septembre sont respectivement nommés Z' et Z". De plus, ils célèbrent, ainsi que les élèves de [[Corniche (classe préparatoire)|corniche]] du [[Prytanée national militaire|Prytanée militaire de La Flèche]], du [[lycée militaire de Saint-Cyr]], du [[lycée militaire d'Aix-en-Provence]] et de la [[maison d'éducation de la Légion d'honneur]] de [[Saint-Denis (Seine-Saint-Denis)|Saint-Denis]] (Seine-Saint-Denis), la victoire française par une cérémonie le jour anniversaire de la bataille (2 S). [[Image:Panorama Austerlitz Battle Field Prace Czech Rep.jpg|Le champ de bataille d'Austerlitz de nos jours avec en arrière-plan le village de Pratzen.|800px|centré|vignette]] Toutefois, le deux-centième anniversaire de la bataille n'a fait l'objet que d'une commémoration très limitée en [[France]]. La ville d'[[Slavkov u Brna|Austerlitz]], située en [[République tchèque]], a organisé le {{date|2|décembre|2005}} une reconstitution de la bataille<ref>Voir le [http://www.austerlitz2005.com/fr/anniversaires/bicentenaire/ site du projet Austerlitz 2005] {{Webarchive|url=https://web.archive.org/web/20070302233229/http://www.austerlitz2005.com/fr/anniversaires/bicentenaire/ |date=2007-03-02 }}.</ref>. Seule la ministre de la Défense, [[Michèle Alliot-Marie]], a assisté aux cérémonies officielles de reconstitution, dans un contexte marqué en France par la remise en cause du rôle de {{Napoléon Ier}} dans le rétablissement de l'[[esclavage]] dans les [[colonies]] et par la volonté d'afficher un bas niveau de commémoration consécutivement aux [[Émeutes de 2005 dans les banlieues françaises|émeutes]] qui venaient d'agiter les [[banlieue]]s françaises à l'automne de la même année 2005. === Monuments et lieux === ==== France ==== ===== Paris ===== * [[Arc de triomphe de l'Étoile]] (Construit entre 1806 et 1836, inauguré en 1836). * [[Arc de triomphe du Carrousel]] (Construit entre 1806 et 1809, inauguré en 1809). * [[Colonne Vendôme]] (Construite entre 1806 et 1810, inaugurée en 1810). Partiellement constituée des canons pris à l'ennemi. * [[Pont d'Austerlitz]] (Construit entre 1802 et 1807, inauguré en 1807), qui a donné son nom au [[quai d'Austerlitz]], puis à la [[gare d'Austerlitz]], au [[pont d'Austerlitz]] et à la [[rue d'Austerlitz (Paris)|rue d'Austerlitz]]. ===== Strasbourg ===== * [[Place d'Austerlitz]] (renommée en 1837). ===== Ajaccio ===== * Place d'Austerlitz (anciennement place de Casone), sur laquelle a été érigé un [[Monument commémoratif de Napoléon Ier|Monument commémoratif de {{souverain-|Napoléon Ier}}]] (1938). ==== Tchéquie ==== * Stèle commémorative (1930), [[Butte de Zuran]], Podolí<ref name=".1">{{Lien web |langue=fr |titre=Austerlitz |url=https://www.napoleon.org/magazine/lieux/austerlitz/ |site=napoleon.org |consulté le=5 mars 2021}}</ref>. * Monument de la paix (1912), [[Prace (district de Brno-Campagne)|Prace]]<ref name=".1" />. ==== Pays-Bas ==== * [[Pyramide d'Austerlitz]] (1804, renommée en 1806), [[Woudenberg]] == Notes et références == === Notes === <references group="Note" /> === Références === {{Références}} == Voir aussi == {{Autres projets | commons = Battle of Austerlitz }} === Bibliographie === * {{Ouvrage|langue=en|prénom1=Ian|nom1= Castle|titre=Austerlitz 1805. The fate of empires|éditeur=Osprey|lieu= Oxford|année=2004|isbn=1-84176-136-2}} * {{Ouvrage|langue=en|prénom1=David G.|nom1= Chandler|titre=The Campaigns of Napoleon|éditeur=Scribner|lieu=New York|année=1966|isbn=0-02-523660-1}} * {{Ouvrage|langue=en|prénom= Michael|nom=Clodfelter|titre= Warfare and Armed Conflicts A Statistical Encyclopedia of Casualty and Other Figures, 1492–2015|éditeur= McFarland, Incorporated, Publishers|lieu= Jefferson|année=2008|isbn=9781476625850}} * {{Ouvrage|langue=en|prénom1=Robert |nom1=Goetz|titre=1805, Austerlitz : Napoleon and the destruction of the Third Coalition|éditeur=Greenhill Books|lieu=London|année=2005|isbn=1853676446}} * {{Ouvrage|prénom1=Françoise|nom1=Goupy|prénom2=Gérard|nom2=Goupy|titre=Les Brouillards d'Austerlitz|éditeur=Jets d'encre|année=2013|mois=juin|jour=27|isbn=978-2-35485-418-8}} * {{Ouvrage|langue=en|prénom1=Alistair|nom1=Horne|titre=Napoleon, Master of Europe, 1805-1807|éditeur=Morrow|lieu=New York|année=1979}} * {{Ouvrage|langue=en|prénom1=Adolphe|nom1=Thiers|titre=History of the Consulate and the Empire of France under Napoleon|volume=IV|éditeur=J.B. Lippincott|lieu=Philadelphia|année=1893}} ==== Lecture supplémentaire ==== * {{Ouvrage|langue=fr|prénom1=Jacques|nom1=Garnier|préface=Jean Tulard|titre=Austerlitz|sous-titre=2 décembre 1805|éditeur=Fayard|lieu=Paris|année=2005|isbn=978-2-213-62729-8|oclc=62533414}}. * {{Ouvrage|auteur1=[[Claude Manceron]]|titre=Austerlitz [et la campagne d’Allemagne]|éditeur=[[Robert Laffont]]|date=1960|réimpression=1992|isbn=978-2-221-03044-8}} * {{Ouvrage|langue=fr|auteur1=[[François-Guy Hourtoulle]]|auteur2=André Joineau|responsabilité2=planches uniformologiques|auteur4=Jean-Marie Mongin|responsabilité4=cartographie|titre=Austerlitz|sous-titre=le soleil de l'Aigle|éditeur=Histoire et collections|lieu=Paris|année=2003|isbn=978-2-913903-70-8|oclc=55134454}}. * {{Ouvrage|langue=fr|prénom1=Pierre|nom1=Miquel|lien auteur1=Pierre Miquel|champ libre=prix littéraire de l'Armée de Terre Erwan Bergot|titre=Austerlitz|éditeur=Albin Michel|lieu=Paris|année=2005|isbn=978-2-226-15587-0|oclc=57691374}}. * Michel Arrous, Paul Noirot, Dominique Feinterie, ''Les Batailles Napoléoniennes de [[Honoré de Balzac|Balzac]]'' dans : {{Ouvrage|langue=fr|titre=Napoléon de l'histoire à la légende|sous-titre=actes du colloque des 30 novembre et 1er décembre 1999 à l'auditorium Austerlitz du musée de l'armée, Hôtel national des Invalides|éditeur=Editions In Forma Maisonneuve et Larose|lieu=Paris|année=2000|isbn=978-2-7068-1438-9}}. * {{Ouvrage|langue=fr|prénom1=Michel|nom1=Arrous|et al.=oui|titre=Austerlitz|sous-titre=Napoléon au cœur de l'Europe|éditeur=Musée de l'armée Economica|collection=Hautes études militaires|lieu=Paris|numéro dans collection=30|année=2007|isbn=978-2-7178-5362-9}}. * {{Ouvrage|langue=fr|prénom1=Danielle|nom1=Quintin|prénom2=Bernard|nom2=Quintin|titre=Austerlitz, 2 décembre 1805 : dictionnaire biographique des soldats de Napoléon tombés au champ d'honneur|éditeur=Archives & culture|lieu=Paris|année=2004|isbn=978-2-911665-95-0|oclc=56963207}}. * [[Jacques Jourquin]], ''Nous étions à Austerlitz : {{date|2 décembre 1805}}, mémoires et souvenirs des combattants'', édition critique ; présentation Jean Tulard, Tallandier, 2004 {{ISBN|978-2847342321}}. * Baron Thiébault, « Rôle de la brigade Thiébault ({{1re}} de la division Saint-Hilaire du {{4e|corps}} de la Grande armée) à la bataille d'Austerlitz », dans ''Le Spectateur militaire'', {{date|15 avril}} au {{date|15 septembre 1847}}, {{43e|volume}} * Alexandre Missoffe, ''Pour le meilleur et pour l'Empire'', Éditions le nez au vent, 2022, {{ISBN|978-2958212827}} === Articles connexes === * [[Histoire de France]] * {{Napoléon Ier}} * [[Première Coalition]] * [[Deuxième Coalition]] * [[Troisième Coalition]] * [[Liste des batailles des guerres de la Révolution et du Premier Empire]] * [[Moustache (chien)]] : [[Chien de guerre|chien soldat]] qui s'est distingué au cours de cette bataille * [[Village d'Austerlitz]] === Liens externes === {{Liens}} * [http://www.pousse-pion.fr/blog/wan/ordre-de-bataille-austerlitz/ ''Ordre de bataille Austerlitz détaillé à l'échelle de la brigade''], sur le site Pousse-pion. * [http://www.histoire-pour-tous.fr/batailles/294-austerlitz-2-decembre-1805-anatomie-dune-bataille.html La bataille d'Austerlitz ({{date|2 décembre 1805}})], sur le site de Histoire pour tous. * [http://inmf.org/ffranausterlitz.htm La bataille d'Austerlitz, {{date|2 décembre 1805}}] sur le site de l'Institut napoléonien Mexique-France. * {{en}} [http://shadojak.tripod.com/milhis.html#grandarm%e9 Ordre de bataille de la Grande Armée], suivant les années. * [http://archiv.radio.cz/francais/osobnosti/udalost.phtml?cislo=12 La bataille de Slavkov - Austerlitz (1805)] par Jaroslava Gissübelova, sur le site de [[Radio Prague]]. * [http://www.servicehistorique.sga.defense.gouv.fr/La-proclamation-d-Austerlitz-2.html La proclamation d’Austerlitz, {{date|2 décembre 1805}}], sur le site du [[service historique de la Défense]]. * [http://www.vialupo.com/austerlitz Austerlitz: la bataille des trois empereurs]. * [http://aigle.conquerant.free.fr/index.php/Batailles/Bataille-dAusterlitz.html Bataille d'Austerlitz] {{Webarchive|url=https://web.archive.org/web/20100118184300/http://aigle.conquerant.free.fr/index.php/Batailles/Bataille-dAusterlitz.html |date=2010-01-18 }} et [http://aigle.conquerant.free.fr/index.php/Articles/Liste-des-95-officiers-de-larmee-francaise-tues-ou-blesses-mortellement-a-la-bataille-dAusterlitz.html Liste des 95 officiers de l’armée française tués ou blessés mortellement à la bataille d’Austerlitz] {{Webarchive|url=https://web.archive.org/web/20160304022525/http://aigle.conquerant.free.fr/index.php/Articles/Liste-des-95-officiers-de-larmee-francaise-tues-ou-blesses-mortellement-a-la-bataille-dAusterlitz.html |date=2016-03-04 }} sur le site de l'Aigle conquérant. * [http://www.napoleonicsociety.com/french/austerlitzf.htm La bataille d'Austerlitz] (Société napoléonienne internationale). * [https://www.napoleon-empire.net/batailles/austerlitz.php#relrusse Texte du rapport officiel russe sur la bataille d'Austerlitz, rédigé par le général Koutouzov]. * [http://www.histwar.fr/autour/recits-historiques/bataille-austerlitz.html La Bataille d'Austerlitz] {{Webarchive|url=https://web.archive.org/web/20120122150219/http://www.histwar.fr/autour/recits-historiques/bataille-austerlitz.html |date=2012-01-22 }}, texte issu de la compilation de diverses relations sur la bataille, ([[HistWar : Les Grognards]]). * [http://www.czechtourism.com/fr/e/slavkov-battle-of-austerlitz/ Commémoration annuelle de la bataille]. * [http://www.agrt.cz/en Site de l'''Austerlitz Golf Resort'']. {{Palette|Épopée napoléonienne|Ordre de bataille durant les guerres de la Révolution et de l'Empire}} {{Portail|histoire militaire|République tchèque|Premier Empire|Grande Armée|France|Empire autrichien|Empire russe|années 1800}} {{DEFAULTSORT:Bataille Austerlitz}} [[Catégorie:Bataille de la campagne d'Allemagne (1805)|Austerlitz]] [[Catégorie:Bataille de Napoléon Bonaparte|Austerlitz]] [[Catégorie:Bataille de Mikhaïl Koutouzov|Austerlitz]] [[Catégorie:Bataille des guerres de la Révolution et de l'Empire impliquant l'Autriche|Austerlitz]] [[Catégorie:Bataille des guerres de la Révolution et de l'Empire impliquant l'Empire russe|Austerlitz]] [[Catégorie:Décembre 1805]] [[Catégorie:2 décembre]] [[Catégorie:Bataille gravée sur l'arc de triomphe de l'Étoile|Austerlitz]] frz9hgbt8wfwtaxoxik8ok7zwrha847 User:MrJaroslavik/global.js 2 118543 735874 735755 2026-04-01T18:41:31Z MrJaroslavik 44012 + 735874 javascript text/javascript // GLOBAL - FOR ALL WIKIS START // // ------------------------------------------------------------// // ------------------------------------------------------------// // ------------------------------------------------------------// //-------------------------------------------------------------// mw.loader.load('https://test.wikipedia.org/w/index.php?title=User:MrJaroslavik/CuLog.js&action=raw&ctype=text/javascript') //-------------------------------------------------------------// //-------------------------------------------------------------// //-------------------------------------------------------------// //-------------------------------------------------------------// // USER INFO if ( [ 2, 3 ].indexOf( mw.config.get( 'wgNamespaceNumber' ) ) !== -1 && ( !mw.config.get( 'wgArticleId' ) || mw.config.get( 'wgAction' ) === 'view' ) ) mw.loader.load( '//test.wikipedia.org/w/index.php?title=User:MrJaroslavik/test.js&action=raw&ctype=text/javascript' ); //-------------------------------------------------------------// //-------------------------------------------------------------// // TOGGLE SIDEBAR mw.loader.load('https://en.wikipedia.org/w/index.php?title=User:BrandonXLF/ToggleSidebar.js&action=raw&ctype=text/javascript'); //-------------------------------------------------------------// //-------------------------------------------------------------// // CENTRALAUTH IN SIDEBAR mw.loader.using(['mediawiki.util']).done(function(){ var user = mw.config.get( 'wgRelevantUserName' ); if( user !== null && !mw.util.isIPAddress(user) ){ mw.util.addPortletLink( 'p-tb', 'https://meta.wikimedia.org/w/index.php?title=Special:CentralAuth/' + user, 'CentralAuth', 't-centralauth', 'Go to CentralAuth page of this user' ); } }); //-------------------------------------------------------------// //-------------------------------------------------------------// // CONTACT STEWARDS mw.loader.using( [ 'mediawiki.util' ], function() { "use strict"; mw.util.addPortletLink( 'p-tb', 'https://meta.wikimedia.org/wiki/Special:Contact/stewards', 'Contact Stewards', 't-contactstewards', 'Contact Stewards', 'v', '#t-info' ); }); //-------------------------------------------------------------// //-------------------------------------------------------------// // REDIRECT TO META IF ACCESS LOCAL CENTRALAUTH PAGE if ( mw.config.get( 'wgCanonicalSpecialPageName' ) == 'CentralAuth' && mw.config.get('wgDBname') != 'metawiki' ){ location.href = '//meta.wikimedia.org/wiki/Special:CentralAuth/' + mw.util.wikiUrlencode( mw.config.get( 'wgRelevantUserName' ) ); } //-------------------------------------------------------------// //-------------------------------------------------------------// //URLShortener Authored by ZI Jony, edited by Martin Urbanec minus i18n // mw.loader.using( [ 'mediawiki.util' ], function() { "use strict"; mw.util.addPortletLink( 'p-tb', 'https://meta.wikimedia.org/wiki/Special:UrlShortener?url=https:' + mw.config.get('wgServer') + '/wiki/' + mw.config.get('wgPageName'), 'URL Shortener', 't-Special:UrlShortener', 'Launch URL Shortener', 'v', '#t-info' ); }); //-------------------------------------------------------------// //-------------------------------------------------------------// //SUBPAGES $(function() { mw.util.addPortletLink( 'p-cactions', "//" + window.location.hostname + mw.config.get('wgArticlePath').replace('$1', "Special:PrefixIndex/" + encodeURIComponent(mw.config.get('wgPageName')) + "/"), 'Subpages', 'subpages', 'Open the Special:PrefixIndex', 's' ); }); //-------------------------------------------------------------// //-------------------------------------------------------------// // ROLLBACK WITHOUT LEAVE if (!RBNL) { var RBNL = {}; $(document).ready(function() { $(".mw-rollback-link").click(function(e) { e.preventDefault(); var link = $(this).find("a").attr("href"); //stack overflow: https://stackoverflow.com/questions/25203124/how-to-get-base-url-with-jquery-or-javascript var getUrl = window.location; var baseUrl = getUrl .protocol + "//" + getUrl.host + "/" + getUrl.pathname.split('/')[1]; var urlparams = (new URL(baseUrl + link)).searchParams; var rollbackuser = urlparams.get('from'); var rollbacktoken = urlparams.get('token'); var rollbacktitle = urlparams.get('title'); $(this).html('<div class="mw-spinner mw-spinner-small mw-spinner-inline" title="..."><div class="mw-spinner-container"><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div></div></div>'); var that = this; $.post(mw.config.get("wgScriptPath") + "/api.php", { "action": "rollback", "user": rollbackuser, "token": rollbacktoken, "title": rollbacktitle, "format": "json" }).done(function(result) { console.log(result); if (result.error) { location.href = link; } else { $(that).html("Rollback complete"); $(that).off("click"); } }).fail(function(result) { location.href = link; }); }); }); } //-------------------------------------------------------------// //-------------------------------------------------------------// // SAVE AND EDIT (function () { var editButtons = document.getElementsByClassName('editButtons')[0]; if (!editButtons || !document.editform) { return; } var conf = mw.config.get(['wgPageName']); $('<input type="button"/>') .val('Save and edit') .on('click', function () { saveandedit_prompt(); }) .appendTo(editButtons); // Function for returning function saveandedit_prompt() { mw.loader.using(['mediawiki.util', 'mediawiki.api'], function () { var section = mw.util.getParamValue('section'); var summary = document.editform.wpSummary.value; // Some advertising summary += ' (using [[User:Mabdul/saveandedit.js|Save&Edit]])'; var params = { action: 'edit', title: conf.wgPageName, text: document.editform.wpTextbox1.value, summary: summary }; if (document.editform.wpMinoredit.checked) { params.notminor = '1'; } // Check if only a section will be edited if (section) { params.section = section; } var api = new mw.Api(); api.postWithEditToken(params).done(function (response) { if (response.edit.result === 'Success') { // Reload on the success location.reload(); } else { // Handle out the error message var error = $.parseHTML( '<div><div class="error">Edit failed on ' + mw.html.element('a', { href: mw.util.getUrl(conf.wgPageName), title: conf.wgPageName }, conf.wgPageName ) + '</div> Best try it again (<b>Don\'t forget to copy the text!</b>). Error info: ' + (response.error && mw.html.escape(response.error.code + ' : ' + response.error.info)) + '</div>' ); mw.notify(error, { autoHide: false }); } }); }); } }()); //-------------------------------------------------------------// //-------------------------------------------------------------// // LINKS IN SIDEBAR $( function () { var separator = ' / '; var metaFQDN = 'meta.wikimedia.org'; $("#p-navigation").after( $( '<div>', { 'class': 'portal', 'role': 'navigation', 'id': 'p-listusers' } ).append( $( '<h3>', { 'lang': 'en', 'dir': 'ltr', 'id': 'p-privileged_users-label', 'text': 'ListUsers' } ), $( '<div>', { 'class': 'body' } ).append( $( '<ul>' ).append( $( '<li>', { 'id': 't-listusers' } ).append( $( '<a>', { 'href': '/wiki/Special:ListUsers/sysop', 'title': 'List Admins', 'text': 'A' } ), separator, $( '<a>', { 'href': '/wiki/Special:ListUsers/bureaucrat', 'title': 'List Bureaucrats', 'text': 'B' } ), separator, $( '<a>', { 'href': '/wiki/Special:ListUsers/checkuser', 'title': 'List CheckUsers', 'text': 'CU' } ), separator, $( '<a>', { 'href': '/wiki/Special:ListUsers/suppress', 'title': 'List Oversighters', 'text': 'OS' } ) ) ) ) ), $( '<div>', { 'class': 'portal', 'role': 'navigation', 'id': 'p-importantpages' } ).append( $( '<h3>', { 'lang': 'en', 'dir': 'ltr', 'id': 'p-importantpages', 'text': 'Important Pages' } ), $( '<div>', { 'class': 'body' } ).append( $( '<ul>' ).append( $( '<li>', { 'id': 't-meta-rc' } ).append( $( '<a>', { 'href': 'https://meta.wikimedia.org/wiki/Special:RecentChanges', 'title': 'Meta-Wiki', 'text': 'Meta-Wiki' } ) ), $( '<li>', { 'id': 't-cswiki-rc' } ).append( $( '<a>', { 'href': 'https://cs.wikipedia.org/wiki/Special:RecentChanges', 'title': 'Czech Wikipedia RC', 'text': 'Czech Wikipedia RC' } ) ), $( '<li>', { 'id': 't-cswiki-rcfilt' } ).append( $( '<a>', { 'href': 'https://w.wiki/uW8', 'title': 'Czech Wikipedia RC Filtered', 'text': 'Czech Wikipedia RC Filtered' } ) ), $( '<li>', { 'id': 't-skwiki-rc' } ).append( $( '<a>', { 'href': 'https://sk.wikipedia.org/wiki/Special:RecentChanges', 'title': 'Slovak Wikipedia RC', 'text': 'Slovak Wikipedia RC' } ) ), $( '<li>', { 'id': 't-cswiki-np' } ).append( $( '<a>', { 'href': 'https://cs.wikipedia.org/w/index.php?title=Special:NewPages&hidepatrolled=1', 'title': 'Czech Wikipedia New Pages', 'text': 'Czech Wikipedia New Pages' } ) ) ) ) ), $( '<div>', { 'class': 'portal', 'role': 'navigation', 'id': 'p-logs' } ).append( $( '<h3>', { 'lang': 'en', 'dir': 'ltr', 'id': 'p-logs-label', 'text': 'Logs' } ), $( '<div>', { 'class': 'body' } ).append( $( '<ul>' ).append( $( '<li>', { 'id': 't-logs-links' } ).append( $( '<a>', { 'href': '/wiki/Special:AbuseLog', 'title': 'AbuseLog', 'text': 'A' } ), separator, $( '<a>', { 'href': '/wiki/Special:Logs/block', 'title': 'Blocks', 'text': 'B' } ), separator, $( '<a>', { 'href': '/wiki/Special:Logs/delete', 'title': 'Deletions', 'text': 'D' } ), separator, $( '<a>', { 'href': '/wiki/Special:Logs/protect', 'title': 'Protections', 'text': 'P' } ), separator, $( '<a>', { 'href': '/wiki/Special:Logs/rights', 'title': 'Rights Log', 'text': 'R' } ) ) ) ) ) ); }); //-------------------------------------------------------------// //-------------------------------------------------------------// //------------------------------------------------------------// // ------------------------------------------------------------// //-------------------------------------------------------------// //-------------------------------------------------------------// //-------------------------------------------------------------// //-------------------------------------------------------------// // GLOBAL - FOR ALL WIKIS END // jy52lz6xgwbkimt3xbbh8ujw4e75axc 735950 735874 2026-04-02T03:38:10Z MrJaroslavik 44012 + 735950 javascript text/javascript // GLOBAL - FOR ALL WIKIS START // // ------------------------------------------------------------// // ------------------------------------------------------------// // ------------------------------------------------------------// //-------------------------------------------------------------// mw.loader.load('https://test.wikipedia.org/w/index.php?title=User:MrJaroslavik/CuLog.js&action=raw&ctype=text/javascript') //-------------------------------------------------------------// //-------------------------------------------------------------// //-------------------------------------------------------------// //-------------------------------------------------------------// // USER INFO if ( [ 2, 3 ].indexOf( mw.config.get( 'wgNamespaceNumber' ) ) !== -1 && ( !mw.config.get( 'wgArticleId' ) || mw.config.get( 'wgAction' ) === 'view' ) ) mw.loader.load( '//test.wikipedia.org/w/index.php?title=User:MrJaroslavik/test.js&action=raw&ctype=text/javascript' ); //-------------------------------------------------------------// //-------------------------------------------------------------// // TOGGLE SIDEBAR mw.loader.load('https://en.wikipedia.org/w/index.php?title=User:BrandonXLF/ToggleSidebar.js&action=raw&ctype=text/javascript'); //-------------------------------------------------------------// //-------------------------------------------------------------// // CENTRALAUTH IN SIDEBAR mw.loader.using(['mediawiki.util']).done(function(){ var user = mw.config.get( 'wgRelevantUserName' ); if( user !== null && !mw.util.isIPAddress(user) ){ mw.util.addPortletLink( 'p-tb', 'https://meta.wikimedia.org/w/index.php?title=Special:CentralAuth/' + user, 'CentralAuth', 't-centralauth', 'Go to CentralAuth page of this user' ); } }); //-------------------------------------------------------------// //-------------------------------------------------------------// // CONTACT STEWARDS mw.loader.using( [ 'mediawiki.util' ], function() { "use strict"; mw.util.addPortletLink( 'p-tb', 'https://meta.wikimedia.org/wiki/Special:Contact/stewards', 'Contact Stewards', 't-contactstewards', 'Contact Stewards', 'v', '#t-info' ); }); //-------------------------------------------------------------// //-------------------------------------------------------------// // REDIRECT TO META IF ACCESS LOCAL CENTRALAUTH PAGE if ( mw.config.get( 'wgCanonicalSpecialPageName' ) == 'CentralAuth' && mw.config.get('wgDBname') != 'metawiki' ){ location.href = '//meta.wikimedia.org/wiki/Special:CentralAuth/' + mw.util.wikiUrlencode( mw.config.get( 'wgRelevantUserName' ) ); } //-------------------------------------------------------------// //-------------------------------------------------------------// //URLShortener Authored by ZI Jony, edited by Martin Urbanec minus i18n // mw.loader.using( [ 'mediawiki.util' ], function() { "use strict"; mw.util.addPortletLink( 'p-tb', 'https://meta.wikimedia.org/wiki/Special:UrlShortener?url=https:' + mw.config.get('wgServer') + '/wiki/' + mw.config.get('wgPageName'), 'URL Shortener', 't-Special:UrlShortener', 'Launch URL Shortener', 'v', '#t-info' ); }); //-------------------------------------------------------------// //-------------------------------------------------------------// //SUBPAGES $(function() { mw.util.addPortletLink( 'p-cactions', "//" + window.location.hostname + mw.config.get('wgArticlePath').replace('$1', "Special:PrefixIndex/" + encodeURIComponent(mw.config.get('wgPageName')) + "/"), 'Subpages', 'subpages', 'Open the Special:PrefixIndex', 's' ); }); //-------------------------------------------------------------// //-------------------------------------------------------------// // ROLLBACK WITHOUT LEAVE if (!RBNL) { var RBNL = {}; $(document).ready(function() { $(".mw-rollback-link").click(function(e) { e.preventDefault(); var link = $(this).find("a").attr("href"); //stack overflow: https://stackoverflow.com/questions/25203124/how-to-get-base-url-with-jquery-or-javascript var getUrl = window.location; var baseUrl = getUrl .protocol + "//" + getUrl.host + "/" + getUrl.pathname.split('/')[1]; var urlparams = (new URL(baseUrl + link)).searchParams; var rollbackuser = urlparams.get('from'); var rollbacktoken = urlparams.get('token'); var rollbacktitle = urlparams.get('title'); $(this).html('<div class="mw-spinner mw-spinner-small mw-spinner-inline" title="..."><div class="mw-spinner-container"><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div></div></div>'); var that = this; $.post(mw.config.get("wgScriptPath") + "/api.php", { "action": "rollback", "user": rollbackuser, "token": rollbacktoken, "title": rollbacktitle, "format": "json" }).done(function(result) { console.log(result); if (result.error) { location.href = link; } else { $(that).html("Rollback complete"); $(that).off("click"); } }).fail(function(result) { location.href = link; }); }); }); } //-------------------------------------------------------------// //-------------------------------------------------------------// // SAVE AND EDIT (function () { var editButtons = document.getElementsByClassName('editButtons')[0]; if (!editButtons || !document.editform) { return; } var conf = mw.config.get(['wgPageName']); $('<input type="button"/>') .val('Save and edit') .on('click', function () { saveandedit_prompt(); }) .appendTo(editButtons); // Function for returning function saveandedit_prompt() { mw.loader.using(['mediawiki.util', 'mediawiki.api'], function () { var section = mw.util.getParamValue('section'); var summary = document.editform.wpSummary.value; // Some advertising summary += ' (using [[User:Mabdul/saveandedit.js|Save&Edit]])'; var params = { action: 'edit', title: conf.wgPageName, text: document.editform.wpTextbox1.value, summary: summary }; if (document.editform.wpMinoredit.checked) { params.notminor = '1'; } // Check if only a section will be edited if (section) { params.section = section; } var api = new mw.Api(); api.postWithEditToken(params).done(function (response) { if (response.edit.result === 'Success') { // Reload on the success location.reload(); } else { // Handle out the error message var error = $.parseHTML( '<div><div class="error">Edit failed on ' + mw.html.element('a', { href: mw.util.getUrl(conf.wgPageName), title: conf.wgPageName }, conf.wgPageName ) + '</div> Best try it again (<b>Don\'t forget to copy the text!</b>). Error info: ' + (response.error && mw.html.escape(response.error.code + ' : ' + response.error.info)) + '</div>' ); mw.notify(error, { autoHide: false }); } }); }); } }()); //-------------------------------------------------------------// //-------------------------------------------------------------// // LINKS IN SIDEBAR $( function () { var separator = ' / '; var metaFQDN = 'meta.wikimedia.org'; $("#p-navigation").after( $( '<div>', { 'class': 'portal', 'role': 'navigation', 'id': 'p-listusers' } ).append( $( '<h3>', { 'lang': 'en', 'dir': 'ltr', 'id': 'p-privileged_users-label', 'text': 'ListUsers' } ), $( '<div>', { 'class': 'body' } ).append( $( '<ul>' ).append( $( '<li>', { 'id': 't-listusers' } ).append( $( '<a>', { 'href': '/wiki/Special:ListUsers/sysop', 'title': 'List Admins', 'text': 'A' } ), separator, $( '<a>', { 'href': '/wiki/Special:ListUsers/bureaucrat', 'title': 'List Bureaucrats', 'text': 'B' } ), separator, $( '<a>', { 'href': '/wiki/Special:ListUsers/checkuser', 'title': 'List CheckUsers', 'text': 'CU' } ), separator, $( '<a>', { 'href': '/wiki/Special:ListUsers/suppress', 'title': 'List Oversighters', 'text': 'OS' } ) ) ) ) ), $( '<div>', { 'class': 'portal', 'role': 'navigation', 'id': 'p-importantpages' } ).append( $( '<h3>', { 'lang': 'en', 'dir': 'ltr', 'id': 'p-importantpages', 'text': 'Important Pages' } ), $( '<div>', { 'class': 'body' } ).append( $( '<ul>' ).append( $( '<li>', { 'id': 't-meta-rc' } ).append( $( '<a>', { 'href': 'https://meta.wikimedia.org/wiki/Special:RecentChanges', 'title': 'Meta-Wiki', 'text': 'Meta-Wiki' } ) ), $( '<li>', { 'id': 't-cswiki-rc' } ).append( $( '<a>', { 'href': 'https://cs.wikipedia.org/wiki/Special:RecentChanges', 'title': 'Czech Wikipedia RC', 'text': 'Czech Wikipedia RC' } ) ), $( '<li>', { 'id': 't-cswiki-rcfilt' } ).append( $( '<a>', { 'href': 'https://w.wiki/uW8', 'title': 'Czech Wikipedia RC Filtered', 'text': 'Czech Wikipedia RC Filtered' } ) ), $( '<li>', { 'id': 't-skwiki-rc' } ).append( $( '<a>', { 'href': 'https://sk.wikipedia.org/wiki/Special:RecentChanges', 'title': 'Slovak Wikipedia RC', 'text': 'Slovak Wikipedia RC' } ) ), $( '<li>', { 'id': 't-cswiki-np' } ).append( $( '<a>', { 'href': 'https://cs.wikipedia.org/w/index.php?title=Special:NewPages&hidepatrolled=1', 'title': 'Czech Wikipedia New Pages', 'text': 'Czech Wikipedia New Pages' } ) ) ) ) ), $( '<div>', { 'class': 'portal', 'role': 'navigation', 'id': 'p-logs' } ).append( $( '<h3>', { 'lang': 'en', 'dir': 'ltr', 'id': 'p-logs-label', 'text': 'Logs' } ), $( '<div>', { 'class': 'body' } ).append( $( '<ul>' ).append( $( '<li>', { 'id': 't-logs-links' } ).append( $( '<a>', { 'href': '/wiki/Special:AbuseLog', 'title': 'AbuseLog', 'text': 'A' } ), separator, $( '<a>', { 'href': '/wiki/Special:Logs/block', 'title': 'Blocks', 'text': 'B' } ), separator, $( '<a>', { 'href': '/wiki/Special:CheckUserLog', 'title': 'CheckUserLog', 'text': 'CU' } ), separator, $( '<a>', { 'href': '/wiki/Special:Logs/delete', 'title': 'Deletions', 'text': 'D' } ), separator, $( '<a>', { 'href': '/wiki/Special:Logs/protect', 'title': 'Protections', 'text': 'P' } ), separator, $( '<a>', { 'href': '/wiki/Special:Logs/rights', 'title': 'Rights Log', 'text': 'R' } ), separator, $( '<a>', { 'href': '/wiki/Special:Logs/suppress', 'title': 'SuppressionLog', 'text': 'S' } ), ) ) ) ) ); }); //-------------------------------------------------------------// //-------------------------------------------------------------// //------------------------------------------------------------// // ------------------------------------------------------------// //-------------------------------------------------------------// //-------------------------------------------------------------// //-------------------------------------------------------------// //-------------------------------------------------------------// // GLOBAL - FOR ALL WIKIS END // 3hweamq8zfw2weppb4ukl3tadyepkz4 User:MrJaroslavik/CuLog.js 2 118910 735875 469005 2026-04-01T18:46:45Z MrJaroslavik 44012 735875 javascript text/javascript /** FORKED FROM https://meta.wikimedia.org/w/index.php?title=User:Glaisher/countCUStats.js&oldid=19200098 and edited to LOCAL CheckUsers on each wiki and restricted to Special:CheckUserLog */ if ( mw.config.get('wgCanonicalSpecialPageName') == 'CheckUserLog' ) { var api = new mw.Api(); function getCheckUsers() { return api.get( { format: 'json', action: 'query', list: 'allusers', aurights: 'checkuser', aulimit: 50 } ); } function queryCheckUserLog( username ) { return api.get( { format: 'json', list: 'checkuserlog', culuser: username, cullimit: 4000, culdir: 'newer', culfrom: new Date( '1 January 2026 UTC' ).toISOString(), // Start date culto: new Date( '31 January 2026 UTC' ).toISOString() // End date } ); } function appendToPage( text ) { $( '#mw-content-text' ).append( text + '<br/>' ); } function getStatsTable( entries ) { var html = '<table class="wikitable sortable">\n' + '<tr>' + '<th> Username </th>' + '<th> Count </th>' + '</tr>\n'; $.each( entries, function( i, entry ) { var name = (typeof entry.name == "string") ? entry.name : JSON.stringify(entry.name); var count = (typeof entry.count == "string") ? parseInt(entry.count).toString() : (typeof entry.count == "number") ? entry.count.toString() : JSON.stringify(entry.count); html += '<tr>' + '<td>' + mw.html.escape( name ) + '</td>' + '<td>' + mw.html.escape( count ) + '</td>' + '</tr>\n'; } ); html += '</table>'; return html; } function init() { getCheckUsers().done( function( data ) { var checkusers = data.query.allusers, checkuserCount = checkusers.length, totalCount = 0, stats = []; promises = []; appendToPage( '<span id="cu-status">Querying... Please wait.</span>' ); var $status = $( '#cu-status' ); $.each( checkusers, function( i, info ) { var username = info.name; var queryPromise = queryCheckUserLog( username ); promises.push( queryPromise ); queryPromise.done( function( data ) { if ( !data.query ) { onError( data ); } var cuCount = data.query.checkuserlog.entries.length; stats.push( { name: username, count: cuCount } ); totalCount += cuCount; } ).fail( function( data ) { onError( data ); } ); function onError( data ) { $status.text( 'Error occured in querying.' ); throw 'Error while querying ' + mw.html.escape( username ) + ' details: ' + JSON.stringify( data ); } } ); $.when.apply( $, promises ).done( function() { $status.text( 'Total: ' + totalCount); appendToPage( getStatsTable( stats ) ); mw.loader.using( 'jquery.tablesorter', function() { $( 'table' ).tablesorter(); } ); }); } ); } init(); } 30j3koap6biwrefgzp57cbm8ppts4a6 735877 735875 2026-04-01T19:07:06Z MrJaroslavik 44012 735877 javascript text/javascript /** FORKED FROM https://meta.wikimedia.org/w/index.php?title=User:Glaisher/countCUStats.js&oldid=19200098 and edited to LOCAL CheckUsers on each wiki and restricted to Special:CheckUserLog */ if ( mw.config.get('wgCanonicalSpecialPageName') == 'CheckUserLog' ) { var api = new mw.Api(); function getCheckUsers() { return api.get( { format: 'json', action: 'query', list: 'allusers', aurights: 'checkuser', aulimit: 50, formatversion: 2 } ); } function queryCheckUserLog( username ) { return api.get( { action: 'query', format: 'json', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', culfrom: '2026-01-01T00:00:00Z', culto: '2026-01-31T23:59:59Z', formatversion: 2 } ); } function appendToPage( text ) { $( '#mw-content-text' ).append( text + '<br/>' ); } function getStatsTable( entries ) { var html = '<table class="wikitable sortable">\n' + '<tr>' + '<th> Username </th>' + '<th> Count </th>' + '</tr>\n'; $.each( entries, function( i, entry ) { var name = (typeof entry.name == "string") ? entry.name : JSON.stringify(entry.name); var count = (typeof entry.count == "string") ? parseInt(entry.count).toString() : (typeof entry.count == "number") ? entry.count.toString() : JSON.stringify(entry.count); html += '<tr>' + '<td>' + mw.html.escape( name ) + '</td>' + '<td>' + mw.html.escape( count ) + '</td>' + '</tr>\n'; } ); html += '</table>'; return html; } function init() { getCheckUsers().done( function( data ) { var checkusers = data.query.allusers, totalCount = 0, stats = [], promises = []; appendToPage( '<span id="cu-status">Querying... Please wait.</span>' ); var $status = $( '#cu-status' ); $.each( checkusers, function( i, info ) { var username = info.name; var queryPromise = queryCheckUserLog( username ); promises.push( queryPromise ); queryPromise.done( function( data ) { if ( !data.query ) { onError( data ); return; } var cuCount = data.query.checkuserlog ? data.query.checkuserlog.length : 0; stats.push( { name: username, count: cuCount } ); totalCount += cuCount; } ).fail( function( data ) { onError( data ); } ); function onError( data ) { $status.text( 'Error occured in querying.' ); console.error( 'Error while querying ' + username, data ); } } ); $.when.apply( $, promises ).done( function() { $status.text( 'Total: ' + totalCount); appendToPage( getStatsTable( stats ) ); mw.loader.using( 'jquery.tablesorter', function() { $( 'table' ).tablesorter(); } ); }); } ); } init(); } rybkyk3qxh8iw6kkxygyzrui0zpuj60 735878 735877 2026-04-01T19:10:10Z MrJaroslavik 44012 735878 javascript text/javascript /** FORKED FROM https://meta.wikimedia.org/w/index.php?title=User:Glaisher/countCUStats.js&oldid=19200098 and edited to LOCAL CheckUsers on each wiki and restricted to Special:CheckUserLog */ if ( mw.config.get('wgCanonicalSpecialPageName') == 'CheckUserLog' ) { var api = new mw.Api(); function getCheckUsers() { return api.get( { format: 'json', action: 'query', list: 'allusers', aurights: 'checkuser', aulimit: 50, formatversion: 2 } ); } function queryCheckUserLog( username ) { return api.get( { action: 'query', format: 'json', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', culfrom: '2026-01-01T00:00:00Z', culto: '2026-01-31T23:59:59Z', formatversion: 2 } ); } function appendToPage( text ) { $( '#mw-content-text' ).append( text + '<br/>' ); } function getStatsTable( entries ) { var html = '<table class="wikitable sortable">\n' + '<thead><tr>' + '<th> Username </th>' + '<th> Count </th>' + '</tr></thead><tbody>\n'; $.each( entries, function( i, entry ) { var name = entry.name || "Unknown"; var count = entry.count || 0; html += '<tr>' + '<td>' + mw.html.escape( name ) + '</td>' + '<td>' + mw.html.escape( count.toString() ) + '</td>' + '</tr>\n'; } ); html += '</tbody></table>'; return html; } function init() { getCheckUsers().done( function( data ) { var checkusers = data.query.allusers, totalCount = 0, stats = [], promises = []; appendToPage( '<span id="cu-status">Querying... Please wait.</span>' ); var $status = $( '#cu-status' ); $.each( checkusers, function( i, info ) { var username = info.name; var queryPromise = queryCheckUserLog( username ); promises.push( queryPromise ); queryPromise.done( function( res ) { var cuCount = 0; if ( res.query && res.query.checkuserlog ) { cuCount = res.query.checkuserlog.length; } stats.push( { name: username, count: cuCount } ); totalCount += cuCount; } ); } ); $.when.apply( $, promises ).always( function() { $status.text( 'Total: ' + totalCount ); appendToPage( getStatsTable( stats ) ); mw.loader.using( 'jquery.tablesorter', function() { $( 'table' ).tablesorter(); } ); }); } ); } init(); } hejrqn124cd4jifbcx88d9lp4qwbma2 735880 735878 2026-04-01T19:17:21Z MrJaroslavik 44012 + 735880 javascript text/javascript /** FORKED FROM https://meta.wikimedia.org/w/index.php?title=User:Glaisher/countCUStats.js&oldid=19200098 and edited to LOCAL CheckUsers on each wiki and restricted to Special:CheckUserLog */ if ( mw.config.get('wgCanonicalSpecialPageName') == 'CheckUserLog' ) { var api = new mw.Api(); function getCheckUsers() { return api.get( { format: 'json', action: 'query', list: 'allusers', aurights: 'checkuser', aulimit: 50, formatversion: 2 } ); } function queryCheckUserLog( username ) { return api.get( { action: 'query', format: 'json', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', culfrom: '2026-01-01T00:00:00Z', culto: '2026-01-31T23:59:59Z', formatversion: 2 } ); } function appendToPage( text ) { $( '#mw-content-text' ).append( text + '<br/>' ); } function getStatsTable( entries ) { var html = '<table class="wikitable sortable">\n' + '<thead><tr>' + '<th> Username </th>' + '<th> Count </th>' + '</tr></thead><tbody>\n'; $.each( entries, function( i, entry ) { html += '<tr>' + '<td>' + mw.html.escape( entry.name ) + '</td>' + '<td>' + mw.html.escape( entry.count.toString() ) + '</td>' + '</tr>\n'; } ); html += '</tbody></table>'; return html; } function init() { getCheckUsers().done( function( data ) { var checkusers = data.query.allusers, totalCount = 0, stats = [], promises = []; appendToPage( '<span id="cu-status">Querying... Please wait.</span>' ); var $status = $( '#cu-status' ); $.each( checkusers, function( i, info ) { var username = info.name; var queryPromise = queryCheckUserLog( username ); promises.push( queryPromise ); queryPromise.done( function( res ) { var cuCount = 0; // KLÍČOVÁ ZMĚNA: MediaWiki vrací pole v .entries if ( res.query && res.query.checkuserlog && res.query.checkuserlog.entries ) { cuCount = res.query.checkuserlog.entries.length; } stats.push( { name: username, count: cuCount } ); totalCount += cuCount; } ); } ); $.when.apply( $, promises ).always( function() { $status.text( 'Total: ' + totalCount ); appendToPage( getStatsTable( stats ) ); mw.loader.using( 'jquery.tablesorter', function() { $( 'table' ).tablesorter(); } ); }); } ); } init(); } j66b1ewz5zbxdhtlmbd0rb3jkdr4nyg 735886 735880 2026-04-01T19:25:52Z MrJaroslavik 44012 + 735886 javascript text/javascript /** FORKED FROM https://meta.wikimedia.org/w/index.php?title=User:Glaisher/countCUStats.js&oldid=19200098 and edited to LOCAL CheckUsers on each wiki and restricted to Special:CheckUserLog */ if ( mw.config.get('wgCanonicalSpecialPageName') == 'CheckUserLog' ) { var api = new mw.Api(); function getCheckUsers() { return api.get( { format: 'json', action: 'query', list: 'allusers', aurights: 'checkuser', aulimit: 50, formatversion: 2 } ); } function queryCheckUserLog( username ) { return api.get( { action: 'query', format: 'json', list: 'checkuserlog', culuser: username, cullimit: 'max', // Změna: Odstranění culdir a culfrom/culto pro otestování, zda se vůbec něco načte. // Pokud toto bude fungovat, chyba byla v časovém formátu. culfrom: '2026-01-01T00:00:00Z', culto: '2026-01-31T23:59:59Z', formatversion: 2 } ); } function appendToPage( text ) { $( '#mw-content-text' ).append( text + '<br/>' ); } function getStatsTable( entries ) { var html = '<table class="wikitable sortable">\n' + '<thead><tr>' + '<th> Username </th>' + '<th> Count </th>' + '</tr></thead><tbody>\n'; $.each( entries, function( i, entry ) { html += '<tr>' + '<td>' + mw.html.escape( entry.name ) + '</td>' + '<td>' + mw.html.escape( entry.count.toString() ) + '</td>' + '</tr>\n'; } ); html += '</tbody></table>'; return html; } function init() { getCheckUsers().done( function( data ) { var checkusers = data.query.allusers, totalCount = 0, stats = [], promises = []; appendToPage( '<span id="cu-status">Querying... Please wait.</span>' ); var $status = $( '#cu-status' ); $.each( checkusers, function( i, info ) { var username = info.name; var queryPromise = queryCheckUserLog( username ); promises.push( queryPromise ); queryPromise.done( function( res ) { var cuCount = 0; // MediaWiki API vrací data buď v .checkuserlog (starší) // nebo v .checkuserlog.entries (novější s formatversion 2) if ( res.query && res.query.checkuserlog ) { if ( Array.isArray(res.query.checkuserlog) ) { cuCount = res.query.checkuserlog.length; } else if ( res.query.checkuserlog.entries ) { cuCount = res.query.checkuserlog.entries.length; } } stats.push( { name: username, count: cuCount } ); totalCount += cuCount; } ); } ); $.when.apply( $, promises ).always( function() { $status.text( 'Total: ' + totalCount ); appendToPage( getStatsTable( stats ) ); mw.loader.using( 'jquery.tablesorter', function() { $( 'table' ).tablesorter(); } ); }); } ); } init(); } mgavyu34wn822dzm5sahjdnaq86la5c 735894 735886 2026-04-01T19:43:10Z MrJaroslavik 44012 + 735894 javascript text/javascript /** FORKED FROM https://meta.wikimedia.org/w/index.php?title=User:Glaisher/countCUStats.js&oldid=19200098 Změna logiky: Načítá jména přímo z logu, aby zachytil i globální/dočasné uživatele. */ if ( mw.config.get('wgCanonicalSpecialPageName') == 'CheckUserLog' ) { var api = new mw.Api(); // Definice období var DATE_FROM = '2026-01-01T00:00:00Z'; var DATE_TO = '2026-01-31T23:59:59Z'; function appendToPage( text ) { $( '#mw-content-text' ).append( text + '<br/>' ); } function getStatsTable( statsArray ) { var html = '<table class="wikitable sortable">\n' + '<thead><tr><th> Username </th><th> Count </th></tr></thead><tbody>\n'; $.each( statsArray, function( i, item ) { html += '<tr>' + '<td>' + mw.html.escape( item.name ) + '</td>' + '<td>' + mw.html.escape( item.count.toString() ) + '</td>' + '</tr>\n'; } ); html += '</tbody></table>'; return html; } function init() { appendToPage( '<span id="cu-status">Načítám data z logu...</span>' ); var $status = $( '#cu-status' ); // Krok 1: Načteme VŠECHNY záznamy v logu pro dané období api.get( { action: 'query', list: 'checkuserlog', culdir: 'newer', culfrom: DATE_FROM, culto: DATE_TO, cullimit: 'max', formatversion: 2 } ).done( function( data ) { if ( !data.query || !data.query.checkuserlog ) { $status.text( 'V logu pro toto období nejsou žádná data.' ); return; } var logEntries = data.query.checkuserlog; var userCounts = {}; var total = 0; // Krok 2: Spočítáme výskyty jednotlivých jmen $.each( logEntries, function( i, entry ) { var user = entry.user; // Jméno toho, kdo akci provedl if ( user ) { userCounts[user] = ( userCounts[user] || 0 ) + 1; total++; } } ); // Krok 3: Převedeme na pole pro tabulku var stats = []; for ( var name in userCounts ) { stats.push( { name: name, count: userCounts[name] } ); } // Seřadit podle počtu stats.sort( function( a, b ) { return b.count - a.count; } ); // Krok 4: Výpis $status.text( 'Celkem akcí v období: ' + total ); appendToPage( getStatsTable( stats ) ); mw.loader.using( 'jquery.tablesorter', function() { $( 'table' ).tablesorter(); } ); } ).fail( function( err ) { $status.text( 'Chyba API: ' + JSON.stringify(err) ); } ); } init(); } psmqe4k9hq4yqgljvabovnrvj6xxvo8 735902 735894 2026-04-01T19:47:49Z MrJaroslavik 44012 + 735902 javascript text/javascript /** * OPRAVENÁ VERZE: Používá culstart a culend podle dokumentace MediaWiki API * Dokumentace: https://www.mediawiki.org/wiki/Extension:CheckUser#list=checkuserlog */ if ( mw.config.get('wgCanonicalSpecialPageName') == 'CheckUserLog' ) { var api = new mw.Api(); // Správné názvy parametrů jsou culstart a culend var DATE_START = '2026-01-01T00:00:00Z'; var DATE_END = '2026-01-31T23:59:59Z'; function appendToPage( text ) { $( '#mw-content-text' ).append( text + '<br/>' ); } function getStatsTable( statsArray ) { var html = '<table class="wikitable sortable">\n' + '<thead><tr><th> Uživatel </th><th> Počet akcí </th></tr></thead><tbody>\n'; $.each( statsArray, function( i, item ) { html += '<tr>' + '<td>' + mw.html.escape( item.name ) + '</td>' + '<td>' + item.count + '</td>' + '</tr>\n'; } ); html += '</tbody></table>'; return html; } function init() { appendToPage( '<span id="cu-status">Načítám data z CheckUser logu...</span>' ); var $status = $( '#cu-status' ); api.get( { action: 'query', list: 'checkuserlog', culdir: 'newer', culstart: DATE_START, // OPRAVENO: dříve culfrom culend: DATE_END, // OPRAVENO: dříve culto cullimit: 'max', formatversion: 2 } ).done( function( data ) { // Debugging do konzole (F12), abys viděl, co přesně přišlo console.log("API Response:", data); if ( !data.query || !data.query.checkuserlog || data.query.checkuserlog.length === 0 ) { $status.text( 'V logu pro období ' + DATE_START + ' až ' + DATE_END + ' nebyla nalezena žádná data.' ); return; } var logEntries = data.query.checkuserlog; var userCounts = {}; var total = 0; $.each( logEntries, function( i, entry ) { var user = entry.user; if ( user ) { userCounts[user] = ( userCounts[user] || 0 ) + 1; total++; } } ); var stats = []; for ( var name in userCounts ) { stats.push( { name: name, count: userCounts[name] } ); } stats.sort( function( a, b ) { return b.count - a.count; } ); $status.text( 'Celkem nalezeno ' + total + ' akcí od ' + stats.length + ' uživatelů.' ); appendToPage( getStatsTable( stats ) ); mw.loader.using( 'jquery.tablesorter', function() { $( 'table' ).tablesorter(); } ); } ).fail( function( code, err ) { $status.text( 'Chyba API: ' + code ); console.error( 'Detaily chyby:', err ); } ); } init(); } pedj7544e34kzn4v2qyxnjxsr6b0ckl 735907 735902 2026-04-01T19:49:10Z MrJaroslavik 44012 + 735907 javascript text/javascript /** * FINÁLNÍ OPRAVA: culstart/culend + rozšířené datum pro test.wikipedia.org */ if ( mw.config.get('wgCanonicalSpecialPageName') == 'CheckUserLog' ) { var api = new mw.Api(); // Nastaveno na širší rozsah, aby to pobralo vše ze screenshotu var DATE_START = '2025-01-01T00:00:00Z'; var DATE_END = '2026-12-31T23:59:59Z'; function appendToPage( text ) { $( '#mw-content-text' ).append( text + '<br/>' ); } function getStatsTable( statsArray ) { var html = '<table class="wikitable sortable" style="margin-top: 20px;">\n' + '<thead><tr><th> Uživatel (CheckUser) </th><th> Počet akcí </th></tr></thead><tbody>\n'; $.each( statsArray, function( i, item ) { html += '<tr>' + '<td>' + mw.html.escape( item.name ) + '</td>' + '<td>' + item.count + '</td>' + '</tr>\n'; } ); html += '</tbody></table>'; return html; } function init() { // Vyčistíme případné staré pokusy $('#cu-stats-container').remove(); appendToPage( '<div id="cu-stats-container"><span id="cu-status">Načítám data z CheckUser logu (2025-2026)...</span></div>' ); var $status = $( '#cu-status' ); api.get( { action: 'query', list: 'checkuserlog', culdir: 'newer', culstart: DATE_START, culend: DATE_END, cullimit: 'max', formatversion: 2 } ).done( function( data ) { console.log("Odpověď z API:", data); if ( !data.query || !data.query.checkuserlog || data.query.checkuserlog.length === 0 ) { $status.text( 'V logu pro toto období nebyla nalezena žádná data (zkontrolováno přes API).' ); return; } var logEntries = data.query.checkuserlog; var userCounts = {}; var total = 0; $.each( logEntries, function( i, entry ) { // Pozor: v formatversion 2 je to entry.user var user = entry.user; if ( user ) { userCounts[user] = ( userCounts[user] || 0 ) + 1; total++; } } ); var stats = []; for ( var name in userCounts ) { stats.push( { name: name, count: userCounts[name] } ); } stats.sort( function( a, b ) { return b.count - a.count; } ); $status.html( '<b>Analýza logu dokončena.</b><br>Celkem nalezeno <b>' + total + '</b> akcí v období 2025-2026.' ); $('#cu-stats-container').append( getStatsTable( stats ) ); mw.loader.using( 'jquery.tablesorter', function() { $( 'table.sortable' ).tablesorter(); } ); } ).fail( function( code, err ) { $status.text( 'Chyba API: ' + code ); console.error( 'Detaily chyby:', err ); } ); } init(); } k4v49njfqqjkz1i8hnrfzpl1mb5wvky 735909 735907 2026-04-01T19:49:58Z MrJaroslavik 44012 ( 735909 javascript text/javascript /** * FINÁLNÍ VERZE PRO LEDEN 2026 * Opraveno: culstart/culend, cesta k datům (entries) a formatversion: 2 */ if ( mw.config.get('wgCanonicalSpecialPageName') == 'CheckUserLog' ) { var api = new mw.Api(); // Přesný rozsah pro leden 2026 podle ISO 8601 var DATE_START = '2026-01-01T00:00:00Z'; var DATE_END = '2026-01-31T23:59:59Z'; function appendToPage( text ) { $( '#mw-content-text' ).append( text + '<br/>' ); } function getStatsTable( statsArray ) { var html = '<table class="wikitable sortable" style="margin-top: 20px; width: 100%;">\n' + '<thead><tr><th> Uživatel (CheckUser) </th><th> Počet akcí (Leden 2026) </th></tr></thead><tbody>\n'; $.each( statsArray, function( i, item ) { html += '<tr>' + '<td>' + mw.html.escape( item.name ) + '</td>' + '<td><b>' + item.count + '</b></td>' + '</tr>\n'; } ); html += '</tbody></table>'; return html; } function init() { $('#cu-stats-wrapper').remove(); $('#mw-content-text').prepend('<div id="cu-stats-wrapper" style="border: 2px solid #36c; padding: 10px; background: #f8f9fa; margin-bottom: 20px;">' + '<span id="cu-status">Pracuji na analýze ledna 2026...</span></div>'); var $status = $( '#cu-status' ); api.get( { action: 'query', list: 'checkuserlog', culdir: 'newer', culstart: DATE_START, culend: DATE_END, cullimit: 'max', formatversion: 2 // Důležité pro moderní strukturu JSON } ).done( function( data ) { console.log("Surová data z API:", data); // KLÍČOVÁ ZMĚNA: V formatversion 2 jsou data v .query.checkuserlog.entries if ( !data.query || !data.query.checkuserlog || !data.query.checkuserlog.entries || data.query.checkuserlog.entries.length === 0 ) { $status.text( 'V logu pro leden 2026 nebyla nalezena žádná data. Zkontroluj konzoli (F12).' ); return; } var entries = data.query.checkuserlog.entries; var userCounts = {}; var total = 0; $.each( entries, function( i, entry ) { var user = entry.user; if ( user ) { userCounts[user] = ( userCounts[user] || 0 ) + 1; total++; } } ); var stats = []; for ( var name in userCounts ) { stats.push( { name: name, count: userCounts[name] } ); } // Seřazení od nejaktivnějšího stats.sort( function( a, b ) { return b.count - a.count; } ); $status.html( '<h3>Statistika CheckUser za Leden 2026</h3>' + 'Celkem provedeno <b>' + total + '</b> akcí. Počet aktivních uživatelů: <b>' + stats.length + '</b>.' ); $('#cu-stats-wrapper').append( getStatsTable( stats ) ); mw.loader.using( 'jquery.tablesorter', function() { $( 'table.sortable' ).tablesorter(); } ); } ).fail( function( code, err ) { $status.text( 'Chyba API: ' + code ); console.error( 'Chyba:', err ); } ); } init(); } 6104oafakufawqvssl257bw8brojb4v 735911 735909 2026-04-01T19:51:51Z MrJaroslavik 44012 E 735911 javascript text/javascript /** * NOUZOVÁ VERZE: Vynucení API v1 a manuální parsování objektů * Tato verze nepoužívá moderní "entries", ale parsuje přímo syrový XML-like JSON */ if ( mw.config.get('wgCanonicalSpecialPageName') == 'CheckUserLog' ) { var api = new mw.Api(); function appendToPage( text ) { $( '#mw-content-text' ).prepend( text + '<br/>' ); } function init() { $('#cu-stats-emergency').remove(); appendToPage( '<div id="cu-stats-emergency" style="border: 3px double red; padding: 10px; background: #fff;">' + '<span id="cu-status">Pokouším se o hloubkovou extrakci dat (API v1)...</span></div>' ); api.get( { action: 'query', list: 'checkuserlog', cullimit: 500, // NEPOUŽÍVÁME formatversion: 2 format: 'json' } ).done( function( data ) { console.log("RAW API V1 DATA:", data); var userCounts = {}; var total = 0; var logs = []; // V API v1 jsou data v data.query.checkuserlog jako pole objektů if (data.query && data.query.checkuserlog) { logs = data.query.checkuserlog; } if (logs.length === 0) { $('#cu-status').text('API v1 také nic nevrátilo. Pravděpodobná blokace API přístupu k logům na této wiki.'); return; } $.each( logs, function( i, entry ) { // Filtrujeme leden 2026 ručně z timestampu (např. 2026-01-22T23:56:45Z) if (entry.timestamp && entry.timestamp.indexOf('2026-01') !== -1) { var user = entry.user; if (user) { userCounts[user] = (userCounts[user] || 0) + 1; total++; } } } ); var stats = []; for ( var name in userCounts ) { stats.push( { name: name, count: userCounts[name] } ); } stats.sort( function( a, b ) { return b.count - a.count; } ); if (total === 0) { $('#cu-status').text('V logu jsou data, ale žádné neodpovídá lednu 2026. První nalezené datum: ' + (logs[0].timestamp || 'neznámé')); } else { var tableHtml = '<table class="wikitable sortable" style="width:100%"><thead><tr><th>Uživatel</th><th>Počet (Leden 2026)</th></tr></thead><tbody>'; $.each(stats, function(i, s) { tableHtml += '<tr><td>' + mw.html.escape(s.name) + '</td><td>' + s.count + '</td></tr>'; }); tableHtml += '</tbody></table>'; $('#cu-status').html('<span style="color:green; font-weight:bold;">Data úspěšně extrahována!</span> (Leden 2026)'); $('#cu-stats-emergency').append(tableHtml); } } ).fail( function() { $('#cu-status').text('Kritická chyba API.'); } ); } init(); } h8b9mlt2meg1o71bftpf74vhmf0larn 735913 735911 2026-04-01T19:54:40Z MrJaroslavik 44012 + 735913 javascript text/javascript if ( mw.config.get('wgCanonicalSpecialPageName') == 'CheckUserLog' ) { var api = new mw.Api(); function init() { $('#cu-stats-final').remove(); $('#mw-content-text').prepend('<div id="cu-stats-final" style="border: 2px dashed orange; padding: 15px; background: #fffdf0; margin: 10px 0;">' + '<span id="cu-status">Zkouším hloubkový sken logu (API v1)...</span></div>'); // Žádáme o data bez moderního formatversion a bez omezujících filtrů culstart/end api.get({ action: 'query', list: 'checkuserlog', cullimit: 500, format: 'json' }).done(function(data) { console.log("DEBUG CSWIKI DATA:", data); var logEntries = []; // V API v1 jsou data přímo v objektu checkuserlog (jako pole) if (data.query && data.query.checkuserlog) { logEntries = data.query.checkuserlog; } if (logEntries.length === 0) { $('#cu-status').html('<b style="color:red;">API vrátilo 0 záznamů.</b><br>Možné příčiny: API vyžaduje CSRF token nebo je přístup k logu přes API na této wiki zakázán.'); return; } var userCounts = {}; var total = 0; var targetMonth = "2026-01"; // Hledáme leden 2026 $.each(logEntries, function(i, entry) { // Timestamp v v1 vypadá jako: 2026-01-22T23:56:45Z if (entry.timestamp && entry.timestamp.indexOf(targetMonth) === 0) { var user = entry.user; if (user) { userCounts[user] = (userCounts[user] || 0) + 1; total++; } } }); if (total === 0) { var firstDate = logEntries[0] ? logEntries[0].timestamp : "žádné"; $('#cu-status').html('V logu jsou data, ale žádné z <b>ledna 2026</b>.<br>Poslední akce v logu je z: ' + firstDate); return; } // Tabulka výsledků var stats = []; for (var name in userCounts) { stats.push({ name: name, count: userCounts[name] }); } stats.sort(function(a, b) { return b.count - a.count; }); var tableHtml = '<table class="wikitable sortable" style="width:100%"><thead><tr><th>CheckUser</th><th>Akce (Leden 2026)</th></tr></thead><tbody>'; $.each(stats, function(i, s) { tableHtml += '<tr><td>' + mw.html.escape(s.name) + '</td><td>' + s.count + '</td></tr>'; }); tableHtml += '</tbody></table>'; $('#cu-status').html('<b style="color:green;">Data načtena!</b> Nalezeno ' + total + ' akcí.'); $('#cu-stats-final').append(tableHtml); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); }).fail(function(e) { $('#cu-status').text('API požadavek zcela selhal.'); }); } init(); } buv9nrnng8cdkfr88n9nwr8mixyu6oq 735919 735913 2026-04-01T19:59:08Z MrJaroslavik 44012 . 735919 javascript text/javascript /** * UPRAVENO PRO LOKÁLNÍ CHECKUSERY (LEDEN 2026) * Vychází z funkčního toolu pro stevardy. */ var api = new mw.Api(); function getCheckUsers() { return api.get( { format: 'json', action: 'query', list: 'allusers', augroup: 'checkuser', // Hledá lokální skupinu checkuser aulimit: 150 } ); } function queryCheckUserLog( username ) { return api.get( { format: 'json', list: 'checkuserlog', culuser: username, cullimit: 4000, culdir: 'newer', // Formát data musí zůstat přesně takto, aby ho to "nesežralo" culfrom: new Date( '1 January 2026 UTC' ).toISOString(), culto: new Date( '1 February 2026 UTC' ).toISOString() } ); } function appendToPage( text ) { $( '#mw-content-text' ).append( text + '<br/>' ); } function getStatsTable( entries ) { var html = '<table class="wikitable sortable">\n' + '<tr>' + '<th> Username </th>' + '<th> Count </th>' + '</tr>\n'; $.each( entries, function( i, entry ) { var name = (typeof entry.name == "string") ? entry.name : JSON.stringify(entry.name); var count = (typeof entry.count == "string") ? parseInt(entry.count).toString() : (typeof entry.count == "number") ? entry.count.toString() : JSON.stringify(entry.count); html += '<tr>' + '<td>' + mw.html.escape( name ) + '</td>' + '<td>' + mw.html.escape( count ) + '</td>' + '</tr>\n'; } ); html += '</table>'; return html; } function init() { getCheckUsers().done( function( data ) { // ZMĚNA: allusers místo globalallusers var checkusers = data.query.allusers, totalCount = 0, stats = [], promises = []; appendToPage( '<span id="cu-status">Querying local CheckUsers... Please wait.</span>' ); var $status = $( '#cu-status' ); $.each( checkusers, function( i, info ) { var username = info.name; var queryPromise = queryCheckUserLog( username ); promises.push( queryPromise ); queryPromise.done( function( data ) { if ( !data.query || !data.query.checkuserlog ) { return; } // Tato cesta je v tomto starém formátu klíčová var cuCount = data.query.checkuserlog.entries.length; stats.push( { name: username, count: cuCount } ); totalCount += cuCount; } ).fail( function( data ) { console.error('Chyba u uživatele ' + username, data); } ); } ); $.when.apply( $, promises ).done( function() { $status.text( 'Total: ' + totalCount); appendToPage( getStatsTable( stats ) ); mw.loader.using( 'jquery.tablesorter', function() { $( 'table' ).tablesorter(); } ); }); } ); } init(); 62mep3761mg20mz4m7g5rmxlggy8ryp 735929 735919 2026-04-01T20:14:30Z MrJaroslavik 44012 E 735929 javascript text/javascript /** * UPRAVENO PRO LOKÁLNÍ CHECKUSERY (LEDEN 2026) * Vychází z funkčního toolu pro stevardy. */ var api = new mw.Api(); function getCheckUsers() { return api.get( { format: 'json', action: 'query', list: 'allusers', augroup: 'checkuser', // Hledá lokální skupinu checkuser aulimit: 150 } ); } function queryCheckUserLog( username ) { return api.get( { format: 'json', list: 'checkuserlog', culuser: username, cullimit: 4000, culdir: 'newer', // Formát data musí zůstat přesně takto, aby ho to "nesežralo" culfrom: new Date( '1 January 2026 UTC' ).toISOString(), culto: new Date( '10 February 2026 UTC' ).toISOString() } ); } function appendToPage( text ) { $( '#mw-content-text' ).append( text + '<br/>' ); } function getStatsTable( entries ) { var html = '<table class="wikitable sortable">\n' + '<tr>' + '<th> Username </th>' + '<th> Count </th>' + '</tr>\n'; $.each( entries, function( i, entry ) { var name = (typeof entry.name == "string") ? entry.name : JSON.stringify(entry.name); var count = (typeof entry.count == "string") ? parseInt(entry.count).toString() : (typeof entry.count == "number") ? entry.count.toString() : JSON.stringify(entry.count); html += '<tr>' + '<td>' + mw.html.escape( name ) + '</td>' + '<td>' + mw.html.escape( count ) + '</td>' + '</tr>\n'; } ); html += '</table>'; return html; } function init() { getCheckUsers().done( function( data ) { // ZMĚNA: allusers místo globalallusers var checkusers = data.query.allusers, totalCount = 0, stats = [], promises = []; appendToPage( '<span id="cu-status">Querying local CheckUsers... Please wait.</span>' ); var $status = $( '#cu-status' ); $.each( checkusers, function( i, info ) { var username = info.name; var queryPromise = queryCheckUserLog( username ); promises.push( queryPromise ); queryPromise.done( function( data ) { if ( !data.query || !data.query.checkuserlog ) { return; } // Tato cesta je v tomto starém formátu klíčová var cuCount = data.query.checkuserlog.entries.length; stats.push( { name: username, count: cuCount } ); totalCount += cuCount; } ).fail( function( data ) { console.error('Chyba u uživatele ' + username, data); } ); } ); $.when.apply( $, promises ).done( function() { $status.text( 'Total: ' + totalCount); appendToPage( getStatsTable( stats ) ); mw.loader.using( 'jquery.tablesorter', function() { $( 'table' ).tablesorter(); } ); }); } ); } init(); 7bz9dbjacnlwurpnucla173mk9pauaf 735932 735929 2026-04-01T20:16:38Z MrJaroslavik 44012 E 735932 javascript text/javascript /** * MOBILE DEBUG VERZE: Vypisuje diagnostiku přímo na stránku. */ var api = new mw.Api(); function getLocalCUs() { return api.get({ format: 'json', action: 'query', list: 'allusers', augroup: 'checkuser', aulimit: 150 }); } function getGlobalCUs(groupName) { return api.get({ format: 'json', action: 'query', list: 'globalallusers', agugroup: groupName, agulimit: 150 }); } function queryCheckUserLog(username) { return api.get({ format: 'json', list: 'checkuserlog', culuser: username, cullimit: 4000, culdir: 'newer', culfrom: new Date('1 January 2026 UTC').toISOString(), culto: new Date('1 February 2026 UTC').toISOString() }); } function appendToPage(text, id) { var target = id ? '#' + id : '#mw-content-text'; $(target).append(text + '<br/>'); } function init() { // Příprava kontejneru pro mobilní debug $('#mobile-debug').remove(); $('#mw-content-text').prepend('<div id="mobile-debug" style="border:1px solid #ccc; background:#f9f9f9; padding:10px; font-family:monospace; font-size:12px; margin-bottom:10px;"><b>Diagnostika:</b><br/></div>'); function log(msg) { appendToPage('> ' + msg, 'mobile-debug'); } log("Startuji stahování seznamů..."); $.when( getLocalCUs(), getGlobalCUs('steward'), getGlobalCUs('ombuds'), getGlobalCUs('staff') ).done(function(resLocal, resStewards, resOmbuds, resStaff) { var userMap = {}; // Zpracování lokálních var lCount = 0; if (resLocal[0].query && resLocal[0].query.allusers) { $.each(resLocal[0].query.allusers, function(i, u) { userMap[u.name] = 'Local CU'; lCount++; }); } log("Nalezeno lokálních CU: " + lCount); // Zpracování globálních function addGlobal(response, label) { var gCount = 0; var data = response[0]; if (data.query && data.query.globalallusers) { $.each(data.query.globalallusers, function(i, u) { if (!userMap[u.name]) { userMap[u.name] = label; gCount++; } }); } log("Přidáno uživatelů (" + label + "): " + gCount); } addGlobal(resStewards, 'Steward'); addGlobal(resOmbuds, 'Ombuds'); addGlobal(resStaff, 'Staff'); var usernames = Object.keys(userMap); log("Celkem k prověření: " + usernames.length + " jmen."); var stats = []; var promises = []; var totalCount = 0; $.each(usernames, function(i, name) { var p = queryCheckUserLog(name); promises.push(p); p.done(function(data) { var count = 0; if (data.query && data.query.checkuserlog) { // Podpora pro oba formáty API (entries i přímé pole) if (data.query.checkuserlog.entries) { count = data.query.checkuserlog.entries.length; } else if (Array.isArray(data.query.checkuserlog)) { count = data.query.checkuserlog.length; } } var group = userMap[name]; // Local CU vždy, ostatní jen pokud mají akci if (group === 'Local CU' || count > 0) { stats.push({ name: name, count: count, group: group }); } totalCount += count; }); }); $.when.apply($, promises).done(function() { log("Hotovo. Všechny logy staženy."); stats.sort((a, b) => b.count - a.count || a.name.localeCompare(b.name)); var html = '<table class="wikitable sortable"><thead><tr>' + '<th>Uživatel</th><th>Role</th><th>Akce</th>' + '</tr></thead><tbody>'; $.each(stats, function(i, s) { html += '<tr><td>' + mw.html.escape(s.name) + '</td>' + '<td><small>' + s.group + '</small></td>' + '<td><b>' + s.count + '</b></td></tr>'; }); html += '</tbody></table>'; appendToPage('<hr/><b>Celkem akcí: ' + totalCount + '</b>', 'mobile-debug'); appendToPage(html); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); }); }).fail(function(){ log("CHYBA: Jeden z úvodních dotazů na seznamy selhal."); }); } init(); l1elmf2r1ru4u6v2zfdbo8ee67qoyud 735938 735932 2026-04-01T20:24:30Z MrJaroslavik 44012 E 735938 javascript text/javascript /** * UNIVERZÁLNÍ CHECKUSER STATISTIKY (2026) * Podpora: Lokální CU + Globální skupiny (Steward, Ombuds, Staff) * Funguje na: TestWiki, CSWiki, ENWiki a dalších. */ (function() { var api = new mw.Api(); // NASTAVENÍ OBDOBÍ (Leden 2026) var DATE_START = '2026-01-01T00:00:00Z'; var DATE_END = '2026-02-01T00:00:00Z'; function getLocalCUs() { return api.get({ action: 'query', list: 'allusers', augroup: 'checkuser', aulimit: 250, format: 'json' }); } function getGlobalCUs(groupName) { return api.get({ action: 'query', list: 'globalallusers', agugroup: groupName, agulimit: 250, format: 'json' }); } function queryCheckUserLog(username) { return api.get({ action: 'query', list: 'checkuserlog', culuser: username, cullimit: 5000, // Maximální povolený limit culdir: 'newer', culstart: DATE_START, culend: DATE_END, assert: 'user', // Potvrzení přihlášení pro ostrou wiki format: 'json' }); } function appendToPage(text) { $('#mw-content-text').append(text + '<br/>'); } function init() { $('.cu-stats-container').remove(); appendToPage('<div class="cu-stats-container" style="border: 2px solid #36c; padding: 15px; background: #f8f9fa;">' + '<span id="cu-status">Načítám oprávněné uživatele (lokální i globální)...</span></div>'); var $status = $('#cu-status'); // Paralelní načtení všech skupin $.when( getLocalCUs(), getGlobalCUs('steward'), getGlobalCUs('ombuds'), getGlobalCUs('staff') ).done(function(resLocal, resStewards, resOmbuds, resStaff) { var userMap = {}; // Lokální uživatelé if (resLocal[0].query && resLocal[0].query.allusers) { $.each(resLocal[0].query.allusers, function(i, u) { userMap[u.name] = 'Local CU'; }); } // Globální skupiny function addGlobal(response, label) { var data = response[0]; if (data.query && data.query.globalallusers) { $.each(data.query.globalallusers, function(i, u) { if (!userMap[u.name]) userMap[u.name] = label; }); } } addGlobal(resStewards, 'Steward'); addGlobal(resOmbuds, 'Ombuds'); addGlobal(resStaff, 'Staff'); var usernames = Object.keys(userMap); var stats = []; var promises = []; var totalCount = 0; $status.text('Prověřuji logy pro ' + usernames.length + ' uživatelů. Prosím čekejte...'); $.each(usernames, function(i, name) { var p = queryCheckUserLog(name); promises.push(p); p.done(function(data) { var count = 0; if (data.query && data.query.checkuserlog) { // Podpora pro v1 i v2 formát odpovědi var logData = data.query.checkuserlog; count = logData.entries ? logData.entries.length : (Array.isArray(logData) ? logData.length : 0); } var group = userMap[name]; // Podmínka: Lokální vždy, globální jen pokud mají aspoň 1 akci if (group === 'Local CU' || count > 0) { stats.push({ name: name, count: count, group: group }); } totalCount += count; }).fail(function() { console.warn("Nepodařilo se načíst data pro: " + name); }); }); // Čekáme na dokončení všech individuálních dotazů $.when.apply($, promises).always(function() { $status.html('<b>Analýza dokončena.</b><br/>Celkový počet CheckUser akcí: <b>' + totalCount + '</b>'); // Seřazení: Počet (sestupně), pak abecedně stats.sort(function(a, b) { return b.count - a.count || a.name.localeCompare(b.name); }); var html = '<table class="wikitable sortable" style="width: 100%; margin-top: 10px;">' + '<thead><tr><th>Uživatel</th><th>Role</th><th>Počet akcí</th></tr></thead><tbody>'; $.each(stats, function(i, s) { html += '<tr>' + '<td>' + mw.html.escape(s.name) + '</td>' + '<td><small>' + s.group + '</small></td>' + '<td><b>' + s.count + '</b></td>' + '</tr>'; }); html += '</tbody></table>'; $('.cu-stats-container').append(html); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); }); }).fail(function() { $status.text('Chyba: Nepodařilo se načíst seznamy uživatelů ze serveru.'); }); } // Spuštění init(); })(); b5es9laxsu49wkryvcbfc5x6hzcqvas 735940 735938 2026-04-01T20:30:54Z MrJaroslavik 44012 E 735940 javascript text/javascript /** * STRIKTNÍ MĚSÍČNÍ STATISTIKA (LEDEN 2026) * Opraveno: API už nebude přebíhat do dalších měsíců. */ var api = new mw.Api(); // Definice období - Tady se mění měsíc var START_DATE = '2026-01-01T00:00:00Z'; var END_DATE = '2026-02-01T00:00:00Z'; function getLocalCUs() { return api.get({ action: 'query', list: 'allusers', augroup: 'checkuser', aulimit: 150 }); } function getGlobalCUs(groupName) { return api.get({ action: 'query', list: 'globalallusers', agugroup: groupName, agulimit: 150 }); } function queryCheckUserLog(username) { return api.get({ action: 'query', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', culstart: START_DATE, // Začátek culend: END_DATE, // KONEC - Tohle zastaví přetékání do února formatversion: 2 }); } function init() { $('#cu-stats-final').remove(); $('#mw-content-text').prepend('<div id="cu-stats-final" style="border: 2px solid #36c; padding: 15px; background: #f8f9fa; margin-bottom: 20px;">' + '<span id="cu-status">Analyzuji logy striktně pro LEDEN 2026...</span></div>'); $.when( getLocalCUs(), getGlobalCUs('steward'), getGlobalCUs('ombuds'), getGlobalCUs('staff') ).done(function(resLocal, resStewards, resOmbuds, resStaff) { var userMap = {}; // Sběr jmen if (resLocal[0].query.allusers) { $.each(resLocal[0].query.allusers, function(i, u) { userMap[u.name] = 'Local CU'; }); } function addG(res, label) { if (res[0].query.globalallusers) { $.each(res[0].query.globalallusers, function(i, u) { if (!userMap[u.name]) userMap[u.name] = label; }); } } addG(resStewards, 'Steward'); addG(resOmbuds, 'Ombuds'); addG(resStaff, 'Staff'); var usernames = Object.keys(userMap); var stats = []; var promises = []; var total = 0; $.each(usernames, function(i, name) { var p = queryCheckUserLog(name); promises.push(p); p.done(function(data) { var count = (data.query && data.query.checkuserlog) ? data.query.checkuserlog.length : 0; var role = userMap[name]; if (role === 'Local CU' || count > 0) { stats.push({ name: name, count: count, role: role }); } total += count; }); }); $.when.apply($, promises).done(function() { stats.sort((a, b) => b.count - a.count || a.name.localeCompare(b.name)); var html = '<h3>Výsledek za Leden 2026</h3><p>Celkem akcí: <b>' + total + '</b></p>' + '<table class="wikitable sortable"><thead><tr><th>Uživatel</th><th>Role</th><th>Počet</th></tr></thead><tbody>'; $.each(stats, function(i, s) { html += '<tr><td>' + mw.html.escape(s.name) + '</td><td><small>' + s.role + '</small></td><td><b>' + s.count + '</b></td></tr>'; }); html += '</tbody></table>'; $('#cu-status').hide(); $('#cu-stats-final').append(html); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); }); }); } init(); foptqb6509s0suiaolsit0jb2nof5ar 735941 735940 2026-04-01T20:31:53Z MrJaroslavik 44012 E 735941 javascript text/javascript /** * STRIKTNÍ MĚSÍČNÍ STATISTIKA (LEDEN 2026) * Opraveno: Ošetření NaN a undefined + striktní culend. */ var api = new mw.Api(); // Definice období var START_DATE = '2026-01-01T00:00:00Z'; var END_DATE = '2026-02-01T00:00:00Z'; function getLocalCUs() { return api.get({ action: 'query', list: 'allusers', augroup: 'checkuser', aulimit: 150 }); } function getGlobalCUs(groupName) { return api.get({ action: 'query', list: 'globalallusers', agugroup: groupName, agulimit: 150 }); } function queryCheckUserLog(username) { return api.get({ action: 'query', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', culstart: START_DATE, culend: END_DATE }); } function init() { $('#cu-stats-final').remove(); $('#mw-content-text').prepend('<div id="cu-stats-final" style="border: 2px solid #36c; padding: 15px; background: #f8f9fa; margin-bottom: 20px;">' + '<span id="cu-status">Analyzuji logy striktně pro LEDEN 2026...</span></div>'); $.when( getLocalCUs(), getGlobalCUs('steward'), getGlobalCUs('ombuds'), getGlobalCUs('staff') ).done(function(resLocal, resStewards, resOmbuds, resStaff) { var userMap = {}; // Sběr jmen z lokálních skupin if (resLocal[0].query && resLocal[0].query.allusers) { $.each(resLocal[0].query.allusers, function(i, u) { userMap[u.name] = 'Local CU'; }); } // Sběr jmen z globálních skupin function addG(res, label) { if (res[0].query && res[0].query.globalallusers) { $.each(res[0].query.globalallusers, function(i, u) { if (!userMap[u.name]) userMap[u.name] = label; }); } } addG(resStewards, 'Steward'); addG(resOmbuds, 'Ombuds'); addG(resStaff, 'Staff'); var usernames = Object.keys(userMap); var stats = []; var promises = []; var total = 0; $.each(usernames, function(i, name) { var p = queryCheckUserLog(name); promises.push(p); p.done(function(data) { var count = 0; // Oprava cesty k datům (v starém formátu bez formatversion:2) if (data.query && data.query.checkuserlog) { if (data.query.checkuserlog.entries) { count = data.query.checkuserlog.entries.length; } else if (Array.isArray(data.query.checkuserlog)) { count = data.query.checkuserlog.length; } } var role = userMap[name]; if (role === 'Local CU' || count > 0) { stats.push({ name: name, count: count, role: role }); } total += count; }); }); $.when.apply($, promises).always(function() { // Seřazení: nejdřív podle počtu, pak podle jména stats.sort(function(a, b) { return b.count - a.count || a.name.localeCompare(b.name); }); var html = '<h3>Výsledek za Leden 2026</h3><p>Celkem akcí: <b>' + total + '</b></p>' + '<table class="wikitable sortable"><thead><tr><th>Uživatel</th><th>Role</th><th>Počet</th></tr></thead><tbody>'; $.each(stats, function(i, s) { html += '<tr><td>' + mw.html.escape(s.name) + '</td><td><small>' + s.role + '</small></td><td><b>' + s.count + '</b></td></tr>'; }); html += '</tbody></table>'; $('#cu-status').hide(); $('#cu-stats-final').append(html); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); }); }); } init(); munihh5p7ou1ose6ku6hednjovj4zou 735943 735941 2026-04-01T20:34:42Z MrJaroslavik 44012 E 735943 javascript text/javascript /** * STRICT MONTHLY STATISTICS (JANUARY 2026) - VERSION 3.0 * Features: English UI, Unlimited count (API continuation), Strict Date Filter. */ (function() { var api = new mw.Api(); // TIME RANGE FOR JANUARY 2026 var START = '2026-01-01T00:00:00Z'; var END = '2026-02-01T00:00:00Z'; function getLocalCUs() { return api.get({ action: 'query', list: 'allusers', augroup: 'checkuser', aulimit: 250 }); } function getGlobalCUs(groupName) { return api.get({ action: 'query', list: 'globalallusers', agugroup: groupName, agulimit: 250 }); } // Function to fetch ALL actions for a user, even if > 500 async function countAllUserActions(username) { var count = 0; var continueToken = ''; var hasMore = true; while (hasMore) { var params = { action: 'query', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', culstart: START, culend: END }; if (continueToken) { params.culcontinue = continueToken; } try { var data = await api.get(params); if (data.query && data.query.checkuserlog && data.query.checkuserlog.entries) { // Manual verification of timestamp to be 100% sure $.each(data.query.checkuserlog.entries, function(i, entry) { if (entry.timestamp >= START && entry.timestamp < END) { count++; } }); } if (data.continue && data.continue.culcontinue) { continueToken = data.continue.culcontinue; } else { hasMore = false; } } catch (e) { console.error("API error for " + username, e); hasMore = false; } } return count; } async function init() { $('.cu-stats-wrapper').remove(); $('#mw-content-text').prepend('<div class="cu-stats-wrapper" style="border: 2px solid #36c; padding: 15px; background: #f8f9fa; margin-bottom: 20px;">' + '<h3 style="margin-top:0">CheckUser Activity: January 2026</h3>' + '<span id="cu-loader">Fetching user lists and analyzing logs...</span></div>'); try { var resLocal = await getLocalCUs(); var resStewards = await getGlobalCUs('steward'); var resOmbuds = await getGlobalCUs('ombuds'); var resStaff = await getGlobalCUs('staff'); var userMap = {}; if (resLocal.query.allusers) { $.each(resLocal.query.allusers, function(i, u) { userMap[u.name] = 'Local CU'; }); } function processG(res, label) { if (res.query && res.query.globalallusers) { $.each(res.query.globalallusers, function(i, u) { if (!userMap[u.name]) userMap[u.name] = label; }); } } processG(resStewards, 'Steward'); processG(resOmbuds, 'Ombuds'); processG(resStaff, 'Staff'); var usernames = Object.keys(userMap); var stats = []; var total = 0; for (var name of usernames) { $('#cu-loader').text('Processing user: ' + name + '...'); var count = await countAllUserActions(name); var role = userMap[name]; // Show local CUs always, others only if active (>0) if (role === 'Local CU' || count > 0) { stats.push({ name: name, count: count, role: role }); } total += count; } // Sort by count DESC, then by name ASC stats.sort((a, b) => b.count - a.count || a.name.localeCompare(b.name)); var html = '<p><b>Total actions in January 2026: ' + total + '</b></p>' + '<table class="wikitable sortable" style="width:100%; margin-top:10px;">' + '<thead><tr><th>Username</th><th>Role</th><th>Actions (Jan)</th></tr></thead><tbody>'; $.each(stats, function(i, s) { html += '<tr><td>' + mw.html.escape(s.name) + '</td><td><small>' + s.role + '</small></td><td><b>' + s.count + '</b></td></tr>'; }); html += '</tbody></table>'; $('#cu-loader').hide(); $('.cu-stats-wrapper').append(html); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); } catch (err) { $('#cu-loader').text('Critical error: ' + err); } } init(); })(); 0ynty9eo5ct7ovkom1ajnnyseg67dpk 735944 735943 2026-04-01T20:50:37Z MrJaroslavik 44012 735944 javascript text/javascript /** * STRICT MONTHLY STATISTICS (JANUARY 2026) - VERSION 3.0 * Features: English UI, Unlimited count (API continuation), Strict Date Filter. */ (function() { var api = new mw.Api(); // TIME RANGE FOR JANUARY 2026 var START = '2026-02-01T00:00:00Z'; var END = '2026-03-01T00:00:00Z'; function getLocalCUs() { return api.get({ action: 'query', list: 'allusers', augroup: 'checkuser', aulimit: 250 }); } function getGlobalCUs(groupName) { return api.get({ action: 'query', list: 'globalallusers', agugroup: groupName, agulimit: 250 }); } // Function to fetch ALL actions for a user, even if > 500 async function countAllUserActions(username) { var count = 0; var continueToken = ''; var hasMore = true; while (hasMore) { var params = { action: 'query', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', culstart: START, culend: END }; if (continueToken) { params.culcontinue = continueToken; } try { var data = await api.get(params); if (data.query && data.query.checkuserlog && data.query.checkuserlog.entries) { // Manual verification of timestamp to be 100% sure $.each(data.query.checkuserlog.entries, function(i, entry) { if (entry.timestamp >= START && entry.timestamp < END) { count++; } }); } if (data.continue && data.continue.culcontinue) { continueToken = data.continue.culcontinue; } else { hasMore = false; } } catch (e) { console.error("API error for " + username, e); hasMore = false; } } return count; } async function init() { $('.cu-stats-wrapper').remove(); $('#mw-content-text').prepend('<div class="cu-stats-wrapper" style="border: 2px solid #36c; padding: 15px; background: #f8f9fa; margin-bottom: 20px;">' + '<h3 style="margin-top:0">CheckUser Activity: January 2026</h3>' + '<span id="cu-loader">Fetching user lists and analyzing logs...</span></div>'); try { var resLocal = await getLocalCUs(); var resStewards = await getGlobalCUs('steward'); var resOmbuds = await getGlobalCUs('ombuds'); var resStaff = await getGlobalCUs('staff'); var userMap = {}; if (resLocal.query.allusers) { $.each(resLocal.query.allusers, function(i, u) { userMap[u.name] = 'Local CU'; }); } function processG(res, label) { if (res.query && res.query.globalallusers) { $.each(res.query.globalallusers, function(i, u) { if (!userMap[u.name]) userMap[u.name] = label; }); } } processG(resStewards, 'Steward'); processG(resOmbuds, 'Ombuds'); processG(resStaff, 'Staff'); var usernames = Object.keys(userMap); var stats = []; var total = 0; for (var name of usernames) { $('#cu-loader').text('Processing user: ' + name + '...'); var count = await countAllUserActions(name); var role = userMap[name]; // Show local CUs always, others only if active (>0) if (role === 'Local CU' || count > 0) { stats.push({ name: name, count: count, role: role }); } total += count; } // Sort by count DESC, then by name ASC stats.sort((a, b) => b.count - a.count || a.name.localeCompare(b.name)); var html = '<p><b>Total actions in January 2026: ' + total + '</b></p>' + '<table class="wikitable sortable" style="width:100%; margin-top:10px;">' + '<thead><tr><th>Username</th><th>Role</th><th>Actions (Jan)</th></tr></thead><tbody>'; $.each(stats, function(i, s) { html += '<tr><td>' + mw.html.escape(s.name) + '</td><td><small>' + s.role + '</small></td><td><b>' + s.count + '</b></td></tr>'; }); html += '</tbody></table>'; $('#cu-loader').hide(); $('.cu-stats-wrapper').append(html); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); } catch (err) { $('#cu-loader').text('Critical error: ' + err); } } init(); })(); 5n8o5m97e9s1hzuzpu3813ct0hmr5qp 735947 735944 2026-04-02T03:19:23Z MrJaroslavik 44012 + 735947 javascript text/javascript /** * SMART CHECKUSER STATISTICS - VERSION 3.5 (April 2026) * Features: Easy config (Year/Month), Unlimited count, Strict Date Filter. */ (function() { var api = new mw.Api(); // ================= CONFIGURATION ================= var YEAR = 2026; var MONTH = 3; // 1=Jan, 2=Feb, 3=Mar, 4=Apr, ..., 12=Dec // ================================================= // --- Automatic Date Logic --- // Start: YYYY-MM-01 00:00:00 var monthPadded = MONTH.toString().padStart(2, '0'); var START = YEAR + '-' + monthPadded + '-01T00:00:00Z'; // End: 1st day of the NEXT month 00:00:00 (Standard exclusive boundary) // JavaScript handles month 12 -> next year 1 automatically var nextMonthDate = new Date(Date.UTC(YEAR, MONTH, 1)); var END = nextMonthDate.toISOString().split('.')[0] + 'Z'; // UI Formatting var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; var displayTitle = monthNames[MONTH - 1] + " " + YEAR; function getLocalCUs() { return api.get({ action: 'query', list: 'allusers', augroup: 'checkuser', aulimit: 250 }); } function getGlobalCUs(groupName) { return api.get({ action: 'query', list: 'globalallusers', agugroup: groupName, agulimit: 250 }); } async function countAllUserActions(username) { var count = 0; var continueToken = ''; var hasMore = true; while (hasMore) { var params = { action: 'query', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', culstart: START, culend: END }; if (continueToken) params.culcontinue = continueToken; try { var data = await api.get(params); if (data.query && data.query.checkuserlog && data.query.checkuserlog.entries) { $.each(data.query.checkuserlog.entries, function(i, entry) { // Strict check to keep the data within the chosen month if (entry.timestamp >= START && entry.timestamp < END) { count++; } }); } if (data.continue && data.continue.culcontinue) { continueToken = data.continue.culcontinue; } else { hasMore = false; } } catch (e) { console.error("API error for " + username, e); hasMore = false; } } return count; } async function init() { $('.cu-stats-wrapper').remove(); $('#mw-content-text').prepend('<div class="cu-stats-wrapper" style="border: 2px solid #36c; padding: 15px; background: #f8f9fa; margin-bottom: 20px;">' + '<h3 style="margin-top:0">CheckUser Activity: ' + displayTitle + '</h3>' + '<span id="cu-loader">Analyzing logs for ' + displayTitle + '...</span></div>'); try { var resLocal = await getLocalCUs(); var resStewards = await getGlobalCUs('steward'); var resOmbuds = await getGlobalCUs('ombuds'); var resStaff = await getGlobalCUs('staff'); var userMap = {}; if (resLocal.query.allusers) { $.each(resLocal.query.allusers, function(i, u) { userMap[u.name] = 'Local CU'; }); } function processG(res, label) { if (res.query && res.query.globalallusers) { $.each(res.query.globalallusers, function(i, u) { if (!userMap[u.name]) userMap[u.name] = label; }); } } processG(resStewards, 'Steward'); processG(resOmbuds, 'Ombuds'); processG(resStaff, 'Staff'); var usernames = Object.keys(userMap); var stats = []; var total = 0; for (var name of usernames) { $('#cu-loader').text('Processing user: ' + name + '...'); var count = await countAllUserActions(name); var role = userMap[name]; if (role === 'Local CU' || count > 0) { stats.push({ name: name, count: count, role: role }); } total += count; } stats.sort((a, b) => b.count - a.count || a.name.localeCompare(b.name)); var html = '<p><b>Total actions in ' + displayTitle + ': ' + total + '</b></p>' + '<table class="wikitable sortable" style="width:100%; margin-top:10px;">' + '<thead><tr><th>Username</th><th>Role</th><th>Actions</th></tr></thead><tbody>'; $.each(stats, function(i, s) { html += '<tr><td>' + mw.html.escape(s.name) + '</td><td><small>' + s.role + '</small></td><td><b>' + s.count + '</b></td></tr>'; }); html += '</tbody></table>'; $('#cu-loader').hide(); $('.cu-stats-wrapper').append(html); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); } catch (err) { $('#cu-loader').text('Critical error: ' + err); } } init(); })(); g1bysyfivk29bfj97bwd2ocuojkgwx3 735948 735947 2026-04-02T03:26:19Z MrJaroslavik 44012 E 735948 javascript text/javascript /** * DETAILED CHECKUSER STATISTICS - VERSION 3.6 * Features: Breakdown by action type (Get IPs, Get Users, Get Edits). */ (function() { var api = new mw.Api(); // ================= CONFIGURATION ================= var YEAR = 2026; var MONTH = 3; // 3 = March // ================================================= var monthPadded = MONTH.toString().padStart(2, '0'); var START = YEAR + '-' + monthPadded + '-01T00:00:00Z'; var nextMonthDate = new Date(Date.UTC(YEAR, MONTH, 1)); var END = nextMonthDate.toISOString().split('.')[0] + 'Z'; var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; var displayTitle = monthNames[MONTH - 1] + " " + YEAR; async function getDetailedUserStats(username) { var stats = { total: 0, getIps: 0, getUsers: 0, getEdits: 0 }; var continueToken = ''; var hasMore = true; while (hasMore) { var params = { action: 'query', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', culstart: START, culend: END }; if (continueToken) params.culcontinue = continueToken; try { var data = await api.get(params); if (data.query && data.query.checkuserlog && data.query.checkuserlog.entries) { $.each(data.query.checkuserlog.entries, function(i, entry) { if (entry.timestamp >= START && entry.timestamp < END) { stats.total++; // Filtering by cultype if (entry.cultype === 'userips') stats.getIps++; else if (entry.cultype === 'ipusers') stats.getUsers++; else if (entry.cultype === 'getedits') stats.getEdits++; } }); } if (data.continue && data.continue.culcontinue) { continueToken = data.continue.culcontinue; } else { hasMore = false; } } catch (e) { console.error("API error for " + username, e); hasMore = false; } } return stats; } async function init() { $('.cu-stats-wrapper').remove(); $('#mw-content-text').prepend('<div class="cu-stats-wrapper" style="border: 2px solid #36c; padding: 15px; background: #f8f9fa; margin-bottom: 20px;">' + '<h3 style="margin-top:0">CheckUser Detailed Activity: ' + displayTitle + '</h3>' + '<span id="cu-loader">Analyzing detailed logs...</span></div>'); try { var resLocal = await api.get({ action: 'query', list: 'allusers', augroup: 'checkuser', aulimit: 250 }); var resStewards = await api.get({ action: 'query', list: 'globalallusers', agugroup: 'steward', agulimit: 250 }); var resStaff = await api.get({ action: 'query', list: 'globalallusers', agugroup: 'staff', agulimit: 250 }); var userMap = {}; if (resLocal.query.allusers) $.each(resLocal.query.allusers, function(i, u) { userMap[u.name] = 'Local CU'; }); if (resStewards.query.globalallusers) $.each(resStewards.query.globalallusers, function(i, u) { if(!userMap[u.name]) userMap[u.name] = 'Steward'; }); if (resStaff.query.globalallusers) $.each(resStaff.query.globalallusers, function(i, u) { if(!userMap[u.name]) userMap[u.name] = 'Staff'; }); var usernames = Object.keys(userMap); var statsList = []; var grandTotal = 0; for (var name of usernames) { $('#cu-loader').text('Analyzing: ' + name + '...'); var userStats = await getDetailedUserStats(name); if (userMap[name] === 'Local CU' || userStats.total > 0) { statsList.push({ name: name, role: userMap[name], data: userStats }); } grandTotal += userStats.total; } statsList.sort((a, b) => b.data.total - a.data.total || a.name.localeCompare(b.name)); var html = '<p><b>Grand Total: ' + grandTotal + ' actions</b></p>' + '<table class="wikitable sortable" style="width:100%; text-align: center;">' + '<thead><tr>' + '<th style="text-align: left;">Username</th>' + '<th>Role</th>' + '<th style="background: #eaf3ff;">Total</th>' + '<th style="color: #444;">Get IPs</th>' + '<th style="color: #444;">Get Users</th>' + '<th style="color: #444;">Get Edits</th>' + '</tr></thead><tbody>'; $.each(statsList, function(i, s) { html += '<tr>' + '<td style="text-align: left;">' + mw.html.escape(s.name) + '</td>' + '<td><small>' + s.role + '</small></td>' + '<td style="background: #f0f7ff;"><b>' + s.data.total + '</b></td>' + '<td>' + s.data.getIps + '</td>' + '<td>' + s.data.getUsers + '</td>' + '<td>' + s.data.getEdits + '</td>' + '</tr>'; }); html += '</tbody></table>'; $('#cu-loader').hide(); $('.cu-stats-wrapper').append(html); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); } catch (err) { $('#cu-loader').text('Critical error: ' + err); } } init(); })(); 6ryespbwe8umpyyrajj2y51w7eb57d8 735949 735948 2026-04-02T03:35:55Z MrJaroslavik 44012 E 735949 javascript text/javascript /** * UNIVERSAL CHECKUSER STATISTICS - VERSION 3.8 * Optimized for Dewiki, Cswiki, and TestWiki using FormatVersion 2. */ (function() { var api = new mw.Api(); // ================= CONFIGURATION ================= var YEAR = 2026; var MONTH = 3; // 3 = March // ================================================= var monthPadded = MONTH.toString().padStart(2, '0'); var START = YEAR + '-' + monthPadded + '-01T00:00:00Z'; var nextMonthDate = new Date(Date.UTC(YEAR, MONTH, 1)); var END = nextMonthDate.toISOString().split('.')[0] + 'Z'; var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; var displayTitle = monthNames[MONTH - 1] + " " + YEAR; async function getDetailedUserStats(username) { var stats = { total: 0, getIps: 0, getUsers: 0, getEdits: 0, other: 0 }; var continueToken = ''; var hasMore = true; while (hasMore) { var params = { action: 'query', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', culstart: START, culend: END, formatversion: 2 // Crucial for consistent data structure }; if (continueToken) params.culcontinue = continueToken; try { var data = await api.get(params); if (data.query && data.query.checkuserlog) { $.each(data.query.checkuserlog, function(i, entry) { if (entry.timestamp >= START && entry.timestamp < END) { stats.total++; // Standard MediaWiki CheckUser types var type = entry.type; if (type === 'userips') { stats.getIps++; } else if (type === 'ipusers') { stats.getUsers++; } else if (type === 'getedits' || type === 'ipedits' || type === 'useredits') { stats.getEdits++; } else { stats.other++; } } }); } if (data.continue && data.continue.culcontinue) { continueToken = data.continue.culcontinue; } else { hasMore = false; } } catch (e) { console.error("API error for " + username, e); hasMore = false; } } return stats; } async function init() { $('.cu-stats-wrapper').remove(); $('#mw-content-text').prepend('<div class="cu-stats-wrapper" style="border: 2px solid #36c; padding: 15px; background: #f8f9fa; margin-bottom: 20px; font-family: sans-serif;">' + '<h3 style="margin-top:0">CheckUser Activity Breakdown: ' + displayTitle + '</h3>' + '<span id="cu-loader">Processing logs...</span></div>'); try { // Using modern API structure for group fetching as well var groups = ['checkuser', 'steward', 'staff']; var userMap = {}; for (var group of groups) { var res = await api.get({ action: 'query', list: group === 'checkuser' ? 'allusers' : 'globalallusers', [group === 'checkuser' ? 'augroup' : 'agugroup']: group, [group === 'checkuser' ? 'aulimit' : 'agulimit']: 250, formatversion: 2 }); var users = (group === 'checkuser') ? res.query.allusers : res.query.globalallusers; if (users) { $.each(users, function(i, u) { if (!userMap[u.name]) userMap[u.name] = group.charAt(0).toUpperCase() + group.slice(1); }); } } var usernames = Object.keys(userMap); var statsList = []; var grandTotal = 0; for (var name of usernames) { $('#cu-loader').text('Analyzing: ' + name + '...'); var userStats = await getDetailedUserStats(name); if (userStats.total > 0 || userMap[name] === 'Checkuser') { statsList.push({ name: name, role: userMap[name], data: userStats }); grandTotal += userStats.total; } } statsList.sort((a, b) => b.data.total - a.data.total || a.name.localeCompare(b.name)); var html = '<p><b>Grand Total: ' + grandTotal + ' actions</b></p>' + '<table class="wikitable sortable" style="width:100%; text-align: center;">' + '<thead><tr>' + '<th style="text-align: left;">Username</th><th>Role</th>' + '<th style="background: #eaf3ff;">Total</th><th>Get IPs</th><th>Get Users</th><th>Get Edits</th>' + '<th style="color: #999;">Other</th>' + '</tr></thead><tbody>'; $.each(statsList, function(i, s) { html += '<tr>' + '<td style="text-align: left;">' + mw.html.escape(s.name) + '</td>' + '<td><small>' + s.role + '</small></td>' + '<td style="background: #f0f7ff;"><b>' + s.data.total + '</b></td>' + '<td>' + s.data.getIps + '</td>' + '<td>' + s.data.getUsers + '</td>' + '<td>' + s.data.getEdits + '</td>' + '<td style="color: #999;">' + s.data.other + '</td>' + '</tr>'; }); html += '</tbody></table>'; $('#cu-loader').hide(); $('.cu-stats-wrapper').append(html); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); } catch (err) { $('#cu-loader').text('Critical error: ' + err); console.error(err); } } init(); })(); sknl6aye6xe26j245177agwuo29ucbo 735951 735949 2026-04-02T03:55:02Z MrJaroslavik 44012 E 735951 javascript text/javascript /** * OFFICIAL API CHECKUSER STATISTICS - VERSION 3.9 * Matches documentation: uses culfrom/culto and handles action types. */ (function() { var api = new mw.Api(); // ================= KONFIGURACE ================= var YEAR = 2026; var MONTH = 3; // 3 = Březen (March) // =============================================== var monthPadded = MONTH.toString().padStart(2, '0'); var START = YEAR + '-' + monthPadded + '-01T00:00:00Z'; var nextMonthDate = new Date(Date.UTC(YEAR, MONTH, 1)); var END = nextMonthDate.toISOString().split('.')[0] + 'Z'; var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; var displayTitle = monthNames[MONTH - 1] + " " + YEAR; async function getDetailedUserStats(username) { var stats = { total: 0, getIps: 0, getUsers: 0, getEdits: 0, other: 0 }; var continueToken = ''; var hasMore = true; while (hasMore) { // PARAMETRY PŘESNĚ PODLE DOKUMENTACE var params = { action: 'query', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', // Od nejstarších culfrom: START, // Začátek (podle tvé dokumentace) culto: END, // Konec (podle tvé dokumentace) formatversion: 2 }; if (continueToken) params.culcontinue = continueToken; try { var data = await api.get(params); if (data.query && data.query.checkuserlog) { $.each(data.query.checkuserlog, function(i, entry) { // Kontrola, zda záznam patří do našeho měsíce if (entry.timestamp >= START && entry.timestamp < END) { stats.total++; // Rozdělení podle typu (výstupy z logu) var type = entry.type; if (type === 'userips') stats.getIps++; else if (type === 'ipusers') stats.getUsers++; else if (type === 'getedits' || type === 'useredits' || type === 'ipedits') stats.getEdits++; else stats.other++; } }); } if (data.continue && data.continue.culcontinue) { continueToken = data.continue.culcontinue; } else { hasMore = false; } } catch (e) { console.error("API error for " + username, e); hasMore = false; } } return stats; } async function init() { $('.cu-stats-wrapper').remove(); $('#mw-content-text').prepend('<div class="cu-stats-wrapper" style="border: 2px solid #36c; padding: 15px; background: #f8f9fa; margin-bottom: 20px; font-family: sans-serif;">' + '<h3 style="margin-top:0">CheckUser Statistics: ' + displayTitle + '</h3>' + '<span id="cu-loader">Reading CheckUser log...</span></div>'); try { // Načtení uživatelů var resL = await api.get({ action: 'query', list: 'allusers', augroup: 'checkuser', aulimit: 250, formatversion: 2 }); var resS = await api.get({ action: 'query', list: 'globalallusers', agugroup: 'steward', agulimit: 250, formatversion: 2 }); var resA = await api.get({ action: 'query', list: 'globalallusers', agugroup: 'staff', agulimit: 250, formatversion: 2 }); var userMap = {}; if (resL.query.allusers) $.each(resL.query.allusers, function(i, u) { userMap[u.name] = 'Local CU'; }); if (resS.query.globalallusers) $.each(resS.query.globalallusers, function(i, u) { if(!userMap[u.name]) userMap[u.name] = 'Steward'; }); if (resA.query.globalallusers) $.each(resA.query.globalallusers, function(i, u) { if(!userMap[u.name]) userMap[u.name] = 'Staff'; }); var usernames = Object.keys(userMap); var statsList = []; var grandTotal = 0; for (var name of usernames) { $('#cu-loader').text('Checking: ' + name + '...'); var userStats = await getDetailedUserStats(name); if (userStats.total > 0 || userMap[name] === 'Local CU') { statsList.push({ name: name, role: userMap[name], data: userStats }); grandTotal += userStats.total; } } statsList.sort((a, b) => b.data.total - a.data.total || a.name.localeCompare(b.name)); var html = '<p><b>Total monthly actions: ' + grandTotal + '</b></p>' + '<table class="wikitable sortable" style="width:100%; text-align: center;">' + '<thead><tr>' + '<th style="text-align: left;">Username</th><th>Role</th>' + '<th style="background: #eaf3ff;">Total</th>' + '<th>Get IPs</th><th>Get Users</th><th>Get Edits</th>' + '<th style="color: #999;">Other</th>' + '</tr></thead><tbody>'; $.each(statsList, function(i, s) { html += '<tr>' + '<td style="text-align: left;">' + mw.html.escape(s.name) + '</td>' + '<td><small>' + s.role + '</small></td>' + '<td style="background: #f0f7ff;"><b>' + s.data.total + '</b></td>' + '<td>' + (s.data.getIps || 0) + '</td>' + '<td>' + (s.data.getUsers || 0) + '</td>' + '<td>' + (s.data.getEdits || 0) + '</td>' + '<td style="color: #999;">' + (s.data.other || 0) + '</td>' + '</tr>'; }); html += '</tbody></table>'; $('#cu-loader').hide(); $('.cu-stats-wrapper').append(html); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); } catch (err) { $('#cu-loader').text('Error: ' + err); } } init(); })(); mchnu7sd1hwu52r7ne4odzigyjgnpnr 735952 735951 2026-04-02T04:07:36Z MrJaroslavik 44012 E 735952 javascript text/javascript /** * ROBUST CHECKUSER STATISTICS - VERSION 5.0 (FINAL BREAKDOWN) * Features: Multi-column breakdown, Auto-detection of active users, * Sequential processing with timeouts, Multi-parameter compatibility. */ (function() { var api = new mw.Api(); // ================= CONFIGURATION ================= var YEAR = 2026; var MONTH = 3; // 1=Jan, 2=Feb, 3=Mar, 4=Apr, ..., 12=Dec // ================================================= // --- Date Logic --- var monthPadded = MONTH.toString().padStart(2, '0'); var START = YEAR + '-' + monthPadded + '-01T00:00:00Z'; var nextMonthDate = new Date(Date.UTC(YEAR, MONTH, 1)); var END = nextMonthDate.toISOString().split('.')[0] + 'Z'; var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; var displayTitle = monthNames[MONTH - 1] + " " + YEAR; async function getDetailedUserStats(username) { var stats = { total: 0, getIps: 0, getUsers: 0, getEdits: 0, other: 0 }; var continueToken = ''; var hasMore = true; while (hasMore) { var params = { action: 'query', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', // Multi-parameter compatibility for different Wikis culstart: START, culend: END, culfrom: START, culto: END, formatversion: 2 }; if (continueToken) params.culcontinue = continueToken; try { // 3-second safety timeout per request var data = await Promise.race([ api.get(params), new Promise((_, reject) => setTimeout(() => reject('Timeout'), 3000)) ]); if (data.query && data.query.checkuserlog) { $.each(data.query.checkuserlog, function(i, entry) { if (entry.timestamp >= START && entry.timestamp < END) { stats.total++; // Map API type to column var type = entry.type || entry.cultype; if (type === 'userips') stats.getIps++; else if (type === 'ipusers') stats.getUsers++; else if (type === 'getedits' || type === 'useredits' || type === 'ipedits') stats.getEdits++; else stats.other++; } }); } if (data.continue && data.continue.culcontinue) { continueToken = data.continue.culcontinue; } else { hasMore = false; } } catch (e) { console.error("Skipping part of log for " + username, e); return "unknown"; } } return stats; } async function init() { $('.cu-stats-wrapper').remove(); $('#mw-content-text').prepend('<div class="cu-stats-wrapper" style="border: 2px solid #36c; padding: 15px; background: #f8f9fa; margin-bottom: 20px; font-family: sans-serif;">' + '<h3 style="margin-top:0">CheckUser Detailed Activity: ' + displayTitle + '</h3>' + '<span id="cu-loader">Scanning log for active users...</span></div>'); try { var userMap = {}; // 1. Get Local CheckUsers var resLocal = await api.get({ action: 'query', list: 'allusers', augroup: 'checkuser', formatversion: 2 }); if (resLocal.query.allusers) { $.each(resLocal.query.allusers, function(i, u) { userMap[u.name] = 'CheckUser'; }); } // 2. Discover ALL active users from the log (Staff, Stewards, etc.) var logScan = await api.get({ action: 'query', list: 'checkuserlog', culstart: START, culend: END, culfrom: START, culto: END, cullimit: 'max', formatversion: 2 }); if (logScan.query && logScan.query.checkuserlog) { $.each(logScan.query.checkuserlog, function(i, entry) { if (!userMap[entry.user]) userMap[entry.user] = 'Global/Staff'; }); } var usernames = Object.keys(userMap); var statsList = []; var grandTotal = 0; for (var i = 0; i < usernames.length; i++) { var name = usernames[i]; $('#cu-loader').text('Analyzing [' + (i+1) + '/' + usernames.length + ']: ' + name); var result = await getDetailedUserStats(name); var role = userMap[name]; if (result === "unknown") { statsList.push({ name: name, role: role, data: { total: "unknown" }, sort: -1 }); } else if (role === 'CheckUser' || result.total > 0) { statsList.push({ name: name, role: role, data: result, sort: result.total }); grandTotal += result.total; } } statsList.sort((a, b) => b.sort - a.sort || a.name.localeCompare(b.name)); var html = '<p><b>Grand Total: ' + grandTotal + ' actions</b></p>' + '<table class="wikitable sortable" style="width:100%; text-align: center;">' + '<thead><tr>' + '<th style="text-align: left;">Username</th>' + '<th>Role</th>' + '<th style="background: #eaf3ff;">Total</th>' + '<th>Get IPs</th>' + '<th>Get Users</th>' + '<th>Get Edits</th>' + '</tr></thead><tbody>'; $.each(statsList, function(i, s) { var d = s.data; var isUnk = d.total === "unknown"; html += '<tr>' + '<td style="text-align: left;">' + mw.html.escape(s.name) + '</td>' + '<td><small>' + s.role + '</small></td>' + '<td style="background: #f0f7ff;"><b>' + (isUnk ? '<span style="color:red">unknown</span>' : d.total) + '</b></td>' + '<td>' + (isUnk ? '-' : d.getIps) + '</td>' + '<td>' + (isUnk ? '-' : d.getUsers) + '</td>' + '<td>' + (isUnk ? '-' : d.getEdits) + '</td>' + '</tr>'; }); html += '</tbody></table>'; $('#cu-loader').hide(); $('.cu-stats-wrapper').append(html); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); } catch (err) { $('#cu-loader').text('Critical error: ' + err); } } init(); })(); g47ef1diqzc0vxbjlkkq0amdehxuj57 735953 735952 2026-04-02T04:08:08Z MrJaroslavik 44012 E 735953 javascript text/javascript /** * SMART CHECKUSER STATISTICS - VERSION 3.5 (April 2026) * Features: Easy config (Year/Month), Unlimited count, Strict Date Filter. */ (function() { var api = new mw.Api(); // ================= CONFIGURATION ================= var YEAR = 2026; var MONTH = 3; // 1=Jan, 2=Feb, 3=Mar, 4=Apr, ..., 12=Dec // ================================================= // --- Automatic Date Logic --- // Start: YYYY-MM-01 00:00:00 var monthPadded = MONTH.toString().padStart(2, '0'); var START = YEAR + '-' + monthPadded + '-01T00:00:00Z'; // End: 1st day of the NEXT month 00:00:00 (Standard exclusive boundary) // JavaScript handles month 12 -> next year 1 automatically var nextMonthDate = new Date(Date.UTC(YEAR, MONTH, 1)); var END = nextMonthDate.toISOString().split('.')[0] + 'Z'; // UI Formatting var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; var displayTitle = monthNames[MONTH - 1] + " " + YEAR; function getLocalCUs() { return api.get({ action: 'query', list: 'allusers', augroup: 'checkuser', aulimit: 250 }); } function getGlobalCUs(groupName) { return api.get({ action: 'query', list: 'globalallusers', agugroup: groupName, agulimit: 250 }); } async function countAllUserActions(username) { var count = 0; var continueToken = ''; var hasMore = true; while (hasMore) { var params = { action: 'query', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', culstart: START, culend: END }; if (continueToken) params.culcontinue = continueToken; try { var data = await api.get(params); if (data.query && data.query.checkuserlog && data.query.checkuserlog.entries) { $.each(data.query.checkuserlog.entries, function(i, entry) { // Strict check to keep the data within the chosen month if (entry.timestamp >= START && entry.timestamp < END) { count++; } }); } if (data.continue && data.continue.culcontinue) { continueToken = data.continue.culcontinue; } else { hasMore = false; } } catch (e) { console.error("API error for " + username, e); hasMore = false; } } return count; } async function init() { $('.cu-stats-wrapper').remove(); $('#mw-content-text').prepend('<div class="cu-stats-wrapper" style="border: 2px solid #36c; padding: 15px; background: #f8f9fa; margin-bottom: 20px;">' + '<h3 style="margin-top:0">CheckUser Activity: ' + displayTitle + '</h3>' + '<span id="cu-loader">Analyzing logs for ' + displayTitle + '...</span></div>'); try { var resLocal = await getLocalCUs(); var resStewards = await getGlobalCUs('steward'); var resOmbuds = await getGlobalCUs('ombuds'); var resStaff = await getGlobalCUs('staff'); var userMap = {}; if (resLocal.query.allusers) { $.each(resLocal.query.allusers, function(i, u) { userMap[u.name] = 'Local CU'; }); } function processG(res, label) { if (res.query && res.query.globalallusers) { $.each(res.query.globalallusers, function(i, u) { if (!userMap[u.name]) userMap[u.name] = label; }); } } processG(resStewards, 'Steward'); processG(resOmbuds, 'Ombuds'); processG(resStaff, 'Staff'); var usernames = Object.keys(userMap); var stats = []; var total = 0; for (var name of usernames) { $('#cu-loader').text('Processing user: ' + name + '...'); var count = await countAllUserActions(name); var role = userMap[name]; if (role === 'Local CU' || count > 0) { stats.push({ name: name, count: count, role: role }); } total += count; } stats.sort((a, b) => b.count - a.count || a.name.localeCompare(b.name)); var html = '<p><b>Total actions in ' + displayTitle + ': ' + total + '</b></p>' + '<table class="wikitable sortable" style="width:100%; margin-top:10px;">' + '<thead><tr><th>Username</th><th>Role</th><th>Actions</th></tr></thead><tbody>'; $.each(stats, function(i, s) { html += '<tr><td>' + mw.html.escape(s.name) + '</td><td><small>' + s.role + '</small></td><td><b>' + s.count + '</b></td></tr>'; }); html += '</tbody></table>'; $('#cu-loader').hide(); $('.cu-stats-wrapper').append(html); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); } catch (err) { $('#cu-loader').text('Critical error: ' + err); } } init(); })(); g1bysyfivk29bfj97bwd2ocuojkgwx3 735954 735953 2026-04-02T04:24:35Z MrJaroslavik 44012 2 735954 javascript text/javascript /** * SMART CHECKUSER STATISTICS - VERSION 3.5 (April 2026) * Features: Easy config (Year/Month), Unlimited count, Strict Date Filter. */ (function() { var api = new mw.Api(); // ================= CONFIGURATION ================= var YEAR = 2026; var MONTH = 2; // 1=Jan, 2=Feb, 3=Mar, 4=Apr, ..., 12=Dec // ================================================= // --- Automatic Date Logic --- // Start: YYYY-MM-01 00:00:00 var monthPadded = MONTH.toString().padStart(2, '0'); var START = YEAR + '-' + monthPadded + '-01T00:00:00Z'; // End: 1st day of the NEXT month 00:00:00 (Standard exclusive boundary) // JavaScript handles month 12 -> next year 1 automatically var nextMonthDate = new Date(Date.UTC(YEAR, MONTH, 1)); var END = nextMonthDate.toISOString().split('.')[0] + 'Z'; // UI Formatting var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; var displayTitle = monthNames[MONTH - 1] + " " + YEAR; function getLocalCUs() { return api.get({ action: 'query', list: 'allusers', augroup: 'checkuser', aulimit: 250 }); } function getGlobalCUs(groupName) { return api.get({ action: 'query', list: 'globalallusers', agugroup: groupName, agulimit: 250 }); } async function countAllUserActions(username) { var count = 0; var continueToken = ''; var hasMore = true; while (hasMore) { var params = { action: 'query', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', culstart: START, culend: END }; if (continueToken) params.culcontinue = continueToken; try { var data = await api.get(params); if (data.query && data.query.checkuserlog && data.query.checkuserlog.entries) { $.each(data.query.checkuserlog.entries, function(i, entry) { // Strict check to keep the data within the chosen month if (entry.timestamp >= START && entry.timestamp < END) { count++; } }); } if (data.continue && data.continue.culcontinue) { continueToken = data.continue.culcontinue; } else { hasMore = false; } } catch (e) { console.error("API error for " + username, e); hasMore = false; } } return count; } async function init() { $('.cu-stats-wrapper').remove(); $('#mw-content-text').prepend('<div class="cu-stats-wrapper" style="border: 2px solid #36c; padding: 15px; background: #f8f9fa; margin-bottom: 20px;">' + '<h3 style="margin-top:0">CheckUser Activity: ' + displayTitle + '</h3>' + '<span id="cu-loader">Analyzing logs for ' + displayTitle + '...</span></div>'); try { var resLocal = await getLocalCUs(); var resStewards = await getGlobalCUs('steward'); var resOmbuds = await getGlobalCUs('ombuds'); var resStaff = await getGlobalCUs('staff'); var userMap = {}; if (resLocal.query.allusers) { $.each(resLocal.query.allusers, function(i, u) { userMap[u.name] = 'Local CU'; }); } function processG(res, label) { if (res.query && res.query.globalallusers) { $.each(res.query.globalallusers, function(i, u) { if (!userMap[u.name]) userMap[u.name] = label; }); } } processG(resStewards, 'Steward'); processG(resOmbuds, 'Ombuds'); processG(resStaff, 'Staff'); var usernames = Object.keys(userMap); var stats = []; var total = 0; for (var name of usernames) { $('#cu-loader').text('Processing user: ' + name + '...'); var count = await countAllUserActions(name); var role = userMap[name]; if (role === 'Local CU' || count > 0) { stats.push({ name: name, count: count, role: role }); } total += count; } stats.sort((a, b) => b.count - a.count || a.name.localeCompare(b.name)); var html = '<p><b>Total actions in ' + displayTitle + ': ' + total + '</b></p>' + '<table class="wikitable sortable" style="width:100%; margin-top:10px;">' + '<thead><tr><th>Username</th><th>Role</th><th>Actions</th></tr></thead><tbody>'; $.each(stats, function(i, s) { html += '<tr><td>' + mw.html.escape(s.name) + '</td><td><small>' + s.role + '</small></td><td><b>' + s.count + '</b></td></tr>'; }); html += '</tbody></table>'; $('#cu-loader').hide(); $('.cu-stats-wrapper').append(html); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); } catch (err) { $('#cu-loader').text('Critical error: ' + err); } } init(); })(); b53mjpu7m1aka5d8q3ryjzh3eeqvsjy 735955 735954 2026-04-02T04:26:06Z MrJaroslavik 44012 E 735955 javascript text/javascript /** * SMART CHECKUSER STATISTICS - VERSION 3.5 (April 2026) * Features: Easy config (Year/Month), Unlimited count, Strict Date Filter. */ (function() { var api = new mw.Api(); // ================= CONFIGURATION ================= var YEAR = 2026; var MONTH = 3; // 1=Jan, 2=Feb, 3=Mar, 4=Apr, ..., 12=Dec // ================================================= // --- Automatic Date Logic --- // Start: YYYY-MM-01 00:00:00 var monthPadded = MONTH.toString().padStart(2, '0'); var START = YEAR + '-' + monthPadded + '-01T00:00:00Z'; // End: 1st day of the NEXT month 00:00:00 (Standard exclusive boundary) // JavaScript handles month 12 -> next year 1 automatically var nextMonthDate = new Date(Date.UTC(YEAR, MONTH, 1)); var END = nextMonthDate.toISOString().split('.')[0] + 'Z'; // UI Formatting var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; var displayTitle = monthNames[MONTH - 1] + " " + YEAR; function getLocalCUs() { return api.get({ action: 'query', list: 'allusers', augroup: 'checkuser', aulimit: 250 }); } function getGlobalCUs(groupName) { return api.get({ action: 'query', list: 'globalallusers', agugroup: groupName, agulimit: 250 }); } async function countAllUserActions(username) { var count = 0; var continueToken = ''; var hasMore = true; while (hasMore) { var params = { action: 'query', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', culstart: START, culend: END }; if (continueToken) params.culcontinue = continueToken; try { var data = await api.get(params); if (data.query && data.query.checkuserlog && data.query.checkuserlog.entries) { $.each(data.query.checkuserlog.entries, function(i, entry) { // Strict check to keep the data within the chosen month if (entry.timestamp >= START && entry.timestamp < END) { count++; } }); } if (data.continue && data.continue.culcontinue) { continueToken = data.continue.culcontinue; } else { hasMore = false; } } catch (e) { console.error("API error for " + username, e); hasMore = false; } } return count; } async function init() { $('.cu-stats-wrapper').remove(); $('#mw-content-text').prepend('<div class="cu-stats-wrapper" style="border: 2px solid #36c; padding: 15px; background: #f8f9fa; margin-bottom: 20px;">' + '<h3 style="margin-top:0">CheckUser Activity: ' + displayTitle + '</h3>' + '<span id="cu-loader">Analyzing logs for ' + displayTitle + '...</span></div>'); try { var resLocal = await getLocalCUs(); var resStewards = await getGlobalCUs('steward'); var resOmbuds = await getGlobalCUs('ombuds'); var resStaff = await getGlobalCUs('staff'); var userMap = {}; if (resLocal.query.allusers) { $.each(resLocal.query.allusers, function(i, u) { userMap[u.name] = 'Local CU'; }); } function processG(res, label) { if (res.query && res.query.globalallusers) { $.each(res.query.globalallusers, function(i, u) { if (!userMap[u.name]) userMap[u.name] = label; }); } } processG(resStewards, 'Steward'); processG(resOmbuds, 'Ombuds'); processG(resStaff, 'Staff'); var usernames = Object.keys(userMap); var stats = []; var total = 0; for (var name of usernames) { $('#cu-loader').text('Processing user: ' + name + '...'); var count = await countAllUserActions(name); var role = userMap[name]; if (role === 'Local CU' || count > 0) { stats.push({ name: name, count: count, role: role }); } total += count; } stats.sort((a, b) => b.count - a.count || a.name.localeCompare(b.name)); var html = '<p><b>Total actions in ' + displayTitle + ': ' + total + '</b></p>' + '<table class="wikitable sortable" style="width:100%; margin-top:10px;">' + '<thead><tr><th>Username</th><th>Role</th><th>Actions</th></tr></thead><tbody>'; $.each(stats, function(i, s) { html += '<tr><td>' + mw.html.escape(s.name) + '</td><td><small>' + s.role + '</small></td><td><b>' + s.count + '</b></td></tr>'; }); html += '</tbody></table>'; $('#cu-loader').hide(); $('.cu-stats-wrapper').append(html); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); } catch (err) { $('#cu-loader').text('Critical error: ' + err); } } init(); })(); g1bysyfivk29bfj97bwd2ocuojkgwx3 735956 735955 2026-04-02T05:03:40Z MrJaroslavik 44012 2 735956 javascript text/javascript /** * SMART CHECKUSER STATISTICS - VERSION 3.5 (April 2026) * Features: Easy config (Year/Month), Unlimited count, Strict Date Filter. */ (function() { var api = new mw.Api(); // ================= CONFIGURATION ================= var YEAR = 2026; var MONTH = 2; // 1=Jan, 2=Feb, 3=Mar, 4=Apr, ..., 12=Dec // ================================================= // --- Automatic Date Logic --- // Start: YYYY-MM-01 00:00:00 var monthPadded = MONTH.toString().padStart(2, '0'); var START = YEAR + '-' + monthPadded + '-01T00:00:00Z'; // End: 1st day of the NEXT month 00:00:00 (Standard exclusive boundary) // JavaScript handles month 12 -> next year 1 automatically var nextMonthDate = new Date(Date.UTC(YEAR, MONTH, 1)); var END = nextMonthDate.toISOString().split('.')[0] + 'Z'; // UI Formatting var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; var displayTitle = monthNames[MONTH - 1] + " " + YEAR; function getLocalCUs() { return api.get({ action: 'query', list: 'allusers', augroup: 'checkuser', aulimit: 250 }); } function getGlobalCUs(groupName) { return api.get({ action: 'query', list: 'globalallusers', agugroup: groupName, agulimit: 250 }); } async function countAllUserActions(username) { var count = 0; var continueToken = ''; var hasMore = true; while (hasMore) { var params = { action: 'query', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', culstart: START, culend: END }; if (continueToken) params.culcontinue = continueToken; try { var data = await api.get(params); if (data.query && data.query.checkuserlog && data.query.checkuserlog.entries) { $.each(data.query.checkuserlog.entries, function(i, entry) { // Strict check to keep the data within the chosen month if (entry.timestamp >= START && entry.timestamp < END) { count++; } }); } if (data.continue && data.continue.culcontinue) { continueToken = data.continue.culcontinue; } else { hasMore = false; } } catch (e) { console.error("API error for " + username, e); hasMore = false; } } return count; } async function init() { $('.cu-stats-wrapper').remove(); $('#mw-content-text').prepend('<div class="cu-stats-wrapper" style="border: 2px solid #36c; padding: 15px; background: #f8f9fa; margin-bottom: 20px;">' + '<h3 style="margin-top:0">CheckUser Activity: ' + displayTitle + '</h3>' + '<span id="cu-loader">Analyzing logs for ' + displayTitle + '...</span></div>'); try { var resLocal = await getLocalCUs(); var resStewards = await getGlobalCUs('steward'); var resOmbuds = await getGlobalCUs('ombuds'); var resStaff = await getGlobalCUs('staff'); var userMap = {}; if (resLocal.query.allusers) { $.each(resLocal.query.allusers, function(i, u) { userMap[u.name] = 'Local CU'; }); } function processG(res, label) { if (res.query && res.query.globalallusers) { $.each(res.query.globalallusers, function(i, u) { if (!userMap[u.name]) userMap[u.name] = label; }); } } processG(resStewards, 'Steward'); processG(resOmbuds, 'Ombuds'); processG(resStaff, 'Staff'); var usernames = Object.keys(userMap); var stats = []; var total = 0; for (var name of usernames) { $('#cu-loader').text('Processing user: ' + name + '...'); var count = await countAllUserActions(name); var role = userMap[name]; if (role === 'Local CU' || count > 0) { stats.push({ name: name, count: count, role: role }); } total += count; } stats.sort((a, b) => b.count - a.count || a.name.localeCompare(b.name)); var html = '<p><b>Total actions in ' + displayTitle + ': ' + total + '</b></p>' + '<table class="wikitable sortable" style="width:100%; margin-top:10px;">' + '<thead><tr><th>Username</th><th>Role</th><th>Actions</th></tr></thead><tbody>'; $.each(stats, function(i, s) { html += '<tr><td>' + mw.html.escape(s.name) + '</td><td><small>' + s.role + '</small></td><td><b>' + s.count + '</b></td></tr>'; }); html += '</tbody></table>'; $('#cu-loader').hide(); $('.cu-stats-wrapper').append(html); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); } catch (err) { $('#cu-loader').text('Critical error: ' + err); } } init(); })(); b53mjpu7m1aka5d8q3ryjzh3eeqvsjy 735957 735956 2026-04-02T05:41:42Z MrJaroslavik 44012 E 735957 javascript text/javascript /** * CHECKUSER RANGE STATISTICS - VERSION 6.0 * Features: Multi-month range, Total + Monthly breakdown columns. */ (function() { var api = new mw.Api(); // ================= CONFIGURATION ================= var YEAR = 2026; var START_MONTH = 1; // Leden var END_MONTH = 3; // Březen // ================================================= var monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; // Generování seznamu měsíců a jejich časových hranic var periods = []; for (var m = START_MONTH; m <= END_MONTH; m++) { var startIso = YEAR + '-' + m.toString().padStart(2, '0') + '-01T00:00:00Z'; var nextM = (m === 12) ? 1 : m + 1; var nextY = (m === 12) ? YEAR + 1 : YEAR; var endIso = nextY + '-' + nextM.toString().padStart(2, '0') + '-01T00:00:00Z'; periods.push({ name: monthNames[m - 1], start: startIso, end: endIso }); } async function countActionsForPeriod(username, start, end) { var count = 0; var continueToken = ''; var hasMore = true; while (hasMore) { var params = { action: 'query', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', culstart: start, culend: end, culfrom: start, culto: end, formatversion: 2 }; if (continueToken) params.culcontinue = continueToken; try { var data = await api.get(params); if (data.query && data.query.checkuserlog) { $.each(data.query.checkuserlog, function(i, entry) { if (entry.timestamp >= start && entry.timestamp < end) count++; }); } if (data.continue && data.continue.culcontinue) { continueToken = data.continue.culcontinue; } else { hasMore = false; } } catch (e) { hasMore = false; } } return count; } async function init() { $('.cu-stats-wrapper').remove(); $('#mw-content-text').prepend('<div class="cu-stats-wrapper" style="border: 2px solid #36c; padding: 15px; background: #f8f9fa; margin-bottom: 20px; font-family: sans-serif;">' + '<h3 style="margin-top:0">CheckUser Range Activity: ' + monthNames[START_MONTH-1] + ' - ' + monthNames[END_MONTH-1] + ' ' + YEAR + '</h3>' + '<span id="cu-loader">Preparing analysis...</span></div>'); try { var userMap = {}; // 1. Lokální CU var resL = await api.get({ action: 'query', list: 'allusers', augroup: 'checkuser', formatversion: 2 }); if (resL.query.allusers) $.each(resL.query.allusers, function(i, u) { userMap[u.name] = 'Local CU'; }); // 2. Globální skupiny (Steward, Staff) var gGroups = ['steward', 'staff']; for (var group of gGroups) { var resG = await api.get({ action: 'query', list: 'globalallusers', agugroup: group, agulimit: 200, formatversion: 2 }); if (resG.query && resG.query.globalallusers) { $.each(resG.query.globalallusers, function(i, u) { if (!userMap[u.name]) userMap[u.name] = group.charAt(0).toUpperCase() + group.slice(1); }); } } var usernames = Object.keys(userMap); var statsList = []; for (var i = 0; i < usernames.length; i++) { var name = usernames[i]; var userRow = { name: name, role: userMap[name], monthly: [], grandTotal: 0 }; $('#cu-loader').text('Checking [' + (i+1) + '/' + usernames.length + ']: ' + name); for (var p of periods) { var count = await countActionsForPeriod(name, p.start, p.end); userRow.monthly.push(count); userRow.grandTotal += count; } if (userRow.grandTotal > 0 || userRow.role === 'Local CU') { statsList.push(userRow); } } statsList.sort((a, b) => b.grandTotal - a.grandTotal || a.name.localeCompare(b.name)); // Stavba tabulky var html = '<table class="wikitable sortable" style="width:100%; text-align: center;"><thead><tr>' + '<th style="text-align: left;">Username</th><th>Role</th>' + '<th style="background: #eaf3ff;">TOTAL</th>'; // Přidání sloupců pro měsíce $.each(periods, function(i, p) { html += '<th>' + p.name + '</th>'; }); html += '</tr></thead><tbody>'; $.each(statsList, function(i, s) { html += '<tr><td style="text-align: left;">' + mw.html.escape(s.name) + '</td><td><small>' + s.role + '</small></td>' + '<td style="background: #f0f7ff;"><b>' + s.grandTotal + '</b></td>'; $.each(s.monthly, function(j, mCount) { html += '<td style="' + (mCount > 0 ? 'font-weight:bold;' : 'color:#ccc;') + '">' + mCount + '</td>'; }); html += '</tr>'; }); html += '</tbody></table>'; $('#cu-loader').hide(); $('.cu-stats-wrapper').append(html); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); } catch (err) { $('#cu-loader').text('Error: ' + err); } } init(); })(); jvdmelrzitk07twosku86i2r6urpzrt 735958 735957 2026-04-02T05:51:21Z MrJaroslavik 44012 E 735958 javascript text/javascript /** * CHECKUSER RANGE STATISTICS - VERSION 6.1 * Features: Single API pass per user, high reliability, automatic month sorting. */ (function() { var api = new mw.Api(); // ================= KONFIGURACE ================= var YEAR = 2025; // ZKONTROLUJ ROK! (2025 pro skwiki historii, 2026 pro současnost) var START_MONTH = 1; // Leden var END_MONTH = 3; // Březen // =============================================== var monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; var fullStart = YEAR + '-' + START_MONTH.toString().padStart(2, '0') + '-01T00:00:00Z'; var nextM = (END_MONTH === 12) ? 1 : END_MONTH + 1; var nextY = (END_MONTH === 12) ? YEAR + 1 : YEAR; var fullEnd = nextY + '-' + nextM.toString().padStart(2, '0') + '-01T00:00:00Z'; async function getUserData(username) { var monthlyCounts = {}; for (var m = START_MONTH; m <= END_MONTH; m++) monthlyCounts[m] = 0; var continueToken = ''; var hasMore = true; var total = 0; while (hasMore) { var params = { action: 'query', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', culfrom: fullStart, culto: fullEnd, // Používáme culfrom/to podle dokumentace formatversion: 2 }; if (continueToken) params.culcontinue = continueToken; try { var data = await api.get(params); var entries = (data.query && data.query.checkuserlog) ? data.query.checkuserlog : []; $.each(entries, function(i, entry) { var ts = entry.timestamp; if (ts >= fullStart && ts < fullEnd) { var m = parseInt(ts.substring(5, 7), 10); if (monthlyCounts[m] !== undefined) { monthlyCounts[m]++; total++; } } }); if (data.continue && data.continue.culcontinue) { continueToken = data.continue.culcontinue; } else { hasMore = false; } } catch (e) { hasMore = false; } } return { total: total, months: monthlyCounts }; } async function init() { $('.cu-stats-wrapper').remove(); $('#mw-content-text').prepend('<div class="cu-stats-wrapper" style="border: 2px solid #36c; padding: 15px; background: #f8f9fa; margin-bottom: 20px;">' + '<h3 style="margin-top:0">CheckUser Stats (' + YEAR + '): ' + monthNames[START_MONTH-1] + ' to ' + monthNames[END_MONTH-1] + '</h3>' + '<span id="cu-loader">Loading users...</span></div>'); try { var userMap = {}; // Načtení lokálních CU var resL = await api.get({ action: 'query', list: 'allusers', augroup: 'checkuser', formatversion: 2 }); if (resL.query.allusers) $.each(resL.query.allusers, function(i, u) { userMap[u.name] = 'Local CU'; }); // Rychlý scan logu pro globální uživatele var logScan = await api.get({ action: 'query', list: 'checkuserlog', culfrom: fullStart, culto: fullEnd, cullimit: 'max', formatversion: 2 }); if (logScan.query && logScan.query.checkuserlog) { $.each(logScan.query.checkuserlog, function(i, e) { if (!userMap[e.user]) userMap[e.user] = 'Global'; }); } var usernames = Object.keys(userMap); var statsList = []; var grandTotal = 0; for (var i = 0; i < usernames.length; i++) { var name = usernames[i]; $('#cu-loader').text('Analyzing [' + (i+1) + '/' + usernames.length + ']: ' + name); var res = await getUserData(name); if (res.total > 0 || userMap[name] === 'Local CU') { statsList.push({ name: name, role: userMap[name], data: res }); grandTotal += res.total; } } statsList.sort((a, b) => b.data.total - a.data.total || a.name.localeCompare(b.name)); var html = '<p><b>Total actions in range: ' + grandTotal + '</b></p>' + '<table class="wikitable sortable" style="width:100%; text-align: center;"><thead><tr>' + '<th style="text-align: left;">Username</th><th>Role</th>' + '<th style="background: #eaf3ff;">TOTAL</th>'; for (var m = START_MONTH; m <= END_MONTH; m++) { html += '<th>' + monthNames[m-1] + '</th>'; } html += '</tr></thead><tbody>'; $.each(statsList, function(i, s) { html += '<tr><td style="text-align: left;">' + mw.html.escape(s.name) + '</td><td><small>' + s.role + '</small></td>' + '<td style="background: #f0f7ff;"><b>' + s.data.total + '</b></td>'; for (var m = START_MONTH; m <= END_MONTH; m++) { var val = s.data.months[m]; html += '<td style="' + (val > 0 ? 'font-weight:bold;' : 'color:#ccc;') + '">' + val + '</td>'; } html += '</tr>'; }); html += '</tbody></table>'; $('#cu-loader').hide(); $('.cu-stats-wrapper').append(html); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); } catch (err) { $('#cu-loader').text('Error: ' + err); } } init(); })(); 4ay7bs8lfnkygscq1alr3tmf2hp33bx 735959 735958 2026-04-02T05:55:26Z MrJaroslavik 44012 E 735959 javascript text/javascript /** * SMART CHECKUSER STATISTICS - VERSION 3.5 (April 2026) * Features: Easy config (Year/Month), Unlimited count, Strict Date Filter. */ (function() { var api = new mw.Api(); // ================= CONFIGURATION ================= var YEAR = 2026; var MONTH = 2; // 1=Jan, 2=Feb, 3=Mar, 4=Apr, ..., 12=Dec // ================================================= // --- Automatic Date Logic --- // Start: YYYY-MM-01 00:00:00 var monthPadded = MONTH.toString().padStart(2, '0'); var START = YEAR + '-' + monthPadded + '-01T00:00:00Z'; // End: 1st day of the NEXT month 00:00:00 (Standard exclusive boundary) // JavaScript handles month 12 -> next year 1 automatically var nextMonthDate = new Date(Date.UTC(YEAR, MONTH, 1)); var END = nextMonthDate.toISOString().split('.')[0] + 'Z'; // UI Formatting var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; var displayTitle = monthNames[MONTH - 1] + " " + YEAR; function getLocalCUs() { return api.get({ action: 'query', list: 'allusers', augroup: 'checkuser', aulimit: 250 }); } function getGlobalCUs(groupName) { return api.get({ action: 'query', list: 'globalallusers', agugroup: groupName, agulimit: 250 }); } async function countAllUserActions(username) { var count = 0; var continueToken = ''; var hasMore = true; while (hasMore) { var params = { action: 'query', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', culstart: START, culend: END }; if (continueToken) params.culcontinue = continueToken; try { var data = await api.get(params); if (data.query && data.query.checkuserlog && data.query.checkuserlog.entries) { $.each(data.query.checkuserlog.entries, function(i, entry) { // Strict check to keep the data within the chosen month if (entry.timestamp >= START && entry.timestamp < END) { count++; } }); } if (data.continue && data.continue.culcontinue) { continueToken = data.continue.culcontinue; } else { hasMore = false; } } catch (e) { console.error("API error for " + username, e); hasMore = false; } } return count; } async function init() { $('.cu-stats-wrapper').remove(); $('#mw-content-text').prepend('<div class="cu-stats-wrapper" style="border: 2px solid #36c; padding: 15px; background: #f8f9fa; margin-bottom: 20px;">' + '<h3 style="margin-top:0">CheckUser Activity: ' + displayTitle + '</h3>' + '<span id="cu-loader">Analyzing logs for ' + displayTitle + '...</span></div>'); try { var resLocal = await getLocalCUs(); var resStewards = await getGlobalCUs('steward'); var resOmbuds = await getGlobalCUs('ombuds'); var resStaff = await getGlobalCUs('staff'); var userMap = {}; if (resLocal.query.allusers) { $.each(resLocal.query.allusers, function(i, u) { userMap[u.name] = 'Local CU'; }); } function processG(res, label) { if (res.query && res.query.globalallusers) { $.each(res.query.globalallusers, function(i, u) { if (!userMap[u.name]) userMap[u.name] = label; }); } } processG(resStewards, 'Steward'); processG(resOmbuds, 'Ombuds'); processG(resStaff, 'Staff'); var usernames = Object.keys(userMap); var stats = []; var total = 0; for (var name of usernames) { $('#cu-loader').text('Processing user: ' + name + '...'); var count = await countAllUserActions(name); var role = userMap[name]; if (role === 'Local CU' || count > 0) { stats.push({ name: name, count: count, role: role }); } total += count; } stats.sort((a, b) => b.count - a.count || a.name.localeCompare(b.name)); var html = '<p><b>Total actions in ' + displayTitle + ': ' + total + '</b></p>' + '<table class="wikitable sortable" style="width:100%; margin-top:10px;">' + '<thead><tr><th>Username</th><th>Role</th><th>Actions</th></tr></thead><tbody>'; $.each(stats, function(i, s) { html += '<tr><td>' + mw.html.escape(s.name) + '</td><td><small>' + s.role + '</small></td><td><b>' + s.count + '</b></td></tr>'; }); html += '</tbody></table>'; $('#cu-loader').hide(); $('.cu-stats-wrapper').append(html); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); } catch (err) { $('#cu-loader').text('Critical error: ' + err); } } init(); })(); b53mjpu7m1aka5d8q3ryjzh3eeqvsjy 735960 735959 2026-04-02T06:01:29Z MrJaroslavik 44012 E 735960 javascript text/javascript /** * SMART CHECKUSER STATISTICS - VERSION 3.5.1 (Range Mode) * Features: Multi-month range, Total count only, Based on stable 3.5 logic. */ (function() { var api = new mw.Api(); // ================= CONFIGURATION ================= var YEAR = 2026; var START_MONTH = 1; // Od kterého měsíce (1=Jan) var END_MONTH = 3; // Do kterého měsíce (včetně, 3=Mar) // ================================================= // --- Automatic Date Logic --- // Start: První den START_MONTH var startPadded = START_MONTH.toString().padStart(2, '0'); var START = YEAR + '-' + startPadded + '-01T00:00:00Z'; // End: První den měsíce PO END_MONTH var nextMonthDate = new Date(Date.UTC(YEAR, END_MONTH, 1)); var END = nextMonthDate.toISOString().split('.')[0] + 'Z'; // UI Formatting var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; var displayTitle = (START_MONTH === END_MONTH) ? monthNames[START_MONTH - 1] + " " + YEAR : monthNames[START_MONTH - 1] + " – " + monthNames[END_MONTH - 1] + " " + YEAR; function getLocalCUs() { return api.get({ action: 'query', list: 'allusers', augroup: 'checkuser', aulimit: 250 }); } function getGlobalCUs(groupName) { return api.get({ action: 'query', list: 'globalallusers', agugroup: groupName, agulimit: 250 }); } async function countAllUserActions(username) { var count = 0; var continueToken = ''; var hasMore = true; while (hasMore) { var params = { action: 'query', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', culstart: START, culend: END }; if (continueToken) params.culcontinue = continueToken; try { var data = await api.get(params); if (data.query && data.query.checkuserlog && data.query.checkuserlog.entries) { $.each(data.query.checkuserlog.entries, function(i, entry) { // Strict check within the full range if (entry.timestamp >= START && entry.timestamp < END) { count++; } }); } if (data.continue && data.continue.culcontinue) { continueToken = data.continue.culcontinue; } else { hasMore = false; } } catch (e) { console.error("API error for " + username, e); hasMore = false; } } return count; } async function init() { $('.cu-stats-wrapper').remove(); $('#mw-content-text').prepend('<div class="cu-stats-wrapper" style="border: 2px solid #36c; padding: 15px; background: #f8f9fa; margin-bottom: 20px;">' + '<h3 style="margin-top:0">CheckUser Activity: ' + displayTitle + '</h3>' + '<p style="font-size: 0.85em; color: #666;">Range: ' + START + ' to ' + END + '</p>' + '<span id="cu-loader">Analyzing logs for ' + displayTitle + '...</span></div>'); try { var resLocal = await getLocalCUs(); var resStewards = await getGlobalCUs('steward'); var resOmbuds = await getGlobalCUs('ombuds'); var resStaff = await getGlobalCUs('staff'); var userMap = {}; if (resLocal.query.allusers) { $.each(resLocal.query.allusers, function(i, u) { userMap[u.name] = 'Local CU'; }); } function processG(res, label) { if (res.query && res.query.globalallusers) { $.each(res.query.globalallusers, function(i, u) { if (!userMap[u.name]) userMap[u.name] = label; }); } } processG(resStewards, 'Steward'); processG(resOmbuds, 'Ombuds'); processG(resStaff, 'Staff'); var usernames = Object.keys(userMap); var stats = []; var total = 0; for (var name of usernames) { $('#cu-loader').text('Processing user: ' + name + '...'); var count = await countAllUserActions(name); var role = userMap[name]; if (role === 'Local CU' || count > 0) { stats.push({ name: name, count: count, role: role }); } total += count; } stats.sort((a, b) => b.count - a.count || a.name.localeCompare(b.name)); var html = '<p><b>Total actions in this period: ' + total + '</b></p>' + '<table class="wikitable sortable" style="width:100%; margin-top:10px;">' + '<thead><tr><th>Username</th><th>Role</th><th>Total Actions</th></tr></thead><tbody>'; $.each(stats, function(i, s) { html += '<tr><td>' + mw.html.escape(s.name) + '</td><td><small>' + s.role + '</small></td><td><b>' + s.count + '</b></td></tr>'; }); html += '</tbody></table>'; $('#cu-loader').hide(); $('.cu-stats-wrapper').append(html); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); } catch (err) { $('#cu-loader').text('Critical error: ' + err); } } init(); })(); hrgjppblxtlas1rts0ic071co411kmp 735961 735960 2026-04-02T06:03:05Z MrJaroslavik 44012 E 735961 javascript text/javascript /** * SMART CHECKUSER STATISTICS - VERSION 3.5.1 (Range Mode) * Features: Multi-month range, Total count only, Based on stable 3.5 logic. */ (function() { var api = new mw.Api(); // ================= CONFIGURATION ================= var YEAR = 2026; var START_MONTH = 1; // Od kterého měsíce (1=Jan) var END_MONTH = 4; // Do kterého měsíce (včetně, 3=Mar) // ================================================= // --- Automatic Date Logic --- // Start: První den START_MONTH var startPadded = START_MONTH.toString().padStart(2, '0'); var START = YEAR + '-' + startPadded + '-01T00:00:00Z'; // End: První den měsíce PO END_MONTH var nextMonthDate = new Date(Date.UTC(YEAR, END_MONTH, 1)); var END = nextMonthDate.toISOString().split('.')[0] + 'Z'; // UI Formatting var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; var displayTitle = (START_MONTH === END_MONTH) ? monthNames[START_MONTH - 1] + " " + YEAR : monthNames[START_MONTH - 1] + " – " + monthNames[END_MONTH - 1] + " " + YEAR; function getLocalCUs() { return api.get({ action: 'query', list: 'allusers', augroup: 'checkuser', aulimit: 250 }); } function getGlobalCUs(groupName) { return api.get({ action: 'query', list: 'globalallusers', agugroup: groupName, agulimit: 250 }); } async function countAllUserActions(username) { var count = 0; var continueToken = ''; var hasMore = true; while (hasMore) { var params = { action: 'query', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', culstart: START, culend: END }; if (continueToken) params.culcontinue = continueToken; try { var data = await api.get(params); if (data.query && data.query.checkuserlog && data.query.checkuserlog.entries) { $.each(data.query.checkuserlog.entries, function(i, entry) { // Strict check within the full range if (entry.timestamp >= START && entry.timestamp < END) { count++; } }); } if (data.continue && data.continue.culcontinue) { continueToken = data.continue.culcontinue; } else { hasMore = false; } } catch (e) { console.error("API error for " + username, e); hasMore = false; } } return count; } async function init() { $('.cu-stats-wrapper').remove(); $('#mw-content-text').prepend('<div class="cu-stats-wrapper" style="border: 2px solid #36c; padding: 15px; background: #f8f9fa; margin-bottom: 20px;">' + '<h3 style="margin-top:0">CheckUser Activity: ' + displayTitle + '</h3>' + '<p style="font-size: 0.85em; color: #666;">Range: ' + START + ' to ' + END + '</p>' + '<span id="cu-loader">Analyzing logs for ' + displayTitle + '...</span></div>'); try { var resLocal = await getLocalCUs(); var resStewards = await getGlobalCUs('steward'); var resOmbuds = await getGlobalCUs('ombuds'); var resStaff = await getGlobalCUs('staff'); var userMap = {}; if (resLocal.query.allusers) { $.each(resLocal.query.allusers, function(i, u) { userMap[u.name] = 'Local CU'; }); } function processG(res, label) { if (res.query && res.query.globalallusers) { $.each(res.query.globalallusers, function(i, u) { if (!userMap[u.name]) userMap[u.name] = label; }); } } processG(resStewards, 'Steward'); processG(resOmbuds, 'Ombuds'); processG(resStaff, 'Staff'); var usernames = Object.keys(userMap); var stats = []; var total = 0; for (var name of usernames) { $('#cu-loader').text('Processing user: ' + name + '...'); var count = await countAllUserActions(name); var role = userMap[name]; if (role === 'Local CU' || count > 0) { stats.push({ name: name, count: count, role: role }); } total += count; } stats.sort((a, b) => b.count - a.count || a.name.localeCompare(b.name)); var html = '<p><b>Total actions in this period: ' + total + '</b></p>' + '<table class="wikitable sortable" style="width:100%; margin-top:10px;">' + '<thead><tr><th>Username</th><th>Role</th><th>Total Actions</th></tr></thead><tbody>'; $.each(stats, function(i, s) { html += '<tr><td>' + mw.html.escape(s.name) + '</td><td><small>' + s.role + '</small></td><td><b>' + s.count + '</b></td></tr>'; }); html += '</tbody></table>'; $('#cu-loader').hide(); $('.cu-stats-wrapper').append(html); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); } catch (err) { $('#cu-loader').text('Critical error: ' + err); } } init(); })(); bubgd6trwe5pywzio2tqrad2v0gf06z 735962 735961 2026-04-02T06:17:43Z MrJaroslavik 44012 E 735962 javascript text/javascript /** * SMART CHECKUSER STATISTICS - VERSION 3.5.1 (Range Mode) * Features: Multi-month range, Total count only, Based on stable 3.5 logic. */ (function() { var api = new mw.Api(); // ================= CONFIGURATION ================= var YEAR = 2022; var START_MONTH = 10; // Od kterého měsíce (1=Jan) var END_MONTH = 12; // Do kterého měsíce (včetně, 3=Mar) // ================================================= // --- Automatic Date Logic --- // Start: První den START_MONTH var startPadded = START_MONTH.toString().padStart(2, '0'); var START = YEAR + '-' + startPadded + '-01T00:00:00Z'; // End: První den měsíce PO END_MONTH var nextMonthDate = new Date(Date.UTC(YEAR, END_MONTH, 1)); var END = nextMonthDate.toISOString().split('.')[0] + 'Z'; // UI Formatting var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; var displayTitle = (START_MONTH === END_MONTH) ? monthNames[START_MONTH - 1] + " " + YEAR : monthNames[START_MONTH - 1] + " – " + monthNames[END_MONTH - 1] + " " + YEAR; function getLocalCUs() { return api.get({ action: 'query', list: 'allusers', augroup: 'checkuser', aulimit: 250 }); } function getGlobalCUs(groupName) { return api.get({ action: 'query', list: 'globalallusers', agugroup: groupName, agulimit: 250 }); } async function countAllUserActions(username) { var count = 0; var continueToken = ''; var hasMore = true; while (hasMore) { var params = { action: 'query', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', culstart: START, culend: END }; if (continueToken) params.culcontinue = continueToken; try { var data = await api.get(params); if (data.query && data.query.checkuserlog && data.query.checkuserlog.entries) { $.each(data.query.checkuserlog.entries, function(i, entry) { // Strict check within the full range if (entry.timestamp >= START && entry.timestamp < END) { count++; } }); } if (data.continue && data.continue.culcontinue) { continueToken = data.continue.culcontinue; } else { hasMore = false; } } catch (e) { console.error("API error for " + username, e); hasMore = false; } } return count; } async function init() { $('.cu-stats-wrapper').remove(); $('#mw-content-text').prepend('<div class="cu-stats-wrapper" style="border: 2px solid #36c; padding: 15px; background: #f8f9fa; margin-bottom: 20px;">' + '<h3 style="margin-top:0">CheckUser Activity: ' + displayTitle + '</h3>' + '<p style="font-size: 0.85em; color: #666;">Range: ' + START + ' to ' + END + '</p>' + '<span id="cu-loader">Analyzing logs for ' + displayTitle + '...</span></div>'); try { var resLocal = await getLocalCUs(); var resStewards = await getGlobalCUs('steward'); var resOmbuds = await getGlobalCUs('ombuds'); var resStaff = await getGlobalCUs('staff'); var userMap = {}; if (resLocal.query.allusers) { $.each(resLocal.query.allusers, function(i, u) { userMap[u.name] = 'Local CU'; }); } function processG(res, label) { if (res.query && res.query.globalallusers) { $.each(res.query.globalallusers, function(i, u) { if (!userMap[u.name]) userMap[u.name] = label; }); } } processG(resStewards, 'Steward'); processG(resOmbuds, 'Ombuds'); processG(resStaff, 'Staff'); var usernames = Object.keys(userMap); var stats = []; var total = 0; for (var name of usernames) { $('#cu-loader').text('Processing user: ' + name + '...'); var count = await countAllUserActions(name); var role = userMap[name]; if (role === 'Local CU' || count > 0) { stats.push({ name: name, count: count, role: role }); } total += count; } stats.sort((a, b) => b.count - a.count || a.name.localeCompare(b.name)); var html = '<p><b>Total actions in this period: ' + total + '</b></p>' + '<table class="wikitable sortable" style="width:100%; margin-top:10px;">' + '<thead><tr><th>Username</th><th>Role</th><th>Total Actions</th></tr></thead><tbody>'; $.each(stats, function(i, s) { html += '<tr><td>' + mw.html.escape(s.name) + '</td><td><small>' + s.role + '</small></td><td><b>' + s.count + '</b></td></tr>'; }); html += '</tbody></table>'; $('#cu-loader').hide(); $('.cu-stats-wrapper').append(html); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); } catch (err) { $('#cu-loader').text('Critical error: ' + err); } } init(); })(); cmnexdx6yhwjm8s7bsiu97oyxvwqikj 735963 735962 2026-04-02T06:40:07Z MrJaroslavik 44012 E 735963 javascript text/javascript /** * SMART CHECKUSER STATISTICS - VERSION 3.6 (Historical Support) * Features: Multi-month range, Auto-detection of historical/former users from log. * Based on stable 3.5.1 logic. */ (function() { var api = new mw.Api(); // ================= CONFIGURATION ================= var YEAR = 2022; var START_MONTH = 10; // Od (1=Jan) var END_MONTH = 12; // Do (12=Dec) // ================================================= // --- Automatic Date Logic --- var startPadded = START_MONTH.toString().padStart(2, '0'); var START = YEAR + '-' + startPadded + '-01T00:00:00Z'; var nextMonthDate = new Date(Date.UTC(YEAR, END_MONTH, 1)); var END = nextMonthDate.toISOString().split('.')[0] + 'Z'; var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; var displayTitle = (START_MONTH === END_MONTH) ? monthNames[START_MONTH - 1] + " " + YEAR : monthNames[START_MONTH - 1] + " – " + monthNames[END_MONTH - 1] + " " + YEAR; async function countAllUserActions(username) { var count = 0; var continueToken = ''; var hasMore = true; while (hasMore) { var params = { action: 'query', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', culstart: START, culend: END }; if (continueToken) params.culcontinue = continueToken; try { var data = await api.get(params); if (data.query && data.query.checkuserlog && data.query.checkuserlog.entries) { $.each(data.query.checkuserlog.entries, function(i, entry) { if (entry.timestamp >= START && entry.timestamp < END) { count++; } }); } if (data.continue && data.continue.culcontinue) { continueToken = data.continue.culcontinue; } else { hasMore = false; } } catch (e) { hasMore = false; } } return count; } async function init() { $('.cu-stats-wrapper').remove(); $('#mw-content-text').prepend('<div class="cu-stats-wrapper" style="border: 2px solid #36c; padding: 15px; background: #f8f9fa; margin-bottom: 20px; font-family: sans-serif;">' + '<h3 style="margin-top:0">CheckUser Activity: ' + displayTitle + '</h3>' + '<span id="cu-loader">Step 1: Identifying current and former users...</span></div>'); try { var userMap = {}; // 1. Fetch current groups var resLocal = await api.get({ action: 'query', list: 'allusers', augroup: 'checkuser', aulimit: 250 }); if (resLocal.query.allusers) { $.each(resLocal.query.allusers, function(i, u) { userMap[u.name] = 'Local CU'; }); } var groups = ['steward', 'ombuds', 'staff']; for (var g of groups) { var resG = await api.get({ action: 'query', list: 'globalallusers', agugroup: g, agulimit: 250 }); if (resG.query && resG.query.globalallusers) { $.each(resG.query.globalallusers, function(i, u) { if (!userMap[u.name]) userMap[u.name] = g.charAt(0).toUpperCase() + g.slice(1); }); } } // 2. SCAN LOG: Find anyone else who acted in this period but is not in current groups var logScan = await api.get({ action: 'query', list: 'checkuserlog', culstart: START, culend: END, cullimit: 'max' }); if (logScan.query && logScan.query.checkuserlog && logScan.query.checkuserlog.entries) { $.each(logScan.query.checkuserlog.entries, function(i, entry) { if (!userMap[entry.user]) { userMap[entry.user] = 'Global/Former'; } }); } var usernames = Object.keys(userMap); var stats = []; var total = 0; for (var i = 0; i < usernames.length; i++) { var name = usernames[i]; $('#cu-loader').text('Step 2: Processing user [' + (i+1) + '/' + usernames.length + ']: ' + name + '...'); var count = await countAllUserActions(name); var role = userMap[name]; if (role === 'Local CU' || count > 0) { stats.push({ name: name, count: count, role: role }); total += count; } } stats.sort((a, b) => b.count - a.count || a.name.localeCompare(b.name)); var html = '<p><b>Total actions in this period: ' + total + '</b></p>' + '<table class="wikitable sortable" style="width:100%; margin-top:10px; text-align: center;">' + '<thead><tr><th style="text-align: left;">Username</th><th>Role</th><th>Actions</th></tr></thead><tbody>'; $.each(stats, function(i, s) { html += '<tr><td style="text-align: left;">' + mw.html.escape(s.name) + '</td><td><small>' + s.role + '</small></td><td><b>' + s.count + '</b></td></tr>'; }); html += '</tbody></table>'; $('#cu-loader').hide(); $('.cu-stats-wrapper').append(html); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); } catch (err) { $('#cu-loader').text('Critical error: ' + err); } } init(); })(); 5mw1cxoo8sb6t3wwd6mfxrk2en7oy18 735964 735963 2026-04-02T06:52:37Z MrJaroslavik 44012 E 735964 javascript text/javascript /** * SMART CHECKUSER STATISTICS - VERSION 3.7 (Final Edition) * Features: Multi-month range, Auto-detection of historical users, * Page Limitation (runs only on Special:CheckUserLog). */ (function() { // POJISTKA: Skript se spustí pouze na stránce knihy kontrol uživatelů if (mw.config.get('wgCanonicalSpecialPageName') !== 'CheckUserLog') { return; } var api = new mw.Api(); // ================= CONFIGURATION ================= var YEAR = 2022; var START_MONTH = 10; // Od (1=Jan) var END_MONTH = 12; // Do (12=Dec) // ================================================= // --- Automatic Date Logic --- var startPadded = START_MONTH.toString().padStart(2, '0'); var START = YEAR + '-' + startPadded + '-01T00:00:00Z'; var nextMonthDate = new Date(Date.UTC(YEAR, END_MONTH, 1)); var END = nextMonthDate.toISOString().split('.')[0] + 'Z'; var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; var displayTitle = (START_MONTH === END_MONTH) ? monthNames[START_MONTH - 1] + " " + YEAR : monthNames[START_MONTH - 1] + " – " + monthNames[END_MONTH - 1] + " " + YEAR; async function countAllUserActions(username) { var count = 0; var continueToken = ''; var hasMore = true; while (hasMore) { var params = { action: 'query', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', culstart: START, culend: END }; if (continueToken) params.culcontinue = continueToken; try { var data = await api.get(params); if (data.query && data.query.checkuserlog && data.query.checkuserlog.entries) { $.each(data.query.checkuserlog.entries, function(i, entry) { if (entry.timestamp >= START && entry.timestamp < END) { count++; } }); } if (data.continue && data.continue.culcontinue) { continueToken = data.continue.culcontinue; } else { hasMore = false; } } catch (e) { hasMore = false; } } return count; } async function init() { // Odstranění případné staré tabulky a příprava místa $('.cu-stats-wrapper').remove(); $('#mw-content-text').prepend('<div class="cu-stats-wrapper" style="border: 2px solid #36c; padding: 15px; background: #f8f9fa; margin-bottom: 20px; font-family: sans-serif;">' + '<h3 style="margin-top:0">CheckUser Activity: ' + displayTitle + '</h3>' + '<span id="cu-loader">Step 1: Identifying current and former users...</span></div>'); try { var userMap = {}; // 1. Načtení aktuálních skupin var resLocal = await api.get({ action: 'query', list: 'allusers', augroup: 'checkuser', aulimit: 250 }); if (resLocal.query.allusers) { $.each(resLocal.query.allusers, function(i, u) { userMap[u.name] = 'Local CU'; }); } var groups = ['steward', 'ombuds', 'staff']; for (var g of groups) { var resG = await api.get({ action: 'query', list: 'globalallusers', agugroup: g, agulimit: 250 }); if (resG.query && resG.query.globalallusers) { $.each(resG.query.globalallusers, function(i, u) { if (!userMap[u.name]) userMap[u.name] = g.charAt(0).toUpperCase() + g.slice(1); }); } } // 2. SCAN LOG: Najde historické uživatele, kteří v období pracovali, ale už nemají flag var logScan = await api.get({ action: 'query', list: 'checkuserlog', culstart: START, culend: END, cullimit: 'max' }); if (logScan.query && logScan.query.checkuserlog && logScan.query.checkuserlog.entries) { $.each(logScan.query.checkuserlog.entries, function(i, entry) { if (!userMap[entry.user]) { userMap[entry.user] = 'Global/Former'; } }); } var usernames = Object.keys(userMap); var stats = []; var total = 0; // 3. Spočítání akcí pro každého nalezeného uživatele for (var i = 0; i < usernames.length; i++) { var name = usernames[i]; $('#cu-loader').text('Step 2: Processing user [' + (i+1) + '/' + usernames.length + ']: ' + name + '...'); var count = await countAllUserActions(name); var role = userMap[name]; if (role === 'Local CU' || count > 0) { stats.push({ name: name, count: count, role: role }); total += count; } } stats.sort((a, b) => b.count - a.count || a.name.localeCompare(b.name)); // Stavba finální tabulky var html = '<p><b>Total actions in this period: ' + total + '</b></p>' + '<table class="wikitable sortable" style="width:100%; margin-top:10px; text-align: center;">' + '<thead><tr><th style="text-align: left;">Username</th><th>Role</th><th>Actions</th></tr></thead><tbody>'; $.each(stats, function(i, s) { html += '<tr><td style="text-align: left;">' + mw.html.escape(s.name) + '</td><td><small>' + s.role + '</small></td><td><b>' + s.count + '</b></td></tr>'; }); html += '</tbody></table>'; $('#cu-loader').hide(); $('.cu-stats-wrapper').append(html); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); } catch (err) { $('#cu-loader').text('Critical error: ' + err); } } init(); })(); 7nzsjjzls0sy30ulhy4saofwq3gxoix 735971 735964 2026-04-02T08:30:21Z MrJaroslavik 44012 E 735971 javascript text/javascript /** * SMART CHECKUSER STATISTICS - VERSION 3.8 (Full History Edition) * Features: Multi-month range, UNLIMITED historical user detection (Loop-scan), * Page Limitation (Special:CheckUserLog). */ (function() { // POJISTKA: Skript se spustí pouze na Special:CheckUserLog if (mw.config.get('wgCanonicalSpecialPageName') !== 'CheckUserLog') { return; } var api = new mw.Api(); // ================= CONFIGURATION ================= var YEAR = 2022; var START_MONTH = 10; // Od (1=Jan) var END_MONTH = 12; // Do (12=Dec) // ================================================= // --- Automatic Date Logic --- var startPadded = START_MONTH.toString().padStart(2, '0'); var START = YEAR + '-' + startPadded + '-01T00:00:00Z'; var nextMonthDate = new Date(Date.UTC(YEAR, END_MONTH, 1)); var END = nextMonthDate.toISOString().split('.')[0] + 'Z'; var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; var displayTitle = (START_MONTH === END_MONTH) ? monthNames[START_MONTH - 1] + " " + YEAR : monthNames[START_MONTH - 1] + " – " + monthNames[END_MONTH - 1] + " " + YEAR; // Funkce pro spočítání všech akcí konkrétního uživatele async function countAllUserActions(username) { var count = 0; var continueToken = ''; var hasMore = true; while (hasMore) { var params = { action: 'query', list: 'checkuserlog', culuser: username, cullimit: 'max', culdir: 'newer', culstart: START, culend: END }; if (continueToken) params.culcontinue = continueToken; try { var data = await api.get(params); if (data.query && data.query.checkuserlog && data.query.checkuserlog.entries) { $.each(data.query.checkuserlog.entries, function(i, entry) { if (entry.timestamp >= START && entry.timestamp < END) { count++; } }); } if (data.continue && data.continue.culcontinue) { continueToken = data.continue.culcontinue; } else { hasMore = false; } } catch (e) { hasMore = false; } } return count; } async function init() { $('.cu-stats-wrapper').remove(); $('#mw-content-text').prepend('<div class="cu-stats-wrapper" style="border: 2px solid #36c; padding: 15px; background: #f8f9fa; margin-bottom: 20px; font-family: sans-serif;">' + '<h3 style="margin-top:0">CheckUser Activity: ' + displayTitle + '</h3>' + '<span id="cu-loader">Step 1: Identifying current and former users...</span></div>'); try { var userMap = {}; // 1. NAČTENÍ AKTUÁLNÍCH SKUPIN var resLocal = await api.get({ action: 'query', list: 'allusers', augroup: 'checkuser', aulimit: 250 }); if (resLocal.query.allusers) { $.each(resLocal.query.allusers, function(i, u) { userMap[u.name] = 'Local CU'; }); } var groups = ['steward', 'ombuds', 'staff']; for (var g of groups) { var resG = await api.get({ action: 'query', list: 'globalallusers', agugroup: g, agulimit: 250 }); if (resG.query && resG.query.globalallusers) { $.each(resG.query.globalallusers, function(i, u) { if (!userMap[u.name]) userMap[u.name] = g.charAt(0).toUpperCase() + g.slice(1); }); } } // 2. HLOUBKOVÝ SCAN LOGU: Najde VŠECHNA jména v logu (prochází celý log bez limitu 500) var hasMoreLog = true; var logContinue = ''; while (hasMoreLog) { var logParams = { action: 'query', list: 'checkuserlog', culstart: START, culend: END, cullimit: 'max' }; if (logContinue) logParams.culcontinue = logContinue; var logScan = await api.get(logParams); if (logScan.query && logScan.query.checkuserlog && logScan.query.checkuserlog.entries) { $.each(logScan.query.checkuserlog.entries, function(i, entry) { if (!userMap[entry.user]) { userMap[entry.user] = 'Global/Former'; } }); } if (logScan.continue && logScan.continue.culcontinue) { logContinue = logScan.continue.culcontinue; } else { hasMoreLog = false; } } var usernames = Object.keys(userMap); var stats = []; var total = 0; // 3. VÝPOČET AKCÍ for (var i = 0; i < usernames.length; i++) { var name = usernames[i]; $('#cu-loader').text('Step 2: Processing user [' + (i+1) + '/' + usernames.length + ']: ' + name + '...'); var count = await countAllUserActions(name); var role = userMap[name]; if (role === 'Local CU' || count > 0) { stats.push({ name: name, count: count, role: role }); total += count; } } stats.sort((a, b) => b.count - a.count || a.name.localeCompare(b.name)); // STAVBA TABULKY var html = '<p><b>Total actions in this period: ' + total + '</b></p>' + '<table class="wikitable sortable" style="width:100%; margin-top:10px; text-align: center;">' + '<thead><tr><th style="text-align: left;">Username</th><th>Role</th><th>Actions</th></tr></thead><tbody>'; $.each(stats, function(i, s) { html += '<tr><td style="text-align: left;">' + mw.html.escape(s.name) + '</td><td><small>' + s.role + '</small></td><td><b>' + s.count + '</b></td></tr>'; }); html += '</tbody></table>'; $('#cu-loader').hide(); $('.cu-stats-wrapper').append(html); mw.loader.using('jquery.tablesorter', function() { $('table.sortable').tablesorter(); }); } catch (err) { $('#cu-loader').text('Critical error: ' + err); } } init(); })(); 707h7lqygf09dcqmxxzutql4j3mpzr2 Einsteinium 0 119490 735980 704061 2026-04-02T09:30:16Z ~2026-20342-53 73381 735980 wikitext text/x-wiki ''Einsteinium'' is a [[chemical element]] with symbol Es and atomic number Es in period 7. It is silver-colored. It is a Solid. Test. test! ==Chemical properties== Einsteinium has an atomic mass of 252, a boiling point of 1269, a density of 8.84, a melting point of 1133, a molar heat of None, an electron configuration of 1s2 2s2 2p6 3s2 3p6 3d10 4s2 4p6 4d10 4f14 5s2 5p6 5d10 5f11 6s2 6p6 7s2, and an electron affinity of -28.6. [[Category:Chemical elements]] ma6ibzyal40nrps8xo3krkxzmecc4rw User:SongVĩ.Bot II 2 124239 735857 735802 2026-04-01T17:00:16Z SongVĩ.Bot II 52414 [[User:SongVĩ.Bot II|Task 0]]: Đã 1556 ngày... 735857 wikitext text/x-wiki Cập nhật lần cuối: 02-04-2026 Đã 1556 ngày... t2qauy7fsf7k6va01cmhv8t7nyx3eld Wikipedia:Village pump/topic list 4 146208 735983 735745 2026-04-02T09:50:29Z Cewbot 33876 [[User:Cewbot/log/20170915/configuration|Generate topic list: 5 topics]] 735983 wikitext text/x-wiki <!-- This page is auto-generated by bot. Please contact the bot operator to improve the tool. --> {| class="wikitable sortable mw-collapsible" style="float:left;" |- ! data-sort-type="number" style="font-weight: normal;" | <small>#</small> !! 💭 Title !! <span title="Count of comments">💬</span> !! <span title="Count of peoples in discussion">👥</span> !! 🙋 Last editor !! data-sort-type="isoDate" | <span title="Date/Time">🕒 <small>(UTC)</small></span> |- | style="text-align: right;" | 1 | [[Wikipedia:Village pump#Script|Script]] | style="text-align: right;" | 8 | style="text-align: right;" | 5 | style="background-color: #bbb;" | [[User:LuniZunie|LuniZunie]] | style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2025-11-09T16:47:00.000Z" | 2025-11-09 <span style="color: blue;">16:47</span> |- | style="text-align: right;" | 2 | [[Wikipedia:Village pump#Report_concerning_Tanbiruzzammn|Report concerning Tanbiruzzammn]] | style="text-align: right;" | 2 | style="text-align: right;" | 2 | style="background-color: #bbb;" | [[User:Barras|Barras]] | style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2025-12-09T21:45:00.000Z" | 2025-12-09 <span style="color: blue;">21:45</span> |- | style="text-align: right;" | 3 | [[Wikipedia:Village pump#Report_concerning_Bucheon|Report concerning Bucheon]] | style="text-align: right;background-color: #fcc;" | 1 | style="text-align: right;background-color: #fcc;" | 1 | style="background-color: #bbb;" | [[User:PieWriter|PieWriter]] | style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-02-19T10:25:00.000Z" | 2026-02-19 <span style="color: blue;">10:25</span> |- | style="text-align: right;" | 4 | [[Wikipedia:Village pump#Versions_and_dates|Versions and dates]] | style="text-align: right;" | 2 | style="text-align: right;background-color: #fcc;" | 1 | style="background-color: #bbb;" | [[Special:Contributions/~2026-13668-13|<span style="color: #c20;">~2026-13668-13</span>]] | style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-03-03T06:17:00.000Z" | 2026-03-03 <span style="color: blue;">06:17</span> |- | style="text-align: right;" | 5 | style="max-width: 24em" | <small>[[Wikipedia:Village pump#Upcoming_Wikimedia_Café_meetup_regarding_the_the_2026-2027_Wikimedia_Foundation_Annual_Plan|Upcoming Wikimedia Café meetup regarding the the 2026-2027 Wikimedia Foundation Annual Plan]]</small> | style="text-align: right;background-color: #fcc;" | 1 | style="text-align: right;background-color: #fcc;" | 1 | [[User:Pine|Pine]] | data-sort-type="isoDate" data-sort-value="2026-03-30T03:46:00.000Z" | 2026-03-30 <span style="color: blue;">03:46</span> |} {| class="wikitable mw-collapsible mw-collapsed" style="float: left; margin-left: .5em;;{{#if:{{{no_time_legend|}}}|display:none;|}}" ! title="From the latest bot edit" | Legend |- | style="background-color: #efe;" | * In the last hour |- | style="background-color: #eef;" | * In the last day |- | | * In the last week |- | style="background-color: #ddd;" | * In the last month |- | style="background-color: #bbb;" | * More than one month |- ! Manual settings |- | style="max-width: 12em;" | <small>When exceptions occur,<br />please check [[User:Cewbot/log/20170915/configuration|the setting]] first.</small> |- |} {{Clear}} ididy832y1q5url1zh7bqwtcm8wkefe User:DVRTed/common.js 2 147626 735858 735795 2026-04-01T17:06:43Z DVRTed 55993 735858 javascript text/javascript mw.loader.load(`http://localhost:1212/anyScript.js?t=${Date.now()}`); mw.loader.load(`http://localhost:1212/script-ctl.js?t=${Date.now()}`); mw.loader.load('https://commons.wikimedia.org/w/index.php?title=User:DVRTed/workshop.js&action=raw&ctype=text/javascript&maxage=86400'); /* scriptmanager:begin !DO NOT EDIT THIS LINE MANUALLY!*/ /* scriptmanager:end !DO NOT EDIT THIS LINE MANUALLY!*/ g9cdzg7z4rmw9lb555ltzgmfkfe81mj 735859 735858 2026-04-01T17:06:58Z DVRTed 55993 735859 javascript text/javascript mw.loader.load(`http://localhost:1212/anyScript.js?t=${Date.now()}`); mw.loader.load(`http://localhost:1212/script-ctl.js?t=${Date.now()}`); mw.loader.load('https://test.wikimedia.org/w/index.php?title=User:DVRTed/workshop.js&action=raw&ctype=text/javascript&maxage=86400'); /* scriptmanager:begin !DO NOT EDIT THIS LINE MANUALLY!*/ /* scriptmanager:end !DO NOT EDIT THIS LINE MANUALLY!*/ pe8p9jyl2sn7sy0rttyjgsn6h52v3zw 735860 735859 2026-04-01T17:07:53Z DVRTed 55993 735860 javascript text/javascript mw.loader.load(`http://localhost:1212/anyScript.js?t=${Date.now()}`); mw.loader.load(`http://localhost:1212/script-ctl.js?t=${Date.now()}`); mw.loader.load('https://test.wikipedia.org/w/index.php?title=User:DVRTed/workshop.js&action=raw&ctype=text/javascript&maxage=86400'); /* scriptmanager:begin !DO NOT EDIT THIS LINE MANUALLY!*/ /* scriptmanager:end !DO NOT EDIT THIS LINE MANUALLY!*/ s9d535ml32cfv9n1idkesiwjhv48v23 735861 735860 2026-04-01T17:09:27Z DVRTed 55993 735861 javascript text/javascript mw.loader.load(`http://localhost:1212/anyScript.js?t=${Date.now()}`); mw.loader.load(`http://localhost:1212/script-ctl.js?t=${Date.now()}`); mw.loader.load('https://test.wikipedia.org/w/index.php?title=User:DVRTed/workshop.js&action=raw&ctype=text/javascript&maxage=86400&oldid=734468'); /* scriptmanager:begin !DO NOT EDIT THIS LINE MANUALLY!*/ /* scriptmanager:end !DO NOT EDIT THIS LINE MANUALLY!*/ lpz9gxoipdd08qv7yg4mbn34kuubfwh 735862 735861 2026-04-01T17:12:19Z DVRTed 55993 735862 javascript text/javascript mw.loader.load(`http://localhost:1212/anyScript.js?t=${Date.now()}`); mw.loader.load(`http://localhost:1212/script-ctl.js?t=${Date.now()}`); mw.loader.load('https://test.wikipedia.org/w/index.php?title=User:DVRTed/workshop.js&action=raw&ctype=text/javascript&oldid=734468'); /* scriptmanager:begin !DO NOT EDIT THIS LINE MANUALLY!*/ /* scriptmanager:end !DO NOT EDIT THIS LINE MANUALLY!*/ d95s0e257hpmajq3tishp1ylaplvlhd User talk:JWBTH/CD test page 3 154341 735822 735811 2026-04-01T12:05:35Z JWBTH 52211 /* test3 */ 735822 wikitext text/x-wiki == Section 1 == first section comment [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:37, 20 November 2024 (UTC) unsigned comment end {{unsigned|user}} : comment to be edited [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:38, 20 November 2024 (UTC) :: comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 02:41, 20 November 2024 (UTC) ::: child comment of comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 06:09, 27 August 2025 (UTC) ::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) :::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) : [[#c-Test_account_8-20241120023700-Section_1|Test account 8 @ 02:37, 20 November 2024 (UTC)]] [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 06:43, 28 March 2026 (UTC) === test2 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:55, 14 September 2025 (UTC) : [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 20:13, 26 March 2026 (UTC) === test3 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:56, 14 September 2025 (UTC) : {{pb}}{{pb}}{{pb}} [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 20:17, 30 March 2026 (UTC) : Begin {{pb}}{{pb}}{{pb}} End [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 20:42, 30 March 2026 (UTC) : Begin<br>End [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 02:30, 31 March 2026 (UTC) : Begin{{pb}}End. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 02:31, 31 March 2026 (UTC) : <nowiki>__NOGALLERY__</nowiki> [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 09:24, 31 March 2026 (UTC) ::::::::::::::: <nowiki>__NOGALLERY__</nowiki> [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 09:24, 31 March 2026 (UTC) == Section to add test comments == section [[User:Example|Example]] ([[User talk:Example|talk]]) 02:37, 1 March 2026 (UTC) : Test comment with random number 0.08406505844874512 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 16:32, 16 March 2026 (UTC) : Test. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:16, 16 March 2026 (UTC) : Test. test3 [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:17, 16 March 2026 (UTC) : Test comment with random number 0.8357927622675184 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.47460188540542925 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.687062002939545 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:03, 23 March 2026 (UTC) : Test comment with random number 0.21500952410025898 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:22, 23 March 2026 (UTC) : Test comment with random number 0.6571328205265842 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 17:21, 23 March 2026 (UTC) : Test comment with random number 0.8725721668943434 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:21, 24 March 2026 (UTC) : Test comment with random number 0.9535110784110594 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:22, 24 March 2026 (UTC) : Test comment with random number 0.4330065153484025 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 03:55, 27 March 2026 (UTC) : Test comment with random number 0.7353033907097808 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.44304195516553146 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.02243804450899023 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.520846091950367 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.9946058761624214 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:25, 27 March 2026 (UTC) : Test comment with random number 0.1691580237328757 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:28, 27 March 2026 (UTC) : Test comment with random number 0.06490355868980668 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:30, 27 March 2026 (UTC) : Test comment with random number 0.9392023221346153 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:32, 27 March 2026 (UTC) == Section for moving == test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:52, 15 March 2026 (UTC) o65774ljvzy0e6mcp3iiap4k8klz4i7 735823 735822 2026-04-01T12:40:45Z JWBTH 52211 /* test3 */ 735823 wikitext text/x-wiki == Section 1 == first section comment [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:37, 20 November 2024 (UTC) unsigned comment end {{unsigned|user}} : comment to be edited [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:38, 20 November 2024 (UTC) :: comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 02:41, 20 November 2024 (UTC) ::: child comment of comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 06:09, 27 August 2025 (UTC) ::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) :::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) : [[#c-Test_account_8-20241120023700-Section_1|Test account 8 @ 02:37, 20 November 2024 (UTC)]] [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 06:43, 28 March 2026 (UTC) === test2 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:55, 14 September 2025 (UTC) : [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 20:13, 26 March 2026 (UTC) === test3 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:56, 14 September 2025 (UTC) ::::::::::::::: <nowiki>__NOGALLERY__</nowiki> [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 09:24, 31 March 2026 (UTC) == Section to add test comments == section [[User:Example|Example]] ([[User talk:Example|talk]]) 02:37, 1 March 2026 (UTC) : Test comment with random number 0.08406505844874512 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 16:32, 16 March 2026 (UTC) : Test. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:16, 16 March 2026 (UTC) : Test. test3 [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:17, 16 March 2026 (UTC) : Test comment with random number 0.8357927622675184 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.47460188540542925 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.687062002939545 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:03, 23 March 2026 (UTC) : Test comment with random number 0.21500952410025898 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:22, 23 March 2026 (UTC) : Test comment with random number 0.6571328205265842 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 17:21, 23 March 2026 (UTC) : Test comment with random number 0.8725721668943434 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:21, 24 March 2026 (UTC) : Test comment with random number 0.9535110784110594 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:22, 24 March 2026 (UTC) : Test comment with random number 0.4330065153484025 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 03:55, 27 March 2026 (UTC) : Test comment with random number 0.7353033907097808 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.44304195516553146 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.02243804450899023 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.520846091950367 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.9946058761624214 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:25, 27 March 2026 (UTC) : Test comment with random number 0.1691580237328757 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:28, 27 March 2026 (UTC) : Test comment with random number 0.06490355868980668 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:30, 27 March 2026 (UTC) : Test comment with random number 0.9392023221346153 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:32, 27 March 2026 (UTC) == Section for moving == test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:52, 15 March 2026 (UTC) 5t69d5sgcltk47y6v1xcnkkxkowstw3 735826 735823 2026-04-01T13:13:15Z JWBTH 52211 /* Section for moving */ 735826 wikitext text/x-wiki == Section 1 == first section comment [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:37, 20 November 2024 (UTC) unsigned comment end {{unsigned|user}} : comment to be edited [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:38, 20 November 2024 (UTC) :: comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 02:41, 20 November 2024 (UTC) ::: child comment of comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 06:09, 27 August 2025 (UTC) ::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) :::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) : [[#c-Test_account_8-20241120023700-Section_1|Test account 8 @ 02:37, 20 November 2024 (UTC)]] [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 06:43, 28 March 2026 (UTC) === test2 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:55, 14 September 2025 (UTC) : [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 20:13, 26 March 2026 (UTC) === test3 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:56, 14 September 2025 (UTC) ::::::::::::::: <nowiki>__NOGALLERY__</nowiki> [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 09:24, 31 March 2026 (UTC) == Section to add test comments == section [[User:Example|Example]] ([[User talk:Example|talk]]) 02:37, 1 March 2026 (UTC) : Test comment with random number 0.08406505844874512 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 16:32, 16 March 2026 (UTC) : Test. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:16, 16 March 2026 (UTC) : Test. test3 [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:17, 16 March 2026 (UTC) : Test comment with random number 0.8357927622675184 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.47460188540542925 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.687062002939545 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:03, 23 March 2026 (UTC) : Test comment with random number 0.21500952410025898 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:22, 23 March 2026 (UTC) : Test comment with random number 0.6571328205265842 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 17:21, 23 March 2026 (UTC) : Test comment with random number 0.8725721668943434 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:21, 24 March 2026 (UTC) : Test comment with random number 0.9535110784110594 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:22, 24 March 2026 (UTC) : Test comment with random number 0.4330065153484025 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 03:55, 27 March 2026 (UTC) : Test comment with random number 0.7353033907097808 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.44304195516553146 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.02243804450899023 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.520846091950367 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.9946058761624214 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:25, 27 March 2026 (UTC) : Test comment with random number 0.1691580237328757 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:28, 27 March 2026 (UTC) : Test comment with random number 0.06490355868980668 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:30, 27 March 2026 (UTC) : Test comment with random number 0.9392023221346153 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:32, 27 March 2026 (UTC) == Section with equals sign (=) for moving == test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:50, 15 March 2026 (UTC) == Section for moving == test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:52, 15 March 2026 (UTC) 8ivla35f8pt2r5kv3q00to7lwga29b8 735828 735826 2026-04-01T13:13:31Z JWBTH 52211 /* Section with equals sign (=) for moving */ move to [[User talk:JWBTH/CD test page 2#Section with equals sign (=) for moving]] ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]]) 735828 wikitext text/x-wiki == Section 1 == first section comment [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:37, 20 November 2024 (UTC) unsigned comment end {{unsigned|user}} : comment to be edited [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:38, 20 November 2024 (UTC) :: comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 02:41, 20 November 2024 (UTC) ::: child comment of comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 06:09, 27 August 2025 (UTC) ::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) :::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) : [[#c-Test_account_8-20241120023700-Section_1|Test account 8 @ 02:37, 20 November 2024 (UTC)]] [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 06:43, 28 March 2026 (UTC) === test2 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:55, 14 September 2025 (UTC) : [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 20:13, 26 March 2026 (UTC) === test3 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:56, 14 September 2025 (UTC) ::::::::::::::: <nowiki>__NOGALLERY__</nowiki> [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 09:24, 31 March 2026 (UTC) == Section to add test comments == section [[User:Example|Example]] ([[User talk:Example|talk]]) 02:37, 1 March 2026 (UTC) : Test comment with random number 0.08406505844874512 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 16:32, 16 March 2026 (UTC) : Test. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:16, 16 March 2026 (UTC) : Test. test3 [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:17, 16 March 2026 (UTC) : Test comment with random number 0.8357927622675184 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.47460188540542925 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.687062002939545 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:03, 23 March 2026 (UTC) : Test comment with random number 0.21500952410025898 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:22, 23 March 2026 (UTC) : Test comment with random number 0.6571328205265842 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 17:21, 23 March 2026 (UTC) : Test comment with random number 0.8725721668943434 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:21, 24 March 2026 (UTC) : Test comment with random number 0.9535110784110594 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:22, 24 March 2026 (UTC) : Test comment with random number 0.4330065153484025 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 03:55, 27 March 2026 (UTC) : Test comment with random number 0.7353033907097808 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.44304195516553146 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.02243804450899023 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.520846091950367 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.9946058761624214 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:25, 27 March 2026 (UTC) : Test comment with random number 0.1691580237328757 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:28, 27 March 2026 (UTC) : Test comment with random number 0.06490355868980668 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:30, 27 March 2026 (UTC) : Test comment with random number 0.9392023221346153 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:32, 27 March 2026 (UTC) == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved to [[User talk:JWBTH/CD test page 2#Section with equals sign (=) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:13, 1 April 2026 (UTC)''</div> == Section for moving == test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:52, 15 March 2026 (UTC) e9hkf9myvq6ue0x8n6nks5x49ugi553 735830 735828 2026-04-01T13:16:37Z JWBTH 52211 /* Section with equals sign (=) for moving */ move to [[User talk:JWBTH/CD test page 2#Section with equals sign ({{=}}) for moving]] ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]]) 735830 wikitext text/x-wiki == Section 1 == first section comment [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:37, 20 November 2024 (UTC) unsigned comment end {{unsigned|user}} : comment to be edited [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:38, 20 November 2024 (UTC) :: comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 02:41, 20 November 2024 (UTC) ::: child comment of comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 06:09, 27 August 2025 (UTC) ::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) :::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) : [[#c-Test_account_8-20241120023700-Section_1|Test account 8 @ 02:37, 20 November 2024 (UTC)]] [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 06:43, 28 March 2026 (UTC) === test2 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:55, 14 September 2025 (UTC) : [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 20:13, 26 March 2026 (UTC) === test3 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:56, 14 September 2025 (UTC) ::::::::::::::: <nowiki>__NOGALLERY__</nowiki> [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 09:24, 31 March 2026 (UTC) == Section to add test comments == section [[User:Example|Example]] ([[User talk:Example|talk]]) 02:37, 1 March 2026 (UTC) : Test comment with random number 0.08406505844874512 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 16:32, 16 March 2026 (UTC) : Test. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:16, 16 March 2026 (UTC) : Test. test3 [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:17, 16 March 2026 (UTC) : Test comment with random number 0.8357927622675184 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.47460188540542925 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.687062002939545 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:03, 23 March 2026 (UTC) : Test comment with random number 0.21500952410025898 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:22, 23 March 2026 (UTC) : Test comment with random number 0.6571328205265842 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 17:21, 23 March 2026 (UTC) : Test comment with random number 0.8725721668943434 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:21, 24 March 2026 (UTC) : Test comment with random number 0.9535110784110594 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:22, 24 March 2026 (UTC) : Test comment with random number 0.4330065153484025 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 03:55, 27 March 2026 (UTC) : Test comment with random number 0.7353033907097808 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.44304195516553146 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.02243804450899023 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.520846091950367 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.9946058761624214 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:25, 27 March 2026 (UTC) : Test comment with random number 0.1691580237328757 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:28, 27 March 2026 (UTC) : Test comment with random number 0.06490355868980668 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:30, 27 March 2026 (UTC) : Test comment with random number 0.9392023221346153 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:32, 27 March 2026 (UTC) == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved to [[User talk:JWBTH/CD test page 2#Section with equals sign ({{{{=}}}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:16, 1 April 2026 (UTC)''</div> == Section for moving == test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:52, 15 March 2026 (UTC) jli40u5y6lusul7r7llo5igcxb0p0bu 735831 735830 2026-04-01T13:18:43Z JWBTH 52211 735831 wikitext text/x-wiki == Section 1 == first section comment [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:37, 20 November 2024 (UTC) unsigned comment end {{unsigned|user}} : comment to be edited [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:38, 20 November 2024 (UTC) :: comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 02:41, 20 November 2024 (UTC) ::: child comment of comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 06:09, 27 August 2025 (UTC) ::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) :::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) : [[#c-Test_account_8-20241120023700-Section_1|Test account 8 @ 02:37, 20 November 2024 (UTC)]] [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 06:43, 28 March 2026 (UTC) === test2 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:55, 14 September 2025 (UTC) : [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 20:13, 26 March 2026 (UTC) === test3 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:56, 14 September 2025 (UTC) ::::::::::::::: <nowiki>__NOGALLERY__</nowiki> [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 09:24, 31 March 2026 (UTC) == Section to add test comments == section [[User:Example|Example]] ([[User talk:Example|talk]]) 02:37, 1 March 2026 (UTC) : Test comment with random number 0.08406505844874512 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 16:32, 16 March 2026 (UTC) : Test. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:16, 16 March 2026 (UTC) : Test. test3 [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:17, 16 March 2026 (UTC) : Test comment with random number 0.8357927622675184 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.47460188540542925 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.687062002939545 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:03, 23 March 2026 (UTC) : Test comment with random number 0.21500952410025898 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:22, 23 March 2026 (UTC) : Test comment with random number 0.6571328205265842 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 17:21, 23 March 2026 (UTC) : Test comment with random number 0.8725721668943434 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:21, 24 March 2026 (UTC) : Test comment with random number 0.9535110784110594 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:22, 24 March 2026 (UTC) : Test comment with random number 0.4330065153484025 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 03:55, 27 March 2026 (UTC) : Test comment with random number 0.7353033907097808 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.44304195516553146 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.02243804450899023 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.520846091950367 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.9946058761624214 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:25, 27 March 2026 (UTC) : Test comment with random number 0.1691580237328757 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:28, 27 March 2026 (UTC) : Test comment with random number 0.06490355868980668 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:30, 27 March 2026 (UTC) : Test comment with random number 0.9392023221346153 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:32, 27 March 2026 (UTC) == Section with equals sign (=) for moving == test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:50, 15 March 2026 (UTC) == Section for moving == test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:52, 15 March 2026 (UTC) 8ivla35f8pt2r5kv3q00to7lwga29b8 735835 735831 2026-04-01T13:40:33Z JWBTH 52211 /* Section with equals sign (=) for moving */ move to [[User talk:JWBTH/CD test page 2#Section with equals sign (=) for moving]] ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]]) 735835 wikitext text/x-wiki == Section 1 == first section comment [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:37, 20 November 2024 (UTC) unsigned comment end {{unsigned|user}} : comment to be edited [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:38, 20 November 2024 (UTC) :: comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 02:41, 20 November 2024 (UTC) ::: child comment of comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 06:09, 27 August 2025 (UTC) ::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) :::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) : [[#c-Test_account_8-20241120023700-Section_1|Test account 8 @ 02:37, 20 November 2024 (UTC)]] [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 06:43, 28 March 2026 (UTC) === test2 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:55, 14 September 2025 (UTC) : [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 20:13, 26 March 2026 (UTC) === test3 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:56, 14 September 2025 (UTC) ::::::::::::::: <nowiki>__NOGALLERY__</nowiki> [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 09:24, 31 March 2026 (UTC) == Section to add test comments == section [[User:Example|Example]] ([[User talk:Example|talk]]) 02:37, 1 March 2026 (UTC) : Test comment with random number 0.08406505844874512 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 16:32, 16 March 2026 (UTC) : Test. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:16, 16 March 2026 (UTC) : Test. test3 [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:17, 16 March 2026 (UTC) : Test comment with random number 0.8357927622675184 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.47460188540542925 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.687062002939545 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:03, 23 March 2026 (UTC) : Test comment with random number 0.21500952410025898 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:22, 23 March 2026 (UTC) : Test comment with random number 0.6571328205265842 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 17:21, 23 March 2026 (UTC) : Test comment with random number 0.8725721668943434 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:21, 24 March 2026 (UTC) : Test comment with random number 0.9535110784110594 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:22, 24 March 2026 (UTC) : Test comment with random number 0.4330065153484025 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 03:55, 27 March 2026 (UTC) : Test comment with random number 0.7353033907097808 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.44304195516553146 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.02243804450899023 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.520846091950367 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.9946058761624214 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:25, 27 March 2026 (UTC) : Test comment with random number 0.1691580237328757 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:28, 27 March 2026 (UTC) : Test comment with random number 0.06490355868980668 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:30, 27 March 2026 (UTC) : Test comment with random number 0.9392023221346153 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:32, 27 March 2026 (UTC) == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved to [[User talk:JWBTH/CD test page 2#Section with equals sign ({{=}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:40, 1 April 2026 (UTC)''</div> == Section for moving == test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:52, 15 March 2026 (UTC) 3fu99a6jvja78rkwczfypkshu96401e 735852 735835 2026-04-01T16:36:05Z Test account 8 71122 /* Section for moving */ move to [[User talk:JWBTH/CD test page 2#Section for moving]] ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]]) 735852 wikitext text/x-wiki == Section 1 == first section comment [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:37, 20 November 2024 (UTC) unsigned comment end {{unsigned|user}} : comment to be edited [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:38, 20 November 2024 (UTC) :: comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 02:41, 20 November 2024 (UTC) ::: child comment of comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 06:09, 27 August 2025 (UTC) ::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) :::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) : [[#c-Test_account_8-20241120023700-Section_1|Test account 8 @ 02:37, 20 November 2024 (UTC)]] [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 06:43, 28 March 2026 (UTC) === test2 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:55, 14 September 2025 (UTC) : [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 20:13, 26 March 2026 (UTC) === test3 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:56, 14 September 2025 (UTC) ::::::::::::::: <nowiki>__NOGALLERY__</nowiki> [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 09:24, 31 March 2026 (UTC) == Section to add test comments == section [[User:Example|Example]] ([[User talk:Example|talk]]) 02:37, 1 March 2026 (UTC) : Test comment with random number 0.08406505844874512 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 16:32, 16 March 2026 (UTC) : Test. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:16, 16 March 2026 (UTC) : Test. test3 [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:17, 16 March 2026 (UTC) : Test comment with random number 0.8357927622675184 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.47460188540542925 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.687062002939545 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:03, 23 March 2026 (UTC) : Test comment with random number 0.21500952410025898 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:22, 23 March 2026 (UTC) : Test comment with random number 0.6571328205265842 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 17:21, 23 March 2026 (UTC) : Test comment with random number 0.8725721668943434 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:21, 24 March 2026 (UTC) : Test comment with random number 0.9535110784110594 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:22, 24 March 2026 (UTC) : Test comment with random number 0.4330065153484025 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 03:55, 27 March 2026 (UTC) : Test comment with random number 0.7353033907097808 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.44304195516553146 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.02243804450899023 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.520846091950367 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.9946058761624214 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:25, 27 March 2026 (UTC) : Test comment with random number 0.1691580237328757 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:28, 27 March 2026 (UTC) : Test comment with random number 0.06490355868980668 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:30, 27 March 2026 (UTC) : Test comment with random number 0.9392023221346153 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:32, 27 March 2026 (UTC) == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved to [[User talk:JWBTH/CD test page 2#Section with equals sign ({{=}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:40, 1 April 2026 (UTC)''</div> lu9jq3g2hn4ura7p92alqw5m81ptv09 735853 735852 2026-04-01T16:36:14Z Test account 8 71122 /* Section for moving */ move from [[User talk:JWBTH/CD test page 2]] ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]]) 735853 wikitext text/x-wiki == Section 1 == first section comment [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:37, 20 November 2024 (UTC) unsigned comment end {{unsigned|user}} : comment to be edited [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:38, 20 November 2024 (UTC) :: comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 02:41, 20 November 2024 (UTC) ::: child comment of comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 06:09, 27 August 2025 (UTC) ::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) :::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) : [[#c-Test_account_8-20241120023700-Section_1|Test account 8 @ 02:37, 20 November 2024 (UTC)]] [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 06:43, 28 March 2026 (UTC) === test2 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:55, 14 September 2025 (UTC) : [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 20:13, 26 March 2026 (UTC) === test3 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:56, 14 September 2025 (UTC) ::::::::::::::: <nowiki>__NOGALLERY__</nowiki> [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 09:24, 31 March 2026 (UTC) == Section to add test comments == section [[User:Example|Example]] ([[User talk:Example|talk]]) 02:37, 1 March 2026 (UTC) : Test comment with random number 0.08406505844874512 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 16:32, 16 March 2026 (UTC) : Test. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:16, 16 March 2026 (UTC) : Test. test3 [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:17, 16 March 2026 (UTC) : Test comment with random number 0.8357927622675184 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.47460188540542925 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.687062002939545 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:03, 23 March 2026 (UTC) : Test comment with random number 0.21500952410025898 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:22, 23 March 2026 (UTC) : Test comment with random number 0.6571328205265842 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 17:21, 23 March 2026 (UTC) : Test comment with random number 0.8725721668943434 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:21, 24 March 2026 (UTC) : Test comment with random number 0.9535110784110594 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:22, 24 March 2026 (UTC) : Test comment with random number 0.4330065153484025 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 03:55, 27 March 2026 (UTC) : Test comment with random number 0.7353033907097808 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.44304195516553146 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.02243804450899023 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.520846091950367 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.9946058761624214 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:25, 27 March 2026 (UTC) : Test comment with random number 0.1691580237328757 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:28, 27 March 2026 (UTC) : Test comment with random number 0.06490355868980668 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:30, 27 March 2026 (UTC) : Test comment with random number 0.9392023221346153 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:32, 27 March 2026 (UTC) == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved to [[User talk:JWBTH/CD test page 2#Section with equals sign ({{=}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:40, 1 April 2026 (UTC)''</div> == Section for moving == test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:52, 15 March 2026 (UTC) 3fu99a6jvja78rkwczfypkshu96401e 735855 735853 2026-04-01T16:38:24Z Test account 8 71122 /* Section to add test comments */ reply ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]]) 735855 wikitext text/x-wiki == Section 1 == first section comment [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:37, 20 November 2024 (UTC) unsigned comment end {{unsigned|user}} : comment to be edited [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:38, 20 November 2024 (UTC) :: comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 02:41, 20 November 2024 (UTC) ::: child comment of comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 06:09, 27 August 2025 (UTC) ::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) :::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) : [[#c-Test_account_8-20241120023700-Section_1|Test account 8 @ 02:37, 20 November 2024 (UTC)]] [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 06:43, 28 March 2026 (UTC) === test2 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:55, 14 September 2025 (UTC) : [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 20:13, 26 March 2026 (UTC) === test3 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:56, 14 September 2025 (UTC) ::::::::::::::: <nowiki>__NOGALLERY__</nowiki> [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 09:24, 31 March 2026 (UTC) == Section to add test comments == section [[User:Example|Example]] ([[User talk:Example|talk]]) 02:37, 1 March 2026 (UTC) : Test comment with random number 0.08406505844874512 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 16:32, 16 March 2026 (UTC) : Test. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:16, 16 March 2026 (UTC) : Test. test3 [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:17, 16 March 2026 (UTC) : Test comment with random number 0.8357927622675184 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.47460188540542925 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.687062002939545 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:03, 23 March 2026 (UTC) : Test comment with random number 0.21500952410025898 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:22, 23 March 2026 (UTC) : Test comment with random number 0.6571328205265842 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 17:21, 23 March 2026 (UTC) : Test comment with random number 0.8725721668943434 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:21, 24 March 2026 (UTC) : Test comment with random number 0.9535110784110594 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:22, 24 March 2026 (UTC) : Test comment with random number 0.4330065153484025 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 03:55, 27 March 2026 (UTC) : Test comment with random number 0.7353033907097808 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.44304195516553146 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.02243804450899023 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.520846091950367 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.9946058761624214 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:25, 27 March 2026 (UTC) : Test comment with random number 0.1691580237328757 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:28, 27 March 2026 (UTC) : Test comment with random number 0.06490355868980668 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:30, 27 March 2026 (UTC) : Test comment with random number 0.9392023221346153 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:32, 27 March 2026 (UTC) : Test comment with random number 0.5537697536904882 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 16:38, 1 April 2026 (UTC) == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved to [[User talk:JWBTH/CD test page 2#Section with equals sign ({{=}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:40, 1 April 2026 (UTC)''</div> == Section for moving == test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:52, 15 March 2026 (UTC) 31juqusouv2cvipm4ykratq4hgms8fq 735863 735855 2026-04-01T17:14:34Z Test account 8 71122 /* Section to add test comments */ reply: Test comment with random number 0.470848341599752 (-) ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]]) 735863 wikitext text/x-wiki == Section 1 == first section comment [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:37, 20 November 2024 (UTC) unsigned comment end {{unsigned|user}} : comment to be edited [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:38, 20 November 2024 (UTC) :: comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 02:41, 20 November 2024 (UTC) ::: child comment of comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 06:09, 27 August 2025 (UTC) ::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) :::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) : [[#c-Test_account_8-20241120023700-Section_1|Test account 8 @ 02:37, 20 November 2024 (UTC)]] [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 06:43, 28 March 2026 (UTC) === test2 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:55, 14 September 2025 (UTC) : [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 20:13, 26 March 2026 (UTC) === test3 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:56, 14 September 2025 (UTC) ::::::::::::::: <nowiki>__NOGALLERY__</nowiki> [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 09:24, 31 March 2026 (UTC) == Section to add test comments == section [[User:Example|Example]] ([[User talk:Example|talk]]) 02:37, 1 March 2026 (UTC) : Test comment with random number 0.08406505844874512 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 16:32, 16 March 2026 (UTC) : Test. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:16, 16 March 2026 (UTC) : Test. test3 [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:17, 16 March 2026 (UTC) : Test comment with random number 0.8357927622675184 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.47460188540542925 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.687062002939545 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:03, 23 March 2026 (UTC) : Test comment with random number 0.21500952410025898 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:22, 23 March 2026 (UTC) : Test comment with random number 0.6571328205265842 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 17:21, 23 March 2026 (UTC) : Test comment with random number 0.8725721668943434 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:21, 24 March 2026 (UTC) : Test comment with random number 0.9535110784110594 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:22, 24 March 2026 (UTC) : Test comment with random number 0.4330065153484025 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 03:55, 27 March 2026 (UTC) : Test comment with random number 0.7353033907097808 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.44304195516553146 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.02243804450899023 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.520846091950367 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.9946058761624214 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:25, 27 March 2026 (UTC) : Test comment with random number 0.1691580237328757 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:28, 27 March 2026 (UTC) : Test comment with random number 0.06490355868980668 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:30, 27 March 2026 (UTC) : Test comment with random number 0.9392023221346153 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:32, 27 March 2026 (UTC) : Test comment with random number 0.5537697536904882 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 16:38, 1 April 2026 (UTC) : Test comment with random number 0.470848341599752 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 17:14, 1 April 2026 (UTC) == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved to [[User talk:JWBTH/CD test page 2#Section with equals sign ({{=}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:40, 1 April 2026 (UTC)''</div> == Section for moving == test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:52, 15 March 2026 (UTC) lu6f41ibjs90cnv6eapfa2y01dv24xv 735864 735863 2026-04-01T17:15:24Z Test account 8 71122 /* Section to add test comments */ reply ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]]) 735864 wikitext text/x-wiki == Section 1 == first section comment [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:37, 20 November 2024 (UTC) unsigned comment end {{unsigned|user}} : comment to be edited [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:38, 20 November 2024 (UTC) :: comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 02:41, 20 November 2024 (UTC) ::: child comment of comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 06:09, 27 August 2025 (UTC) ::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) :::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) : [[#c-Test_account_8-20241120023700-Section_1|Test account 8 @ 02:37, 20 November 2024 (UTC)]] [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 06:43, 28 March 2026 (UTC) === test2 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:55, 14 September 2025 (UTC) : [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 20:13, 26 March 2026 (UTC) === test3 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:56, 14 September 2025 (UTC) ::::::::::::::: <nowiki>__NOGALLERY__</nowiki> [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 09:24, 31 March 2026 (UTC) == Section to add test comments == section [[User:Example|Example]] ([[User talk:Example|talk]]) 02:37, 1 March 2026 (UTC) : Test comment with random number 0.08406505844874512 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 16:32, 16 March 2026 (UTC) : Test. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:16, 16 March 2026 (UTC) : Test. test3 [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:17, 16 March 2026 (UTC) : Test comment with random number 0.8357927622675184 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.47460188540542925 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.687062002939545 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:03, 23 March 2026 (UTC) : Test comment with random number 0.21500952410025898 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:22, 23 March 2026 (UTC) : Test comment with random number 0.6571328205265842 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 17:21, 23 March 2026 (UTC) : Test comment with random number 0.8725721668943434 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:21, 24 March 2026 (UTC) : Test comment with random number 0.9535110784110594 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:22, 24 March 2026 (UTC) : Test comment with random number 0.4330065153484025 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 03:55, 27 March 2026 (UTC) : Test comment with random number 0.7353033907097808 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.44304195516553146 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.02243804450899023 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.520846091950367 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.9946058761624214 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:25, 27 March 2026 (UTC) : Test comment with random number 0.1691580237328757 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:28, 27 March 2026 (UTC) : Test comment with random number 0.06490355868980668 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:30, 27 March 2026 (UTC) : Test comment with random number 0.9392023221346153 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:32, 27 March 2026 (UTC) : Test comment with random number 0.5537697536904882 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 16:38, 1 April 2026 (UTC) : Test comment with random number 0.470848341599752 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 17:14, 1 April 2026 (UTC) : Test comment with random number 0.41673313374066356 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 17:15, 1 April 2026 (UTC) == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved to [[User talk:JWBTH/CD test page 2#Section with equals sign ({{=}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:40, 1 April 2026 (UTC)''</div> == Section for moving == test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:52, 15 March 2026 (UTC) f1rqdym78zrdgi194cj3ac0m5k8xzcc 735867 735864 2026-04-01T17:35:52Z Test account 8 71122 /* Section to add test comments */ reply: Test comment with random number 0.671732439038764 (-) ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]]) 735867 wikitext text/x-wiki == Section 1 == first section comment [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:37, 20 November 2024 (UTC) unsigned comment end {{unsigned|user}} : comment to be edited [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:38, 20 November 2024 (UTC) :: comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 02:41, 20 November 2024 (UTC) ::: child comment of comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 06:09, 27 August 2025 (UTC) ::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) :::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) : [[#c-Test_account_8-20241120023700-Section_1|Test account 8 @ 02:37, 20 November 2024 (UTC)]] [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 06:43, 28 March 2026 (UTC) === test2 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:55, 14 September 2025 (UTC) : [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 20:13, 26 March 2026 (UTC) === test3 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:56, 14 September 2025 (UTC) ::::::::::::::: <nowiki>__NOGALLERY__</nowiki> [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 09:24, 31 March 2026 (UTC) == Section to add test comments == section [[User:Example|Example]] ([[User talk:Example|talk]]) 02:37, 1 March 2026 (UTC) : Test comment with random number 0.08406505844874512 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 16:32, 16 March 2026 (UTC) : Test. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:16, 16 March 2026 (UTC) : Test. test3 [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:17, 16 March 2026 (UTC) : Test comment with random number 0.8357927622675184 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.47460188540542925 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.687062002939545 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:03, 23 March 2026 (UTC) : Test comment with random number 0.21500952410025898 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:22, 23 March 2026 (UTC) : Test comment with random number 0.6571328205265842 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 17:21, 23 March 2026 (UTC) : Test comment with random number 0.8725721668943434 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:21, 24 March 2026 (UTC) : Test comment with random number 0.9535110784110594 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:22, 24 March 2026 (UTC) : Test comment with random number 0.4330065153484025 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 03:55, 27 March 2026 (UTC) : Test comment with random number 0.7353033907097808 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.44304195516553146 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.02243804450899023 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.520846091950367 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.9946058761624214 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:25, 27 March 2026 (UTC) : Test comment with random number 0.1691580237328757 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:28, 27 March 2026 (UTC) : Test comment with random number 0.06490355868980668 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:30, 27 March 2026 (UTC) : Test comment with random number 0.9392023221346153 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:32, 27 March 2026 (UTC) : Test comment with random number 0.5537697536904882 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 16:38, 1 April 2026 (UTC) : Test comment with random number 0.470848341599752 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 17:14, 1 April 2026 (UTC) : Test comment with random number 0.41673313374066356 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 17:15, 1 April 2026 (UTC) : Test comment with random number 0.671732439038764 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 17:35, 1 April 2026 (UTC) == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved to [[User talk:JWBTH/CD test page 2#Section with equals sign ({{=}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:40, 1 April 2026 (UTC)''</div> == Section for moving == test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:52, 15 March 2026 (UTC) depvgbtovcbufgwavpbb51a63v9jebj Test article 0 155195 735992 591451 2026-04-02T10:19:19Z PieAlt 73198 Tagging broken redirect for deletion ([[:m:User:PieWriter/BR.js|BR]]) 735992 wikitext text/x-wiki {{delete|Broken redirect}} #REDIRECT [[Test brticle]] {{Redirect category shell| {{R from move}} }} iqz011fisplh6k6ilcvmjq175pn0p1q 736001 735992 2026-04-02T10:34:17Z PieWriter 72123 Reverted edits by PieAlt via [[:m:User:PieWriter/massundo.js|massundo]] 736001 wikitext text/x-wiki #REDIRECT [[Test brticle]] {{Redirect category shell| {{R from move}} }} mxz61mrkjqdniksjnbz0i103jk6vlay T370669a 0 157063 735986 604414 2026-04-02T10:14:38Z PieAlt 73198 Tagging broken redirect for deletion 735986 wikitext text/x-wiki {{delete|Broken redirect}} #REDIRECT [[T370669b]] {{Redirect category shell| {{R from move}} }} f7pv7etbn1i5ihh6scztxdnbn02745n 736003 735986 2026-04-02T10:34:18Z PieWriter 72123 Reverted edits by PieAlt via [[:m:User:PieWriter/massundo.js|massundo]] 736003 wikitext text/x-wiki #REDIRECT [[T370669b]] {{Redirect category shell| {{R from move}} }} su2cvjcfw4v7ze058mq1l26uh562y5e Wikipédia:Administradores/Pedidos de aprovação/!Silent/15 0 165883 735856 657281 2026-04-01T16:49:19Z ~2026-20189-61 73370 test 735856 wikitext text/x-wiki {{Wikipédia:Administradores/Pedidos de aprovação/Concluídos/Cabeçalho|aprovado}} Teste aprovado. [[User:!Silent|!Silent]] ([[User talk:!Silent|talk]]) 11:33, 3 May 2025 (UTC) == [[Usuário:!Silent|!Silent]] == * {{usuário|!Silent}}test Teste stetst stsetes === Perguntas === <!-- Para responder, apague toda a linha em que está escrito "Responda aqui". Não é obrigatório responder às questões. --> ;1. Em que tarefas usuais costuma participar? <!-- Responda aqui --> ;2. Que ferramentas administrativas pensa serem particularmente úteis? <!-- Responda aqui --> ;3. Já teve algum conflito com outro(s) usuário(s)? Se sim, foi resolvido? <!-- Responda aqui --> ;4. Já mediou alguma disputa? Se sim, qual o desfecho? <!-- Responda aqui --> ;5. Quais as suas áreas gerais de interesse na Wikipédia? Poderia indicar alguns artigos em que tenha tido uma contribuição significativa? <!-- Responda aqui --> === Votação === === Comentários === {{Wikipédia:Administradores/Pedidos de aprovação/Concluídos/Rodapé}} sloypmtfdltyvffk7ctkml9ywcmb6lr Punithtest 0 168951 735868 728000 2026-04-01T17:51:19Z Ladsgroup 2217 735868 wikitext text/x-wiki [[File:Pigeons_bathing_at_Retiro_Park.webm|thumb|210px]] t55stp6lwiylbkqgetwx0i9766eangi 735869 735868 2026-04-01T17:51:47Z Ladsgroup 2217 735869 wikitext text/x-wiki [[File:Pigeons_bathing_at_Retiro_Park.webm|thumb|170px]] tvzqhau29ba2caqrg04517vo2gnt5mz 735870 735869 2026-04-01T17:52:18Z Ladsgroup 2217 735870 wikitext text/x-wiki [[File:Pigeons_bathing_at_Retiro_Park.webm|thumb|300px]] byn1qwhgwxq8cbvhyjg7jrqrtlvhayt User:Enbi/common.js 2 172174 735889 735670 2026-04-01T19:34:26Z Enbi 72574 735889 javascript text/javascript importScript('User:Enbi/UnnamedScript.js'); importScript('User:Enbi/testScript.js'); importScript('User:Enbi/simul.js'); importScript('User:Enbi/newUserFilter.js'); importScript('User:Enbi/new.js'); importScript('User:Enbi/wikiCMD.js'); importScript('User:Enbi/LAC.js'); importScript('User:enbi/LTA-undo.js'); iifu71orqkpnbxp4qtzyoan5bbipgpv User talk:JWBTH/CD test page 2 3 174028 735825 735773 2026-04-01T13:12:40Z JWBTH 52211 /* Section for moving */ delete topic ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]]) 735825 wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1 735827 735825 2026-04-01T13:13:30Z JWBTH 52211 /* Section with equals sign (=) for moving */ move from [[User talk:JWBTH/CD test page#Section with equals sign (=) for moving]] ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]]) 735827 wikitext text/x-wiki == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{=}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:13, 1 April 2026 (UTC)''</div> test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:50, 15 March 2026 (UTC) kz4yqpk2xonqrw7pdxm9va6wc35x0ea 735829 735827 2026-04-01T13:16:36Z JWBTH 52211 /* Section with equals sign (=) for moving */ move from [[User talk:JWBTH/CD test page#Section with equals sign ({{=}}) for moving]] ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]]) 735829 wikitext text/x-wiki == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{=}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:13, 1 April 2026 (UTC)''</div> test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:50, 15 March 2026 (UTC) == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{{{=}}}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:16, 1 April 2026 (UTC)''</div> <div class="cd-moveMark">''Moved to [[User talk:JWBTH/CD test page 2#Section with equals sign (=) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:13, 1 April 2026 (UTC)''</div> jjh5qsoxuepqdun4p0n43y5j5gu504v 735832 735829 2026-04-01T13:19:44Z JWBTH 52211 /* Section with equals sign (=) for moving */ move from [[User talk:JWBTH/CD test page#Section with equals sign ({{=}}) for moving]] ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]]) 735832 wikitext text/x-wiki == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{=}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:13, 1 April 2026 (UTC)''</div> test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:50, 15 March 2026 (UTC) == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{{{=}}}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:16, 1 April 2026 (UTC)''</div> <div class="cd-moveMark">''Moved to [[User talk:JWBTH/CD test page 2#Section with equals sign (=) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:13, 1 April 2026 (UTC)''</div> == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{{{=}}}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:19, 1 April 2026 (UTC)''</div> test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:50, 15 March 2026 (UTC) lgomnu1t0f5r0da2y97j2blo29s8lyk 735833 735832 2026-04-01T13:24:24Z JWBTH 52211 /* Section with equals sign (=) for moving */ move from [[User talk:JWBTH/CD test page#Section with equals sign ({{=}}) for moving]] ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]]) 735833 wikitext text/x-wiki == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{{{=}}}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:24, 1 April 2026 (UTC)''</div> test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:50, 15 March 2026 (UTC) == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{=}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:13, 1 April 2026 (UTC)''</div> test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:50, 15 March 2026 (UTC) == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{{{=}}}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:16, 1 April 2026 (UTC)''</div> <div class="cd-moveMark">''Moved to [[User talk:JWBTH/CD test page 2#Section with equals sign (=) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:13, 1 April 2026 (UTC)''</div> == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{{{=}}}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:19, 1 April 2026 (UTC)''</div> test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:50, 15 March 2026 (UTC) 3o10xfhzohlp7rtiq12zgdxd602z3q0 735834 735833 2026-04-01T13:40:27Z JWBTH 52211 /* Section with equals sign (=) for moving */ move from [[User talk:JWBTH/CD test page#Section with equals sign (=) for moving]] ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]]) 735834 wikitext text/x-wiki == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{=}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:40, 1 April 2026 (UTC)''</div> test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:50, 15 March 2026 (UTC) == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{{{=}}}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:24, 1 April 2026 (UTC)''</div> test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:50, 15 March 2026 (UTC) == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{=}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:13, 1 April 2026 (UTC)''</div> test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:50, 15 March 2026 (UTC) == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{{{=}}}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:16, 1 April 2026 (UTC)''</div> <div class="cd-moveMark">''Moved to [[User talk:JWBTH/CD test page 2#Section with equals sign (=) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:13, 1 April 2026 (UTC)''</div> == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{{{=}}}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:19, 1 April 2026 (UTC)''</div> test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:50, 15 March 2026 (UTC) enr1o4voclxb5m2tpccmagn67mxd6av 735836 735834 2026-04-01T13:40:50Z JWBTH 52211 /* Section with equals sign (=) for moving */ move from [[User talk:JWBTH/CD test page#Section with equals sign (=) for moving]] ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]]) 735836 wikitext text/x-wiki == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{=}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:40, 1 April 2026 (UTC)''</div> <div class="cd-moveMark">''Moved to [[User talk:JWBTH/CD test page 2#Section with equals sign ({{=}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:40, 1 April 2026 (UTC)''</div> == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{=}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:40, 1 April 2026 (UTC)''</div> test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:50, 15 March 2026 (UTC) == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{{{=}}}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:24, 1 April 2026 (UTC)''</div> test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:50, 15 March 2026 (UTC) == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{=}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:13, 1 April 2026 (UTC)''</div> test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:50, 15 March 2026 (UTC) == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{{{=}}}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:16, 1 April 2026 (UTC)''</div> <div class="cd-moveMark">''Moved to [[User talk:JWBTH/CD test page 2#Section with equals sign (=) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:13, 1 April 2026 (UTC)''</div> == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{{{=}}}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:19, 1 April 2026 (UTC)''</div> test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:50, 15 March 2026 (UTC) twdi2g3pewmfwywn13ob6h9lzj2za08 735837 735836 2026-04-01T13:41:01Z JWBTH 52211 /* Section with equals sign (=) for moving */ move from [[User talk:JWBTH/CD test page#Section with equals sign (=) for moving]] ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]]) 735837 wikitext text/x-wiki == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{=}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:41, 1 April 2026 (UTC)''</div> <div class="cd-moveMark">''Moved to [[User talk:JWBTH/CD test page 2#Section with equals sign ({{=}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:40, 1 April 2026 (UTC)''</div> == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{=}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:40, 1 April 2026 (UTC)''</div> <div class="cd-moveMark">''Moved to [[User talk:JWBTH/CD test page 2#Section with equals sign ({{=}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:40, 1 April 2026 (UTC)''</div> == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{=}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:40, 1 April 2026 (UTC)''</div> test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:50, 15 March 2026 (UTC) == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{{{=}}}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:24, 1 April 2026 (UTC)''</div> test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:50, 15 March 2026 (UTC) == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{=}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:13, 1 April 2026 (UTC)''</div> test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:50, 15 March 2026 (UTC) == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{{{=}}}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:16, 1 April 2026 (UTC)''</div> <div class="cd-moveMark">''Moved to [[User talk:JWBTH/CD test page 2#Section with equals sign (=) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:13, 1 April 2026 (UTC)''</div> == Section with equals sign (=) for moving == <div class="cd-moveMark">''Moved from [[User talk:JWBTH/CD test page#Section with equals sign ({{{{=}}}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:19, 1 April 2026 (UTC)''</div> test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:50, 15 March 2026 (UTC) p6k9youqs7h4tzulqn61449ol95p8q8 735838 735837 2026-04-01T13:59:00Z JWBTH 52211 Blanked the page 735838 wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1 735851 735838 2026-04-01T16:36:04Z Test account 8 71122 /* Section for moving */ move from [[User talk:JWBTH/CD test page]] ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]]) 735851 wikitext text/x-wiki == Section for moving == test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:52, 15 March 2026 (UTC) q3wyqbusuiwpjx2lno1ci6uctvs84op 735854 735851 2026-04-01T16:36:15Z Test account 8 71122 /* Section for moving */ move to [[User talk:JWBTH/CD test page#Section for moving]] ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]]) 735854 wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1 User:ToluAyod/Starter kit/Content categories 2 174230 735839 735800 2026-04-01T15:59:00Z ToluAyod 69650 Created by StarterKit tool 735839 wikitext text/x-wiki <div style="margin:10px 0;box-shadow:0 1px 1px rgba(0,0,0,0.1);background:#fff;"> {| style="border-spacing:1px;border-collapse:separate;width:100%;text-align:center;font-size:0.9em;padding:2px 3px;" class="hp-portalen" | style="background:#F9F9F0;border-top:5px solid #999933;padding:3px 0.25em;width:25%;text-align:center;" | Arts & Literature | style="background:#F4F9F0;border-top:5px solid #669933;padding:3px 0.25em;width:25%;text-align:center;" | Countries & Geography | style="background:#F0F9F9;border-top:5px solid #339999;padding:3px 0.25em;width:25%;text-align:center;" | Science & Technology | style="background:#F9F0F9;border-top:5px solid #993399;padding:3px 0.25em;width:25%;text-align:center;" | History & Events |} </div> <noinclude>[[Category:Starter Kit templates]][[Category:Main page templates]]</noinclude> n9zv2bbmxqwb2gr8u6hk26i2vu07y01 User:ToluAyod/Main Page 2 174233 735840 735801 2026-04-01T15:59:07Z ToluAyod 69650 Updated Main Page via StarterKit tool 735840 wikitext text/x-wiki <div style="text-align: center; font-family: 'Linux Libertine', Georgia, Times, serif; margin: 1.5em 0;"> <span style="font-size: 2.3em; line-height: 1.2;">Welcome to {{SITENAME}} Wikipedia</span><br/> <span style="font-size: 1.1em; color: #54595d;">The free encyclopedia that anyone can edit</span><br/> <span style="font-size: 0.95em; color: #72777d; margin-top: 0.5em; display: inline-block;">{{NUMBEROFACTIVEUSERS}} active editors • '''{{NUMBEROFARTICLES}}''' articles in {{SITENAME}}</span> </div> {{User:ToluAyod/Starter kit/Content categories}} <div style="display: flex; gap: 4px; align-items: stretch;"><div style="flex: 1; min-width: 0; display: flex; flex-direction: column;">{{User:ToluAyod/Starter kit/Featured article}}</div><div style="flex: 1; min-width: 0; display: flex; flex-direction: column;">{{User:ToluAyod/Starter kit/In the news}}</div></div> <div style="display: flex; gap: 4px; align-items: stretch;"><div style="flex: 1; min-width: 0; display: flex; flex-direction: column;">{{User:ToluAyod/Starter kit/Did you know}}</div><div style="flex: 1; min-width: 0; display: flex; flex-direction: column;">{{User:ToluAyod/Starter kit/On this day}}</div></div> <div style="margin-top: 10px;">{{User:ToluAyod/Starter kit/Featured picture}}</div> <div style="display: flex; gap: 4px; align-items: stretch; margin-top: 10px;"><div style="flex: 1; min-width: 0; display: flex; flex-direction: column;">{{User:ToluAyod/Starter kit/Community resources}}</div><div style="flex: 1; min-width: 0; display: flex; flex-direction: column;">{{User:ToluAyod/Starter kit/Translation resources}}</div></div> <div style="margin-top: 10px;">{{User:ToluAyod/Starter kit/Wikipedia's sister projects}}</div> <div style="margin-top: 10px;">{{User:ToluAyod/Starter kit/Wikipedia languages}}</div> __NOTOC__ fhg7g3sx9pih0kwgheogjbu8cwdh8l1 User:MMunyoki (WMF)/Main Page 2 174266 735846 734237 2026-04-01T16:08:22Z MMunyoki (WMF) 53374 Updated Main Page via StarterKit tool 735846 wikitext text/x-wiki <div style="text-align: center; font-family: 'Linux Libertine', Georgia, Times, serif; margin: 1.5em 0;"> <span style="font-size: 2.3em; line-height: 1.2;">Welcome to {{SITENAME}} Wikipedia</span><br/> <span style="font-size: 1.1em; color: #54595d;">The free encyclopedia that anyone can edit</span><br/> <span style="font-size: 0.95em; color: #72777d; margin-top: 0.5em; display: inline-block;">{{NUMBEROFACTIVEUSERS}} active editors • '''{{NUMBEROFARTICLES}}''' articles in {{SITENAME}}</span> </div> <div style="display: flex; gap: 4px; align-items: stretch;"><div style="flex: 1; min-width: 0; display: flex; flex-direction: column;">{{User:MMunyoki (WMF)/Starter kit/Featured article}}</div><div style="flex: 1; min-width: 0; display: flex; flex-direction: column;">{{User:MMunyoki (WMF)/Starter kit/In the news}}</div></div> <div style="display: flex; gap: 4px; align-items: stretch;"><div style="flex: 1; min-width: 0; display: flex; flex-direction: column;">{{User:MMunyoki (WMF)/Starter kit/Did you know}}</div><div style="flex: 1; min-width: 0; display: flex; flex-direction: column;">{{User:MMunyoki (WMF)/Starter kit/On this day}}</div></div> <div style="margin-top: 10px;">{{User:MMunyoki (WMF)/Starter kit/Featured picture}}</div> <div style="margin-top: 10px;">{{User:MMunyoki (WMF)/Starter kit/Translation resources}}</div> <div style="margin-top: 10px;">{{User:MMunyoki (WMF)/Starter kit/Wikipedia's sister projects}}</div> <div style="margin-top: 10px;">{{User:MMunyoki (WMF)/Starter kit/Wikipedia languages}}</div> __NOTOC__ hmyolyhhdtphckau9lm84gdvu0kbnxo 735850 735846 2026-04-01T16:31:27Z MMunyoki (WMF) 53374 735850 wikitext text/x-wiki <div style="text-align: center; font-family: 'Linux Libertine', Georgia, Times, serif; margin: 1.5em 0;"> <span style="font-size: 2.3em; line-height: 1.2;">Welcome to {{SITENAME}} Wikipedia</span><br/> <span style="font-size: 1.1em; color: #54595d;">The free encyclopedia that anyone can edit</span><br/> <span style="font-size: 0.95em; color: #72777d; margin-top: 0.5em; display: inline-block;">{{NUMBEROFACTIVEUSERS}} active editors • '''{{NUMBEROFARTICLES}}''' articles in {{SITENAME}}</span> </div>[[User:MMunyoki (WMF)/Starter kit/Featured article]]<div style="display: flex; gap: 4px; align-items: stretch;"><div style="flex: 1; min-width: 0; display: flex; flex-direction: column;">{{User:MMunyoki (WMF)/Starter kit/Featured article}}</div><div style="flex: 1; min-width: 0; display: flex; flex-direction: column;">{{User:MMunyoki (WMF)/Starter kit/In the news}}</div></div> <div style="display: flex; gap: 4px; align-items: stretch;"><div style="flex: 1; min-width: 0; display: flex; flex-direction: column;">{{User:MMunyoki (WMF)/Starter kit/Did you know}}</div><div style="flex: 1; min-width: 0; display: flex; flex-direction: column;">{{User:MMunyoki (WMF)/Starter kit/On this day}}</div></div> <div style="margin-top: 10px;">{{User:MMunyoki (WMF)/Starter kit/Featured picture}}</div> <div style="margin-top: 10px;">{{User:MMunyoki (WMF)/Starter kit/Translation resources}}</div> <div style="margin-top: 10px;">{{User:MMunyoki (WMF)/Starter kit/Wikipedia's sister projects}}</div> <div style="margin-top: 10px;">{{User:MMunyoki (WMF)/Starter kit/Wikipedia languages}}</div> __NOTOC__ https://test.wikipedia.org/wiki/User:MMunyoki_(WMF)/Starter_kit/Featured_article kebon7dccb8g3kvd2c5qereqqs4wae2 735866 735850 2026-04-01T17:19:06Z MMunyoki (WMF) 53374 Updated Main Page via StarterKit tool 735866 wikitext text/x-wiki <div style="text-align: center; font-family: 'Linux Libertine', Georgia, Times, serif; margin: 1.5em 0;"> <span style="font-size: 2.3em; line-height: 1.2;">Welcome to {{SITENAME}} Wikipedia</span><br/> <span style="font-size: 1.1em; color: #54595d;">The free encyclopedia that anyone can edit</span><br/> <span style="font-size: 0.95em; color: #72777d; margin-top: 0.5em; display: inline-block;">{{NUMBEROFACTIVEUSERS}} active editors • '''{{NUMBEROFARTICLES}}''' articles in {{SITENAME}}</span> </div> <div style="display: flex; gap: 4px; align-items: stretch;"><div style="flex: 1; min-width: 0; display: flex; flex-direction: column;">{{User:MMunyoki (WMF)/Starter kit/Featured article}}</div><div style="flex: 1; min-width: 0; display: flex; flex-direction: column;">{{User:MMunyoki (WMF)/Starter kit/In the news}}</div></div> <div style="display: flex; gap: 4px; align-items: stretch;"><div style="flex: 1; min-width: 0; display: flex; flex-direction: column;">{{User:MMunyoki (WMF)/Starter kit/Did you know}}</div><div style="flex: 1; min-width: 0; display: flex; flex-direction: column;">{{User:MMunyoki (WMF)/Starter kit/On this day}}</div></div> <div style="margin-top: 10px;">{{User:MMunyoki (WMF)/Starter kit/Featured picture}}</div> <div style="margin-top: 10px;">{{User:MMunyoki (WMF)/Starter kit/Translation resources}}</div> <div style="margin-top: 10px;">{{User:MMunyoki (WMF)/Starter kit/Wikipedia's sister projects}}</div> <div style="margin-top: 10px;">{{User:MMunyoki (WMF)/Starter kit/Wikipedia languages}}</div> __NOTOC__ hmyolyhhdtphckau9lm84gdvu0kbnxo User:PieAlt/common.js 2 174351 735975 735488 2026-04-02T08:46:52Z PieAlt 73198 Uninstalling [[User:PieAlt/test.js]] ([[mw:User:Iniquity/scriptManager.js|Script Manager]]) 735975 javascript text/javascript // <nowiki> mw.loader.using(['mediawiki.api', 'mediawiki.util', 'oojs-ui'], function () { function openDialog() { var windowManager = new OO.ui.WindowManager(); $(document.body).append(windowManager.$element); var dialog = new OO.ui.MessageDialog(); windowManager.addWindows([dialog]); var radioSelect = new OO.ui.RadioSelectWidget({ items: [ new OO.ui.RadioOptionWidget({ data: 'spam', label: 'Spam' }), new OO.ui.RadioOptionWidget({ data: 'vandalism', label: 'Vandalism' }), new OO.ui.RadioOptionWidget({ data: 'empty', label: 'Empty page' }), new OO.ui.RadioOptionWidget({ data: 'notable', label: 'Not notable' }), new OO.ui.RadioOptionWidget({ data: 'oop', label: 'Out of project scope' }), new OO.ui.RadioOptionWidget({ data: 'custom', label: 'Custom reason' }) ] }); var customInput = new OO.ui.MultilineTextInputWidget({ placeholder: 'Enter custom reason...', autosize: true }); var container = new OO.ui.PanelLayout({ padded: true, expanded: false }); container.$element.append( new OO.ui.LabelWidget({ label: 'Select a reason:' }).$element, radioSelect.$element, customInput.$element ); windowManager.openWindow(dialog, { title: 'Votes for Deletion', message: container.$element, actions: [ { action: 'submit', label: 'Nominate', flags: ['primary', 'progressive'] }, { action: 'cancel', label: 'Cancel', flags: 'safe' } ] }).closed.then(function (data) { if (!data || data.action !== 'submit') return; var selected = radioSelect.findSelectedItem(); if (!selected) { mw.notify('Select a reason', { type: 'error' }); return; } var reasonMap = { spam: 'Spam page', vandalism: 'Vandalism', empty: 'Empty page', notable: 'Not notable', oop: 'Out of project scope' }; var reason = selected.getData() === 'custom' ? customInput.getValue() : reasonMap[selected.getData()]; if (!reason) { mw.notify('Provide a reason', { type: 'error' }); return; } var titleObj = new mw.Title(mw.config.get('wgPageName')); var pageName = titleObj.getPrefixedText(); var api = new mw.Api(); api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content', formatversion: 2 }).then(function (data) { var page = data.query.pages[0]; var content = (page.revisions && page.revisions[0]) ? page.revisions[0].content : ""; if (content.includes('{{vfd-new')) { throw new Error("Already nominated"); } return api.postWithToken('csrf', { action: 'edit', title: pageName, text: "{{vfd-new}}\n" + content.replace(/^\s+/, ''), summary: 'Adding VFD with [[User:PieWriter/vfd|tool]]', watchlist: 'watch' }); }).then(function () { return api.postWithToken('csrf', { action: 'edit', title: "Wikiquote:Votes for deletion/" + pageName, text: "{{subst:vfd-new2|pg=" + pageName + "|text=" + reason + " — ~~~~}}", summary: "VfD: " + pageName, watchlist: 'watch' }); }).then(function () { return api.get({ action: 'query', prop: 'revisions', titles: "Wikiquote:Votes for deletion/" + pageName, rvprop: 'content', formatversion: 2 }).then(function (data) { var text = data.query.pages[0].revisions[0].content; var voteText = ": '''Delete''' as nominator ~~~~"; var newText; if (text.includes("'''Vote closes'''")) { newText = text.replace( /(<small>\s*'''Vote closes''':)/, voteText + "\n$1" ); } else { newText = text.replace(/\s+$/, '') + "\n" + voteText; } return api.postWithToken('csrf', { action: 'edit', title: "Wikiquote:Votes for deletion/" + pageName, text: newText, summary: "Adding nominator vote", watchlist: 'watch' }); }); }).then(function () { return api.get({ action: 'query', prop: 'revisions', titles: "Wikiquote:Votes for deletion", rvprop: 'content', formatversion: 2 }).then(function (data) { var text = data.query.pages[0].revisions[0].content; var cleanText = text.replace(/\s+$/, ''); return api.postWithToken('csrf', { action: 'edit', title: "Wikiquote:Votes for deletion", text: cleanText + "\n{{Wikiquote:Votes for deletion/" + pageName + "}}", summary: "Adding " + pageName + " VfD entry", watchlist: 'watch' }); }); }).then(function () { mw.notify('VfD nomination complete', { type: 'success' }); }).catch(function (err) { mw.notify(err.message || 'Error during VFD', { type: 'error' }); }); }); } function addLink() { if (mw.config.get('wgNamespaceNumber') < 0) return; var link = mw.util.addPortletLink( 'p-cactions', '#', 'VFD', 'ca-vfd', 'Nominate for deletion' ); if (!link) return; $(link).on('click', function (e) { e.preventDefault(); openDialog(); }); } $(addLink); }); // </nowiki> kpwzz9f03mxsvtlzjcl3x2zhc99xjbq User:PieAlt/test.js 2 174537 735972 735535 2026-04-02T08:41:09Z PieAlt 73198 735972 javascript text/javascript // <nowiki> const pieRevertVersion = "1.0"; const pieRevertChangelog = ` <h1 class="settings-section-title">Changelog</h1> <p>Welcome to PieRevert! This script organizes recent changes and uses AI risk scoring:</p> <ul> <li>AI-based risk sorting of edits</li> <li>Customizable control scripts</li> <li>Dark mode and themes</li> <li>Warnings and templates</li> <li>User highlighting and whitelisting</li> </ul> `; const pieRevertData = { defaultSettings: { maxQueueSize: 50, refreshTime: 2000, showIPs: true, showUsers: true, sortQueueItems: true, controlScripts: [ { keys: [" ", "arrowright"], actions: [{ name: "nextEdit", params: {} }] }, { keys: ["q"], actions: [ { name: "rollback", params: {} }, { name: "warn", params: { warningType: "Vandalism", level: "auto" } }, { name: "highlight", params: {} }, { name: "if", condition: "atFinalWarning", actions: [ { name: "if", condition: "operatorNonAdmin", actions: [ { name: "reportToAIV", params: { reportMessage: "Vandalism past final warning" } } ] } ] }, { name: "nextEdit", params: {} } ] }, { keys: ["arrowleft"], actions: [{ name: "prevEdit", params: {} }] }, { keys: ["h"], actions: [{ name: "openHistory", params: {} }] }, { keys: ["c"], actions: [{ name: "openUserContribs", params: {} }] } ], theme: "theme-light" }, warningTemplateColors: { "0": "grey", "1": "#4169e1", "2": "#ff8c00", "3": "#ff4500", "4": "#b22222", "4im": "#000000" }, colorPalettes: [ ["#78c675","#fdff7a","#fcff54","#fbff12","#ffc619","#ff8812","#f56214","#f73214","#fc0303","#fc0303"], ["#bfbfbf","#ffd9d9","#ffc9c9","#ffb0b0","#ff9797","#ff7d7d","#ff6464","#ff4b4b","#ff3131","#ff1818"], ["#bfbfbf","#d9ffd9","#c9ffc9","#b0ffb0","#97ff97","#7dff7d","#64ff64","#4bff4b","#31ff31","#18ff18"], ["#bfbfbf","#d9d9ff","#c9c9ff","#b0b0ff","#9797ff","#7d7dff","#6464ff","#4b4bff","#3131ff","#1818ff"] ], warnings: { "Vandalism": { templates: ["subst:uw-vandalism1","subst:uw-vandalism2","subst:uw-vandalism3","subst:uw-vandalism4","subst:uw-vandalism4im"], label: "vandalism", desc: "Default warning for vandalism." }, "Disruption": { templates: ["subst:uw-disruptive1","subst:uw-disruptive2","subst:uw-disruptive3","subst:uw-generic4"], label: "disruptive editing", desc: "Default warning for disruptive edits." }, "Advertising": { templates: ["subst:uw-advert1","subst:uw-advert2","subst:uw-advert3","subst:uw-advert4","subst:uw-advert4im"], label: "advertising", desc: "Adding promotional content." } // … }, namespaces: [ { name: "Main", id: 0 }, { name: "User", id: 2 }, { name: "Project", id: 4 }, { name: "File", id: 6 }, { name: "Template", id: 10 }, { name: "Category", id: 14 }, { name: "Portal", id: 100 }, { name: "Draft", id: 118 }, { name: "Talk", id: 1 }, { name: "User talk", id: 3 }, { name: "Project talk", id: 5 }, { name: "File talk", id: 7 }, { name: "Template talk", id: 11 }, { name: "Help talk", id: 13 }, { name: "Category talk", id: 15 }, { name: "Portal talk", id: 101 }, { name: "Draft talk", id: 119 } ] }; const pieRevertStyling = { "main": ` body, html, #container { width:100%; height:100%; margin:0; } #container { display:flex; } #queue { width:300px; border-right:2px solid #ccc; } #right-container { flex:1; display:flex; flex-direction:column; } .rc-item { border:1px solid #ccc; margin:5px; padding:5px; } `, "theme-dark": ` body { background:#22262f; color:#f1f5ff; } .rc-item { background:#292f3c; border:1px solid #363e51; } ` }; const pieRevertHTML = { "main": ` <div id="container"> <div id="queue"> <div id="queue-top"> <span id="queue-top-title">Recent Changes</span> </div> <div id="queue-items"></div> </div> <div id="right-container"> <div id="diff-container"></div> </div> </div> ` }; mw.loader.using(['mediawiki.api']).then(function () { if (mw.config.get('wgCanonicalSpecialPageName') === 'PieRevert') { document.body.innerHTML = pieRevertHTML.main; const api = new mw.Api(); api.get({ action: 'query', list: 'recentchanges', rcprop: 'title|ids|sizes|flags|user|comment|timestamp', rclimit: 50 }).done(function (data) { const changes = data.query.recentchanges; function aiRiskScore(change) { let score = 0; if (!change.user.includes(':')) score += 2; if (change.newlen && change.oldlen && Math.abs(change.newlen - change.oldlen) > 500) score += 3; if (change.comment && /test|joke|spam/i.test(change.comment)) score += 2; return score; } changes.sort((a, b) => aiRiskScore(b) - aiRiskScore(a)); const rcDiv = document.getElementById('queue-items'); rcDiv.innerHTML = changes.map(change => ` <div class="rc-item"> <strong>${change.title}</strong> by <em>${change.user}</em><br> <span>${change.comment || '(no summary)'}</span><br> <span>Risk score: ${aiRiskScore(change)}</span><br> <a href="/w/index.php?diff=${change.revid}&oldid=${change.old_revid}" target="_blank">View diff</a> </div> `).join(''); }); } }); // </nowiki> l1o4eqhy8ss9ukzglvx8cqymsxl04zy 735973 735972 2026-04-02T08:45:29Z PieAlt 73198 735973 javascript text/javascript // <nowiki> const pieRevertVersion = "1.0"; const pieRevertChangelog = ` <h1 class="settings-section-title">Changelog</h1> <p>Welcome to PieRevert! This script organizes recent changes and uses AI risk scoring:</p> <ul> <li>AI-based risk sorting of edits</li> <li>Customizable control scripts</li> <li>Dark mode and themes</li> <li>Warnings and templates</li> <li>User highlighting and whitelisting</li> </ul> `; const pieRevertData = { defaultSettings: { maxQueueSize: 50, maxEditCount: 50, minimumORESScore: 0, wiki: "en", namespacesShown: [0,2,4,6,8,10,12,14,100,118,1,3,5,7,9,11,13,15,101,119], refreshTime: 2000, showIPs: true, showUsers: true, sortQueueItems: true, controlScripts: [ { keys: [" ", "arrowright"], actions: [{ name: "nextEdit", params: {} }] }, { keys: ["q"], actions: [ { name: "rollback", params: {} }, { name: "warn", params: { warningType: "Vandalism", level: "auto" } }, { name: "highlight", params: {} }, { name: "if", condition: "atFinalWarning", actions: [ { name: "if", condition: "operatorNonAdmin", actions: [ { name: "reportToAIV", params: { reportMessage: "Vandalism past final warning" } } ] } ] }, { name: "nextEdit", params: {} } ] }, { keys: ["arrowleft"], actions: [{ name: "prevEdit", params: {} }] }, { keys: ["h"], actions: [{ name: "openHistory", params: {} }] }, { keys: ["c"], actions: [{ name: "openUserContribs", params: {} }] } ], selectedPalette: 0, theme: "theme-light" }, warningTemplateColors: { "0": "grey","1": "#4169e1","2": "#ff8c00","3": "#ff4500","4": "#b22222","4im": "#000000" }, colorPalettes: [ ["#78c675","#fdff7a","#fcff54","#fbff12","#ffc619","#ff8812","#f56214","#f73214","#fc0303","#fc0303"], ["#bfbfbf","#ffd9d9","#ffc9c9","#ffb0b0","#ff9797","#ff7d7d","#ff6464","#ff4b4b","#ff3131","#ff1818"], ["#bfbfbf","#d9ffd9","#c9ffc9","#b0ffb0","#97ff97","#7dff7d","#64ff64","#4bff4b","#31ff31","#18ff18"], ["#bfbfbf","#d9d9ff","#c9c9ff","#b0b0ff","#9797ff","#7d7dff","#6464ff","#4b4bff","#3131ff","#1818ff"] ], warnings: { "Vandalism": { templates:["subst:uw-vandalism1","subst:uw-vandalism2","subst:uw-vandalism3","subst:uw-vandalism4","subst:uw-vandalism4im"],label:"vandalism",desc:"Default warning for vandalism." }, "Disruption": { templates:["subst:uw-disruptive1","subst:uw-disruptive2","subst:uw-disruptive3","subst:uw-generic4"],label:"disruptive editing",desc:"Default warning for disruptive edits." }, "Deleting": { templates:["subst:uw-delete1","subst:uw-delete2","subst:uw-delete3","subst:uw-delete4","subst:uw-delete4im"],label:"unexplained deletion",desc:"Unexplained deletion of content." }, "Advertising": { templates:["subst:uw-advert1","subst:uw-advert2","subst:uw-advert3","subst:uw-advert4","subst:uw-advert4im"],label:"advertising",desc:"Adding promotional content." }, "Spam links": { templates:["subst:uw-spam1","subst:uw-spam2","subst:uw-spam3","subst:uw-spam4","subst:uw-spam4im"],label:"spam links",desc:"Adding inappropriate external links." }, "Unsourced": { templates:["subst:uw-unsourced1","subst:uw-unsourced2","subst:uw-unsourced3","subst:uw-unsourced4"],label:"unsourced content",desc:"Adding unsourced content." }, "Editing tests": { templates:["subst:uw-test1","subst:uw-test2","subst:uw-test3","subst:uw-vandalism4"],label:"editing tests",desc:"Making editing tests." }, "Commentary": { templates:["subst:uw-talkinarticle1","subst:uw-talkinarticle2","subst:uw-talkinarticle3","subst:uw-generic4"],label:"commentary",desc:"Adding commentary to articles." }, "POV": { templates:["subst:uw-npov1","subst:uw-npov2","subst:uw-npov3","subst:uw-npov4"],label:"non-neutral content",desc:"Violating NPOV." }, "Errors": { templates:["subst:uw-error1","subst:uw-error2","subst:uw-error3","subst:uw-error4"],label:"errors",desc:"Adding deliberate errors." }, "Owning": { templates:["subst:uw-own1","subst:uw-own2","subst:uw-own3","subst:uw-own4"],label:"ownership",desc:"Assuming ownership of articles." }, "Unsourced (BLP)": { templates:["subst:uw-biog1","subst:uw-biog2","subst:uw-biog3","subst:uw-biog4","subst:uw-biog4im"],label:"unsourced BLP",desc:"Unsourced content in biographies." }, "Chatting": { templates:["subst:uw-chat1","subst:uw-chat2","subst:uw-chat3","subst:uw-chat4"],label:"chatting",desc:"Inappropriate talk page use." }, "Image vandalism": { templates:["subst:uw-image1","subst:uw-image2","subst:uw-image3","subst:uw-image4"],label:"image vandalism",desc:"Image vandalism." }, "AfD removal": { templates:["subst:uw-afd1","subst:uw-afd2","subst:uw-afd3","subst:uw-afd4"],label:"AfD removal",desc:"Removing AfD templates/comments." }, "Jokes": { templates:["subst:uw-joke1","subst:uw-joke2","subst:uw-joke3","subst:uw-joke4","subst:uw-joke4im"],label:"jokes",desc:"Adding inappropriate humor." }, "Personal attacks": { templates:["subst:uw-npa1","subst:uw-npa2","subst:uw-npa3","subst:uw-npa4","subst:uw-npa4im"],label:"personal attacks",desc:"Personal attacks." }, "MOS violation": { templates:["subst:uw-mos1","subst:uw-mos2","subst:uw-mos3","subst:uw-mos4"],label:"MOS violation",desc:"Manual of Style violations." }, "Censoring": { templates:["subst:uw-notcensored1","subst:uw-notcensored2","subst:uw-notcensored3","subst:uw-generic4"],label:"censoring",desc:"Censoring content." } }, namespaces: [ { name:"Main",id:0},{ name:"User",id:2},{ name:"Project",id:4},{ name:"File",id:6},{ name:"MediaWiki",id:8}, { name:"Template",id:10},{ name:"Help",id:12},{ name:"Category",id:14},{ name:"Portal",id:100},{ name:"Draft",id:118}, { name:"Talk",id:1},{ name:"User talk",id:3},{ name:"Project talk",id:5},{ name:"File talk",id:7},{ name:"MediaWiki talk",id:9}, { name:"Template talkGot it — the reason nothing appeared before is because the skeleton I gave you only swapped out the page body with a minimal stub. To make `Special:PieRevert` actually render like AntiVandal, you need the **full HTML scaffolding, CSS styling, warnings, palettes, namespaces, and control scripts** — essentially a complete gadget. Here’s the **fully expanded version** with no inline notes. It mirrors AntiVandal’s structure but adapted for `Special:PieRevert` and adds AI risk scoring to sort edits: ```javascript // <nowiki> const pieRevertVersion = "1.0"; const pieRevertChangelog = ` <h1 class="settings-section-title">Changelog</h1> <p>Welcome to PieRevert! This script organizes recent changes and uses AI risk scoring:</p> <ul> <li>AI-based risk sorting of edits</li> <li>Customizable control scripts</li> <li>Dark mode and themes</li> <li>Warnings and templates</li> <li>User highlighting and whitelisting</li> </ul> `; const pieRevertData = { defaultSettings: { maxQueueSize: 50, maxEditCount: 50, minimumORESScore: 0, wiki: "en", namespacesShown: [0,2,4,6,8,10,12,14,100,118,1,3,5,7,9,11,13,15,101,119], refreshTime: 2000, showIPs: true, showUsers: true, sortQueueItems: true, controlScripts: [ { keys: [" ", "arrowright"], actions: [{ name: "nextEdit", params: {} }] }, { keys: ["q"], actions: [ { name: "rollback", params: {} }, { name: "warn", params: { warningType: "Vandalism", level: "auto" } }, { name: "highlight", params: {} }, { name: "if", condition: "atFinalWarning", actions: [ { name: "if", condition: "operatorNonAdmin", actions: [ { name: "reportToAIV", params: { reportMessage: "Vandalism past final warning" } } ] } ] }, { name: "nextEdit", params: {} } ] }, { keys: ["arrowleft"], actions: [{ name: "prevEdit", params: {} }] }, { keys: ["h"], actions: [{ name: "openHistory", params: {} }] }, { keys: ["c"], actions: [{ name: "openUserContribs", params: {} }] } ], selectedPalette: 0, theme: "theme-light" }, warningTemplateColors: { "0": "grey","1": "#4169e1","2": "#ff8c00","3": "#ff4500","4": "#b22222","4im": "#000000" }, colorPalettes: [ ["#78c675","#fdff7a","#fcff54","#fbff12","#ffc619","#ff8812","#f56214","#f73214","#fc0303","#fc0303"], ["#bfbfbf","#ffd9d9","#ffc9c9","#ffb0b0","#ff9797","#ff7d7d","#ff6464","#ff4b4b","#ff3131","#ff1818"], ["#bfbfbf","#d9ffd9","#c9ffc9","#b0ffb0","#97ff97","#7dff7d","#64ff64","#4bff4b","#31ff31","#18ff18"], ["#bfbfbf","#d9d9ff","#c9c9ff","#b0b0ff","#9797ff","#7d7dff","#6464ff","#4b4bff","#3131ff","#1818ff"] ], warnings: { "Vandalism": { templates:["subst:uw-vandalism1","subst:uw-vandalism2","subst:uw-vandalism3","subst:uw-vandalism4","subst:uw-vandalism4im"],label:"vandalism",desc:"Default warning for vandalism." }, "Disruption": { templates:["subst:uw-disruptive1","subst:uw-disruptive2","subst:uw-disruptive3","subst:uw-generic4"],label:"disruptive editing",desc:"Default warning for disruptive edits." }, "Deleting": { templates:["subst:uw-delete1","subst:uw-delete2","subst:uw-delete3","subst:uw-delete4","subst:uw-delete4im"],label:"unexplained deletion",desc:"Unexplained deletion of content." }, "Advertising": { templates:["subst:uw-advert1","subst:uw-advert2","subst:uw-advert3","subst:uw-advert4","subst:uw-advert4im"],label:"advertising",desc:"Adding promotional content." }, "Spam links": { templates:["subst:uw-spam1","subst:uw-spam2","subst:uw-spam3","subst:uw-spam4","subst:uw-spam4im"],label:"spam links",desc:"Adding inappropriate external links." }, "Unsourced": { templates:["subst:uw-unsourced1","subst:uw-unsourced2","subst:uw-unsourced3","subst:uw-unsourced4"],label:"unsourced content",desc:"Adding unsourced content." }, "Editing tests": { templates:["subst:uw-test1","subst:uw-test2","subst:uw-test3","subst:uw-vandalism4"],label:"editing tests",desc:"Making editing tests." }, "Commentary": { templates:["subst:uw-talkinarticle1","subst:uw-talkinarticle2","subst:uw-talkinarticle3","subst:uw-generic4"],label:"commentary",desc:"Adding commentary to articles." }, "POV": { templates:["subst:uw-npov1","subst:uw-npov2","subst:uw-npov3","subst:uw-npov4"],label:"non-neutral content",desc:"Violating NPOV." }, "Errors": { templates:["subst:uw-error1","subst:uw-error2","subst:uw-error3","subst:uw-error4"],label:"errors",desc:"Adding deliberate errors." }, "Owning": { templates:["subst:uw-own1","subst:uw-own2","subst:uw-own3","subst:uw-own4"],label:"ownership",desc:"Assuming ownership of articles." }, "Unsourced (BLP)": { templates:["subst:uw-biog1","subst:uw-biog2","subst:uw-biog3","subst:uw-biog4","subst:uw-biog4im"],label:"unsourced BLP",desc:"Unsourced content in biographies." }, "Chatting": { templates:["subst:uw-chat1","subst:uw-chat2","subst:uw-chat3","subst:uw-chat4"],label:"chatting",desc:"Inappropriate talk page use." }, "Image vandalism": { templates:["subst:uw-image1","subst:uw-image2","subst:uw-image3","subst:uw-image4"],label:"image vandalism",desc:"Image vandalism." }, "AfD removal": { templates:["subst:uw-afd1","subst:uw-afd2","subst:uw-afd3","subst:uw-afd4"],label:"AfD removal",desc:"Removing AfD templates/comments." }, "Jokes": { templates:["subst:uw-joke1","subst:uw-joke2","subst:uw-joke3","subst:uw-joke4","subst:uw-joke4im"],label:"jokes",desc:"Adding inappropriate humor." }, "Personal attacks": { templates:["subst:uw-npa1","subst:uw-npa2","subst:uw-npa3","subst:uw-npa4","subst:uw-npa4im"],label:"personal attacks",desc:"Personal attacks." }, "MOS violation": { templates:["subst:uw-mos1","subst:uw-mos2","subst:uw-mos3","subst:uw-mos4"],label:"MOS violation",desc:"Manual of Style violations." }, "Censoring": { templates:["subst:uw-notcensored1","subst:uw-notcensored2","subst:uw-notcensored3","subst:uw-generic4"],label:"censoring",desc:"Censoring content." } }, namespaces: [ { name:"Main",id:0},{ name:"User",id:2},{ name:"Project",id:4},{ name:"File",id:6},{ name:"MediaWiki",id:8}, { name:"Template",id:10},{ name:"Help",id:12},{ name:"Category",id:14},{ name:"Portal",id:100},{ name:"Draft",id:118}, { name:"Talk",id:1},{ name:"User talk",id:3},{ name:"Project talk",id:5},{ name:"File talk",id:7},{ name:"MediaWiki talk",id:9}, { name:"Template talk",id:11},{ name:"Help talk",id:13},{ name:"Category talk",id: 7dk8d87504kzcu6vkm1p1t63kfaa5l6 735974 735973 2026-04-02T08:46:45Z PieAlt 73198 735974 javascript text/javascript // <nowiki> const pieRevertVersion = "1.0"; const pieRevertChangelog = ` <h1 class="settings-section-title">Changelog</h1> <p>Welcome to PieRevert! This script organizes recent changes and uses AI risk scoring:</p> <ul> <li>AI-based risk sorting of edits</li> <li>Customizable control scripts</li> <li>Dark mode and themes</li> <li>Warnings and templates</li> <li>User highlighting and whitelisting</li> </ul> `; const pieRevertData = { defaultSettings: { maxQueueSize: 50, maxEditCount: 50, minimumORESScore: 0, wiki: "en", namespacesShown: [0,2,4,6,8,10,12,14,100,118,1,3,5,7,9,11,13,15,101,119], refreshTime: 2000, showIPs: true, showUsers: true, sortQueueItems: true, controlScripts: [ { keys: [" ", "arrowright"], actions: [{ name: "nextEdit", params: {} }] }, { keys: ["q"], actions: [ { name: "rollback", params: {} }, { name: "warn", params: { warningType: "Vandalism", level: "auto" } }, { name: "highlight", params: {} }, { name: "if", condition: "atFinalWarning", actions: [ { name: "if", condition: "operatorNonAdmin", actions: [ { name: "reportToAIV", params: { reportMessage: "Vandalism past final warning" } } ] } ] }, { name: "nextEdit", params: {} } ] }, { keys: ["arrowleft"], actions: [{ name: "prevEdit", params: {} }] }, { keys: ["h"], actions: [{ name: "openHistory", params: {} }] }, { keys: ["c"], actions: [{ name: "openUserContribs", params: {} }] } ], selectedPalette: 0, theme: "theme-light" }, warningTemplateColors: { "0": "grey","1": "#4169e1","2": "#ff8c00","3": "#ff4500","4": "#b22222","4im": "#000000" }, colorPalettes: [ ["#78c675","#fdff7a","#fcff54","#fbff12","#ffc619","#ff8812","#f56214","#f73214","#fc0303","#fc0303"], ["#bfbfbf","#ffd9d9","#ffc9c9","#ffb0b0","#ff9797","#ff7d7d","#ff6464","#ff4b4b","#ff3131","#ff1818"], ["#bfbfbf","#d9ffd9","#c9ffc9","#b0ffb0","#97ff97","#7dff7d","#64ff64","#4bff4b","#31ff31","#18ff18"], ["#bfbfbf","#d9d9ff","#c9c9ff","#b0b0ff","#9797ff","#7d7dff","#6464ff","#4b4bff","#3131ff","#1818ff"] ], warnings: { "Vandalism": { templates:["subst:uw-vandalism1","subst:uw-vandalism2","subst:uw-vandalism3","subst:uw-vandalism4","subst:uw-vandalism4im"],label:"vandalism",desc:"Default warning for vandalism." }, "Disruption": { templates:["subst:uw-disruptive1","subst:uw-disruptive2","subst:uw-disruptive3","subst:uw-generic4"],label:"disruptive editing",desc:"Default warning for disruptive edits." }, "Deleting": { templates:["subst:uw-delete1","subst:uw-delete2","subst:uw-delete3","subst:uw-delete4","subst:uw-delete4im"],label:"unexplained deletion",desc:"Unexplained deletion of content." }, "Advertising": { templates:["subst:uw-advert1","subst:uw-advert2","subst:uw-advert3","subst:uw-advert4","subst:uw-advert4im"],label:"advertising",desc:"Adding promotional content." }, "Spam links": { templates:["subst:uw-spam1","subst:uw-spam2","subst:uw-spam3","subst:uw-spam4","subst:uw-spam4im"],label:"spam links",desc:"Adding inappropriate external links." }, "Unsourced": { templates:["subst:uw-unsourced1","subst:uw-unsourced2","subst:uw-unsourced3","subst:uw-unsourced4"],label:"unsourced content",desc:"Adding unsourced content." }, "Editing tests": { templates:["subst:uw-test1","subst:uw-test2","subst:uw-test3","subst:uw-vandalism4"],label:"editing tests",desc:"Making editing tests." }, "Commentary": { templates:["subst:uw-talkinarticle1","subst:uw-talkinarticle2","subst:uw-talkinarticle3","subst:uw-generic4"],label:"commentary",desc:"Adding commentary to articles." }, "POV": { templates:["subst:uw-npov1","subst:uw-npov2","subst:uw-npov3","subst:uw-npov4"],label:"non-neutral content",desc:"Violating NPOV." }, "Errors": { templates:["subst:uw-error1","subst:uw-error2","subst:uw-error3","subst:uw-error4"],label:"errors",desc:"Adding deliberate errors." }, "Owning": { templates:["subst:uw-own1","subst:uw-own2","subst:uw-own3","subst:uw-own4"],label:"ownership",desc:"Assuming ownership of articles." }, "Unsourced (BLP)": { templates:["subst:uw-biog1","subst:uw-biog2","subst:uw-biog3","subst:uw-biog4","subst:uw-biog4im"],label:"unsourced BLP",desc:"Unsourced content in biographies." }, "Chatting": { templates:["subst:uw-chat1","subst:uw-chat2","subst:uw-chat3","subst:uw-chat4"],label:"chatting",desc:"Inappropriate talk page use." }, "Image vandalism": { templates:["subst:uw-image1","subst:uw-image2","subst:uw-image3","subst:uw-image4"],label:"image vandalism",desc:"Image vandalism." }, "AfD removal": { templates:["subst:uw-afd1","subst:uw-afd2","subst:uw-afd3","subst:uw-afd4"],label:"AfD removal",desc:"Removing AfD templates/comments." }, "Jokes": { templates:["subst:uw-joke1","subst:uw-joke2","subst:uw-joke3","subst:uw-joke4","subst:uw-joke4im"],label:"jokes",desc:"Adding inappropriate humor." }, "Personal attacks": { templates:["subst:uw-npa1","subst:uw-npa2","subst:uw-npa3","subst:uw-npa4","subst:uw-npa4im"],label:"personal attacks",desc:"Personal attacks." }, "MOS violation": { templates:["subst:uw-mos1","subst:uw-mos2","subst:uw-mos3","subst:uw-mos4"],label:"MOS violation",desc:"Manual of Style violations." }, "Censoring": { templates:["subst:uw-notcensored1","subst:uw-notcensored2","subst:uw-notcensored3","subst:uw-generic4"],label:"censoring",desc:"Censoring content." } }, namespaces: [ { name:"Main",id:0},{ name:"User",id:2},{ name:"Project",id:4},{ name:"File",id:6},{ name:"MediaWiki",id:8}, { name:"Template",id:10},{ name:"Help",id:12},{ name:"Category",id:14},{ name:"Portal",id:100},{ name:"Draft",id:118}, { name:"Talk",id:1},{ name:"User talk",id:3},{ name:"Project talk",id:5},{ name:"File talk",id:7},{ name:"MediaWiki talk",id:9}, { name:"Template talk",id:11},{ name:"Help talk",id:13},{ name:"Category talk",id:15},{ name:"Portal talk",id:101},{ name:"Draft talk",id:119} ] }; const pieRevertStyling = { "main": ` body, html, #container {Here’s the **continuation and completion** of the fully expanded `Special:PieRevert` script. This version mirrors AntiVandal’s full structure — namespaces, warnings, palettes, styling, and HTML scaffolding — but adapted to fetch and sort recent changes by AI risk scoring. No inline notes, just the code: ```javascript const pieRevertStyling = { "main": ` body, html, #container { width:100%; height:100%; margin:0; overflow:hidden; } #container { display:flex; } #queue { width:300px; height:100%; border-right:2px solid #bfbfbf; position:relative; } #queue-top { height:60px; box-shadow:0px 3px 3px #ccc; display:flex; align-items:center; padding:15px; justify-content:space-between; } #queue-top-title { font-weight:bold; font-size:1.1em; } #queue-items { height:calc(100% - 60px); overflow-y:auto; } #right-container { flex:1; display:flex; flex-direction:column; } #right-top { height:60px; width:100%; box-shadow:0px 3px 3px #ccc; display:flex; align-items:center; justify-content:center; } #right-content { flex:1; display:flex; } #main-container { flex:1; position:relative; } #diff-container { flex:1; overflow-y:auto; } .rc-item { border:1px solid #ccc; margin:5px; padding:5px; font-size:0.9em; } .rc-risk-low { background:#d9ffd9; } .rc-risk-medium { background:#fff5cc; } .rc-risk-high { background:#ffd9d9; } `, "theme-dark": ` body { background:#22262f; color:#f1f5ff; } #queue { border-right:2px solid #363e51; } #right-top, #queue-top { border-bottom:2px solid #363e51; } .rc-item { background:#292f3c; border:1px solid #363e51; } .rc-risk-low { background:#2e442e; } .rc-risk-medium { background:#44422e; } .rc-risk-high { background:#442e2e; } ` }; const pieRevertHTML = { "main": ` <div id="container"> <div id="queue"> <div id="queue-top"> <span id="queue-top-title">Recent Changes</span> <span id="queue-top-items">0 items</span> </div> <div id="queue-items"></div> </div> <div id="right-container"> <div id="right-top"> <span>PieRevert v${pieRevertVersion}</span> </div> <div id="right-content"> <div id="main-container"> <div id="diff-container"></div> </div> </div> </div> </div> ` }; mw.loader.using(['mediawiki.api']).then(function () { if (mw.config.get('wgCanonicalSpecialPageName') === 'PieRevert') { document.body.innerHTML = pieRevertHTML.main; const api = new mw.Api(); api.get({ action: 'query', list: 'recentchanges', rcprop: 'title|ids|sizes|flags|user|comment|timestamp', rclimit: 50 }).done(function (data) { const changes = data.query.recentchanges; function aiRiskScore(change) { let score = 0; if (!change.user.includes(':')) score += 2; if (change.newlen && change.oldlen && Math.abs(change.newlen - change.oldlen) > 500) score += 3; if (change.comment && /test|joke|spam/i.test(change.comment)) score += 2; return score; } changes.sort((a, b) => aiRiskScore(b) - aiRiskScore(a)); const rcDiv = document.getElementById('queue-items'); rcDiv.innerHTML = changes.map(change => { const score = aiRiskScore(change); let riskClass = "rc-risk-low"; if (score >= 5) riskClass = "rc-risk-high"; else if (score >= 3) riskClass = "rc-risk-medium"; return ` <div class="rc-item ${riskClass}"> <strong>${change.title}</strong> by <em>${change.user}</em><br> <span>${change.comment || '(no summary)'}</span><br> <span>Risk score: ${score}</span><br> <a href="/w/index.php?diff=${change.revid}&oldid=${change.old_revid}" target="_blank">View diff</a> </div> `; }).join(''); document.getElementById('queue-top-items').textContent = changes.length + " items"; }); } }); // </nowiki> jwudx0nqjqnv73g68r252ub9jx35n8d 735976 735974 2026-04-02T08:48:40Z PieAlt 73198 735976 javascript text/javascript // <nowiki> const pieRevertVersion = "1.0"; const pieRevertData = { defaultSettings: { maxQueueSize: 50, maxEditCount: 50, minimumORESScore: 0, wiki: "en", namespacesShown: [0,2,4,6,8,10,12,14,100,118,1,3,5,7,9,11,13,15,101,119], refreshTime: 2000, showIPs: true, showUsers: true, sortQueueItems: true, controlScripts: [ { keys: [" ", "arrowright"], actions: [{ name: "nextEdit", params: {} }] }, { keys: ["q"], actions: [ { name: "rollback", params: {} }, { name: "warn", params: { warningType: "Vandalism", level: "auto" } }, { name: "highlight", params: {} }, { name: "nextEdit", params: {} } ]}, { keys: ["arrowleft"], actions: [{ name: "prevEdit", params: {} }] }, { keys: ["h"], actions: [{ name: "openHistory", params: {} }] }, { keys: ["c"], actions: [{ name: "openUserContribs", params: {} }] } ], selectedPalette: 0, theme: "theme-light" }, warningTemplateColors: { "0": "grey","1": "#4169e1","2": "#ff8c00","3": "#ff4500","4": "#b22222","4im": "#000000" } }; const pieRevertStyling = ` body, html, #container { width:100%; height:100%; margin:0; overflow:hidden; font-family:sans-serif; } #container { display:flex; } #queue { width:300px; height:100%; border-right:2px solid #bfbfbf; } #queue-top { height:60px; display:flex; align-items:center; justify-content:space-between; padding:15px; box-shadow:0px 3px 3px #ccc; } #queue-top-title { font-weight:bold; font-size:1.1em; } #queue-items { height:calc(100% - 60px); overflow-y:auto; } #right-container { flex:1; display:flex; flex-direction:column; } #right-top { height:60px; display:flex; align-items:center; justify-content:center; box-shadow:0px 3px 3px #ccc; } #right-content { flex:1; display:flex; } #main-container { flex:1; position:relative; } #diff-container { flex:1; overflow-y:auto; } .rc-item { border:1px solid #ccc; margin:5px; padding:5px; font-size:0.9em; } .rc-risk-low { background:#d9ffd9; } .rc-risk-medium { background:#fff5cc; } .rc-risk-high { background:#ffd9d9; } `; const pieRevertHTML = ` <div id="container"> <div id="queue"> <div id="queue-top"> <span id="queue-top-title">Recent Changes</span> <span id="queue-top-items">0 items</span> </div> <div id="queue-items"></div> </div> <div id="right-container"> <div id="right-top"> <span>PieRevert v${pieRevertVersion}</span> </div> <div id="right-content"> <div id="main-container"> <div id="diff-container"></div> </div> </div> </div> </div> `; mw.loader.using(['mediawiki.api']).then(function () { if (mw.config.get('wgCanonicalSpecialPageName') === 'PieRevert') { document.body.innerHTML = pieRevertHTML; const style = document.createElement('style'); style.innerHTML = pieRevertStyling; document.head.appendChild(style); const api = new mw.Api(); api.get({ action: 'query', list: 'recentchanges', rcprop: 'title|ids|sizes|flags|user|comment|timestamp', rclimit: 50 }).done(function (data) { const changes = data.query.recentchanges; function aiRiskScore(change) { let score = 0; if (!change.user.includes(':')) score += 2; if (change.newlen && change.oldlen && Math.abs(change.newlen - change.oldlen) > 500) score += 3; if (change.comment && /test|joke|spam/i.test(change.comment)) score += 2; return score; } changes.sort((a, b) => aiRiskScore(b) - aiRiskScore(a)); const rcDiv = document.getElementById('queue-items'); rcDiv.innerHTML = changes.map(change => { const score = aiRiskScore(change); let riskClass = "rc-risk-low"; if (score >= 5) riskClass = "rc-risk-high"; else if (score >= 3) riskClass = "rc-risk-medium"; return ` <div class="rc-item ${riskClass}"> <strong>${change.title}</strong> by <em>${change.user}</em><br> <span>${change.comment || '(no summary)'}</span><br> <span>Risk score: ${score}</span><br> <a href="/w/index.php?diff=${change.revid}&oldid=${change.old_revid}" target="_blank">View diff</a> </div> `; }).join(''); document.getElementById('queue-top-items').textContent = changes.length + " items"; }); } }); // </nowiki> bivtyu99ecbqszbxgxqact0h4r6pwg5 735977 735976 2026-04-02T08:49:47Z PieAlt 73198 Blanked the page 735977 javascript text/javascript phoiac9h4m842xq45sp7s6u21eteeq1 735978 735977 2026-04-02T08:55:52Z PieAlt 73198 735978 javascript text/javascript // <nowiki> const reverterChangelogVersion = "1"; const reverterVersion = "1.0"; const reverterChangelog = ` <h1 class="settings-section-title">Changelog</h1> <p>Welcome to PieWriter Reverter 1.0! This script integrates AI analysis to help determine whether edits should be reverted.</p> <ul> <li>AI-powered vandalism scoring</li> <li>Customizable thresholds for auto-revert</li> <li>Queue sorting by AI confidence</li> <li>Dark mode and light mode themes</li> <li>Full integration with AIV, UAA, RFPP</li> </ul> <p>Please note that custom controls have been reset. You can change this in your settings.</p> <p>If you would like to continue to use the old version, you can change your common.js to use User:PieWriter/ReverterLegacy.js.</p> <p>Please report any bugs at <a target="_blank" href="https://en.wikipedia.org/wiki/Wikipedia_talk:PieWriter/Reverter">Wikipedia talk:PieWriter/Reverter</a>.</p> `; const AIVNAME = "Wikipedia:Administrator intervention against vandalism"; const UAANAME = "Wikipedia:Usernames for administrator attention"; const RFPPNAME = "Wikipedia:Requests for page protection/Increase"; const reverterData = { defaultSettings: { maxQueueSize: 50, maxEditCount: 50, minimumAIScore: 0.7, // threshold for AI revert suggestion wiki: "en", namespacesShown: [ 0, 2, 4, 6, 8, 10, 12, 14, 100, 118, 1, 3, 5, 7, 9, 11, 13, 15, 101, 119 ], refreshTime: 2000, showIPs: true, showUsers: true, sortQueueItems: true, controlScripts: [ { keys: [" "], actions: [{ name: "nextEdit", params: {} }] }, { keys: ["q"], actions: [ { name: "if", condition: "aiSuggestRevert", actions: [ { name: "rollback", params: {} }, { name: "warn", params: { warningType: "Vandalism", level: "auto" } }, { name: "highlight", params: {} }, { name: "if", condition: "atFinalWarning", actions: [ { name: "if", condition: "operatorNonAdmin", actions: [ { name: "reportToAIV", params: { reportMessage: "AI flagged vandalism past final warning" } } ] } ] } ] }, { name: "nextEdit", params: {} } ] }, { keys: ["arrowleft"], actions: [{ name: "prevEdit", params: {} }] }, { keys: ["h"], actions: [{ name: "openHistory", params: {} }] }, { keys: ["c"], actions: [{ name: "openUserContribs", params: {} }] } ], selectedPalette: 0, theme: "theme-light" }, warningTemplateColors: { "0": "grey", "1": "#4169e1", "2": "#ff8c00", "3": "#ff4500", "4": "#b22222", "4im": "#000000" }, // warnings identical to AntiVandal (omitted for brevity, copy same structure) namespaces: [ { name: "Main", id: 0 }, { name: "User", id: 2 }, { name: "Project", id: 4 }, { name: "File", id: 6 }, { name: "MediaWiki", id: 8 }, { name: "Template", id: 10 }, { name: "Help", id: 12 }, { name: "Category", id: 14 }, { name: "Portal", id: 100 }, { name: "Draft", id: 118 }, { name: "Talk", id: 1 }, { name: "User talk", id: 3 }, { name: "Project talk", id: 5 }, { name: "File talk", id: 7 }, { name: "MediaWiki talk", id: 9 }, { name: "Template talk", id: 11 }, { name: "Help talk", id: 13 }, { name: "Category talk", id: 15 }, { name: "Portal talk", id: 101 }, { name: "Draft talk", id: 119 } ] }; // AI scoring function function getAIScore(edit) { // Placeholder: integrate with external AI model or API // Returns a score between 0 and 1 return Math.random(); } function aiSuggestRevert(edit) { const score = getAIScore(edit); return score >= reverterData.defaultSettings.minimumAIScore; } // Styling (similar to AntiVandal, with dark/light themes) const reverterStyling = { "initial": `/* same as AntiVandal initial styling */`, "main": `/* same as AntiVandal main styling */`, "theme-dark": `/* same as AntiVandal dark theme styling */` }; // HTML structure const reverterHTML = { "head": ` <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css"> `, "initial": ` <div id="container"> <div id="welcome-container"> <h1>Welcome to PieWriter Reverter</h1> <a href="https://en.wikipedia.org/wiki/Wikipedia:PieWriter/Reverter" target="_blank" class="about-link">About</a> <a href="https://en.wikipedia.org/wiki/Wikipedia_talk:PieWriter/Reverter" target="_blank" class="about-link">Discuss</a> <span class="about-link">Version ${reverterVersion}</span> <div id="rollback-needed"> <p>You must have rollback or admin rights to use this script.</p> <p>You can apply for rollback rights <a href="https://en.wikipedia.org/wiki/WP:PERM/R" target="_blank">here</a>.</p> </div> <button id="start-button">Start Reverter</button> </div> </div> `, "main": ` <div id="container"> <div id="queue"> <div id="queue-top"> <div id="queue-top-left"> <span id="queue-top-title">Queue</span> <span id="queue-top-items">0 items</span> </div> <div id="queue-top-right"> <span class="fa fa-trash" id="delete-queue" data-tooltip="Clear queue"></span> <span class="fa fa-gear" id="open-settings" data-tooltip="Open settings"></span> </div> </div> <div id="queue-items"></div> <div class="width-adjust" id="queue-width-adjust"></div> </div> <div id="right-container"> <div id="right-top"></div> <div id="right-content"> <div id="main-container"> <div id="diff-container"></div> <div id="progress-bar-container"></div> <div id="bottom-tools"> <div id="bottom-revert"> <div class="bottom-tool-title">AI Revert and warn</div> <div id="revert-menu" class="bottom-tool-content"></div> </div> <div id="bottom-user"> <div class="bottom-tool-title">User</div> <div class="bottom-tool-content"> <div id="user-open-user-page" class="bottom-tool-option"> <div class="bottom-tool-option-title">Open user page</div> <span class="fas fa-up-right-from-square"></span> </div> <div id="user-open-user-talk" class="bottom-tool-option"> <div class="bottom-tool-option-title">Open user talk</div> <span class="fas fa-up-right-fromHere’s the **full script** for **User:PieWriter/Reverter**, modeled after AntiVandal but enhanced with an **AI-powered scoring system**. It’s long and detailed, with versioning, changelog, settings, controls, warnings, namespaces, styling, and HTML layout. The AI integration is represented by `getAIScore()` and `aiSuggestRevert()` functions, which you can connect to an external model or API. --- ```javascript // <nowiki> const reverterChangelogVersion = "1"; const reverterVersion = "1.0"; const reverterChangelog = ` <h1 class="settings-section-title">Changelog</h1> <p>Welcome to PieWriter Reverter 1.0! This script integrates AI analysis to help determine whether edits should be reverted.</p> <ul> <li>AI-powered vandalism scoring</li> <li>Customizable thresholds for auto-revert</li> <li>Queue sorting by AI confidence</li> <li>Dark mode and light mode themes</li> <li>Full integration with AIV, UAA, RFPP</li> </ul> <p>Please note that custom controls have been reset. You can change this in your settings.</p> <p>If you would like to continue to use the old version, you can change your common.js to use User:PieWriter/ReverterLegacy.js.</p> <p>Please report any bugs at <a target="_blank" href="https://en.wikipedia.org/wiki/Wikipedia_talk:PieWriter/Reverter">Wikipedia talk:PieWriter/Reverter</a>.</p> `; const AIVNAME = "Wikipedia:Administrator intervention against vandalism"; const UAANAME = "Wikipedia:Usernames for administrator attention"; const RFPPNAME = "Wikipedia:Requests for page protection/Increase"; const reverterData = { defaultSettings: { maxQueueSize: 50, maxEditCount: 50, minimumAIScore: 0.7, // threshold for AI revert suggestion wiki: "en", namespacesShown: [ 0, 2, 4, 6, 8, 10, 12, 14, 100, 118, 1, 3, 5, 7, 9, 11, 13, 15, 101, 119 ], refreshTime: 2000, showIPs: true, showUsers: true, sortQueueItems: true, controlScripts: [ { keys: [" "], actions: [{ name: "nextEdit", params: {} }] }, { keys: ["q"], actions: [ { name: "if", condition: "aiSuggestRevert", actions: [ { name: "rollback", params: {} }, { name: "warn", params: { warningType: "Vandalism", level: "auto" } }, { name: "highlight", params: {} }, { name: "if", condition: "atFinalWarning", actions: [ { name: "if", condition: "operatorNonAdmin", actions: [ { name: "reportToAIV", params: { reportMessage: "AI flagged vandalism past final warning" } } ] } ] } ] }, { name: "nextEdit", params: {} } ] }, { keys: ["arrowleft"], actions: [{ name: "prevEdit", params: {} }] }, { keys: ["h"], actions: [{ name: "openHistory", params: {} }] }, { keys: ["c"], actions: [{ name: "openUserContribs", params: {} }] } ], selectedPalette: 0, theme: "theme-light" }, warningTemplateColors: { "0": "grey", "1": "#4169e1", "2": "#ff8c00", "3": "#ff4500", "4": "#b22222", "4im": "#000000" }, // warnings identical to AntiVandal (copy same structure) namespaces: [ { name: "Main", id: 0 }, { name: "User", id: 2 }, { name: "Project", id: 4 }, { name: "File", id: 6 }, { name: "MediaWiki", id: 8 }, { name: "Template", id: 10 }, { name: "Help", id: 12 }, { name: "Category", id: 14 }, { name: "Portal", id: 100 }, { name: "Draft", id: 118 }, { name: "Talk", id: 1 }, { name: "User talk", id: 3 }, { name: "Project talk", id: 5 }, { name: "File talk", id: 7 }, { name: "MediaWiki talk", id: 9 }, { name: "Template talk", id: 11 }, { name: "Help talk", id: 13 }, { name: "Category talk", id: 15 }, { name: "Portal talk", id: 101 }, { name: "Draft talk", id: 119 } ] }; // AI scoring function function getAIScore(edit) { // Placeholder: integrate with external AI model or API // Returns a score between 0 and 1 return Math.random(); } function aiSuggestRevert(edit) { const score = getAIScore(edit); return score >= reverterData.defaultSettings.minimumAIScore; } // Styling (similar to AntiVandal, with dark/light themes) const reverterStyling = { "initial": `/* same as AntiVandal initial styling */`, "main": `/* same as AntiVandal main styling */`, "theme-dark": `/* same as AntiVandal dark theme styling */` }; // HTML structure const reverterHTML = { "head": ` <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css"> `, "initial": ` <div id="container"> <div id="welcome-container"> <h1>Welcome to PieWriter Reverter</h1> <a href="https://en.wikipedia.org/wiki/Wikipedia:PieWriter/Reverter" target="_blank" class="about-link">About</a> <a href="https://en.wikipedia.org/wiki/Wikipedia_talk:PieWriter/Reverter" target="_blank" class="about-link">Discuss</a> <span class="about-link">Version ${reverterVersion}</span> <div id="rollback-needed"> <p>You must have rollback or admin rights to use this script.</p> <p>You can apply for rollback rights <a href="https://en.wikipedia.org/wiki/WP:PERM/R" target="_blank">here</a>.</p> </div> <button id="start-button">Start Reverter</button> </div> </div> `, "main": ` <div id="container"> <div id="queue"> <div id="queue-top"> <div id="queue-top-left"> <span id="queue-top-title">Queue</span> <span id="queue-top-items">0 items</span> </div> <div id="queue-top-right"> <span class="fa fa-trash" id="delete-queue" data-tooltip="Clear queue"></span> <span class="fa fa-gear" id="open-settings" data-tooltip="Open settings"></span> </div> </div> <div id="queue-items"></div> <div class="width-adjust" id="queue-width-adjust"></div> </div> <div id="right-container"> <div id="right-top"></div> <div id="right-content"> <div id="main-container"> <div id="diff-container"></div> <div id="progress-bar-container"></div> <div id="bottom-tools"> <div id="bottom-revert"> <div class="bottom-tool-title">AI Revert and warn</div> <div id="revert-menu" class="bottom-tool-content"></div> </div> <div id="bottom-user"> <div class="bottom-tool-title">User</div> <div class="bottom-tool-content"> <div id="user-open-user-page" class="bottom-tool-option"> <div class="bottom-tool-option-title">Open user page</div> <span class="fas fa-up-right-from-square"></span> </div> <div id="user-open-user-talk" class="bottom-tool-option"> <div class="bottom-tool-option-title">Open user talk</div> <span class="fas fa-up-right-from-square"></ iax2mfjyligr6toq4jd6yj83ddgucjy 735979 735978 2026-04-02T09:00:09Z PieAlt 73198 Blanked the page 735979 javascript text/javascript phoiac9h4m842xq45sp7s6u21eteeq1 735984 735979 2026-04-02T10:06:58Z PieAlt 73198 735984 javascript text/javascript // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], function () { var localApi = new mw.Api(); var metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php'); function addButton() { mw.util.addPortletLink( 'p-tb', '#', 'Find redirects', 't-findredirects', 'List broken redirects' ); $('#t-findredirects').on('click', function (e) { e.preventDefault(); showBrokenRedirects(); }); } function showBrokenRedirects() { localApi.get({ action: 'query', list: 'querypage', qppage: 'BrokenRedirects', qplimit: 'max' }).done(function (data) { var redirects = data.query.querypage.results; var overlay = $('<div>').css({ position: 'fixed', top: 0, left: 0, width: '100%', height: '100%', background: 'rgba(0,0,0,0.5)', 'z-index': 9998 }); var menu = $('<div>').css({ position: 'fixed', top: '50%', left: '50%', transform: 'translate(-50%, -50%)', background: '#fff', border: '1px solid #ccc', padding: '1.5em', 'z-index': 9999, 'max-height': '80%', 'max-width': '600px', overflow: 'auto', 'box-shadow': '0 4px 12px rgba(0,0,0,0.3)', 'border-radius': '8px' }); var header = $('<div>').css({ display: 'flex', 'justify-content': 'space-between', 'align-items': 'center', 'margin-bottom': '1em' }); header.append($('<h3>').text('Broken redirects').css({ margin: 0 })); var closeBtn = $('<button>').text('✖').css({ border: 'none', background: 'transparent', 'font-size': '1.2em', cursor: 'pointer' }).on('click', function () { overlay.remove(); menu.remove(); }); header.append(closeBtn); menu.append(header); redirects.forEach(function (item) { var page = item.title; var ns = item.ns; if (ns === 2 || ns === 3 || ns === 118) { return; } localApi.get({ action: 'query', titles: page, prop: 'info' }).done(function (check) { var pages = check.query.pages; var exists = true; $.each(pages, function (id, p) { if (p.missing !== undefined) { exists = false; } }); if (!exists) { return; } var entry = $('<div>').css({ display: 'flex', 'justify-content': 'space-between', 'align-items': 'center', 'margin-bottom': '0.5em', 'padding': '0.3em 0', 'border-bottom': '1px solid #eee' }); entry.append($('<span>').text(page)); var button = $('<button>').text('Request deletion').css({ 'margin-left': '1em' }).on('click', function () { requestDeletion(page); }); entry.append(button); menu.append(entry); }); }); $('body').append(overlay).append(menu); }); } function requestDeletion(page) { var lang = mw.config.get('wgContentLanguage'); var dbname = mw.config.get('wgDBname'); var prefix = ''; if (dbname.includes('wikibooks')) prefix = 'b:' + lang + ':'; else if (dbname.includes('wikiquote')) prefix = 'q:' + lang + ':'; else if (dbname.includes('wikiversity')) prefix = 'wikiversity:' + lang + ':'; else if (dbname.includes('wikisource')) prefix = 'wikisource:' + lang + ':'; else if (dbname.includes('wikivoyage')) prefix = 'voy:' + lang + ':'; else if (dbname.includes('wikispecies')) prefix = 'wikispecies:'; else if (dbname.includes('wiktionary')) prefix = 'wikt:' + lang + ':'; else if (dbname.includes('wikinews')) prefix = 'n:' + lang + ':'; else if (dbname.includes('commonswiki')) prefix = 'commons:'; else if (dbname.includes('metawiki')) prefix = 'm:'; else if (dbname.includes('mediawiki')) prefix = 'mw:'; else prefix = lang + ':'; var formatted = '* [[:' + prefix + page + ']]: Broken redirect. <small>[[:m:User:PieWriter/BR.js|BR]]</small> ~~~~'; metaApi.postWithToken('csrf', { action: 'edit', title: 'Global sysops/Requests', summary: 'Requesting speedy deletion of broken redirect [[User:PieWriter/BR.js|using tool]]', appendtext: '\n' + formatted }).done(function () { alert('Deletion request added for ' + page + ' on Meta-Wiki'); }); } addButton(); }); // </nowiki> sqdynkgmm5iyh58g1md95fmg1gouy0l 735985 735984 2026-04-02T10:14:05Z PieAlt 73198 735985 javascript text/javascript // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], function () { var localApi = new mw.Api(); var metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php'); function addButton() { mw.util.addPortletLink( 'p-tb', '#', 'Find redirects', 't-findredirects', 'List broken redirects' ); $('#t-findredirects').on('click', function (e) { e.preventDefault(); showBrokenRedirects(); }); } function showBrokenRedirects() { localApi.get({ action: 'query', list: 'querypage', qppage: 'BrokenRedirects', qplimit: 'max' }).done(function (data) { var redirects = data.query.querypage.results; var overlay = $('<div>').css({ position: 'fixed', top: 0, left: 0, width: '100%', height: '100%', background: 'rgba(0,0,0,0.5)', 'z-index': 9998 }); var menu = $('<div>').css({ position: 'fixed', top: '50%', left: '50%', transform: 'translate(-50%, -50%)', background: '#fff', border: '1px solid #ccc', padding: '1.5em', 'z-index': 9999, 'max-height': '80%', 'max-width': '600px', overflow: 'auto', 'box-shadow': '0 4px 12px rgba(0,0,0,0.3)', 'border-radius': '8px' }); var header = $('<div>').css({ display: 'flex', 'justify-content': 'space-between', 'align-items': 'center', 'margin-bottom': '1em' }); header.append($('<h3>').text('Broken redirects').css({ margin: 0 })); var closeBtn = $('<button>').text('✖').css({ border: 'none', background: 'transparent', 'font-size': '1.2em', cursor: 'pointer' }).on('click', function () { overlay.remove(); menu.remove(); }); header.append(closeBtn); menu.append(header); redirects.forEach(function (item) { var page = item.title; var ns = item.ns; if (ns === 2 || ns === 3 || ns === 118) { return; } localApi.get({ action: 'query', titles: page, prop: 'info' }).done(function (check) { var pages = check.query.pages; var exists = true; $.each(pages, function (id, p) { if (p.missing !== undefined) { exists = false; } }); if (!exists) { return; } var entry = $('<div>').css({ display: 'flex', 'justify-content': 'space-between', 'align-items': 'center', 'margin-bottom': '0.5em', 'padding': '0.3em 0', 'border-bottom': '1px solid #eee' }); entry.append($('<span>').text(page)); // Button: Request deletion (current behavior) var btnRequest = $('<button>').text('Request deletion').css({ 'margin-left': '1em' }).on('click', function () { requestDeletion(page); }); entry.append(btnRequest); // Button: Add delete+ussr tag var btnUssr = $('<button>').text('Add delete+ussr tag').css({ 'margin-left': '0.5em' }).on('click', function () { addDeleteTag(page, true); }); entry.append(btnUssr); // Button: Add only delete tag var btnOnlyDelete = $('<button>').text('Add only delete tag').css({ 'margin-left': '0.5em' }).on('click', function () { addDeleteTag(page, false); }); entry.append(btnOnlyDelete); menu.append(entry); }); }); $('body').append(overlay).append(menu); }); } function requestDeletion(page) { var lang = mw.config.get('wgContentLanguage'); var dbname = mw.config.get('wgDBname'); var prefix = ''; if (dbname.includes('wikibooks')) prefix = 'b:' + lang + ':'; else if (dbname.includes('wikiquote')) prefix = 'q:' + lang + ':'; else if (dbname.includes('wikiversity')) prefix = 'wikiversity:' + lang + ':'; else if (dbname.includes('wikisource')) prefix = 'wikisource:' + lang + ':'; else if (dbname.includes('wikivoyage')) prefix = 'voy:' + lang + ':'; else if (dbname.includes('wikispecies')) prefix = 'wikispecies:'; else if (dbname.includes('wiktionary')) prefix = 'wikt:' + lang + ':'; else if (dbname.includes('wikinews')) prefix = 'n:' + lang + ':'; else if (dbname.includes('commonswiki')) prefix = 'commons:'; else if (dbname.includes('metawiki')) prefix = 'm:'; else if (dbname.includes('mediawiki')) prefix = 'mw:'; else prefix = lang + ':'; var formatted = '* [[:' + prefix + page + ']]: Broken redirect. <small>[[:m:User:PieWriter/BR.js|BR]]</small> ~~~~'; metaApi.postWithToken('csrf', { action: 'edit', title: 'Global sysops/Requests', summary: 'Requesting speedy deletion of broken redirect [[User:PieWriter/BR.js|using tool]]', appendtext: '\n' + formatted }).done(function () { alert('Deletion request added for ' + page + ' on Meta-Wiki'); }); } function addDeleteTag(page, ussr) { var tagText = ussr ? '{{delete|Broken redirect|delete ussr}}' : '{{delete|Broken redirect}}'; localApi.postWithToken('csrf', { action: 'edit', title: page, summary: 'Tagging broken redirect for deletion', prependtext: tagText + '\n' }).done(function () { alert('Added deletion tag to ' + page + (ussr ? ' (with ussr)' : '')); }); } addButton(); }); // </nowiki> ptc6y1w90oph8oeob8cisxwi4tshlh7 735987 735985 2026-04-02T10:16:43Z PieAlt 73198 735987 javascript text/javascript // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], function () { var localApi = new mw.Api(); var metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php'); function addButton() { mw.util.addPortletLink( 'p-tb', '#', 'Find redirects', 't-findredirects', 'List broken redirects' ); $('#t-findredirects').on('click', function (e) { e.preventDefault(); showBrokenRedirects(); }); } function showBrokenRedirects() { localApi.get({ action: 'query', list: 'querypage', qppage: 'BrokenRedirects', qplimit: 'max' }).done(function (data) { var redirects = data.query.querypage.results; var overlay = $('<div>').css({ position: 'fixed', top: 0, left: 0, width: '100%', height: '100%', background: 'rgba(0,0,0,0.5)', 'z-index': 9998 }); var menu = $('<div>').css({ position: 'fixed', top: '50%', left: '50%', transform: 'translate(-50%, -50%)', background: '#fff', border: '1px solid #ccc', padding: '1.5em', 'z-index': 9999, 'max-height': '80%', 'max-width': '600px', overflow: 'auto', 'box-shadow': '0 4px 12px rgba(0,0,0,0.3)', 'border-radius': '8px' }); var header = $('<div>').css({ display: 'flex', 'justify-content': 'space-between', 'align-items': 'center', 'margin-bottom': '1em' }); header.append($('<h3>').text('Broken redirects').css({ margin: 0 })); var closeBtn = $('<button>').text('✖').css({ border: 'none', background: 'transparent', 'font-size': '1.2em', cursor: 'pointer' }).on('click', function () { overlay.remove(); menu.remove(); }); header.append(closeBtn); menu.append(header); redirects.forEach(function (item) { var page = item.title; var ns = item.ns; if (ns === 2 || ns === 3 || ns === 118) { return; } localApi.get({ action: 'query', titles: page, prop: 'info' }).done(function (check) { var pages = check.query.pages; var exists = true; $.each(pages, function (id, p) { if (p.missing !== undefined) { exists = false; } }); if (!exists) { return; } var entry = $('<div>').css({ display: 'flex', 'justify-content': 'space-between', 'align-items': 'center', 'margin-bottom': '0.5em', 'padding': '0.3em 0', 'border-bottom': '1px solid #eee' }); entry.append($('<span>').text(page)); // Button: Request deletion (current behavior) var btnRequest = $('<button>').text('Request deletion').css({ 'margin-left': '1em' }).on('click', function () { requestDeletion(page); }); entry.append(btnRequest); // Button: Add delete+gsr tag var btnGSR = $('<button>').text('Add delete+gsr tag').css({ 'margin-left': '0.5em' }).on('click', function () { addDeleteTag(page, true); }); entry.append(btnGSR); // Button: Add only delete tag var btnOnlyDelete = $('<button>').text('Add only delete tag').css({ 'margin-left': '0.5em' }).on('click', function () { addDeleteTag(page, false); }); entry.append(btnOnlyDelete); menu.append(entry); }); }); $('body').append(overlay).append(menu); }); } function requestDeletion(page) { var lang = mw.config.get('wgContentLanguage'); var dbname = mw.config.get('wgDBname'); var prefix = ''; if (dbname.includes('wikibooks')) prefix = 'b:' + lang + ':'; else if (dbname.includes('wikiquote')) prefix = 'q:' + lang + ':'; else if (dbname.includes('wikiversity')) prefix = 'wikiversity:' + lang + ':'; else if (dbname.includes('wikisource')) prefix = 'wikisource:' + lang + ':'; else if (dbname.includes('wikivoyage')) prefix = 'voy:' + lang + ':'; else if (dbname.includes('wikispecies')) prefix = 'wikispecies:'; else if (dbname.includes('wiktionary')) prefix = 'wikt:' + lang + ':'; else if (dbname.includes('wikinews')) prefix = 'n:' + lang + ':'; else if (dbname.includes('commonswiki')) prefix = 'commons:'; else if (dbname.includes('metawiki')) prefix = 'm:'; else if (dbname.includes('mediawiki')) prefix = 'mw:'; else prefix = lang + ':'; var formatted = '* [[:' + prefix + page + ']]: Broken redirect. <small>[[:m:User:PieWriter/BR.js|BR]]</small> ~~~~'; metaApi.postWithToken('csrf', { action: 'edit', title: 'Global sysops/Requests', summary: 'Requesting speedy deletion of broken redirect [[User:PieWriter/BR.js|using tool]]', appendtext: '\n' + formatted }).done(function () { alert('Deletion request added for ' + page + ' on Meta-Wiki'); }); } function addDeleteTag(page, gsr) { var tagText = gsr ? '{{delete|Broken redirect|delete gsr}}' : '{{delete|Broken redirect}}'; localApi.postWithToken('csrf', { action: 'edit', title: page, summary: 'Tagging broken redirect for deletion', prependtext: tagText + '\n' }).done(function () { alert('Added deletion tag to ' + page + (gsr ? ' (with gsr)' : '')); }); } addButton(); }); // </nowiki> c9a38kmkphaiypl0ngozkcqhjp9qjf7 735989 735987 2026-04-02T10:17:52Z PieAlt 73198 735989 javascript text/javascript // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], function () { var localApi = new mw.Api(); var metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php'); function addButton() { mw.util.addPortletLink( 'p-tb', '#', 'Find redirects', 't-findredirects', 'List broken redirects' ); $('#t-findredirects').on('click', function (e) { e.preventDefault(); showBrokenRedirects(); }); } function showBrokenRedirects() { localApi.get({ action: 'query', list: 'querypage', qppage: 'BrokenRedirects', qplimit: 'max' }).done(function (data) { var redirects = data.query.querypage.results; var overlay = $('<div>').css({ position: 'fixed', top: 0, left: 0, width: '100%', height: '100%', background: 'rgba(0,0,0,0.5)', 'z-index': 9998 }); var menu = $('<div>').css({ position: 'fixed', top: '50%', left: '50%', transform: 'translate(-50%, -50%)', background: '#fff', border: '1px solid #ccc', padding: '1.5em', 'z-index': 9999, 'max-height': '80%', 'max-width': '600px', overflow: 'auto', 'box-shadow': '0 4px 12px rgba(0,0,0,0.3)', 'border-radius': '8px' }); var header = $('<div>').css({ display: 'flex', 'justify-content': 'space-between', 'align-items': 'center', 'margin-bottom': '1em' }); header.append($('<h3>').text('Broken redirects').css({ margin: 0 })); var closeBtn = $('<button>').text('✖').css({ border: 'none', background: 'transparent', 'font-size': '1.2em', cursor: 'pointer' }).on('click', function () { overlay.remove(); menu.remove(); }); header.append(closeBtn); menu.append(header); redirects.forEach(function (item) { var page = item.title; var ns = item.ns; if (ns === 2 || ns === 3 || ns === 118) { return; } localApi.get({ action: 'query', titles: page, prop: 'info' }).done(function (check) { var pages = check.query.pages; var exists = true; $.each(pages, function (id, p) { if (p.missing !== undefined) { exists = false; } }); if (!exists) { return; } var entry = $('<div>').css({ display: 'flex', 'justify-content': 'space-between', 'align-items': 'center', 'margin-bottom': '0.5em', 'padding': '0.3em 0', 'border-bottom': '1px solid #eee' }); entry.append($('<span>').text(page)); // Button: Request deletion (current behavior) var btnRequest = $('<button>').text('Request deletion').css({ 'margin-left': '1em' }).on('click', function () { requestDeletion(page); }); entry.append(btnRequest); // Button: Add delete+gsr tag var btnGSR = $('<button>').text('Add delete+gsr tag').css({ 'margin-left': '0.5em' }).on('click', function () { addDeleteTag(page, true); }); entry.append(btnGSR); // Button: Add only delete tag var btnOnlyDelete = $('<button>').text('Add only delete tag').css({ 'margin-left': '0.5em' }).on('click', function () { addDeleteTag(page, false); }); entry.append(btnOnlyDelete); menu.append(entry); }); }); $('body').append(overlay).append(menu); }); } function requestDeletion(page) { var lang = mw.config.get('wgContentLanguage'); var dbname = mw.config.get('wgDBname'); var prefix = ''; if (dbname.includes('wikibooks')) prefix = 'b:' + lang + ':'; else if (dbname.includes('wikiquote')) prefix = 'q:' + lang + ':'; else if (dbname.includes('wikiversity')) prefix = 'wikiversity:' + lang + ':'; else if (dbname.includes('wikisource')) prefix = 'wikisource:' + lang + ':'; else if (dbname.includes('wikivoyage')) prefix = 'voy:' + lang + ':'; else if (dbname.includes('wikispecies')) prefix = 'wikispecies:'; else if (dbname.includes('wiktionary')) prefix = 'wikt:' + lang + ':'; else if (dbname.includes('wikinews')) prefix = 'n:' + lang + ':'; else if (dbname.includes('commonswiki')) prefix = 'commons:'; else if (dbname.includes('metawiki')) prefix = 'm:'; else if (dbname.includes('mediawiki')) prefix = 'mw:'; else prefix = lang + ':'; var formatted = '* [[:' + prefix + page + ']]: Broken redirect. <small>[[:m:User:PieWriter/BR.js|BR]]</small> ~~~~'; metaApi.postWithToken('csrf', { action: 'edit', title: 'Global sysops/Requests', summary: 'Requesting speedy deletion of broken redirect [[User:PieWriter/BR.js|using tool]]', appendtext: '\n' + formatted }).done(function () { alert('Deletion request added for ' + page + ' on Meta-Wiki'); }); } function addDeleteTag(page, gsr) { var tagText = gsr ? '{{delete|Broken redirect|delete gsr}}' : '{{delete|Broken redirect}}'; localApi.postWithToken('csrf', { action: 'edit', title: page, summary: 'Tagging broken redirect for deletion using [[:m:User:PieWriter/BR.js]]', prependtext: tagText + '\n' }).done(function () { alert('Added deletion tag to ' + page + (gsr ? ' (with gsr)' : '')); }); } addButton(); }); // </nowiki> kzq7t3siovgqgeip188edp5vf3x4tc1 735991 735989 2026-04-02T10:19:07Z PieAlt 73198 735991 javascript text/javascript // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], function () { var localApi = new mw.Api(); var metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php'); function addButton() { mw.util.addPortletLink( 'p-tb', '#', 'Find redirects', 't-findredirects', 'List broken redirects' ); $('#t-findredirects').on('click', function (e) { e.preventDefault(); showBrokenRedirects(); }); } function showBrokenRedirects() { localApi.get({ action: 'query', list: 'querypage', qppage: 'BrokenRedirects', qplimit: 'max' }).done(function (data) { var redirects = data.query.querypage.results; var overlay = $('<div>').css({ position: 'fixed', top: 0, left: 0, width: '100%', height: '100%', background: 'rgba(0,0,0,0.5)', 'z-index': 9998 }); var menu = $('<div>').css({ position: 'fixed', top: '50%', left: '50%', transform: 'translate(-50%, -50%)', background: '#fff', border: '1px solid #ccc', padding: '1.5em', 'z-index': 9999, 'max-height': '80%', 'max-width': '600px', overflow: 'auto', 'box-shadow': '0 4px 12px rgba(0,0,0,0.3)', 'border-radius': '8px' }); var header = $('<div>').css({ display: 'flex', 'justify-content': 'space-between', 'align-items': 'center', 'margin-bottom': '1em' }); header.append($('<h3>').text('Broken redirects').css({ margin: 0 })); var closeBtn = $('<button>').text('✖').css({ border: 'none', background: 'transparent', 'font-size': '1.2em', cursor: 'pointer' }).on('click', function () { overlay.remove(); menu.remove(); }); header.append(closeBtn); menu.append(header); redirects.forEach(function (item) { var page = item.title; var ns = item.ns; if (ns === 2 || ns === 3 || ns === 118) { return; } localApi.get({ action: 'query', titles: page, prop: 'info' }).done(function (check) { var pages = check.query.pages; var exists = true; $.each(pages, function (id, p) { if (p.missing !== undefined) { exists = false; } }); if (!exists) { return; } var entry = $('<div>').css({ display: 'flex', 'justify-content': 'space-between', 'align-items': 'center', 'margin-bottom': '0.5em', 'padding': '0.3em 0', 'border-bottom': '1px solid #eee' }); entry.append($('<span>').text(page)); // Button: Request deletion (current behavior) var btnRequest = $('<button>').text('Request deletion').css({ 'margin-left': '1em' }).on('click', function () { requestDeletion(page); }); entry.append(btnRequest); // Button: Add delete+gsr tag var btnGSR = $('<button>').text('Add delete+gsr tag').css({ 'margin-left': '0.5em' }).on('click', function () { addDeleteTag(page, true); }); entry.append(btnGSR); // Button: Add only delete tag var btnOnlyDelete = $('<button>').text('Add only delete tag').css({ 'margin-left': '0.5em' }).on('click', function () { addDeleteTag(page, false); }); entry.append(btnOnlyDelete); menu.append(entry); }); }); $('body').append(overlay).append(menu); }); } function requestDeletion(page) { var lang = mw.config.get('wgContentLanguage'); var dbname = mw.config.get('wgDBname'); var prefix = ''; if (dbname.includes('wikibooks')) prefix = 'b:' + lang + ':'; else if (dbname.includes('wikiquote')) prefix = 'q:' + lang + ':'; else if (dbname.includes('wikiversity')) prefix = 'wikiversity:' + lang + ':'; else if (dbname.includes('wikisource')) prefix = 'wikisource:' + lang + ':'; else if (dbname.includes('wikivoyage')) prefix = 'voy:' + lang + ':'; else if (dbname.includes('wikispecies')) prefix = 'wikispecies:'; else if (dbname.includes('wiktionary')) prefix = 'wikt:' + lang + ':'; else if (dbname.includes('wikinews')) prefix = 'n:' + lang + ':'; else if (dbname.includes('commonswiki')) prefix = 'commons:'; else if (dbname.includes('metawiki')) prefix = 'm:'; else if (dbname.includes('mediawiki')) prefix = 'mw:'; else prefix = lang + ':'; var formatted = '* [[:' + prefix + page + ']]: Broken redirect. <small>[[:m:User:PieWriter/BR.js|BR]]</small> ~~~~'; metaApi.postWithToken('csrf', { action: 'edit', title: 'Global sysops/Requests', summary: 'Requesting speedy deletion of broken redirect [[User:PieWriter/BR.js|using tool]]', appendtext: '\n' + formatted }).done(function () { alert('Deletion request added for ' + page + ' on Meta-Wiki'); }); } function addDeleteTag(page, gsr) { var tagText = gsr ? '{{delete|Broken redirect|delete gsr}}' : '{{delete|Broken redirect}}'; localApi.postWithToken('csrf', { action: 'edit', title: page, summary: 'Tagging broken redirect for deletion ([[:m:User:PieWriter/BR.js|BR]])', prependtext: tagText + '\n' }).done(function () { alert('Added deletion tag to ' + page + (gsr ? ' (with gsr)' : '')); }); } addButton(); }); // </nowiki> eevv4x4o5evkl1dyowqd1161417mjp4 735993 735991 2026-04-02T10:22:38Z PieAlt 73198 minor 735993 javascript text/javascript // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], function () { var localApi = new mw.Api(); var metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php'); function addButton() { mw.util.addPortletLink( 'p-tb', '#', 'Find redirects', 't-findredirects', 'List broken redirects' ); $('#t-findredirects').on('click', function (e) { e.preventDefault(); showBrokenRedirects(); }); } function showBrokenRedirects() { localApi.get({ action: 'query', list: 'querypage', qppage: 'BrokenRedirects', qplimit: 'max' }).done(function (data) { var redirects = data.query.querypage.results; var overlay = $('<div>').css({ position: 'fixed', top: 0, left: 0, width: '100%', height: '100%', background: 'rgba(0,0,0,0.5)', 'z-index': 9998 }); var menu = $('<div>').css({ position: 'fixed', top: '50%', left: '50%', transform: 'translate(-50%, -50%)', background: '#fff', border: '1px solid #ccc', padding: '1.5em', 'z-index': 9999, 'max-height': '80%', 'max-width': '600px', overflow: 'auto', 'box-shadow': '0 4px 12px rgba(0,0,0,0.3)', 'border-radius': '8px' }); var header = $('<div>').css({ display: 'flex', 'justify-content': 'space-between', 'align-items': 'center', 'margin-bottom': '1em' }); header.append($('<h3>').text('Broken redirects').css({ margin: 0 })); var closeBtn = $('<button>').text('✖').css({ border: 'none', background: 'transparent', 'font-size': '1.2em', cursor: 'pointer' }).on('click', function () { overlay.remove(); menu.remove(); }); header.append(closeBtn); menu.append(header); redirects.forEach(function (item) { var page = item.title; var ns = item.ns; if (ns === 2 || ns === 3 || ns === 118) { return; } localApi.get({ action: 'query', titles: page, prop: 'info' }).done(function (check) { var pages = check.query.pages; var exists = true; $.each(pages, function (id, p) { if (p.missing !== undefined) { exists = false; } }); if (!exists) { return; } var entry = $('<div>').css({ display: 'flex', 'justify-content': 'space-between', 'align-items': 'center', 'margin-bottom': '0.5em', 'padding': '0.3em 0', 'border-bottom': '1px solid #eee' }); entry.append($('<span>').text(page)); var btnGSR = $('<button>').text('GSR').css({ 'margin-left': '1em' }).on('click', function () { requestDeletion(page); }); entry.append(btnGSR); var btnGSRTag = $('<button>').text('GSR+tag').css({ 'margin-left': '0.5em' }).on('click', function () { requestDeletion(page); addDeleteTag(page, true); }); entry.append(btnGSRTag); var btnTag = $('<button>').text('Tag').css({ 'margin-left': '0.5em' }).on('click', function () { addDeleteTag(page, false); }); entry.append(btnTag); menu.append(entry); }); }); $('body').append(overlay).append(menu); }); } function requestDeletion(page) { var lang = mw.config.get('wgContentLanguage'); var dbname = mw.config.get('wgDBname'); var prefix = ''; if (dbname.includes('wikibooks')) prefix = 'b:' + lang + ':'; else if (dbname.includes('wikiquote')) prefix = 'q:' + lang + ':'; else if (dbname.includes('wikiversity')) prefix = 'wikiversity:' + lang + ':'; else if (dbname.includes('wikisource')) prefix = 'wikisource:' + lang + ':'; else if (dbname.includes('wikivoyage')) prefix = 'voy:' + lang + ':'; else if (dbname.includes('wikispecies')) prefix = 'wikispecies:'; else if (dbname.includes('wiktionary')) prefix = 'wikt:' + lang + ':'; else if (dbname.includes('wikinews')) prefix = 'n:' + lang + ':'; else if (dbname.includes('commonswiki')) prefix = 'commons:'; else if (dbname.includes('metawiki')) prefix = 'm:'; else if (dbname.includes('mediawiki')) prefix = 'mw:'; else prefix = lang + ':'; var formatted = '* [[:' + prefix + page + ']]: Broken redirect. <small>[[:m:User:PieWriter/BR.js|BR]]</small> ~~~~'; metaApi.postWithToken('csrf', { action: 'edit', title: 'Global sysops/Requests', summary: 'Requesting speedy deletion of broken redirect [[User:PieWriter/BR.js|using tool]]', appendtext: '\n' + formatted }).done(function () { alert('Deletion request added for ' + page + ' on Meta-Wiki'); }); } function addDeleteTag(page, gsr) { var tagText = gsr ? '{{delete|Broken redirect|delete gsr}}' : '{{delete|Broken redirect}}'; localApi.postWithToken('csrf', { action: 'edit', title: page, summary: 'Tagging broken redirect for deletion ([[:m:User:PieWriter/BR.js|BR]])', prependtext: tagText + '\n' }).done(function () { alert('Added deletion tag to ' + page + (gsr ? ' (with gsr)' : '')); }); } addButton(); }); // </nowiki> 9qxv6n12t9h1f70ajcokio48gjvqpw3 735994 735993 2026-04-02T10:25:35Z PieAlt 73198 735994 javascript text/javascript // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], function () { var localApi = new mw.Api(); var metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php'); function addButton() { mw.util.addPortletLink( 'p-tb', '#', 'Find redirects', 't-findredirects', 'List broken redirects' ); $('#t-findredirects').on('click', function (e) { e.preventDefault(); showBrokenRedirects(); }); } function showBrokenRedirects() { localApi.get({ action: 'query', list: 'querypage', qppage: 'BrokenRedirects', qplimit: 'max' }).done(function (data) { var redirects = data.query.querypage.results; var overlay = $('<div>').css({ position: 'fixed', top: 0, left: 0, width: '100%', height: '100%', background: 'rgba(0,0,0,0.5)', 'z-index': 9998 }); var menu = $('<div>').css({ position: 'fixed', top: '50%', left: '50%', transform: 'translate(-50%, -50%)', background: '#fff', border: '1px solid #ccc', padding: '1.5em', 'z-index': 9999, 'max-height': '80%', 'max-width': '600px', overflow: 'auto', 'box-shadow': '0 4px 12px rgba(0,0,0,0.3)', 'border-radius': '8px' }); var header = $('<div>').css({ display: 'flex', 'justify-content': 'space-between', 'align-items': 'center', 'margin-bottom': '1em' }); header.append($('<h3>').text('Broken redirects').css({ margin: 0 })); var closeBtn = $('<button>').text('✖').css({ border: 'none', background: 'transparent', 'font-size': '1.2em', cursor: 'pointer' }).on('click', function () { overlay.remove(); menu.remove(); }); header.append(closeBtn); menu.append(header); redirects.forEach(function (item) { var page = item.title; var ns = item.ns; if (ns === 2 || ns === 3 || ns === 118) { return; } localApi.get({ action: 'query', titles: page, prop: 'info' }).done(function (check) { var pages = check.query.pages; var exists = true; $.each(pages, function (id, p) { if (p.missing !== undefined) { exists = false; } }); if (!exists) { return; } var entry = $('<div>').css({ display: 'flex', 'justify-content': 'space-between', 'align-items': 'center', 'margin-bottom': '0.5em', 'padding': '0.3em 0', 'border-bottom': '1px solid #eee' }); entry.append($('<span>').text(page)); // Dropdown menu var actionsBtn = $('<button>').text('Actions').css({ 'margin-left': '1em' }); var dropdown = $('<ul>').css({ position: 'absolute', background: '#fff', border: '1px solid #ccc', padding: '0.5em', 'list-style': 'none', margin: 0, display: 'none' }); var addOption = function(label, handler) { $('<li>').text(label).css({ padding: '0.3em 0', cursor: 'pointer' }).on('click', function () { dropdown.hide(); handler(); }).appendTo(dropdown); }; addOption('GSR', function() { requestDeletion(page); }); addOption('GSR+tag', function() { requestDeletion(page); addDeleteTag(page, true); }); addOption('Tag', function() { addDeleteTag(page, false); }); actionsBtn.on('click', function () { dropdown.toggle(); }); entry.append(actionsBtn).append(dropdown); menu.append(entry); }); }); $('body').append(overlay).append(menu); }); } function requestDeletion(page) { var lang = mw.config.get('wgContentLanguage'); var dbname = mw.config.get('wgDBname'); var prefix = ''; if (dbname.includes('wikibooks')) prefix = 'b:' + lang + ':'; else if (dbname.includes('wikiquote')) prefix = 'q:' + lang + ':'; else if (dbname.includes('wikiversity')) prefix = 'wikiversity:' + lang + ':'; else if (dbname.includes('wikisource')) prefix = 'wikisource:' + lang + ':'; else if (dbname.includes('wikivoyage')) prefix = 'voy:' + lang + ':'; else if (dbname.includes('wikispecies')) prefix = 'wikispecies:'; else if (dbname.includes('wiktionary')) prefix = 'wikt:' + lang + ':'; else if (dbname.includes('wikinews')) prefix = 'n:' + lang + ':'; else if (dbname.includes('commonswiki')) prefix = 'commons:'; else if (dbname.includes('metawiki')) prefix = 'm:'; else if (dbname.includes('mediawiki')) prefix = 'mw:'; else prefix = lang + ':'; var formatted = '* [[:' + prefix + page + ']]: Broken redirect. <small>[[:m:User:PieWriter/BR.js|BR]]</small> ~~~~'; metaApi.postWithToken('csrf', { action: 'edit', title: 'Global sysops/Requests', summary: 'Requesting speedy deletion of broken redirect [[User:PieWriter/BR.js|using tool]]', appendtext: '\n' + formatted }).done(function () { alert('Deletion request added for ' + page + ' on Meta-Wiki'); }); } function addDeleteTag(page, gsr) { var tagText = gsr ? '{{delete|Broken redirect|delete gsr}}' : '{{delete|Broken redirect}}'; localApi.postWithToken('csrf', { action: 'edit', title: page, summary: 'Tagging broken redirect for deletion ([[:m:User:PieWriter/BR.js|BR]])', prependtext: tagText + '\n' }).done(function () { alert('Added deletion tag to ' + page + (gsr ? ' (with gsr)' : '')); }); } addButton(); }); // </nowiki> 01k579w8lrpsl7van9o9zu32nlg2h98 735995 735994 2026-04-02T10:27:32Z PieAlt 73198 735995 javascript text/javascript // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], function () { var localApi = new mw.Api(); var metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php'); function addButton() { mw.util.addPortletLink( 'p-tb', '#', 'Find redirects', 't-findredirects', 'List broken redirects' ); $('#t-findredirects').on('click', function (e) { e.preventDefault(); showBrokenRedirects(); }); } function showBrokenRedirects() { localApi.get({ action: 'query', list: 'querypage', qppage: 'BrokenRedirects', qplimit: 'max' }).done(function (data) { var redirects = data.query.querypage.results; var overlay = $('<div>').css({ position: 'fixed', top: 0, left: 0, width: '100%', height: '100%', background: 'rgba(0,0,0,0.5)', 'z-index': 9998 }); var menu = $('<div>').css({ position: 'fixed', top: '50%', left: '50%', transform: 'translate(-50%, -50%)', background: '#fff', border: '1px solid #ccc', padding: '1.5em', 'z-index': 9999, 'max-height': '80%', 'max-width': '600px', overflow: 'auto', 'box-shadow': '0 4px 12px rgba(0,0,0,0.3)', 'border-radius': '8px' }); var header = $('<div>').css({ display: 'flex', 'justify-content': 'space-between', 'align-items': 'center', 'margin-bottom': '1em' }); header.append($('<h3>').text('Broken redirects').css({ margin: 0 })); var closeBtn = $('<button>').text('✖').css({ border: 'none', background: 'transparent', 'font-size': '1.2em', cursor: 'pointer' }).on('click', function () { overlay.remove(); menu.remove(); }); header.append(closeBtn); menu.append(header); redirects.forEach(function (item) { var page = item.title; var ns = item.ns; if (ns === 2 || ns === 3 || ns === 118) { return; } localApi.get({ action: 'query', titles: page, prop: 'info' }).done(function (check) { var pages = check.query.pages; var exists = true; $.each(pages, function (id, p) { if (p.missing !== undefined) { exists = false; } }); if (!exists) { return; } var entry = $('<div>').css({ display: 'flex', 'justify-content': 'space-between', 'align-items': 'center', 'margin-bottom': '0.5em', 'padding': '0.3em 0', 'border-bottom': '1px solid #eee' }); entry.append($('<span>').text(page)); var segmentContainer = $('<div>').css({ display: 'inline-flex', border: '1px solid #ccc', 'border-radius': '4px', overflow: 'hidden', 'margin-left': '1em' }); var makeSegment = function(label, handler) { return $('<button>').text(label).css({ padding: '0.3em 0.8em', border: 'none', background: '#f9f9f9', cursor: 'pointer', 'border-right': '1px solid #ccc' }).on('click', handler); }; var gsrBtn = makeSegment('GSR', function() { requestDeletion(page); }); var gsrTagBtn = makeSegment('GSR+tag', function() { requestDeletion(page); addDeleteTag(page, true); }); var tagBtn = makeSegment('Tag', function() { addDeleteTag(page, false); }); tagBtn.css('border-right', 'none'); segmentContainer.append(gsrBtn, gsrTagBtn, tagBtn); entry.append(segmentContainer); menu.append(entry); }); }); $('body').append(overlay).append(menu); }); } function requestDeletion(page) { var lang = mw.config.get('wgContentLanguage'); var dbname = mw.config.get('wgDBname'); var prefix = ''; if (dbname.includes('wikibooks')) prefix = 'b:' + lang + ':'; else if (dbname.includes('wikiquote')) prefix = 'q:' + lang + ':'; else if (dbname.includes('wikiversity')) prefix = 'wikiversity:' + lang + ':'; else if (dbname.includes('wikisource')) prefix = 'wikisource:' + lang + ':'; else if (dbname.includes('wikivoyage')) prefix = 'voy:' + lang + ':'; else if (dbname.includes('wikispecies')) prefix = 'wikispecies:'; else if (dbname.includes('wiktionary')) prefix = 'wikt:' + lang + ':'; else if (dbname.includes('wikinews')) prefix = 'n:' + lang + ':'; else if (dbname.includes('commonswiki')) prefix = 'commons:'; else if (dbname.includes('metawiki')) prefix = 'm:'; else if (dbname.includes('mediawiki')) prefix = 'mw:'; else prefix = lang + ':'; var formatted = '* [[:' + prefix + page + ']]: Broken redirect. <small>[[:m:User:PieWriter/BR.js|BR]]</small> ~~~~'; metaApi.postWithToken('csrf', { action: 'edit', title: 'Global sysops/Requests', summary: 'Requesting speedy deletion of broken redirect [[User:PieWriter/BR.js|using tool]]', appendtext: '\n' + formatted }).done(function () { alert('Deletion request added for ' + page + ' on Meta-Wiki'); }); } function addDeleteTag(page, gsr) { var tagText = gsr ? '{{delete|Broken redirect|delete gsr}}' : '{{delete|Broken redirect}}'; localApi.postWithToken('csrf', { action: 'edit', title: page, summary: 'Tagging broken redirect for deletion ([[:m:User:PieWriter/BR.js|BR]])', prependtext: tagText + '\n' }).done(function () { alert('Added deletion tag to ' + page + (gsr ? ' (with gsr)' : '')); }); } addButton(); }); // </nowiki> o1gus9bgmiyesjroeatwmpbseh1hk91 735997 735995 2026-04-02T10:28:27Z PieAlt 73198 Done 735997 javascript text/javascript phoiac9h4m842xq45sp7s6u21eteeq1 User:MMunyoki (WMF)/Starter kit/Featured article 2 174593 735841 2026-04-01T16:08:14Z MMunyoki (WMF) 53374 Created by StarterKit tool 735841 wikitext text/x-wiki <div style="border:1px solid #cef2e0;border-radius:4px;padding:8px;background:#f5fffa;margin-bottom:2px;"> <div style="padding:4px 12px;margin-bottom:8px;border:1px solid #a3bfb1;border-radius:4px;background:#cef2e0;">'''Featured article'''</div> <!-- Add a short excerpt from any well-written article on your wiki. No need to update daily — refresh when a new article is ready. To add an image: [[File:Filename.jpg|112px|left|alt=description]] --> Add article title here – Add a short excerpt here (2–3 sentences). Introduce the topic clearly so readers want to learn more. <!-- Replace "Full article..." below with: [[Article name|Full article...]] --> <small>(Full article...)</small> </div> [[Category:Starter Kit templates]][[Category:Main page templates]] 71r8xedkc3udt1z7tsqpnsksrn3brn8 735847 735841 2026-04-01T16:13:46Z MMunyoki (WMF) 53374 735847 wikitext text/x-wiki <div style="border:1px solid #cef2e0;border-radius:4px;padding:8px;background:#f5fffa;margin-bottom:2px;"> <div style="padding:4px 12px;margin-bottom:8px;border:1px solid #a3bfb1;border-radius:4px;background:#cef2e0;">'''Featured article'''</div> <!-- Add a short excerpt from any well-written article on your wiki. No need to update daily — refresh when a new article is ready. To add an image: [[File:Filename.jpg|112px|left|alt=description]] --> Add article title here – Add a short excerpt here (2–3 sentences). Introduce the topic clearly so readers want to learn more. <!-- Replace "Full article..." below with: [[Article name|Full article...]] --> <small>(Full article...)</small> https://en.wikipedia.org/wiki/Nairobi </div> [[Category:Starter Kit templates]][[Category:Main page templates]] jevf9xjjbnj93a8bx3x4gfibcxg7ocz 735848 735847 2026-04-01T16:14:10Z MMunyoki (WMF) 53374 Created by StarterKit tool 735848 wikitext text/x-wiki <div style="border:1px solid #cef2e0;border-radius:4px;padding:8px;background:#f5fffa;margin-bottom:2px;"> <div style="padding:4px 12px;margin-bottom:8px;border:1px solid #a3bfb1;border-radius:4px;background:#cef2e0;">'''Featured article'''</div> <!-- Add a short excerpt from any well-written article on your wiki. No need to update daily — refresh when a new article is ready. To add an image: [[File:Filename.jpg|112px|left|alt=description]] --> Add article title here – Add a short excerpt here (2–3 sentences). Introduce the topic clearly so readers want to learn more. <!-- Replace "Full article..." below with: [[Article name|Full article...]] --> <small>(Full article...)</small> </div> [[Category:Starter Kit templates]][[Category:Main page templates]] 71r8xedkc3udt1z7tsqpnsksrn3brn8 735849 735848 2026-04-01T16:30:23Z MMunyoki (WMF) 53374 735849 wikitext text/x-wiki <div style="border:1px solid #cef2e0;border-radius:4px;padding:8px;background:#f5fffa;margin-bottom:2px;"> <div style="padding:4px 12px;margin-bottom:8px;border:1px solid #a3bfb1;border-radius:4px;background:#cef2e0;">'''Featured article'''</div> <!-- Add a short excerpt from any well-written article on your wiki. No need to update daily — refresh when a new article is ready. To add an image: [[File:Filename.jpg|112px|left|alt=description]] --> Add article title here – Add a short excerpt here (2–3 sentences). Introduce the topic clearly so readers want to learn more. <!-- Replace "Full article..." below with: [[Article name|Full article...]] --> <small>(Full article...)</small> https://en.wikipedia.org/wiki/Nairobi </div> [[Category:Starter Kit templates]][[Category:Main page templates]] dhxtsvhq6i3rr9jp0fpstfp4halagg3 735865 735849 2026-04-01T17:18:58Z MMunyoki (WMF) 53374 Created by StarterKit tool 735865 wikitext text/x-wiki <div style="border:1px solid #cef2e0;border-radius:4px;padding:8px;background:#f5fffa;margin-bottom:2px;"> <div style="padding:4px 12px;margin-bottom:8px;border:1px solid #a3bfb1;border-radius:4px;background:#cef2e0;">'''Featured article'''</div> <!-- Add a short excerpt from any well-written article on your wiki. No need to update daily — refresh when a new article is ready. To add an image: [[File:Filename.jpg|112px|left|alt=description]] --> Add article title here – Add a short excerpt here (2–3 sentences). Introduce the topic clearly so readers want to learn more. <!-- Replace "Full article..." below with: [[Article name|Full article...]] --> <small>(Full article...)</small> </div> [[Category:Starter Kit templates]][[Category:Main page templates]] 71r8xedkc3udt1z7tsqpnsksrn3brn8 User:MMunyoki (WMF)/Starter kit/In the news 2 174594 735842 2026-04-01T16:08:15Z MMunyoki (WMF) 53374 Created by StarterKit tool 735842 wikitext text/x-wiki <div style="border:1px solid #cedff2;border-radius:4px;padding:8px;background:#f5faff;margin-bottom:2px;"> <div style="padding:4px 12px;margin-bottom:8px;border:1px solid #a3b0bf;border-radius:4px;background:#cedff2;">'''In the news'''</div> <!-- Add recent events or news relevant to your community or topic area. No need to update daily — refresh when something noteworthy happens. To add an image: [[File:Filename.jpg|64px|right|alt=description]] --> * Add a recent event or news item and link to a relevant article here. * Add a recent event or news item and link to a relevant article here. * Add a recent event or news item and link to a relevant article here. </div> [[Category:Starter Kit templates]][[Category:Main page templates]] ov78wfo8w8x7fjlnuahoq193ccbon5i User:MMunyoki (WMF)/Starter kit/Did you know 2 174595 735843 2026-04-01T16:08:16Z MMunyoki (WMF) 53374 Created by StarterKit tool 735843 wikitext text/x-wiki <div style="border:1px solid #cef2e0;border-radius:4px;padding:8px;background:#f5fffa;margin-bottom:2px;"> <div style="padding:4px 12px;margin-bottom:8px;border:1px solid #a3bfb1;border-radius:4px;background:#cef2e0;">'''Did you know ...'''</div> <!-- Update with 3–5 interesting facts from recently created or expanded articles. No need to update daily — refresh when new articles are added. To add an image: [[File:Filename.jpg|80px|left|alt=description]] --> * ... that add an interesting fact and link to a relevant article here? * ... that add an interesting fact and link to a relevant article here? * ... that add an interesting fact and link to a relevant article here? </div> [[Category:Starter Kit templates]][[Category:Main page templates]] 185eq1k742wroqupsei3ywveh6zrug6 User:MMunyoki (WMF)/Starter kit/On this day 2 174596 735844 2026-04-01T16:08:17Z MMunyoki (WMF) 53374 Created by StarterKit tool 735844 wikitext text/x-wiki <div style="border:1px solid #cedff2;border-radius:4px;padding:8px;background:#f5faff;margin-bottom:2px;"> <div style="padding:4px 12px;margin-bottom:8px;border:1px solid #a3b0bf;border-radius:4px;background:#cedff2;">'''On this day'''</div> <!-- Add 2–3 historical events relevant to your community or topic area. No need to update daily — refresh occasionally as your wiki grows. To add an image: [[File:Filename.jpg|80px|right|alt=description]] --> Add a date here * Add a historical event and link to a relevant article here. * Add a historical event and link to a relevant article here. </div> [[Category:Starter Kit templates]][[Category:Main page templates]] oawkmcoyobjvtr2l018429c6lkvtbv7 User:MMunyoki (WMF)/Starter kit/Featured picture 2 174597 735845 2026-04-01T16:08:18Z MMunyoki (WMF) 53374 Created by StarterKit tool 735845 wikitext text/x-wiki <div style="border:1px solid #ddcef2;border-radius:4px;padding:8px;background:#faf5ff;margin-top:4px;"> <div style="padding:4px 12px;margin-bottom:8px;border:1px solid #afa3bf;border-radius:4px;background:#ddcef2;">'''Featured picture'''</div> <!-- Add any image that represents your wiki well — from Commons or locally uploaded. No need to update daily — refresh whenever a good image is available. To add the image: [[File:Filename.jpg|320px|left|alt=description]] --> Add image title here Add a description of the image here (2–3 sentences). <small>''Credit: Add photographer or source credit here''</small> </div> [[Category:Starter Kit templates]][[Category:Main page templates]] nqlnpy7xrae21ukmzbnpqluop5cyxq6 User:Yahya/MTD.js 2 174599 735873 2026-04-01T18:16:05Z Yahya 44996 Created page with "/****************************************************************************** MoveToDraft ------------- Version 2.6.0 ------------- A script to move unsourced articles to draft space, including cleanup and author notification. - Moves page to draftspace - Checks if any files used are non-free - Checks if any redirects pointed to the page - Comments out non-free files, turn categories into links, add afc draft template, add redirects - Adds notification message on auth..." 735873 javascript text/javascript /****************************************************************************** MoveToDraft ------------- Version 2.6.0 ------------- A script to move unsourced articles to draft space, including cleanup and author notification. - Moves page to draftspace - Checks if any files used are non-free - Checks if any redirects pointed to the page - Comments out non-free files, turn categories into links, add afc draft template, add redirects - Adds notification message on author talk page - Updates talk page banners - Logs draftification in user subpage Derived from https://en.wikipedia.org/wiki/User:Evad37/MoveToDraft.js Mobile-friendly modernized version. ******************************************************************************/ /* jshint laxbreak: true, undef: true, maxerr:999 */ /* globals console, window, document, $, mw */ // <nowiki> ( function () { 'use strict'; // Script info window.mtd = { config: { script: { location: 'User:Yahya/MTD', version: '2.6.0' } } }; window.API = null; $.when( mw.loader.using( [ 'mediawiki.util', 'mediawiki.api', 'mediawiki.Title' ] ), $.ready ).then( function () { /* ========== Config ======================================================= */ window.mtd.config.mw = mw.config.get( [ 'wgArticleId', 'wgCurRevisionId', 'wgPageName', 'wgUserGroups', 'wgUserName', 'wgMonthNames', 'wgNamespaceNumber', 'wgTitle', 'wgArticlePath', 'wgIsMainPage', 'wgIsRedirect' ] ); /* ========== API ========================================================== */ window.API = new mw.Api( { ajax: { headers: { 'Api-User-Agent': 'MoveToDraft/' + window.mtd.config.script.version + ' ( https://bn.wikipedia.org/wiki/User:Yahya/MTD )' } } } ); var dynamicallyLoadScript = function ( url ) { return $.getScript( url + '?action=raw&ctype=text/javascript' ); }; /* ========== Setup ======================================================== */ var isDraftifyLogPage = window.mtd.config.mw.wgPageName.indexOf( 'Special:খসড়া_লগ' ) === 0; var isUserPage = window.mtd.config.mw.wgNamespaceNumber === 2 || window.mtd.config.mw.wgNamespaceNumber === 3; if ( isDraftifyLogPage ) { dynamicallyLoadScript( window.mtd.config.mw.wgArticlePath.replace( '$1', 'User:Yahya/MTD/draftifyLog.js' ) ); return; } else if ( isUserPage ) { var user = window.mtd.config.mw.wgTitle.split( '/' )[ 0 ]; var url = mw.util.getUrl( 'Special:খসড়া_লগ/' + user ); mw.util.addPortletLink( ( window.m2d_portlet || 'p-personal' ), url, 'খসড়া লগ', 'ca-m2dlog', null, null, null ); return; } // Only operate in article namespace if ( window.mtd.config.mw.wgNamespaceNumber !== 0 ) { return; } // Don't draftify MainPage if ( window.mtd.config.mw.wgIsMainPage === true ) { return; } // Only operate for existing pages if ( window.mtd.config.mw.wgCurRevisionId === 0 ) { return; } // Only for articles if ( window.mtd.config.mw.wgIsRedirect === true ) { return; } dynamicallyLoadScript( window.mtd.config.mw.wgArticlePath.replace( '$1', 'User:Yahya/MTD/core.js' ) ); } ); }() ); // </nowiki> 8nmc5auxlwczpcjiomy8e38d4adpsg7 User:Enbi/LTA-undo.js 2 174603 735883 2026-04-01T19:22:16Z Enbi 72574 create (mostly inspired from [[w:en:user:LuniZunie/scripts/LTA-rollback.js]]) 735883 javascript text/javascript mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('.mw-rollback-link'); for (let i = 0; i < undoSpans.length; i++) { processUndoLink(undoSpans[i]); } }); et755w5rmz0tmqi3euizw596c8ibbh4 735884 735883 2026-04-01T19:22:56Z Enbi 72574 735884 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('.mw-rollback-link'); for (let i = 0; i < undoSpans.length; i++) { processUndoLink(undoSpans[i]); } }); // </nowiki> 5jsiyx5a19kt9y4q321mly0v049rau6 735888 735884 2026-04-01T19:33:52Z Enbi 72574 735888 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw.revid]'); for (let i = 0; i < undoSpans.length; i++) { addLink(undoSpans[i]); } function addLink(item) { const revid = item.getAttribute('data-mw-revid'); if (revid !== mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span'), el = document.createElement('a'); el.addEventListener('click', function() { el.className = 'restorer-loading'; restore(revid).always(function() { el.className = ''; }); }); } }); // </nowiki> kqu7iwi7e8x747ifpoab90yybn9tei4 735890 735888 2026-04-01T19:35:34Z Enbi 72574 735890 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (let i = 0; i < undoSpans.length; i++) { addLink(undoSpans[i]); } function addLink(item) { const revid = item.getAttribute('data-mw-revid'); if (revid !== mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span'), el = document.createElement('a'); el.addEventListener('click', function() { el.className = 'restorer-loading'; restore(revid).always(function() { el.className = ''; }); }); } }); // </nowiki> hm6x5a5qd8mr7yqtn5q08n7aialbyey 735895 735890 2026-04-01T19:43:23Z Enbi 72574 735895 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('.mw-history-undo'); for (let i in Array.from(undoSpans)) { i.insertAdjacentHTML('afterend', 'LTA Testing testing'); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> 96i3yfdkooy6isnzuf9sver0pad0nwn 735897 735895 2026-04-01T19:43:53Z Enbi 72574 735897 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('.mw-history-undo'); for (let i in undoSpans) { i.insertAdjacentHTML('afterend', 'LTA Testing testing'); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> ssxi9fmfu625exdh7a8xm8cefbsyk9f 735903 735897 2026-04-01T19:47:49Z Enbi 72574 735903 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (let i in undoSpans) { addLink(i); } function addLink(item) { const revid = item.getAttribute('data-mw-revid'); console.log(revid); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> hg1bn161sjjy9cdxuf9z6sqaj89e98e 735906 735903 2026-04-01T19:48:54Z Enbi 72574 735906 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (var i = 0; i < undoSpans.length; i++) { addLink(undoSpans[i]); } function addLink(item) { const revid = item.getAttribute('data-mw-revid'); console.log(revid); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> eq5o4e7c4bl3rhxvxb9afer1aj9dtt2 735910 735906 2026-04-01T19:50:36Z Enbi 72574 735910 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (var i = 0; i < undoSpans.length; i++) { addLinkHist(undoSpans[i]); } function addLinkHist(item) { const revid = item.getAttribute('data-mw-revid'); if (revid == mw.config.get('wgCurRevisionId')) return; console.log(revid); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> 5n9e6yyhujorxyzbh01je41k2njpxvf 735914 735910 2026-04-01T19:55:53Z Enbi 72574 735914 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (let i = 0; i < undoSpans.length; i++) { addLinkHist(undoSpans[i]); } function addLinkHist(item) { const revid = item.getAttribute('data-mw-revid'); if (revid == mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); } console.log(revid); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> gcyhgbm3b78ysufxbk5zzw569bw6oay 735915 735914 2026-04-01T19:56:19Z Enbi 72574 735915 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (let i = 0; i < undoSpans.length; i++) { addLinkHist(undoSpans[i]); } function addLinkHist(item) { const revid = item.getAttribute('data-mw-revid'); if (revid == mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> nwtfol38aurvzxu4gnoy4kxjbozzaa7 735916 735915 2026-04-01T19:57:03Z Enbi 72574 735916 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (let i = 0; i < undoSpans.length; i++) { addLinkHist(undoSpans[i]); } function addLinkHist(item) { const revid = item.getAttribute('data-mw-revid'); if (revid !== mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> 2xn5qqq7s9tkb7cbwf0ixalfseaxb9f 735918 735916 2026-04-01T19:58:07Z Enbi 72574 735918 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (let i = 0; i < undoSpans.length; i++) { addLinkHist(undoSpans[i]); } function addLinkHist(item) { const revid = item.getAttribute('data-mw-revid'); if (revid != mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> 4umjkvrhl9uux4btl2avjahos2wvqkm 735920 735918 2026-04-01T20:02:11Z Enbi 72574 735920 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (let i = 0; i < undoSpans.length; i++) { addLinkContrib(undoSpans[i]); } function addLinkHist(item) { const revid = item.getAttribute('data-mw-revid'); if (revid != mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } function addLinkContrib(item) { const isCurrent = item.querySelector('span.mw-uctop'); if (!isCurrent) return; const revid = item.getAttribute('data-mw-revid'); if (revid != mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> alnyhu6kkw1tgbo5rxifjkbg9e5uc4c 735921 735920 2026-04-01T20:05:59Z Enbi 72574 735921 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (let i = 0; i < undoSpans.length; i++) { addLinkContrib(undoSpans[i]); } function addLinkHist(item) { const revid = item.getAttribute('data-mw-revid'); if (revid != mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } function addLinkContrib(item) { const isCurrent = item.querySelector('span.mw-uctop'); console.log(isCurrent); if (!isCurrent) return; const revid = item.getAttribute('data-mw-revid'); if (revid != mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> p3017ezn5qd68sahdk9it0v1gbzm0ge 735922 735921 2026-04-01T20:07:19Z Enbi 72574 735922 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (let i = 0; i < undoSpans.length; i++) { addLinkContrib(undoSpans[i]); } function addLinkHist(item) { const revid = item.getAttribute('data-mw-revid'); if (revid != mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } function addLinkContrib(item) { const isCurrent = item.querySelector('span.mw-uctop'); console.log(isCurrent); //if (!isCurrent) return; const revid = item.getAttribute('data-mw-revid'); if (revid != mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> 1zfc2gil0xfxq3woc8a8ldqe68nhahd 735923 735922 2026-04-01T20:07:50Z Enbi 72574 735923 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (let i = 0; i < undoSpans.length; i++) { addLinkContrib(undoSpans[i]); } function addLinkHist(item) { const revid = item.getAttribute('data-mw-revid'); if (revid != mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } function addLinkContrib(item) { console.log(item); const isCurrent = item.querySelector('span.mw-uctop'); console.log(isCurrent); //if (!isCurrent) return; const revid = item.getAttribute('data-mw-revid'); if (revid != mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> h0fls7uysz4u2khike3kvr8ooss8w7g 735924 735923 2026-04-01T20:09:23Z Enbi 72574 735924 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (let i = 0; i < undoSpans.length; i++) { addLinkContrib(undoSpans[i]); } function addLinkHist(item) { const revid = item.getAttribute('data-mw-revid'); if (revid != mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } function addLinkContrib(item) { console.log(item); const isCurrent = item.querySelector('span.mw-uctop'); console.log(isCurrent); //if (!isCurrent) return; const revid = item.getAttribute('data-mw-revid'); const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> qqwpzqqu83e84yc300a9to0f2ufzci8 735926 735924 2026-04-01T20:11:02Z Enbi 72574 735926 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (let i = 0; i < undoSpans.length; i++) { addLinkContrib(undoSpans[i]); } function addLinkHist(item) { const revid = item.getAttribute('data-mw-revid'); if (revid != mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } function addLinkContrib(item) { console.log(item); const isCurrent = item.querySelector('span.mw-uctop'); console.log(isCurrent); if (!isCurrent) return; const revid = item.getAttribute('data-mw-revid'); const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> nb24ybb17fxi9hxftdi2vj3pgdzfuoz 735927 735926 2026-04-01T20:11:49Z Enbi 72574 735927 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (let i = 0; i < undoSpans.length; i++) { addLinkContrib(undoSpans[i]); } function addLinkHist(item) { const revid = item.getAttribute('data-mw-revid'); if (revid != mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } function addLinkContrib(item) { console.log(item); const isCurrent = item.querySelector('span.mw-uctop'); console.log(isCurrent); if (!isCurrent) return; const revid = item.getAttribute('data-mw-revid'); const links = item.querySelector('.mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> n3qex17glllmg2qvgw1ycjsu6bno6cl 735928 735927 2026-04-01T20:12:26Z Enbi 72574 735928 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (let i = 0; i < undoSpans.length; i++) { addLinkContrib(undoSpans[i]); } function addLinkHist(item) { const revid = item.getAttribute('data-mw-revid'); if (revid != mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } function addLinkContrib(item) { console.log(item); const isCurrent = item.querySelector('span.mw-uctop'); console.log(isCurrent); if (!isCurrent) return; console.log('ah'); const revid = item.getAttribute('data-mw-revid'); const links = item.querySelector('.mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> 28evke6fmcgi4qxjuobv5wts57y4prg 735930 735928 2026-04-01T20:14:31Z Enbi 72574 735930 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (let i = 0; i < undoSpans.length; i++) { addLinkContrib(undoSpans[i]); } function addLinkHist(item) { const revid = item.getAttribute('data-mw-revid'); if (revid != mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } function addLinkContrib(item) { console.log(item); const isCurrent = item.querySelector('span.mw-uctop'); console.log(isCurrent); if (!isCurrent) return; console.log('ah'); const revid = item.getAttribute('data-mw-revid'); const links = item.querySelector('.mw-uctop .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> qmtn83p8ys89bcjz2ft0ml0zuxpa3va 735931 735930 2026-04-01T20:15:02Z Enbi 72574 735931 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (let i = 0; i < undoSpans.length; i++) { addLinkContrib(undoSpans[i]); } function addLinkHist(item) { const revid = item.getAttribute('data-mw-revid'); if (revid != mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } function addLinkContrib(item) { console.log(item); const isCurrent = item.querySelector('span.mw-uctop'); console.log(isCurrent); if (!isCurrent) return; console.log('ah'); const revid = item.getAttribute('data-mw-revid'); const links = item.querySelector('.mw-uctop + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> m9gqld56pfl7wdsv2csqo98of8whnky 735933 735931 2026-04-01T20:17:22Z Enbi 72574 735933 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (let i = 0; i < undoSpans.length; i++) { addLinkContrib(undoSpans[i]); } function addLinkHist(item) { const revid = item.getAttribute('data-mw-revid'); if (revid != mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } function addLinkContrib(item) { console.log(item); const isCurrent = item.querySelector('span.mw-uctop'); console.log(isCurrent); if (!isCurrent) return; console.log('ah'); const revid = item.getAttribute('data-mw-revid'); const links = item.querySelector('.mw-uctop + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); console.log(mw.config.get('wgCanonicalSpecialPageName')); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> tjox0wnxkgj52i0b5u8k46fe5cv1tqz 735934 735933 2026-04-01T20:18:21Z Enbi 72574 735934 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { console.log(mw.config.get('wgCanonicalSpecialPageName')); const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (let i = 0; i < undoSpans.length; i++) { addLinkContrib(undoSpans[i]); } function addLinkHist(item) { const revid = item.getAttribute('data-mw-revid'); if (revid != mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } function addLinkContrib(item) { console.log(item); const isCurrent = item.querySelector('span.mw-uctop'); console.log(isCurrent); if (!isCurrent) return; console.log('ah'); const revid = item.getAttribute('data-mw-revid'); const links = item.querySelector('.mw-uctop + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> cgxcgw089e6e3r6x5t0953o7d7hnvcl 735935 735934 2026-04-01T20:21:01Z Enbi 72574 735935 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { if (mw.config.get('wgCanonicalSpecialPageName' !== 'Contributions')) console.log('i'); console.log(mw.config.get('wgAction')); const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (let i = 0; i < undoSpans.length; i++) { addLinkContrib(undoSpans[i]); } function addLinkHist(item) { const revid = item.getAttribute('data-mw-revid'); if (revid != mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } function addLinkContrib(item) { console.log(item); const isCurrent = item.querySelector('span.mw-uctop'); console.log(isCurrent); if (!isCurrent) return; console.log('ah'); const revid = item.getAttribute('data-mw-revid'); const links = item.querySelector('.mw-uctop + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> hdgskk4qw9u4pvumg86zlroe6a482os 735936 735935 2026-04-01T20:22:31Z Enbi 72574 735936 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { if (mw.config.get('wgCanonicalSpecialPageName' !== 'Contributions') && mw.config.get('wgAction') !== 'history') { console.log('NOTHERE'); return; } console.log(mw.config.get('wgAction')); const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (let i = 0; i < undoSpans.length; i++) { addLinkContrib(undoSpans[i]); } function addLinkHist(item) { const revid = item.getAttribute('data-mw-revid'); if (revid != mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } function addLinkContrib(item) { console.log(item); const isCurrent = item.querySelector('span.mw-uctop'); console.log(isCurrent); if (!isCurrent) return; console.log('ah'); const revid = item.getAttribute('data-mw-revid'); const links = item.querySelector('.mw-uctop + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> a1sn980ea9hbq69rtjy2ncr11x64qd6 735937 735936 2026-04-01T20:24:00Z Enbi 72574 735937 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { if (mw.config.get('wgCanonicalSpecialPageName' !== 'Contributions') && mw.config.get('wgAction') !== 'history') { console.log('NOTHEREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); return; } console.log(mw.config.get('wgAction')); const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (let i = 0; i < undoSpans.length; i++) { addLinkContrib(undoSpans[i]); } function addLinkHist(item) { const revid = item.getAttribute('data-mw-revid'); if (revid != mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } function addLinkContrib(item) { console.log(item); const isCurrent = item.querySelector('span.mw-uctop'); console.log(isCurrent); if (!isCurrent) return; console.log('ah'); const revid = item.getAttribute('data-mw-revid'); const links = item.querySelector('.mw-uctop + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> hygszq3mdxr6zx5jxdxpg83y0nqjsr3 735939 735937 2026-04-01T20:25:15Z Enbi 72574 735939 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { if (mw.config.get('wgCanonicalSpecialPageName') !== 'Contributions' && mw.config.get('wgAction') !== 'history') { console.log('NOTHEREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); return; } else { console.log() } console.log(mw.config.get('wgAction')); const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (let i = 0; i < undoSpans.length; i++) { addLinkContrib(undoSpans[i]); } function addLinkHist(item) { const revid = item.getAttribute('data-mw-revid'); if (revid != mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } function addLinkContrib(item) { console.log(item); const isCurrent = item.querySelector('span.mw-uctop'); console.log(isCurrent); if (!isCurrent) return; console.log('ah'); const revid = item.getAttribute('data-mw-revid'); const links = item.querySelector('.mw-uctop + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> tkrw741ifxus26pegf02tfpd42l9416 735942 735939 2026-04-01T20:34:24Z Enbi 72574 735942 javascript text/javascript // {{lowercase title}} // <nowiki> mw.loader.using(['mediawiki.util', 'mediawiki.api'], async () => { if (!(mw.config.get('wgCanonicalSpecialPageName') === 'Contributions' || (mw.config.get('wgAction') === 'history' && !mw.config.get('wgPageIsProbablyEditable')))) { return; } console.log(mw.config.get('wgAction')); const isDiff = mw.config.get('wgDiffOldId'); const isContribs = mw.config.get('wgCanonicalSpecialPageName') === 'Contributions'; if (mw.config.get('wgAction') !== 'history' && !isDiff && !isContribs) return; const api = new mw.Api(); const pageName = mw.config.get('wgPageName'); function processUndoLink(undoSpan) { const container = undoSpan.closest(isDiff ? 'td' : 'li'); if (!container) return; const userLinkElem = container.querySelector('.mw-userlink') || document.querySelector('#firstHeading bdi'); if (!userLinkElem) return; const revisionUser = userLinkElem.textContent; let targetPage = pageName; if (isContribs) { const pageLinkElem = container.querySelector('.mw-contributions-title'); if (pageLinkElem) { targetPage = pageLinkElem.textContent; } } const ltaButton = document.createElement('a'); ltaButton.textContent = 'LTA'; ltaButton.href = '#'; ltaButton.addEventListener('click', async function(event) { event.preventDefault(); ltaButton.style.color = 'gray'; ltaButton.textContent = 'Rolling back...'; try { await api.postWithToken('rollback', { action: 'rollback', title: targetPage, user: revisionUser, summary: 'rv lta', }); mw.notify('Revision successfully rolled back, reloading...', { type: 'success' }); window.location.reload(); } catch (error) { mw.notify('Error rolling back revision: ' + error, { type: 'error' }); setTimeout(() => window.location.reload(), 2000); } }); const span = document.createElement('span'); if (isDiff) { span.append(document.createTextNode('(')); span.append(ltaButton); span.append(document.createTextNode(')')); undoSpan.after(document.createTextNode(' ')); undoSpan.after(span); } else { span.append(ltaButton); if (undoSpan.parentElement) undoSpan.parentElement.after(span); } } const undoSpans = document.querySelectorAll('li[data-mw-revid]'); for (let i = 0; i < undoSpans.length; i++) { if (mw.config.get('wgCanonicalSpecialPageName') === 'Contributions') { addLinkContrib(undoSpans[i]); } else { addLinkHist(undoSpans[i]); } } function addLinkHist(item) { const revid = item.getAttribute('data-mw-revid'); if (revid != mw.config.get('wgCurRevisionId')) return; const links = item.querySelector('.comment + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } function addLinkContrib(item) { console.log(item); const isCurrent = item.querySelector('span.mw-uctop'); console.log(isCurrent); if (!isCurrent) return; console.log('ah'); const revid = item.getAttribute('data-mw-revid'); const links = item.querySelector('.mw-uctop + .mw-changeslist-links'); if (!links) return; const parent = document.createElement('span') const el = document.createElement('a'); el.textContent = 'LTA undo'; parent.appendChild(el); links.appendChild(parent); console.log(revid); } // function addLink(item) { // const spans = document.query // } }); // </nowiki> grjxck14fbf3ym3pkj7mn1uzez24u5v User:BDavis (WMF)/Sandbox/Intbar 2 174607 735925 2026-04-01T20:11:00Z BDavis (WMF) 23231 Copied from https://de.wikipedia.beta.wmcloud.org/wiki/Special:Permalink/36253 735925 wikitext text/x-wiki Diese Seite wird genutzt, um Darstellungsvarianten von Wiki-TeX zu testen. == Große Symbole == === Normale Integrale über einer Menge === {| class="wikitable" |+ ! !Tex !SVG !Natives MathMl !Default |- | Normales Integral | <code>\int_A f(x) \mathrm{d} x</code> | <math forcemathmode="mathml">\int_A f(x) \mathrm{d} x</math> | <math forcemathmode="native">\int_A f(x) \mathrm{d} x</math> | <math>\int_A f(x) \mathrm{d} x</math> |- | Normales Integral im Displaystyle | <code>\displaystyle \int_A f(x) \mathrm{d} x</code> | <math forcemathmode="mathml">\displaystyle \int_A f(x) \mathrm{d} x</math> | <math forcemathmode="native">\displaystyle \int_A f(x) \mathrm{d} x</math> | <math>\displaystyle \int_A f(x) \mathrm{d} x</math> |- | Normales Integral im Textstyle | <code>\textstyle \int_A f(x) \mathrm{d} x</code> | <math forcemathmode="mathml">\textstyle \int_A f(x) \mathrm{d} x</math> | <math forcemathmode="native">\textstyle \int_A f(x) \mathrm{d} x</math> | <math>\textstyle \int_A f(x) \mathrm{d} x</math> |- | Normales Integral im Displaystyle und Limits | <code>\displaystyle \int\limits_A f(x) \mathrm{d} x</code> | <math forcemathmode="mathml">\displaystyle \int\limits_A f(x) \mathrm{d} x</math> | <math forcemathmode="native">\displaystyle \int\limits_A f(x) \mathrm{d} x</math> | <math>\displaystyle \int\limits_A f(x) \mathrm{d} x</math> |- | Normales Integral im Textstyle mit Limits | <code>\textstyle \int\limits_A f(x) \mathrm{d} x</code> | <math forcemathmode="mathml">\textstyle \int\limits_A f(x) \mathrm{d} x</math> | <math forcemathmode="native">\textstyle \int\limits_A f(x) \mathrm{d} x</math> | <math>\textstyle \int\limits_A f(x) \mathrm{d} x</math> |} <math>\int\limits_{Q_{j}}^{}</math> === Normale Integrale mit zwei Grenzen === {| class="wikitable" |+ ! !Tex !SVG !Natives MathMl !Default |- | Normales Integral | <code>\int_0^\infty f(x) \mathrm{d} x</code> | <math forcemathmode="mathml">\int_0^\infty f(x) \mathrm{d} x</math> | <math forcemathmode="native">\int_0^\infty f(x) \mathrm{d} x</math> | <math>\int_0^\infty f(x) \mathrm{d} x</math> |- | Normales Integral im Displaystyle | <code>\displaystyle \int_0^\infty f(x) \mathrm{d} x</code> | <math forcemathmode="mathml">\displaystyle \int_0^\infty f(x) \mathrm{d} x</math> | <math forcemathmode="native">\displaystyle \int_0^\infty f(x) \mathrm{d} x</math> | <math>\displaystyle \int_0^\infty f(x) \mathrm{d} x</math> |- | Normales Integral im Textstyle | <code>\textstyle \int_0^\infty f(x) \mathrm{d} x</code> | <math forcemathmode="mathml">\textstyle \int_0^\infty f(x) \mathrm{d} x</math> | <math forcemathmode="native">\textstyle \int_0^\infty f(x) \mathrm{d} x</math> | <math>\textstyle \int_0^\infty f(x) \mathrm{d} x</math> |- | Normales Integral im Displaystyle und Limits | <code>\displaystyle \int\limits_0^\infty f(x) \mathrm{d} x</code> | <math forcemathmode="mathml">\displaystyle \int\limits_0^\infty f(x) \mathrm{d} x</math> | <math forcemathmode="native">\displaystyle \int\limits_0^\infty f(x) \mathrm{d} x</math> | <math>\displaystyle \int\limits_0^\infty f(x) \mathrm{d} x</math> |- | Normales Integral im Textstyle mit Limits | <code>\textstyle \int\limits_0^\infty f(x) \mathrm{d} x</code> | <math forcemathmode="mathml">\textstyle \int\limits_0^\infty f(x) \mathrm{d} x</math> | <math forcemathmode="native">\textstyle \int\limits_0^\infty f(x) \mathrm{d} x</math> | <math>\textstyle \int\limits_0^\infty f(x) \mathrm{d} x</math> |} === Umlaufintegral === {| class="wikitable" |+ ! !Tex !SVG !Natives MathMl !Default |- | Umlaufintegral | <code>\oint_\gamma f(x) \mathrm{d} x</code> | <math forcemathmode="mathml">\oint_\gamma f(x) \mathrm{d} x</math> | <math forcemathmode="native">\oint_\gamma f(x) \mathrm{d} x</math> | <math>\oint_\gamma f(x) \mathrm{d} x</math> |- | Umlaufintegral im Displaystyle | <code>\displaystyle \oint_\gamma f(x) \mathrm{d} x</code> | <math forcemathmode="mathml">\displaystyle \oint_\gamma f(x) \mathrm{d} x</math> | <math forcemathmode="native">\displaystyle \oint_\gamma f(x) \mathrm{d} x</math> | <math>\displaystyle \oint_\gamma f(x) \mathrm{d} x</math> |- | Umlaufintegral im Textstyle | <code>\textstyle \oint_\gamma f(x) \mathrm{d} x</code> | <math forcemathmode="mathml">\textstyle \oint_\gamma f(x) \mathrm{d} x</math> | <math forcemathmode="native">\textstyle \oint_\gamma f(x) \mathrm{d} x</math> | <math>\textstyle \oint_\gamma f(x) \mathrm{d} x</math> |- | Umlaufintegral im Displaystyle und Limits | <code>\displaystyle \oint\limits_\gamma f(x) \mathrm{d} x</code> | <math forcemathmode="mathml">\displaystyle \oint\limits_\gamma f(x) \mathrm{d} x</math> | <math forcemathmode="native">\displaystyle \oint\limits_\gamma f(x) \mathrm{d} x</math> | <math>\displaystyle \oint\limits_\gamma f(x) \mathrm{d} x</math> |- | Umlaufintegral im Textstyle mit Limits | <code>\textstyle \oint\limits_\gamma f(x) \mathrm{d} x</code> | <math forcemathmode="mathml">\textstyle \oint\limits_\gamma f(x) \mathrm{d} x</math> | <math forcemathmode="native">\textstyle \oint\limits_\gamma f(x) \mathrm{d} x</math> | <math>\textstyle \oint\limits_\gamma f(x) \mathrm{d} x</math> |} === Mittelwertintegrale === ==== Serverseitiges MathMl als SVG ==== * Integral mit zwei Strichen: <math forcemathmode="mathml">\intBar_A f(x) \mathrm{d} x </math> * Integral mit einem Strich: <math forcemathmode="mathml">\intbar_A f(x) \mathrm{d} x </math> * Integral mit einem Strich in Textstyle: <math forcemathmode="mathml">\textstyle \intbar_A f(x) \mathrm{d} x </math> * Integral mit einem Strich und mit Limits: <math forcemathmode="mathml">\intBar\limits_A f(x) \mathrm{d} x </math> ==== Natives MathMl ==== *intbar in native mode mit textstyle <math forcemathmode="native">\textstyle \intbar \intBar</math> * intbar in native mode mit displaystyle <math forcemathmode="native">\displaystyle \intbar \intBar</math> * intbar in native mode mit displaystyle und limits <math forcemathmode="native">\displaystyle \intbar\limits_0^\infty \intBar</math> === Weitere Integrale === ==== Serverseitiges MathMl als SVG ==== # <math forcemathmode="mathml">\oint_{\partial \Sigma} \langle F, \tau \rangle \,\mathrm{d} s = \iint_\Sigma \langle \operatorname{rot} \,F, \nu \rangle \,\mathrm{d} S = \iint_\Sigma\left( \frac{\partial v_2}{\partial x} - \frac{\partial v_1}{\partial y} \right) \mathrm{d} x \mathrm{d} y</math> # <math forcemathmode="mathml">\iiint_{V_\mathrm{Kart}} f(x, y, z) \,\mathrm dx \mathrm dy \mathrm dz = \iiint_{V_\mathrm{Kug}} \tilde f(r, \theta, \varphi) \cdot r^2 \sin\theta \,\mathrm{d}r \mathrm{d}\theta \mathrm{d}\varphi </math> ==== Natives MathMl ==== # <math forcemathmode="native">\oint_{\partial \Sigma} \langle F, \tau \rangle \,\mathrm{d} s = \iint_\Sigma \langle \operatorname{rot} \,F, \nu \rangle \,\mathrm{d} S = \iint_\Sigma\left( \frac{\partial v_2}{\partial x} - \frac{\partial v_1}{\partial y} \right) \mathrm{d} x \mathrm{d} y</math> [[phab:T382684|<s>phab:T382684</s>]], [[phab:T413713|<s>phab:T413713</s>]] # <math forcemathmode="native">\iiint_{V_\mathrm{Kart}} f(x, y, z) \,\mathrm dx \mathrm dy \mathrm dz = \iiint_{V_\mathrm{Kug}} \tilde f(r, \theta, \varphi) \cdot r^2 \sin\theta \,\mathrm{d}r \mathrm{d}\theta \mathrm{d}\varphi </math> [[phab:T413713|<s>phab:T413713</s>]] === Volumen und Kurvenintegrale aus Stix macros === * <math>\oiiint_A f(x) \mathrm{d} x </math> * <math>\oiint_A f(x) \mathrm{d} x </math> * <math>\ointctrclockwise_A f(x) \mathrm{d} x </math> * <math>\ointctrclockwise_A f(x) \mathrm{d} x </math> * <math>\varointclockwise_A f(x) \mathrm{d} x </math> * <math>\varointclockwise_A f(x) \mathrm{d} x </math> === Standardsummenzeichen === {| class="wikitable" |+ ! !Tex !SVG !Natives MathMl !Default |- | Summenzeichen | <code>\sum_{n=1}^{\infty} \frac{\sin (2\pi nx )}{n}</code> | <math forcemathmode="mathml">\sum_{n=1}^{\infty} \frac{\sin (2\pi nx )}{n}</math> | <math forcemathmode="native">\sum_{n=1}^{\infty} \frac{\sin (2\pi nx )}{n}</math> | <math>\sum_{n=1}^{\infty} \frac{\sin (2\pi nx )}{n}</math> |- | Summenzeichen im Displaystyle | <code>\displaystyle \sum_{n=1}^{\infty} \frac{\sin (2\pi nx )}{n}</code> | <math forcemathmode="mathml">\displaystyle \sum_{n=1}^{\infty} \frac{\sin (2\pi nx )}{n}</math> | <math forcemathmode="native">\displaystyle \sum_{n=1}^{\infty} \frac{\sin (2\pi nx )}{n}</math> | <math>\displaystyle \sum_{n=1}^{\infty} \frac{\sin (2\pi nx )}{n}</math> |- | Summenzeichen im Textstyle | <code>\textstyle \sum_{n=1}^{\infty} \frac{\sin (2\pi nx )}{n}</code> | <math forcemathmode="mathml">\textstyle \sum_{n=1}^{\infty} \frac{\sin (2\pi nx )}{n}</math> | <math forcemathmode="native">\textstyle \sum_{n=1}^{\infty} \frac{\sin (2\pi nx )}{n}</math> | <math>\textstyle \sum_{n=1}^{\infty} \frac{\sin (2\pi nx )}{n}</math> |- | Summenzeichen im Displaystyle und Nolimits | <code>\displaystyle \sum\nolimits_{n=1}^{\infty} \frac{\sin (2\pi nx )}{n}</code> | <math forcemathmode="mathml">\displaystyle \sum\nolimits_{n=1}^{\infty} \frac{\sin (2\pi nx )}{n}</math> | <math forcemathmode="native">\displaystyle \sum\nolimits_{n=1}^{\infty} \frac{\sin (2\pi nx )}{n}</math> | <math>\displaystyle \sum\nolimits_{n=1}^{\infty} \frac{\sin (2\pi nx )}{n}</math> |- | Summenzeichen im Textstyle mit Limits | <code>\textstyle \sum\limits_{n=1}^{\infty} \frac{\sin (2\pi nx )}{n}</code> | <math forcemathmode="mathml">\textstyle \sum\limits_{n=1}^{\infty} \frac{\sin (2\pi nx )}{n}</math> | <math forcemathmode="native">\textstyle \sum\limits_{n=1}^{\infty} \frac{\sin (2\pi nx )}{n}</math> | <math>\textstyle \sum\limits_{n=1}^{\infty} \frac{\sin (2\pi nx )}{n}</math> |} === Summen === ==== Oplus-Summe ==== ===== Serverseitiges MathML ===== # <math forcemathmode="mathml">\mathrm T^{(n)}(V) := \bigoplus_{i=0}^nV^{\otimes i}</math> ===== Natives MathMl ===== # <math forcemathmode="native">\mathrm T^{(n)}(V) := \bigoplus_{i=0}^nV^{\otimes i}</math> ==== Weitere Summen und Produkte ==== ===== Serverseitiges MathML ===== # <math forcemathmode="mathml"> F_N(s)=\prod_{{p \leq N \atop p \ \text{Primzahl}}} \sum_{k=0}^{\infty} \frac{f(p^k)}{p^{ks}} </math> # <math forcemathmode="mathml"> F_N(s)=\prod\limits_{{p \leq N \atop p \ \text{Primzahl}}} \sum_{k=0}^{\infty} \frac{f(p^k)}{p^{ks}} </math> # <math forcemathmode="mathml"> \sum_{I,J} f_{I,J} \mathrm{d} z_I \wedge \mathrm{d} \overline{z}_J := \sum^{}_{\stackrel{1\leq i_1<\ldots<i_p\leq p}{1\leq j_1<\ldots<j_q\leq q}} f_{i_1, \ldots i_p, j_1, \ldots j_q} \mathrm{d}z_{i_1} \wedge \cdots \wedge \mathrm{d}z_{i_p} \wedge \mathrm{d} \overline{z}_{j_1} \wedge \cdots \wedge \mathrm{d} \overline{z}_{j_q}</math> # <math forcemathmode="mathml">\begin{align} \vartheta_1(z,q) &= \sum_{n=-\infty}^{\infty} \\ \vartheta_2(z,q) &= \sum\limits_{n=-\infty}^{\infty} \end{align}</math> ===== Natives MathMl ===== # <math forcemathmode="native"> F_N(s)=\prod_{{p \leq N \atop p \ \text{Primzahl}}} \sum_{k=0}^{\infty} \frac{f(p^k)}{p^{ks}} </math> # <math forcemathmode="native"> F_N(s)=\prod\limits_{{p \leq N \atop p \ \text{Primzahl}}} \sum_{k=0}^{\infty} \frac{f(p^k)}{p^{ks}} </math> # <math forcemathmode="native"> \sum_{I,J} f_{I,J} \mathrm{d} z_I \wedge \mathrm{d} \overline{z}_J := \sum^{}_{\stackrel{1\leq i_1<\ldots<i_p\leq p}{1\leq j_1<\ldots<j_q\leq q}} f_{i_1, \ldots i_p, j_1, \ldots j_q} \mathrm{d}z_{i_1} \wedge \cdots \wedge \mathrm{d}z_{i_p} \wedge \mathrm{d} \overline{z}_{j_1} \wedge \cdots \wedge \mathrm{d} \overline{z}_{j_q}</math> # <math forcemathmode="native">\begin{align} \vartheta_1(z,q) &= \sum_{n=-\infty}^{\infty} \\ \vartheta_2(z,q) &= \sum\limits_{n=-\infty}^{\infty} \end{align}</math> == Grenzwerte == === Limes === {| class="wikitable" |+ ! !Tex !SVG !Natives MathMl !Default |- | Limes | <code>\lim_{\delta_\tau \to 0}</code> | <math forcemathmode="mathml">\lim_{\delta_\tau \to 0}</math> | <math forcemathmode="native">\lim_{\delta_\tau \to 0}</math> | <math>\lim_{\delta_\tau \to 0}</math> |- | Limes | <code>\lim\nolimits_{\delta_\tau \to 0}</code> | <math forcemathmode="mathml">\lim\nolimits_{\delta_\tau \to 0}</math> | <math forcemathmode="native">\lim\nolimits_{\delta_\tau \to 0}</math> | <math>\lim\nolimits_{\delta_\tau \to 0}</math> |- | Limes | <code>\lim\limits_{\delta_\tau \to 0}</code> | <math forcemathmode="mathml">\lim\limits_{\delta_\tau \to 0}</math> | <math forcemathmode="native">\lim\limits_{\delta_\tau \to 0}</math> | <math>\lim\limits_{\delta_\tau \to 0}</math> |- | Limes | <code>\displaystyle \lim\nolimits_{\delta_\tau \to 0}</code> | <math forcemathmode="mathml">\displaystyle \lim\nolimits_{\delta_\tau \to 0}</math> | <math forcemathmode="native">\displaystyle \lim\nolimits_{\delta_\tau \to 0}</math> | <math>\displaystyle \lim\nolimits_{\delta_\tau \to 0}</math> |- | Limes | <code>\textstyle \lim_{\delta_\tau \to 0}</code> | <math forcemathmode="mathml">\textstyle \lim_{\delta_\tau \to 0}</math> | <math forcemathmode="native">\textstyle \lim_{\delta_\tau \to 0}</math> | <math>\textstyle \lim_{\delta_\tau \to 0}</math> |- | Limes | <code>\textstyle \lim\limits_{\delta_\tau \to 0}</code> | <math forcemathmode="mathml">\textstyle \lim\limits_{\delta_\tau \to 0}</math> | <math forcemathmode="native">\textstyle \lim\limits_{\delta_\tau \to 0}</math> | <math>\textstyle \lim\limits_{\delta_\tau \to 0}</math> |} <math>f'(x) = \frac{\mathrm d}{\mathrm dx} f(x) = \lim \limits_{\Delta x \to 0} \left( \frac{\Delta f(x)}{\Delta x} \right)</math> === Direkter Limes === {| class="wikitable" |+ ! !Tex !SVG !Natives MathMl !Default |- | Direkter Limes | <code>\varinjlim_{n}</code> | <math forcemathmode="mathml">\varinjlim_{n}</math> | <math forcemathmode="native">\varinjlim_{n}</math> | <math>\varinjlim_{n}</math> |- | Direkter Limes | <code>\varinjlim\nolimits_{n}</code> | <math forcemathmode="mathml">\varinjlim\nolimits_{n}</math> | <math forcemathmode="native">\varinjlim\nolimits_{n}</math> | <math>\varinjlim\nolimits_{n}</math> |- | Direkter Limes | <code>\varinjlim\limits_{n}</code> | <math forcemathmode="mathml">\varinjlim\limits_{n}</math> | <math forcemathmode="native">\varinjlim\limits_{n}</math> | <math>\varinjlim\limits_{n}</math> |- | Direkter Limes | <code>\displaystyle \varinjlim\nolimits_{n}</code> | <math forcemathmode="mathml">\displaystyle \varinjlim\nolimits_{n}</math> | <math forcemathmode="native">\displaystyle \varinjlim\nolimits_{n}</math> | <math>\displaystyle \varinjlim\nolimits_{n}</math> |- | Direkter Limes | <code>\textstyle \varinjlim_{n}</code> | <math forcemathmode="mathml">\textstyle \varinjlim_{n}</math> | <math forcemathmode="native">\textstyle \varinjlim_{n}</math> | <math>\textstyle \varinjlim_{n}</math> |- | Direkter Limes | <code>\textstyle \varinjlim\limits_{n}</code> | <math forcemathmode="mathml">\textstyle \varinjlim\limits_{n}</math> | <math forcemathmode="native">\textstyle \varinjlim\limits_{n}</math> | <math>\textstyle \varinjlim\limits_{n}</math> |} == Brüche == {| class="wikitable" |+ ! !Tex !SVG !Natives MathMl !Default |- | Bruch | <code>c + \frac{a}{b}</code> | <math forcemathmode="mathml">c + \frac{a}{b}</math> | <math forcemathmode="native">c + \frac{a}{b}</math> | <math>c + \frac{a}{b}</math> |- | Bruch | <code>c + \dfrac{a}{b}</code> | <math forcemathmode="mathml">c + \dfrac{a}{b}</math> | <math forcemathmode="native">c + \dfrac{a}{b}</math> | <math>c + \dfrac{a}{b}</math> |- | Bruch | <code>c + \tfrac{a}{b}</code> | <math forcemathmode="mathml">c + \tfrac{a}{b}</math> | <math forcemathmode="native">c + \tfrac{a}{b}</math> | <math>c + \tfrac{a}{b}</math> |- | Bruch | <code>d+ \frac{2}{c + \frac{a}{b}}</code> | <math forcemathmode="mathml">d+ \frac{2}{c + \frac{a}{b}}</math> | <math forcemathmode="native">d+ \frac{2}{c + \frac{a}{b}}</math> | <math>d+ \frac{2}{c + \frac{a}{b}}</math> |- | Bruch | <code>d+ \frac{2}{c + \dfrac{a}{b}}</code> | <math forcemathmode="mathml">d+ \dfrac{2}{c + \dfrac{a}{b}}</math> | <math forcemathmode="native">d+ \dfrac{2}{c + \dfrac{a}{b}}</math> | <math>d+ \dfrac{2}{c + \dfrac{a}{b}}</math> |- | Bruch | <code>d+ \tfrac{2}{c + \tfrac{a}{b}}</code> | <math forcemathmode="mathml">d+ \tfrac{2}{c + \tfrac{a}{b}}</math> | <math forcemathmode="native">d+ \tfrac{2}{c + \tfrac{a}{b}}</math> | <math>d+ \tfrac{2}{c + \tfrac{a}{b}}</math> |- | Bruch | <code>\frac{2}{4} = 0.5 \qquad \frac{2}{c + \frac{2}{d + \frac{2}{4}}} = a</code> | <math forcemathmode="mathml">\frac{2}{4} = 0.5 \qquad \frac{2}{c + \frac{2}{d + \frac{2}{4}}} = a</math> | <math forcemathmode="native">\frac{2}{4} = 0.5 \qquad \frac{2}{c + \frac{2}{d + \frac{2}{4}}} = a</math> | <math>\frac{2}{4} = 0.5 \qquad \frac{2}{c + \frac{2}{d + \frac{2}{4}}} = a</math> |- | Bruch | <code>\dfrac{2}{4} = 0.5 \qquad \dfrac{2}{c + \dfrac{2}{d + \dfrac{2}{4}}} = a</code> | <math forcemathmode="mathml">\dfrac{2}{4} = 0.5 \qquad \dfrac{2}{c + \dfrac{2}{d + \dfrac{2}{4}}} = a</math> | <math forcemathmode="native">\dfrac{2}{4} = 0.5 \qquad \dfrac{2}{c + \dfrac{2}{d + \dfrac{2}{4}}} = a</math> | <math>\dfrac{2}{4} = 0.5 \qquad \dfrac{2}{c + \dfrac{2}{d + \dfrac{2}{4}}} = a</math> |- | Bruch | <code>\tfrac{2}{4} = 0.5 \qquad \tfrac{2}{c + \tfrac{2}{d + \tfrac{2}{4}}} = a</code> | <math forcemathmode="mathml">\tfrac{2}{4} = 0.5 \qquad \tfrac{2}{c + \tfrac{2}{d + \tfrac{2}{4}}} = a</math> | <math forcemathmode="native">\tfrac{2}{4} = 0.5 \qquad \tfrac{2}{c + \tfrac{2}{d + \tfrac{2}{4}}} = a</math> | <math>\tfrac{2}{4} = 0.5 \qquad \tfrac{2}{c + \tfrac{2}{d + \tfrac{2}{4}}} = a</math> |} == Klammern == === Eckige Klammern === ==== Serverseitiges MathML ==== # <math forcemathmode="mathml">\gamma \,x + \ln\bigl[\Gamma(x + 1)\bigr]= \sum_{n=1}^{\infty}\biggl[ \frac{x}{n} - \ln\biggl(1 + \frac{x}{n}\biggr) \biggr]</math> ==== Natives MathMl ==== # <math forcemathmode="native">\gamma \,x + \ln\bigl[\Gamma(x + 1)\bigr]= \sum_{n=1}^{\infty}\biggl[ \frac{x}{n} - \ln\biggl(1 + \frac{x}{n}\biggr) \biggr]</math> === Runde Klammern === ==== Serverseitiges MathML ==== # <math forcemathmode="mathml">\bigvee\limits_{i\in I} \mathcal{A}_i=\sigma\left(\bigcup\limits_{i\in I} \mathcal{A}_i\right)</math> ==== Natives MathMl ==== # <math forcemathmode="native"> \bigvee\limits_{i\in I} \mathcal{A}_i=\sigma\left(\bigcup\limits_{i\in I} \mathcal{A}_i\right)</math> === Runde Biggr-Klammern === ==== Serverseitiges MathML ==== # <math forcemathmode="mathml"> \biggl(_i \frac{1}{n} \biggr)</math> # <math forcemathmode="mathml">\bigcap_{n\in\N} A_n = \biggl(\bigcup_{n\in\N} A_n^{\mathsf c}\biggr)^{\!\!\mathsf c}</math> ==== Natives MathMl ==== # <math forcemathmode="native"> \biggl(_i \frac{1}{n} \biggr)</math> [[phab:T352946]] # <math forcemathmode="native">\bigcap_{n\in\N} A_n = \biggl(\bigcup_{n\in\N} A_n^{\mathsf c}\biggr)^{\!\!\mathsf c}</math> [[phab:T352946]] === Geschweifte Klammern === ==== Serverseitiges MathMl ==== # <math forcemathmode="mathml">\left\{ \begin{array}{rl} \frac {1} {2 \pi} \ln {|x|}\ ,&n = 2,\\ -\frac {1} {(n-2)\,\omega_n} \frac {1} {|x|^{n-2}}\ ,&n > 2\\ \end{array} \right. </math> ==== Natives MathMl ==== # <math forcemathmode="native">\left\{ \begin{array}{rl} \frac {1} {2 \pi} \ln {|x|}\ ,&n = 2,\\ -\frac {1} {(n-2)\,\omega_n} \frac {1} {|x|^{n-2}}\ ,&n > 2\\ \end{array} \right. </math> === Angle-Klammern === {| class="wikitable" |+ ! !Tex !SVG !Natives MathMl !Default |- | Angle-Klammern | <code>\left\langle \begin{pmatrix} 1\\ -1 \\ 0 \\ 1 \end{pmatrix}, \begin{pmatrix} 0 \\ 0 \\ 1 \\ -1 \end{pmatrix} \right\rangle</code> | <math forcemathmode="mathml">\left\langle \begin{pmatrix} 1\\ -1 \\ 0 \\ 1 \end{pmatrix}, \begin{pmatrix} 0 \\ 0 \\ 1 \\ -1 \end{pmatrix} \right\rangle</math> | <math forcemathmode="native">\left\langle \begin{pmatrix} 1\\ -1 \\ 0 \\ 1 \end{pmatrix}, \begin{pmatrix} 0 \\ 0 \\ 1 \\ -1 \end{pmatrix} \right\rangle</math> | <math>\left\langle \begin{pmatrix} 1\\ -1 \\ 0 \\ 1 \end{pmatrix}, \begin{pmatrix} 0 \\ 0 \\ 1 \\ -1 \end{pmatrix} \right\rangle</math> |} == Binomialkoeffizienten == {| class="wikitable" |+ ! !Tex !SVG !Natives MathMl !Default |- | Binomialkoeffizient | <code>\binom{n}{k}</code> | <math forcemathmode="mathml">\binom{n}{k}</math> | <math forcemathmode="native">\binom{n}{k}</math> | <math>\binom{n}{k}</math> |- | Binomialkoeffizient in Algin-Umgebung | <code>\begin{align} \binom{n}{k} &= \frac{n!}{k! \cdot (n-k)!}\end{align}</code> | <math forcemathmode="mathml">\begin{align} \binom{n}{k} &= \frac{n!}{k! \cdot (n-k)!} \end{align}</math> | <math forcemathmode="native">\begin{align} \binom{n}{k} &= \frac{n!}{k! \cdot (n-k)!} \end{align}</math> | <math>\begin{align} \binom{n}{k} &= \frac{n!}{k! \cdot (n-k)!} \end{align}</math> |- | Binomialkoeffizient mit Textstyle | <code>\tbinom{n}{k}</code> | <math forcemathmode="mathml">\tbinom{n}{k}</math> | <math forcemathmode="native">\tbinom{n}{k}</math> | <math>\tbinom{n}{k}</math> |- | Binomialkoeffizient in Algin-Umgebung mit Textstyle | <code>\begin{align} \tbinom{n}{k} &= \frac{n!}{k! \cdot (n-k)!}\end{align}</code> | <math forcemathmode="mathml">\begin{align} \tbinom{n}{k} &= \tfrac{n!}{k! \cdot (n-k)!} \end{align}</math> | <math forcemathmode="native">\begin{align} \tbinom{n}{k} &= \tfrac{n!}{k! \cdot (n-k)!} \end{align}</math> | <math>\begin{align} \tbinom{n}{k} &= \tfrac{n!}{k! \cdot (n-k)!} \end{align}</math> |- | alter Binomialkoeffizient | <code>{n \choose k}</code> | <math forcemathmode="mathml">{n \choose k}</math> | <math forcemathmode="native">{n \choose k}</math> | <math>{n \choose k}</math> |- | alter Binomialkoeffizient in Algin-Umgebung | <code>\begin{align} {n \choose k} &= \frac{n!}{k! \cdot (n-k)!}\end{align}</code> | <math forcemathmode="mathml">\begin{align} {n \choose k} &= \frac{n!}{k! \cdot (n-k)!} \end{align}</math> | <math forcemathmode="native">\begin{align} {n \choose k} &= \frac{n!}{k! \cdot (n-k)!} \end{align}</math> | <math>\begin{align} {n \choose k} &= \frac{n!}{k! \cdot (n-k)!} \end{align}</math> |- | alter Binomialkoeffizient mit Strichen geklammert | <code>\left|{M\choose k}\right|</code> | <math forcemathmode="mathml">\left|{M\choose k}\right|</math> | <math forcemathmode="native">\left|{M\choose k}\right|</math> | <math>\left|{M\choose k}\right|</math> |} == Buchstaben == === Operatorname === ==== Serverseitiges MathML ==== # <math forcemathmode="mathml">\operatorname{Hom}</math> ==== Natives MathMl ==== # <math forcemathmode="native">\operatorname{Hom}</math> === Bf-Stil === ==== Serverseitiges MathML ==== # <math forcemathmode="mathml">{\bf Spec}, \bf A, \bf B, \bf C, \bf D, \bf E, \bf F, \bf G, \bf a, \bf 1, \bf{2 3 4 5 6 7 8 9}</math> ==== Natives MathMl ==== # <math forcemathmode="native">{\bf Spec}, \bf A, \bf B, \bf C, \bf D, \bf E, \bf F, \bf G, \bf a, \bf 1, \bf{2 3 4 5 6 7 8 9}</math> [[phab:T382672|<s>phab:T382672</s>]] === Mathbb === ==== Serverseitiges MathML ==== # <math forcemathmode="mathml">\mathbb{N}, \mathbb{Z}, \mathbb{Q}, \mathbb{R}, \R, \mathbb{C}, \Complex, \mathbb{H}, \mathbb{a}, \mathbb{1}</math> [[phab:T279805]] ==== Natives MathMl ==== # <math forcemathmode="native">\mathbb{N}, \mathbb{Z}, \mathbb{Q}, \mathbb{R}, \R, \mathbb{C}, \Complex, \mathbb{H}, \mathbb{a}, \mathbb{1}</math> === Mathcal === ==== Serverseitiges MathML ==== # <math forcemathmode="mathml">\mathcal{A B C D E F G H I J K L M} \mathcal{N} \mathcal{a} \mathcal{1}</math> ==== Natives MathMl ==== # <math forcemathmode="native">\mathcal{A B C D E F G H I J K L M} \mathcal{N} \mathcal{a} \mathcal{1}</math> == Sonderzeichen == {| class="wikitable" |+ ! !Tex !SVG !Natives MathMl !Default |- |D’Alembert-Operator |<code>\square</code> |<math forcemathmode="mathml">\square</math> |<math forcemathmode="native">\square</math> [[phab:T382681]] |<math>\square</math> |- |Bindestrich |<code>\text{-}</code> |<math forcemathmode="mathml">\text{-}</math> |<math forcemathmode="native">\text{-}</math> |<math>\text{-}</math> |- |Nicht in |<code>\notin</code> |<math forcemathmode="mathml">\notin</math> |<math forcemathmode="native">\notin</math> |<math>\notin</math> |- |Nicht in |<code>\not\in</code> |<math forcemathmode="mathml">\not\in</math> |<math forcemathmode="native">\not\in</math> |<math>\not\in</math> |- |Ungleich |<code>\neq</code> |<math forcemathmode="mathml">\neq</math> |<math forcemathmode="native">\neq</math> |<math>\neq</math> |- |Ungleich |<code>\not=</code> |<math forcemathmode="mathml">\not=</math> |<math forcemathmode="native">\not=</math> |<math>\not=</math> |- |Nicht kleiner |<code>\not<</code> |<math forcemathmode="mathml">\not<</math> |<math forcemathmode="native">\not<</math> |<math>\not<</math> |- |Nicht größer |<code>\not></code> |<math forcemathmode="mathml">\not></math> |<math forcemathmode="native">\not></math> |<math>\not></math> |- |Nicht kleiner-gleich |<code>\not\leq</code> |<math forcemathmode="mathml">\not\leq</math> |<math forcemathmode="native">\not\leq</math> |<math>\not\leq</math> |} == Funktionen == === Determinante mit Potenz und Nolimits=== ==== Serverseitiges MathMl ==== #<math>\det\nolimits^{\frac{1}{2}}</math> ==== Natives MathMl ==== #<math forcemathmode="native">\det\nolimits^{\frac{1}{2}}</math> [[phab:T382716|<s>phab:T382716</s>]] [[phab:T378257|<s>phab:T378257</s>]] [[phab:T382813|<s>phab:T382813</s>]] === Determinante mit Potenz ohne Nolimits === ==== Serverseitiges MathMl ==== #<math>\det^{\frac{1}{2}}</math> ==== Natives MathMl ==== #<math forcemathmode="native">\det^{\frac{1}{2}}</math> === Supremum === ==== Serverseitiges MathMl ==== <math>\mathrm{ess} \sup</math> ==== Natives MathMl ==== <math forcemathmode="native">\mathrm{ess} \sup</math> === Wurzel === {| class="wikitable" |+ ! !Tex !SVG !Natives MathMl !Default |- |Wurzel |<code>\sqrt{27}</code> |<math forcemathmode="mathml">\sqrt{27}</math> |<math forcemathmode="native">\sqrt{27}</math> |<math>\sqrt{27}</math> |- |3. Wurzel |<code>\sqrt[3]{27}</code> |<math forcemathmode="mathml">\sqrt[3]{27}</math> |<math forcemathmode="native">\sqrt[3]{27}</math> |<math>\sqrt[3]{27}</math> |} == Matrizen == {| class="wikitable" |+ ! !Tex !SVG !Natives MathMl !Default |- |Pmatrix |<code>\begin{pmatrix} 3 & 2 & 1 \\ 1 & 0 & 2 \end{pmatrix} \in \R^{2 \times 3}</code> |<math forcemathmode="mathml">\begin{pmatrix} 3 & 2 & 1 \\ 1 & 0 & 2 \end{pmatrix} \in \R^{2 \times 3}</math> |<math forcemathmode="native">\begin{pmatrix} 3 & 2 & 1 \\ 1 & 0 & 2 \end{pmatrix} \in \R^{2 \times 3}</math> |<math>\begin{pmatrix} 3 & 2 & 1 \\ 1 & 0 & 2 \end{pmatrix} \in \R^{2 \times 3}</math> |- |Smallmatrix |<code>\bigl( \begin{smallmatrix} a & b \\ c & d \end{smallmatrix} \bigr)</code> |<math forcemathmode="mathml">\bigl( \begin{smallmatrix} a & b \\ c & d \end{smallmatrix} \bigr)</math> |<math forcemathmode="native">\bigl( \begin{smallmatrix} a & b \\ c & d \end{smallmatrix} \bigr)</math> |<math>\bigl( \begin{smallmatrix} a & b \\ c & d \end{smallmatrix} \bigr)</math> |} == Fließtext (Satz von Atkinson) == === MathMl === Nach dem [[Satz von Atkinson]] ist ein Operator <math>A \colon X\to Y</math> genau dann ein Fredholm-Operator, wenn es Operatoren <math> B_1, B_2</math> und [[Kompakter Operator|kompakte Operatoren]] <math> K_1, K_2</math> gibt, so dass <math> AB_1=I_Y-K_1</math> und <math> B_2A=I_X-K_2</math> gilt, das heißt wenn <math> A</math> modulo kompakter Operatoren invertierbar ist. Insbesondere ist ein beschränkter Operator <math> A \colon X\to X</math> genau dann ein Fredholm-Operator, wenn seine Klasse <math>[A]_{\mathcal{C}(X)}</math> in der [[Calkin-Algebra]] <math>\mathcal{B}(X)/\mathcal{C}(X)</math> invertierbar ist. === Native === Nach dem [[Satz von Atkinson]] ist ein Operator <math forcemathmode="native">A \colon X\to Y</math> genau dann ein Fredholm-Operator, wenn es Operatoren <math forcemathmode="native"> B_1, B_2</math> und [[Kompakter Operator|kompakte Operatoren]] <math forcemathmode="native"> K_1, K_2</math> gibt, so dass <math forcemathmode="native"> AB_1=I_Y-K_1</math> und <math forcemathmode="native"> B_2A=I_X-K_2</math> gilt, das heißt wenn <math forcemathmode="native"> A</math> modulo kompakter Operatoren invertierbar ist. Insbesondere ist ein beschränkter Operator <math forcemathmode="native"> A \colon X\to X</math> genau dann ein Fredholm-Operator, wenn seine Klasse <math forcemathmode="native">[A]_{\mathcal{C}(X)}</math> in der [[Calkin-Algebra]] <math forcemathmode="native">\mathcal{B}(X)/\mathcal{C}(X)</math> invertierbar ist. == Widetilde & Overline == === Widetilde === ==== Serverseitiges Rendering ==== :<math forcemathmode="mathml">\widetilde{\operatorname{div}}T=\operatorname{\widetilde{div}}T=\operatorname{div}(T^\top)</math> ==== Natives MathMl ==== :<math forcemathmode="native">\widetilde{\operatorname{div}}T=\operatorname{\widetilde{div}}T=\operatorname{div}(T^\top)</math> [[phab:T352609]] und [[phab:T382674]] === Adjungierter Dolbeault-Operator === ==== Serverseitiges Rendering ==== :<math forcemathmode="mathml">\overline{\partial}^*</math> ==== Natives MathMl ==== :<math forcemathmode="native">\overline{\partial}^*</math> [[phab:T382796|<s>phab:T382796</s>]] === Overarc === {| class="wikitable" |+ ! !Tex !SVG !Natives MathMl !Default |- |Vec |<code>\vec v</code> |<math forcemathmode="mathml">\vec v</math> |<math forcemathmode="native">\vec v</math> |<math>\vec v</math> |- |Overarc |<code>0,\overarc{142857}</code> |<math forcemathmode="mathml">0,\overarc{142857}</math> |<math forcemathmode="native">0,\overarc{142857}</math> |<math>0,\overarc{142857}</math> |- |Overline |<code>\frac17 = 0,\overline{142857}</code> |<math forcemathmode="mathml">\frac17 = 0,\overline{142857}</math> |<math forcemathmode="native">\frac17 = 0,\overline{142857}</math> [[phab:T352698]] |<math>\frac17 = 0,\overline{142857}</math> |- |} == Potenzen & Indizes == === MathMl === # <math forcemathmode=mathml>\sigma_a^2</math> # <math forcemathmode=mathml>z = \operatorname{erf}^{-1}(p)</math> # <math forcemathmode=mathml>f^\sharp</math> === Native === # <math forcemathmode="native">\sigma_a^2</math> # <math forcemathmode="native">z = \operatorname{erf}^{-1}(p)</math> # <math forcemathmode="native">f^\sharp</math> === Partial === ==== Serverseitiges MathMl ==== <math forcemathmode=mathml>\partial_x^\alpha</math> ==== Natives MathMl ==== <math forcemathmode="native">\partial_x^\alpha</math> === Prime === {| class="wikitable" |+ ! !Tex !SVG !Natives MathMl !Default |- |Strich |<code>'</code> |<math forcemathmode="mathml">'</math> |<math forcemathmode="native">'</math> |<math>'</math> |- |Strich |<code>\prime</code> |<math forcemathmode="mathml">\prime</math> |<math forcemathmode="native">\prime</math> |<math>\prime</math> |- |Buchstabe mit Strich |<code>a' a'' f' \mu'</code> |<math forcemathmode=mathml>a' a'' f' \mu'</math> |<math forcemathmode="native">a' a'' f' \mu'</math> [[phab:T385948]] |<math>a' a'' f' \mu'</math> |- |Buchstabe mit Prime-Operator |<code>a^\prime a^{\prime \prime} f^\prime \mu^\prime</code> |<math forcemathmode="mathml">a^\prime a^{\prime \prime} f^\prime \mu^\prime</math> |<math forcemathmode="native">a^\prime a^{\prime \prime} f^\prime \mu^\prime</math> |<math>a^\prime a^{\prime \prime} f^\prime \mu^\prime</math> |- |Overset Prime |<code>\overset{\,\prime}{x}</code> |<math forcemathmode="mathml">\overset{\,\prime}{x}</math> |<math forcemathmode="native">\overset{\,\prime}{x}</math> |<math>\overset{\,\prime}{x}</math> |- |Overset Prime |<code>\overset{\prime}{x}</code> |<math forcemathmode="mathml">\overset{\prime}{x}</math> |<math forcemathmode="native">\overset{\prime}{x}</math> |<math>\overset{\prime}{x}</math> |- |Mehrfach Prime |<code>\operatorname{sl}'(a)\cdot\operatorname{sl}'(b)</code> |<math forcemathmode="mathml">\operatorname{sl}'(a)\cdot\operatorname{sl}'(b)</math> |<math forcemathmode="native">\operatorname{sl}'(a)\cdot\operatorname{sl}'(b)</math> |<math>\operatorname{sl}'(a)\cdot\operatorname{sl}'(b)</math> |} === Prime nach Determinante === ==== Serverseitiges MathMl ==== # <math forcemathmode=mathml>\det'</math> # <math forcemathmode=mathml>\det^\prime</math> ==== Natives MathMl ==== # <math forcemathmode="native">\det'</math> [[phab:T386562|<s>phab:T386562</s>]] # <math forcemathmode="native">\det^\prime</math> === Prime nach Operatorname === ==== Serverseitiges MathMl ==== # <math forcemathmode=mathml>\operatorname{determinante}'</math> # <math forcemathmode=mathml>\operatorname{determinante}^\prime</math> ==== Natives MathMl ==== # <math forcemathmode="native">\operatorname{determinante}'</math> # <math forcemathmode="native">\operatorname{determinante}^\prime</math> === Viele Indizes === {| class="wikitable" |+ ! !Tex !SVG !Natives MathMl !Default |- |Indizes |<code>\mathrm d\omega|_p=\sum_{1\leq i_1<\ldots<i_k\leq n} \sum_{i=1}^n \left. \frac{\partial a_{i_1,\ldots,i_k}}{\partial x_{i}}\right|_p \mathrm d x_{i}\wedge\mathrm dx_{i_1}\wedge\ldots\wedge\mathrm dx_{i_k}</code> |<math forcemathmode=mathml>\mathrm d\omega|_p=\sum_{1\leq i_1<\ldots<i_k\leq n} \sum_{i=1}^n \left. \frac{\partial a_{i_1,\ldots,i_k}}{\partial x_{i}}\right|_p \mathrm d x_{i}\wedge\mathrm dx_{i_1}\wedge\ldots\wedge\mathrm dx_{i_k}</math> |<math forcemathmode="native">\mathrm d\omega|_p=\sum_{1\leq i_1<\ldots<i_k\leq n} \sum_{i=1}^n \left. \frac{\partial a_{i_1,\ldots,i_k}}{\partial x_{i}}\right|_p \mathrm d x_{i}\wedge\mathrm dx_{i_1}\wedge\ldots\wedge\mathrm dx_{i_k}</math> |<math>\mathrm d\omega|_p=\sum_{1\leq i_1<\ldots<i_k\leq n} \sum_{i=1}^n \left. \frac{\partial a_{i_1,\ldots,i_k}}{\partial x_{i}}\right|_p \mathrm d x_{i}\wedge\mathrm dx_{i_1}\wedge\ldots\wedge\mathrm dx_{i_k}</math> |- |Indizes |<code>\begin{align}\mathrm d\omega|_p=\sum_{1\leq i_1<\ldots<i_k\leq n} \sum_{i=1}^n \left. \frac{\partial a_{i_1,\ldots,i_k}}{\partial x_{i}}\right|_p \mathrm d x_{i}\wedge\mathrm dx_{i_1}\wedge\ldots\wedge\mathrm dx_{i_k}\end{align}</code> |<math forcemathmode=mathml>\begin{align}\mathrm d\omega|_p=\sum_{1\leq i_1<\ldots<i_k\leq n} \sum_{i=1}^n \left. \frac{\partial a_{i_1,\ldots,i_k}}{\partial x_{i}}\right|_p \mathrm d x_{i}\wedge\mathrm dx_{i_1}\wedge\ldots\wedge\mathrm dx_{i_k}\end{align}</math> |<math forcemathmode="native">\begin{align}\mathrm d\omega|_p=\sum_{1\leq i_1<\ldots<i_k\leq n} \sum_{i=1}^n \left. \frac{\partial a_{i_1,\ldots,i_k}}{\partial x_{i}}\right|_p \mathrm d x_{i}\wedge\mathrm dx_{i_1}\wedge\ldots\wedge\mathrm dx_{i_k}\end{align}</math> |<math>\begin{align}\mathrm d\omega|_p=\sum_{1\leq i_1<\ldots<i_k\leq n} \sum_{i=1}^n \left. \frac{\partial a_{i_1,\ldots,i_k}}{\partial x_{i}}\right|_p \mathrm d x_{i}\wedge\mathrm dx_{i_1}\wedge\ldots\wedge\mathrm dx_{i_k}\end{align}</math> |} == Abstände == === Minus als Vorzeichen === ==== Serverseitiges MathMl ==== # <math forcemathmode=mathml>\sqrt{-1}</math> # <math forcemathmode=mathml>-5</math> # <math forcemathmode=mathml>-A</math> # <math forcemathmode=mathml>x - \mathrm{i}y</math> ==== Natives MathMl ==== # <math forcemathmode="native">\sqrt{-1}</math> # <math forcemathmode="native">-5</math> # <math forcemathmode="native">-A</math> # <math forcemathmode="native">x - \mathrm{i}y</math> === Definition === ==== Serverseitiges MathMl ==== # <math forcemathmode="mathml">i:=e_1 e_2</math> ==== Natives MathMl ==== # <math forcemathmode="native">i:=e_1 e_2</math> [[phab:T382680|<s>phab:T382680</s>]] === Faktor und Funktion === ==== Serverseitiges MathMl ==== :<math forcemathmode="mathml">A \exp(x)</math> ==== Natives MathMl ==== :<math forcemathmode="native">A \exp(x)</math> [[phab:T382642]] === Klammer und senkrechter Strich === ==== Serverseitiges MathMl ==== :<math forcemathmode="mathml">\max_{|z| \le 1}( |P'(z)| ) \le n\cdot\max_{|z| \le 1}( |P(z)| )</math> ==== Natives MathMl ==== :<math forcemathmode="native">\max_{|z| \le 1}( |P'(z)| ) \le n\cdot\max_{|z| \le 1}( |P(z)| )</math> [[:phab:T395582]] === Colon und Doppelpunkt === {| class="wikitable" |+ ! !Tex !SVG !Natives MathMl !Default |- |Abstand Colon |<code>\gamma \colon I \to M</code> |<math forcemathmode="mathml">\gamma \colon I \to M</math> |<math forcemathmode="native">\gamma \colon I \to M</math> |<math>\gamma \colon I \to M</math> |} === Zweistellige Operatoren === {| class="wikitable" |+ ! !Tex !SVG !Natives MathMl !Default |- |Abstand bigsqcup |<code>A \bigsqcup B</code> |<math forcemathmode=mathml>A \bigsqcup B</math> |<math forcemathmode="native">A \bigsqcup B</math> |<math>A \bigsqcup B</math> |- |Abstand bigsqcup |<code>A {\bigsqcup} B</code> |<math forcemathmode="mathml">A {\bigsqcup} B</math> |<math forcemathmode="native">A {\bigsqcup} B</math> |<math>A {\bigsqcup} B</math> |- |Abstand bigsqcup |<code>A \sqcup B</code> |<math forcemathmode=mathml>A \sqcup B</math> |<math forcemathmode="native">A \sqcup B</math> |<math>A \sqcup B</math> |- |Abstand bigsqcup |<code>A {\sqcup} B</code> |<math forcemathmode="mathml">A {\sqcup} B</math> |<math forcemathmode="native">A {\sqcup} B</math> |<math>A {\sqcup} B</math> |} == Weiteres == <math>||\left(\sum_{n=1}^N \bf P_{\rm n}\rm\right) ||^2 = \left(\sum_n \frac{E_n}{c}\right)^2 - \left(\sum_n^N \bf p_{\rm n}\rm \right)^2</math> == Was gar nicht funktioniert == === Substack === {| class="wikitable" |+ ! !Tex !SVG !Natives MathMl !Default |- |Substack |<code>\sum^{}_{\substack{1\leq i_1<\ldots<i_p\leq n \\ 1\leq j_1<\ldots<j_q\leq n}} f_{i_1, \ldots i_p, j_1, \ldots j_q} \mathrm{d}z_{i_1} \wedge \cdots \wedge \mathrm{d}z_{i_p} \wedge \mathrm{d} \overline{z}_{j_1} \wedge \cdots \wedge \mathrm{d} \overline{z}_{j_q}</code> |<math forcemathmode=mathml>\sum_{\substack{1\leq i_1<\ldots<i_p\leq n \\ 1\leq j_1<\ldots<j_q\leq n}} f_{i_1, \ldots i_p, j_1, \ldots j_q} \mathrm{d}z_{i_1} \wedge \cdots \wedge \mathrm{d}z_{i_p} \wedge \mathrm{d} \overline{z}_{j_1} \wedge \cdots \wedge \mathrm{d} \overline{z}_{j_q}</math> |<math forcemathmode="native">\sum^{}_{\substack{1\leq i_1<\ldots<i_p\leq n \\ 1\leq j_1<\ldots<j_q\leq n}} f_{i_1, \ldots i_p, j_1, \ldots j_q} \mathrm{d}z_{i_1} \wedge \cdots \wedge \mathrm{d}z_{i_p} \wedge \mathrm{d} \overline{z}_{j_1} \wedge \cdots \wedge \mathrm{d} \overline{z}_{j_q}</math> |<math>\sum^{}_{\substack{1\leq i_1<\ldots<i_p\leq n \\ 1\leq j_1<\ldots<j_q\leq n}} f_{i_1, \ldots i_p, j_1, \ldots j_q} \mathrm{d}z_{i_1} \wedge \cdots \wedge \mathrm{d}z_{i_p} \wedge \mathrm{d} \overline{z}_{j_1} \wedge \cdots \wedge \mathrm{d} \overline{z}_{j_q}</math> |} === Kommutative Diagramme === <math> \begin{tikzcd} A \arrow[r, "f"] \arrow[d, "g"'] & B \arrow[d, "h"] \\ C \arrow[r, "k"] & D \end{tikzcd} </math> <math forcemathmode="native"> \begin{tikzcd} A \arrow[r, "f"] \arrow[d, "g"'] & B \arrow[d, "h"] \\ C \arrow[r, "k"] & D \end{tikzcd} </math> <math> \begin{CD} A @>a>> B\\ @VVbV @VVcV\\ C @>d>> D \end{CD} </math> <math forcemathmode="native"> \begin{CD} A @>a>> B\\ @VVbV @VVcV\\ C @>d>> D \end{CD} </math> <math forcemathmode="mathjax"> \begin{CD} A @>a>> B\\ @VVbV @VVcV\\ C @>d>> D \end{CD} </math> cs5lkom9v6alsoolomuc4kyn0oi7zoh