Wikipedia
testwiki
https://test.wikipedia.org/wiki/Main_Page
MediaWiki 1.47.0-wmf.13
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
The abuse filter will block this
0
54320
754451
555745
2026-07-31T19:11:58Z
Itsied
75098
/* */
754451
wikitext
text/x-wiki
phoiac9h4m842xq45sp7s6u21eteeq1
HTML table
0
67583
754450
160106
2026-07-31T19:08:27Z
Itsied
75098
/* */
754450
wikitext
text/x-wiki
{| class="wikitable" style="width:600px"
bxp4cxovbolhcew0vdfgfqvy5knfgu9
Sandbox
0
68971
754431
754056
2026-07-31T15:47:17Z
Ealbizzati-test
75047
754431
wikitext
text/x-wiki
{{Please leave this line alone (sandbox heading)}}<!—
* Welcome to the sandbox! *
* Please leave this part alone *
* Feel free to try your editing skills below *
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■—>
What 1?
g0i9jr24mwy3ytqnkrdb207y86k0ryv
754433
754431
2026-07-31T16:34:38Z
Ealbizzati-test
75047
754433
wikitext
text/x-wiki
{{Please leave this line alone (sandbox heading)}}<!--
* Welcome to the sandbox! *
* Please leave this part alone *
* Feel free to try your editing skills below *
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■-->
What 1?
8ehli5zr0nf8e5vbrzmf3bvvmf07ryk
754434
754433
2026-07-31T16:39:56Z
Ealbizzati-test
75047
754434
wikitext
text/x-wiki
{{Please leave this line alone (sandbox heading)}}<!--
* Welcome to the sandbox! *
* Please leave this part alone *
* Feel free to try your editing skills below *
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■-->
What 1?ncc
Bbbbb
tbw62rrzkmk3mai9kmmd5lzmyld8758
754435
754434
2026-07-31T17:23:26Z
Ealbizzati-test
75047
754435
wikitext
text/x-wiki
{{Please leave this line alone (sandbox heading)}}<!--
* Welcome to the sandbox! *
* Please leave this part alone *
* Feel free to try your editing skills below *
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■-->
What 1?ncc
AAAAA
ptpkch3llgy0cisd916mcran67an6yn
Wikipedia:Test
4
71460
754497
754364
2026-07-31T22:10:28Z
~2026-42469-03
75102
/* Test */ Start?
754497
wikitext
text/x-wiki
= Test =
731
Candy Crush Saga Wiki: Tasty Sugar Track Edits Is Out Of Control (TST) and continue until least Next Year, Most Edits were made on 6/23, No New Episodes Will Be Released on 6/24.
2:6 - 7:12, 157 days, (7:13+ to fill out, Wait to 7:30 please).
*7:13, 7:14, 7:15 (?)
*7:16, 7:17, 7:18, 7:19, 7:20 (?)
*7:21, 7:22, 7:23, 7:24, 7:25 (?)
*7:26 (?)
*7:27 (?)
*7:28 (7:29)
''7:30''
*202 6525, Pot with Fork and Spoon, Bags with Sunglasses.
*202 6526, Baskets, Tobacco Stuff or Socks.
*202 6527, Food Shopping like Cola Bottles, Cans, Cordial and Others.
*202 6528, Socks, Pairs of Shoes, Dressing Gowns.
*202 6529, Towels, Cubes with Things.
*202 6530, Cloths, Flowers Frisun or Soap.
*202 6531, Food Shopping like Party Pies, Waters and Others.
*202 6601, Pairs of Boots, Pillow or Podiatrist.
*202 6602, Plates or Pans, Grated Cheese or Baskets.
*202 6603, Forks, Pans and Other Kitchen Tools.
*202 6604, Cups, Cordial Jug or Strawberry Milk.
*202 6605, Food Shopping like Cans of Coca Cola, Waters, Cordials or Pile of Sauce.
*202 6606, Purses, Lu Papers or Paper Towels.
*202 6607, Candles, Statues or Pizza Boxes.
*202 6608, Cups, Blankets and Others.
*202 6609, Food Shoppibg like Cola Bottles, Sour Cream and Onion Chips or Cans.
*202 6610, Towels, Cloths, Soap or Containers.
*202 6611, Nachos, Apple N Raspberry Codrial or Stationary.
*202 6612, Basket, Electric Bed with Instructions or Paint.
*202 6613, Aerobar, Birthday Cake or Packet of Candles.
*202 6614, Plates, Blankets or even Vacuum Cleaner.
*202 6615, Towels, Cloths or Dressing Gowns.
*202 6616, Smiths Chips, Heater Vents, Stuff for Lasagna or Cloths.
*202 6617, Pans, Table Spoons or Lids.
*202 6618, Food Shopping like Cans of Coca Cola, Waters, Milk and Others.
*202 6619, Chocolate Milk, Cups of Tea or Extra Mints.
*202 6620, Kitkats, Pens or Domino's Pizza.
*202 6621, Blankets and Pillows or Vacuum Cleaner.
*202 6622, Tea Towels, Cans of Coca Cola or Carlton Draught.
*202 6623, Food Shopping like Bottles of Cola, Waters or New Pyjamas.
*202 6624, Staples, Socks, Hats and Others.
*202 6625, Kitchen Bowls, Pans and Others.
*202 6626, Food Shopping like Colas, Milk or Rainbow Paddlepop.
*202 6627, Tablemats, Sunglasses or Garden Plant.
*202 6628, Boots, Sleep Medicine or Pillow.
*202 6629, Sewing Machine, Tobacco Stuff or Pan.
*202 6630, Food Shopping like Cans of Cocacola, Bottles, Kitkat or M&Ms.
*202 6701, BBQ Chips, Biskits or Grated Cheese.
*202 6702, Lighters, Plates or Cloths.
*202 6703, Hot Dogs, Cola Cans or Lasagna.
*202 6704, Mop, Battery Packs or Doorhandle.
*202 6705, Video Cameras, Internet or McDonalds Bag?.
*202 6706, Pans, Freshmint, or Hotdog Roll.
*202 6707, Food Shopping like Cans of Coca Cola, Cola Bottles, Waters, Shopping Bag or Grated Cheese.
*202 6708, Ktimes, Nutrigrain or Mueslibars.
*202 6709, Saladas, Socks, Vegemite or Textures.
*202 6710, Baskets, Favourites or Cordial Jug.
Current, 202 6711. ($#!+).
*202 6712. (ALDI Stores, Australia, Worldwide).
''2026713''
2a8x0043uzawb9h61b4cx4vv0s77xml
754498
754497
2026-07-31T22:11:00Z
~2026-42469-03
75102
754498
wikitext
text/x-wiki
= Test =
731 - Tooth
Candy Crush Saga Wiki: Tasty Sugar Track Edits Is Out Of Control (TST) and continue until least Next Year, Most Edits were made on 6/23, No New Episodes Will Be Released on 6/24.
2:6 - 7:12, 157 days, (7:13+ to fill out, Wait to 7:30 please).
*7:13, 7:14, 7:15 (?)
*7:16, 7:17, 7:18, 7:19, 7:20 (?)
*7:21, 7:22, 7:23, 7:24, 7:25 (?)
*7:26 (?)
*7:27 (?)
*7:28 (7:29)
''7:30''
*202 6525, Pot with Fork and Spoon, Bags with Sunglasses.
*202 6526, Baskets, Tobacco Stuff or Socks.
*202 6527, Food Shopping like Cola Bottles, Cans, Cordial and Others.
*202 6528, Socks, Pairs of Shoes, Dressing Gowns.
*202 6529, Towels, Cubes with Things.
*202 6530, Cloths, Flowers Frisun or Soap.
*202 6531, Food Shopping like Party Pies, Waters and Others.
*202 6601, Pairs of Boots, Pillow or Podiatrist.
*202 6602, Plates or Pans, Grated Cheese or Baskets.
*202 6603, Forks, Pans and Other Kitchen Tools.
*202 6604, Cups, Cordial Jug or Strawberry Milk.
*202 6605, Food Shopping like Cans of Coca Cola, Waters, Cordials or Pile of Sauce.
*202 6606, Purses, Lu Papers or Paper Towels.
*202 6607, Candles, Statues or Pizza Boxes.
*202 6608, Cups, Blankets and Others.
*202 6609, Food Shoppibg like Cola Bottles, Sour Cream and Onion Chips or Cans.
*202 6610, Towels, Cloths, Soap or Containers.
*202 6611, Nachos, Apple N Raspberry Codrial or Stationary.
*202 6612, Basket, Electric Bed with Instructions or Paint.
*202 6613, Aerobar, Birthday Cake or Packet of Candles.
*202 6614, Plates, Blankets or even Vacuum Cleaner.
*202 6615, Towels, Cloths or Dressing Gowns.
*202 6616, Smiths Chips, Heater Vents, Stuff for Lasagna or Cloths.
*202 6617, Pans, Table Spoons or Lids.
*202 6618, Food Shopping like Cans of Coca Cola, Waters, Milk and Others.
*202 6619, Chocolate Milk, Cups of Tea or Extra Mints.
*202 6620, Kitkats, Pens or Domino's Pizza.
*202 6621, Blankets and Pillows or Vacuum Cleaner.
*202 6622, Tea Towels, Cans of Coca Cola or Carlton Draught.
*202 6623, Food Shopping like Bottles of Cola, Waters or New Pyjamas.
*202 6624, Staples, Socks, Hats and Others.
*202 6625, Kitchen Bowls, Pans and Others.
*202 6626, Food Shopping like Colas, Milk or Rainbow Paddlepop.
*202 6627, Tablemats, Sunglasses or Garden Plant.
*202 6628, Boots, Sleep Medicine or Pillow.
*202 6629, Sewing Machine, Tobacco Stuff or Pan.
*202 6630, Food Shopping like Cans of Cocacola, Bottles, Kitkat or M&Ms.
*202 6701, BBQ Chips, Biskits or Grated Cheese.
*202 6702, Lighters, Plates or Cloths.
*202 6703, Hot Dogs, Cola Cans or Lasagna.
*202 6704, Mop, Battery Packs or Doorhandle.
*202 6705, Video Cameras, Internet or McDonalds Bag?.
*202 6706, Pans, Freshmint, or Hotdog Roll.
*202 6707, Food Shopping like Cans of Coca Cola, Cola Bottles, Waters, Shopping Bag or Grated Cheese.
*202 6708, Ktimes, Nutrigrain or Mueslibars.
*202 6709, Saladas, Socks, Vegemite or Textures.
*202 6710, Baskets, Favourites or Cordial Jug.
Current, 202 6711. ($#!+).
*202 6712. (ALDI Stores, Australia, Worldwide).
''2026713''
qjygjh7n56ehcsi6z0mr9n89b4gf7hd
754499
754498
2026-07-31T22:11:27Z
~2026-42469-03
75102
754499
wikitext
text/x-wiki
= Test =
731 - Toothpicks
Candy Crush Saga Wiki: Tasty Sugar Track Edits Is Out Of Control (TST) and continue until least Next Year, Most Edits were made on 6/23, No New Episodes Will Be Released on 6/24.
2:6 - 7:12, 157 days, (7:13+ to fill out, Wait to 7:30 please).
*7:13, 7:14, 7:15 (?)
*7:16, 7:17, 7:18, 7:19, 7:20 (?)
*7:21, 7:22, 7:23, 7:24, 7:25 (?)
*7:26 (?)
*7:27 (?)
*7:28 (7:29)
''7:30''
*202 6525, Pot with Fork and Spoon, Bags with Sunglasses.
*202 6526, Baskets, Tobacco Stuff or Socks.
*202 6527, Food Shopping like Cola Bottles, Cans, Cordial and Others.
*202 6528, Socks, Pairs of Shoes, Dressing Gowns.
*202 6529, Towels, Cubes with Things.
*202 6530, Cloths, Flowers Frisun or Soap.
*202 6531, Food Shopping like Party Pies, Waters and Others.
*202 6601, Pairs of Boots, Pillow or Podiatrist.
*202 6602, Plates or Pans, Grated Cheese or Baskets.
*202 6603, Forks, Pans and Other Kitchen Tools.
*202 6604, Cups, Cordial Jug or Strawberry Milk.
*202 6605, Food Shopping like Cans of Coca Cola, Waters, Cordials or Pile of Sauce.
*202 6606, Purses, Lu Papers or Paper Towels.
*202 6607, Candles, Statues or Pizza Boxes.
*202 6608, Cups, Blankets and Others.
*202 6609, Food Shoppibg like Cola Bottles, Sour Cream and Onion Chips or Cans.
*202 6610, Towels, Cloths, Soap or Containers.
*202 6611, Nachos, Apple N Raspberry Codrial or Stationary.
*202 6612, Basket, Electric Bed with Instructions or Paint.
*202 6613, Aerobar, Birthday Cake or Packet of Candles.
*202 6614, Plates, Blankets or even Vacuum Cleaner.
*202 6615, Towels, Cloths or Dressing Gowns.
*202 6616, Smiths Chips, Heater Vents, Stuff for Lasagna or Cloths.
*202 6617, Pans, Table Spoons or Lids.
*202 6618, Food Shopping like Cans of Coca Cola, Waters, Milk and Others.
*202 6619, Chocolate Milk, Cups of Tea or Extra Mints.
*202 6620, Kitkats, Pens or Domino's Pizza.
*202 6621, Blankets and Pillows or Vacuum Cleaner.
*202 6622, Tea Towels, Cans of Coca Cola or Carlton Draught.
*202 6623, Food Shopping like Bottles of Cola, Waters or New Pyjamas.
*202 6624, Staples, Socks, Hats and Others.
*202 6625, Kitchen Bowls, Pans and Others.
*202 6626, Food Shopping like Colas, Milk or Rainbow Paddlepop.
*202 6627, Tablemats, Sunglasses or Garden Plant.
*202 6628, Boots, Sleep Medicine or Pillow.
*202 6629, Sewing Machine, Tobacco Stuff or Pan.
*202 6630, Food Shopping like Cans of Cocacola, Bottles, Kitkat or M&Ms.
*202 6701, BBQ Chips, Biskits or Grated Cheese.
*202 6702, Lighters, Plates or Cloths.
*202 6703, Hot Dogs, Cola Cans or Lasagna.
*202 6704, Mop, Battery Packs or Doorhandle.
*202 6705, Video Cameras, Internet or McDonalds Bag?.
*202 6706, Pans, Freshmint, or Hotdog Roll.
*202 6707, Food Shopping like Cans of Coca Cola, Cola Bottles, Waters, Shopping Bag or Grated Cheese.
*202 6708, Ktimes, Nutrigrain or Mueslibars.
*202 6709, Saladas, Socks, Vegemite or Textures.
*202 6710, Baskets, Favourites or Cordial Jug.
Current, 202 6711. ($#!+).
*202 6712. (ALDI Stores, Australia, Worldwide).
''2026713''
iyevhfayv38hescif3sjun4b411qfoo
754500
754499
2026-07-31T22:11:50Z
~2026-42469-03
75102
754500
wikitext
text/x-wiki
= Test =
731 - Pack of Toothpicks
Candy Crush Saga Wiki: Tasty Sugar Track Edits Is Out Of Control (TST) and continue until least Next Year, Most Edits were made on 6/23, No New Episodes Will Be Released on 6/24.
2:6 - 7:12, 157 days, (7:13+ to fill out, Wait to 7:30 please).
*7:13, 7:14, 7:15 (?)
*7:16, 7:17, 7:18, 7:19, 7:20 (?)
*7:21, 7:22, 7:23, 7:24, 7:25 (?)
*7:26 (?)
*7:27 (?)
*7:28 (7:29)
''7:30''
*202 6525, Pot with Fork and Spoon, Bags with Sunglasses.
*202 6526, Baskets, Tobacco Stuff or Socks.
*202 6527, Food Shopping like Cola Bottles, Cans, Cordial and Others.
*202 6528, Socks, Pairs of Shoes, Dressing Gowns.
*202 6529, Towels, Cubes with Things.
*202 6530, Cloths, Flowers Frisun or Soap.
*202 6531, Food Shopping like Party Pies, Waters and Others.
*202 6601, Pairs of Boots, Pillow or Podiatrist.
*202 6602, Plates or Pans, Grated Cheese or Baskets.
*202 6603, Forks, Pans and Other Kitchen Tools.
*202 6604, Cups, Cordial Jug or Strawberry Milk.
*202 6605, Food Shopping like Cans of Coca Cola, Waters, Cordials or Pile of Sauce.
*202 6606, Purses, Lu Papers or Paper Towels.
*202 6607, Candles, Statues or Pizza Boxes.
*202 6608, Cups, Blankets and Others.
*202 6609, Food Shoppibg like Cola Bottles, Sour Cream and Onion Chips or Cans.
*202 6610, Towels, Cloths, Soap or Containers.
*202 6611, Nachos, Apple N Raspberry Codrial or Stationary.
*202 6612, Basket, Electric Bed with Instructions or Paint.
*202 6613, Aerobar, Birthday Cake or Packet of Candles.
*202 6614, Plates, Blankets or even Vacuum Cleaner.
*202 6615, Towels, Cloths or Dressing Gowns.
*202 6616, Smiths Chips, Heater Vents, Stuff for Lasagna or Cloths.
*202 6617, Pans, Table Spoons or Lids.
*202 6618, Food Shopping like Cans of Coca Cola, Waters, Milk and Others.
*202 6619, Chocolate Milk, Cups of Tea or Extra Mints.
*202 6620, Kitkats, Pens or Domino's Pizza.
*202 6621, Blankets and Pillows or Vacuum Cleaner.
*202 6622, Tea Towels, Cans of Coca Cola or Carlton Draught.
*202 6623, Food Shopping like Bottles of Cola, Waters or New Pyjamas.
*202 6624, Staples, Socks, Hats and Others.
*202 6625, Kitchen Bowls, Pans and Others.
*202 6626, Food Shopping like Colas, Milk or Rainbow Paddlepop.
*202 6627, Tablemats, Sunglasses or Garden Plant.
*202 6628, Boots, Sleep Medicine or Pillow.
*202 6629, Sewing Machine, Tobacco Stuff or Pan.
*202 6630, Food Shopping like Cans of Cocacola, Bottles, Kitkat or M&Ms.
*202 6701, BBQ Chips, Biskits or Grated Cheese.
*202 6702, Lighters, Plates or Cloths.
*202 6703, Hot Dogs, Cola Cans or Lasagna.
*202 6704, Mop, Battery Packs or Doorhandle.
*202 6705, Video Cameras, Internet or McDonalds Bag?.
*202 6706, Pans, Freshmint, or Hotdog Roll.
*202 6707, Food Shopping like Cans of Coca Cola, Cola Bottles, Waters, Shopping Bag or Grated Cheese.
*202 6708, Ktimes, Nutrigrain or Mueslibars.
*202 6709, Saladas, Socks, Vegemite or Textures.
*202 6710, Baskets, Favourites or Cordial Jug.
Current, 202 6711. ($#!+).
*202 6712. (ALDI Stores, Australia, Worldwide).
''2026713''
tmmb4iax3eerfla76f9cywysbmz1lhf
754501
754500
2026-07-31T22:12:21Z
~2026-42469-03
75102
754501
wikitext
text/x-wiki
= Test =
731 - Pack of Toothpicks
Candy Crush Saga Wiki: Tasty Sugar Track Edits Is Out Of Control (TST) and continue until least Next Year, Most Edits were made on 6/23, No New Episodes Will Be Released on 6/24.
2:6 - 7:12, 157 days, (7:13+ to fill out, Wait to 7:30 please).
*7:13, 7:14, 7:15 (?)
*7:16, 7:17, 7:18, 7:19, 7:20 (?)
*7:21, 7:22, 7:23, 7:24, 7:25 (?)
*7:26 (?)
*7:27 (?)
*7:28 (?)
*7:29 (7:30)
''7:31''
*202 6525, Pot with Fork and Spoon, Bags with Sunglasses.
*202 6526, Baskets, Tobacco Stuff or Socks.
*202 6527, Food Shopping like Cola Bottles, Cans, Cordial and Others.
*202 6528, Socks, Pairs of Shoes, Dressing Gowns.
*202 6529, Towels, Cubes with Things.
*202 6530, Cloths, Flowers Frisun or Soap.
*202 6531, Food Shopping like Party Pies, Waters and Others.
*202 6601, Pairs of Boots, Pillow or Podiatrist.
*202 6602, Plates or Pans, Grated Cheese or Baskets.
*202 6603, Forks, Pans and Other Kitchen Tools.
*202 6604, Cups, Cordial Jug or Strawberry Milk.
*202 6605, Food Shopping like Cans of Coca Cola, Waters, Cordials or Pile of Sauce.
*202 6606, Purses, Lu Papers or Paper Towels.
*202 6607, Candles, Statues or Pizza Boxes.
*202 6608, Cups, Blankets and Others.
*202 6609, Food Shoppibg like Cola Bottles, Sour Cream and Onion Chips or Cans.
*202 6610, Towels, Cloths, Soap or Containers.
*202 6611, Nachos, Apple N Raspberry Codrial or Stationary.
*202 6612, Basket, Electric Bed with Instructions or Paint.
*202 6613, Aerobar, Birthday Cake or Packet of Candles.
*202 6614, Plates, Blankets or even Vacuum Cleaner.
*202 6615, Towels, Cloths or Dressing Gowns.
*202 6616, Smiths Chips, Heater Vents, Stuff for Lasagna or Cloths.
*202 6617, Pans, Table Spoons or Lids.
*202 6618, Food Shopping like Cans of Coca Cola, Waters, Milk and Others.
*202 6619, Chocolate Milk, Cups of Tea or Extra Mints.
*202 6620, Kitkats, Pens or Domino's Pizza.
*202 6621, Blankets and Pillows or Vacuum Cleaner.
*202 6622, Tea Towels, Cans of Coca Cola or Carlton Draught.
*202 6623, Food Shopping like Bottles of Cola, Waters or New Pyjamas.
*202 6624, Staples, Socks, Hats and Others.
*202 6625, Kitchen Bowls, Pans and Others.
*202 6626, Food Shopping like Colas, Milk or Rainbow Paddlepop.
*202 6627, Tablemats, Sunglasses or Garden Plant.
*202 6628, Boots, Sleep Medicine or Pillow.
*202 6629, Sewing Machine, Tobacco Stuff or Pan.
*202 6630, Food Shopping like Cans of Cocacola, Bottles, Kitkat or M&Ms.
*202 6701, BBQ Chips, Biskits or Grated Cheese.
*202 6702, Lighters, Plates or Cloths.
*202 6703, Hot Dogs, Cola Cans or Lasagna.
*202 6704, Mop, Battery Packs or Doorhandle.
*202 6705, Video Cameras, Internet or McDonalds Bag?.
*202 6706, Pans, Freshmint, or Hotdog Roll.
*202 6707, Food Shopping like Cans of Coca Cola, Cola Bottles, Waters, Shopping Bag or Grated Cheese.
*202 6708, Ktimes, Nutrigrain or Mueslibars.
*202 6709, Saladas, Socks, Vegemite or Textures.
*202 6710, Baskets, Favourites or Cordial Jug.
Current, 202 6711. ($#!+).
*202 6712. (ALDI Stores, Australia, Worldwide).
''2026713''
p0e3qprz6d9rvwdxuwmvk6smrgmeoee
754502
754501
2026-07-31T22:12:44Z
~2026-42469-03
75102
/* Test */ True
754502
wikitext
text/x-wiki
= Test =
731 - Pack of Toothpicks
Candy Crush Saga Wiki: Tasty Sugar Track Edits Is Out Of Control (TST) and continue until least Next Year, Most Edits were made on 6/23, No New Episodes Will Be Released on 6/24.
2:6 - 7:12, 157 days, (7:13+ to fill out).
*7:13, 7:14, 7:15 (?)
*7:16, 7:17, 7:18, 7:19, 7:20 (?)
*7:21, 7:22, 7:23, 7:24, 7:25 (?)
*7:26 (?)
*7:27 (?)
*7:28 (?)
*7:29 (7:30)
''7:31''
*202 6525, Pot with Fork and Spoon, Bags with Sunglasses.
*202 6526, Baskets, Tobacco Stuff or Socks.
*202 6527, Food Shopping like Cola Bottles, Cans, Cordial and Others.
*202 6528, Socks, Pairs of Shoes, Dressing Gowns.
*202 6529, Towels, Cubes with Things.
*202 6530, Cloths, Flowers Frisun or Soap.
*202 6531, Food Shopping like Party Pies, Waters and Others.
*202 6601, Pairs of Boots, Pillow or Podiatrist.
*202 6602, Plates or Pans, Grated Cheese or Baskets.
*202 6603, Forks, Pans and Other Kitchen Tools.
*202 6604, Cups, Cordial Jug or Strawberry Milk.
*202 6605, Food Shopping like Cans of Coca Cola, Waters, Cordials or Pile of Sauce.
*202 6606, Purses, Lu Papers or Paper Towels.
*202 6607, Candles, Statues or Pizza Boxes.
*202 6608, Cups, Blankets and Others.
*202 6609, Food Shoppibg like Cola Bottles, Sour Cream and Onion Chips or Cans.
*202 6610, Towels, Cloths, Soap or Containers.
*202 6611, Nachos, Apple N Raspberry Codrial or Stationary.
*202 6612, Basket, Electric Bed with Instructions or Paint.
*202 6613, Aerobar, Birthday Cake or Packet of Candles.
*202 6614, Plates, Blankets or even Vacuum Cleaner.
*202 6615, Towels, Cloths or Dressing Gowns.
*202 6616, Smiths Chips, Heater Vents, Stuff for Lasagna or Cloths.
*202 6617, Pans, Table Spoons or Lids.
*202 6618, Food Shopping like Cans of Coca Cola, Waters, Milk and Others.
*202 6619, Chocolate Milk, Cups of Tea or Extra Mints.
*202 6620, Kitkats, Pens or Domino's Pizza.
*202 6621, Blankets and Pillows or Vacuum Cleaner.
*202 6622, Tea Towels, Cans of Coca Cola or Carlton Draught.
*202 6623, Food Shopping like Bottles of Cola, Waters or New Pyjamas.
*202 6624, Staples, Socks, Hats and Others.
*202 6625, Kitchen Bowls, Pans and Others.
*202 6626, Food Shopping like Colas, Milk or Rainbow Paddlepop.
*202 6627, Tablemats, Sunglasses or Garden Plant.
*202 6628, Boots, Sleep Medicine or Pillow.
*202 6629, Sewing Machine, Tobacco Stuff or Pan.
*202 6630, Food Shopping like Cans of Cocacola, Bottles, Kitkat or M&Ms.
*202 6701, BBQ Chips, Biskits or Grated Cheese.
*202 6702, Lighters, Plates or Cloths.
*202 6703, Hot Dogs, Cola Cans or Lasagna.
*202 6704, Mop, Battery Packs or Doorhandle.
*202 6705, Video Cameras, Internet or McDonalds Bag?.
*202 6706, Pans, Freshmint, or Hotdog Roll.
*202 6707, Food Shopping like Cans of Coca Cola, Cola Bottles, Waters, Shopping Bag or Grated Cheese.
*202 6708, Ktimes, Nutrigrain or Mueslibars.
*202 6709, Saladas, Socks, Vegemite or Textures.
*202 6710, Baskets, Favourites or Cordial Jug.
Current, 202 6711. ($#!+).
*202 6712. (ALDI Stores, Australia, Worldwide).
''2026713''
1x3t1a3mdifz18yo6eydcj0xm2cwkcl
Philippe
0
80975
754483
225242
2026-07-31T20:34:32Z
~2026-42487-87
75100
Added short description
754483
wikitext
text/x-wiki
{{Short description|This is test article}}
'''Philippe''' ist ein französischer männlicher [[Vorname]]<ref>[http://www.vornamen-weltweit.de/vorname.php?eintrag=31338 Philippe auf ''vornamen-weltweit.de'']</ref> und [[Familienname]].
== Herkunft und Bedeutung ==
Philippe ist die [[Französische Sprache|französische]] Form des Namens [[Philipp]]<ref>[http://www.behindthename.com/name/philippe Philippe auf ''behindthename.com''] (engl.)</ref> und wie dieser von dem griechischen φίλιππος (Phílippos) mit der Bedeutung „Pferdefreund“ abgeleitet.
== Namensträger ==
=== Herrscher ===
* [[Philippe de Toucy]] († 1277), Regent (Bailli) des lateinischen Kaiserreichs von Konstantinopel
* [[Philippe (Belgien)]] (* 1960), amtierender König der Belgier
=== Vorname ===
<!-- Zum Vornamen bitte nur Personen mit einem Artikel in der de:WP eintragen! -->
* [[Philippe Adams]] (* 1969), belgischer Rennfahrer
* [[Philippe Alliot]] (* 1954), französischer Rennfahrer
* [[Philippe Attey]], ivorischer Politiker
* [[Philippe Bühler]] (* 1981), deutscher Sänger
* [[Philippe-Henry Dacoury-Tabley]], ivorischer Bankier
* [[Philippe Étancelin]] (1896–1981), französischer Rennfahrer
* [[Philippe Herreweghe]] (* 1947), belgischer Dirigent
* [[Philippe Jaroussky]] (* 1978), französischer Countertenor
* [[Philippe Kahn]] (* 1952), französisch-amerikanischer Unternehmer
* [[Philippe Mangou]] (* 1952), ivorischer Militär
* [[Philippe Palmiste]] (* 1978), französischer Radrennfahrer
* [[Philippe de Rothschild]] (1902–1988), französischer Unternehmer, Automobilrennfahrer und Pionier des französischen Weinbaus
* [[Philippe Soutter]] (* 1962), Schweizer Unihockeytrainer
* [[Philippe Streiff]] (* 1955), französischer Rennfahrer
=== Familienname ===
* [[Adrien Philippe]] (1815–1894), französischer Uhrmacher und Erfinder
* [[Charles-Louis Philippe]] (1874–1909), französischer Schriftsteller und Dichter
* [[Clarissa Jean-Philippe]] (1988–2015), Polizistin der Pariser Stadtpolizei
* [[Didier Philippe]] (* 1961), französischer Fußballspieler
* [[Guy Philippe]] (* 1968), haitianischer Offizier, Polizeichef und Rebellenführer
* [[Jean Philippe]] (* 1931), französischer Sänger
* [[Joseph Laurent Philippe]] (1877–1956), von 1935 bis 1956 Bischof von Luxemburg
* [[Julie Philippe]] (* 1946), französische Schauspielerin und Casterin
* [[Laëtitia Philippe]] (* 1991), französische Fußballspielerin
* [[Marie-Dominique Philippe]] (1912–2006), französischer Dominikaner, Philosoph, Theologe und Gründer der Congrégation Saint Jean
* [[Maurice Philippe]] († 1989), britischer Konstrukteur von Rennwagen und Flugzeugen
* [[Michel Philippe-Gérard]] (1924–2014), französischer Orchesterleiter, Pianist, Dirigent, Komponist und Liedertexter
* [[Nelson Philippe]] (* 1986), französischer Rennfahrer
* [[Patrick Philippe]], französischer Curler
* [[Paul-Pierre Philippe]] (1905–1984), französischer römisch-katholischer Kardinal
== Siehe auch ==
* [[Patek Philippe]], Schweizer Uhrenmanufaktur
== Einzelnachweise ==
<references />
[[Kategorie:Männlicher Vorname]]
[[Kategorie:Familienname]]
[[Kategorie:Französischer Personenname]]
[[fr:Philippe]]
[[no:Philippe]]
dcs79rkaxkzcs3sgpqityij9acld4g6
Template:BotComment
10
86648
754560
257947
2026-08-01T09:18:00Z
FinnElGhifari-78e
74755
/* */
754560
wikitext
text/x-wiki
[[File:Symbol dot dot dot.svg|20px|alt=|link=]] {{{1|'''Comment''':}}}
qzu0ppkusyyfcbjzvaaop2jsxu0b978
Template:R
10
87401
754554
753182
2026-08-01T08:23:12Z
FinnElGhifari-78e
74755
FinnElGhifari-78e moved page [[R.]] to [[Template:R]] over redirect
753182
wikitext
text/x-wiki
<!-- ### 1 ###
-->{{r/ref|{{{name1|{{{name|{{{n1|{{{n|{{{1|}}}}}}}}}}}}}}}|{{{group|{{{grp|{{{g|}}}}}}}}}|direction={{{direction1|{{{direction|{{{dir1|{{{dir|}}}}}}}}}}}}
|page{{#if:{{{page1|{{{page|{{{p1|{{{1p|{{{p|}}}}}}}}}}}}}}}||NULL}}={{{page1|{{{page|{{{p1|{{{1p|{{{p|}}}}}}}}}}}}}}}
|pages{{#if:{{{pages1|{{{pages|{{{pp1|{{{1pp|{{{pp|}}}}}}}}}}}}}}}||NULL}}={{{pages1|{{{pages|{{{pp1|{{{1pp|{{{pp|}}}}}}}}}}}}}}}
|location{{#if:{{{location1|{{{location|{{{loc1|{{{1loc|{{{loc|{{{at1|{{{at|}}}}}}}}}}}}}}}}}}}}}||NULL}}={{{location1|{{{location|{{{loc1|{{{1loc|{{{loc|{{{at1|{{{at|}}}}}}}}}}}}}}}}}}}}}
|quote-page{{#if:{{{quotation-page1|{{{quotation-page|{{{quote-page1|{{{quote-page|{{{qp1|{{{qp|}}}}}}}}}}}}}}}}}}||NULL}}={{{quotation-page1|{{{quotation-page|{{{quote-page1|{{{quote-page|{{{qp1|{{{qp|}}}}}}}}}}}}}}}}}}
|quote-pages{{#if:{{{quotation-pages1|{{{quotation-pages|{{{quote-pages1|{{{quote-pages|{{{qpp1|{{{qpp|}}}}}}}}}}}}}}}}}}||NULL}}={{{quotation-pages1|{{{quotation-pages|{{{quote-pages1|{{{quote-pages|{{{qpp1|{{{qpp|}}}}}}}}}}}}}}}}}}
|quote-location{{#if:{{{quotation-location1|{{{quotation-location|{{{quote-location1|{{{quote-location|{{{quote-loc1|{{{quote-loc|{{{quote-at1|{{{quote-at|}}}}}}}}}}}}}}}}}}}}}}}}||NULL}}={{{quotation-location1|{{{quotation-location|{{{quote-location1|{{{quote-location|{{{quote-loc1|{{{quote-loc|{{{quote-at1|{{{quote-at|}}}}}}}}}}}}}}}}}}}}}}}}
|quote={{{quotation1|{{{quotation|{{{quote1|{{{quote|{{{q1|{{{q|}}}}}}}}}}}}}}}}}}
|language={{{quotation-language1|{{{quotation-language|{{{quote-language1|{{{quote-language|{{{quotation-lang1|{{{quotation-lang|{{{quote-lang1|{{{quote-lang|{{{ql1|{{{ql|{{{language1|{{{language|{{{lang1|{{{language|{{{l1|{{{l|}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
|translation={{{translation-quotation1|{{{translation-quotation|{{{trans-quotation1|{{{trans-quotation|{{{translation-quote1|{{{translation-quote|{{{trans-quote1|{{{trans-quote|{{{tq1|{{{tq|{{{translation1|{{{translation|{{{trans1|{{{trans|{{{t1|{{{t|{{{xlat1|{{{xlat|}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
|quote-cite={{{quotation-cite1|{{{quotation-cite|{{{quote-cite1|{{{quote-cite|{{{qc1|{{{qc|}}}}}}}}}}}}}}}}}}
|reference={{{reference1|{{{references|{{{reference|{{{notes|{{{note|{{{content|{{{text|{{{refn1|{{{refn|{{{refs|{{{r1|{{{r|}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
|annotation={{{annotation1|{{{annotation|{{{annot1|{{{annot|{{{a1|{{{a|}}}}}}}}}}}}}}}}}}
|leadin={{{leadin|}}}
|postscript={{{postscript|{{{postscript1|{{{ps|{{{ps1|{{{1ps|}}}}}}}}}}}}}}}
|section={{{section1|{{{section|{{{sec1|{{{sec|{{{s1|{{{s|}}}}}}}}}}}}}}}}}}
|needed-reason={{{needed-reason1|{{{needed-reason|{{{needed1|{{{needed|{{{reason|}}}}}}}}}}}}}}}
|needed-date={{{needed-date|{{{date|}}}}}}
|wrap={{{wrap|}}}
|no-pp={{{no-pp|{{{nopp|}}}}}}
|style={{{style|}}}
|content-id={{{ref1|{{{1ref|{{{ref|{{{id1|{{{id|}}}}}}}}}}}}}}}
|link-id={{{link-id1|{{{link-id|}}}}}}
|debug={{{debug|}}}}}<!-- ### 2 ###
-->{{#if:{{{name2|{{{n2|{{{2|}}}}}}}}}|{{r/ref|{{{name2|{{{n2|{{{2|}}}}}}}}}|{{{group|{{{grp|{{{g|}}}}}}}}}|direction={{{direction2|{{{dir2|}}}}}}
|page{{#if:{{{page2|{{{p2|{{{2p|}}}}}}}}}||NULL}}={{{page2|{{{p2|{{{2p|}}}}}}}}}
|pages{{#if:{{{pages2|{{{pp2|{{{2pp|}}}}}}}}}||NULL}}={{{pages2|{{{pp2|{{{2pp|}}}}}}}}}
|location{{#if:{{{location2|{{{loc2|{{{2loc|{{{at2|}}}}}}}}}}}}||NULL}}={{{location2|{{{loc2|{{{2loc|{{{at2|}}}}}}}}}}}}
|quote-page{{#if:{{{quotation-page2|{{{quote-page2|{{{qp2|}}}}}}}}}||NULL}}={{{quotation-page2|{{{quote-page2|{{{qp2|}}}}}}}}}
|quote-pages{{#if:{{{quotation-pages2|{{{quote-pages2|{{{qpp2|}}}}}}}}}||NULL}}={{{quotation-pages2|{{{quote-pages2|{{{qpp2|}}}}}}}}}
|quote-location{{#if:{{{quotation-location2|{{{quote-location2|{{{quote-loc2|{{{quote-at2|}}}}}}}}}}}}||NULL}}={{{quotation-location2|{{{quote-location2|{{{quote-loc2|{{{quote-at2|}}}}}}}}}}}}
|quote={{{quotation2|{{{quote2|{{{q2|}}}}}}}}}
|language={{{quotation-language2|{{{quote-language2|{{{quotation-lang2|{{{quote-lang2|{{{ql2|{{{language2|{{{lang2|{{{l2|}}}}}}}}}}}}}}}}}}}}}}}}
|translation={{{translation-quotation2|{{{trans-quotation2|{{{translation-quote2|{{{trans-quote2|{{{tq2|{{{translation2|{{{trans2|{{{t2|{{{xlat2|}}}}}}}}}}}}}}}}}}}}}}}}}}}
|quote-cite={{{quotation-cite2|{{{quote-cite2|{{{qc2|}}}}}}}}}
|reference={{{reference2|{{{refn2|{{{r2|}}}}}}}}}
|annotation={{{annotation2|{{{annot2|{{{a2|}}}}}}}}}
|leadin={{{leadin|}}}
|postscript={{{postscript2|{{{ps2|{{{2ps|{{{postscript|{{{ps|}}}}}}}}}}}}}}}
|section={{{section2||{{{sec2|{{{s2|}}}}}}}}}
|needed-reason={{{needed-reason2|{{{needed2|}}}}}}
|needed-date={{{needed-date|{{{date|}}}}}}
|wrap={{{wrap|}}}
|no-pp={{{no-pp|{{{nopp|}}}}}}
|style={{{style|}}}
|content-id={{{ref2|{{{2ref|{{{id2|}}}}}}}}}
|link-id={{{link-id2|}}}
|debug={{{debug|}}}}}<!-- ### 3 ###
-->{{#if:{{{name3|{{{n3|{{{3|}}}}}}}}}|{{r/ref|{{{name3|{{{n3|{{{3|}}}}}}}}}|{{{group|{{{grp|{{{g|}}}}}}}}}|direction={{{direction3|{{{dir3|}}}}}}
|page{{#if:{{{page3|{{{p3|{{{3p|}}}}}}}}}||NULL}}={{{page3|{{{p3|{{{3p|}}}}}}}}}
|pages{{#if:{{{pages3|{{{pp3|{{{3pp|}}}}}}}}}||NULL}}={{{pages3|{{{pp3|{{{3pp|}}}}}}}}}
|location{{#if:{{{location3|{{{loc3|{{{3loc|{{{at3|}}}}}}}}}}}}||NULL}}={{{location3|{{{loc3|{{{3loc|{{{at3|}}}}}}}}}}}}
|quote-page{{#if:{{{quotation-page3|{{{quote-page3|{{{qp3|}}}}}}}}}||NULL}}={{{quotation-page3|{{{quote-page3|{{{qp3|}}}}}}}}}
|quote-pages{{#if:{{{quotation-pages3|{{{quote-pages3|{{{qpp3|}}}}}}}}}||NULL}}={{{quotation-pages3|{{{quote-pages3|{{{qpp3|}}}}}}}}}
|quote-location{{#if:{{{quotation-location3|{{{quote-location3|{{{quote-loc3|{{{quote-at3|}}}}}}}}}}}}||NULL}}={{{quotation-location3|{{{quote-location3|{{{quote-loc3|{{{quote-at3|}}}}}}}}}}}}
|quote={{{quotation3|{{{quote3|{{{q3|}}}}}}}}}
|language={{{quotation-language3|{{{quote-language3|{{{quotation-lang3|{{{quote-lang3|{{{ql3|{{{language3|{{{lang3|{{{l3|}}}}}}}}}}}}}}}}}}}}}}}}
|translation={{{translation-quotation3|{{{trans-quotation3|{{{translation-quote3|{{{trans-quote3|{{{tq3|{{{translation3|{{{trans3|{{{t3|{{{xlat3|}}}}}}}}}}}}}}}}}}}}}}}}}}}
|quote-cite={{{quotation-cite3|{{{quote-cite3|{{{qc3|}}}}}}}}}
|reference={{{reference3|{{{refn3|{{{r3|}}}}}}}}}
|annotation={{{annotation3|{{{annot3|{{{a3|}}}}}}}}}
|leadin={{{leadin|}}}
|postscript={{{postscript3|{{{ps3|{{{3ps|{{{postscript|{{{ps|}}}}}}}}}}}}}}}
|section={{{section3||{{{sec3|{{{s3|}}}}}}}}}
|needed-reason={{{needed-reason3|{{{needed3|}}}}}}
|needed-date={{{needed-date|{{{date|}}}}}}
|wrap={{{wrap|}}}
|no-pp={{{no-pp|{{{nopp|}}}}}}
|style={{{style|}}}
|content-id={{{ref3|{{{3ref|{{{id3|}}}}}}}}}
|link-id={{{link-id3|}}}
|debug={{{debug|}}}}}<!-- ### 4 ###
-->{{#if:{{{name4|{{{n4|{{{4|}}}}}}}}}|{{r/ref|{{{name4|{{{n4|{{{4|}}}}}}}}}|{{{group|{{{grp|{{{g|}}}}}}}}}|direction={{{direction4|{{{dir4|}}}}}}
|page{{#if:{{{page4|{{{p4|{{{4p|}}}}}}}}}||NULL}}={{{page4|{{{p4|{{{4p|}}}}}}}}}
|pages{{#if:{{{pages4|{{{pp4|{{{4pp|}}}}}}}}}||NULL}}={{{pages4|{{{pp4|{{{4pp|}}}}}}}}}
|location{{#if:{{{location4|{{{loc4|{{{4loc|{{{at4|}}}}}}}}}}}}||NULL}}={{{location4|{{{loc4|{{{4loc|{{{at4|}}}}}}}}}}}}
|quote-page{{#if:{{{quotation-page4|{{{quote-page4|{{{qp4|}}}}}}}}}||NULL}}={{{quotation-page4|{{{quote-page4|{{{qp4|}}}}}}}}}
|quote-pages{{#if:{{{quotation-pages4|{{{quote-pages4|{{{qpp4|}}}}}}}}}||NULL}}={{{quotation-pages4|{{{quote-pages4|{{{qpp4|}}}}}}}}}
|quote-location{{#if:{{{quotation-location4|{{{quote-location4|{{{quote-loc4|{{{quote-at4|}}}}}}}}}}}}||NULL}}={{{quotation-location4|{{{quote-location4|{{{quote-loc4|{{{quote-at4|}}}}}}}}}}}}
|quote={{{quotation4|{{{quote4|{{{q4|}}}}}}}}}
|language={{{quotation-language4|{{{quote-language4|{{{quotation-lang4|{{{quote-lang4|{{{ql4|{{{language4|{{{lang4|{{{l4|}}}}}}}}}}}}}}}}}}}}}}}}
|translation={{{translation-quotation4|{{{trans-quotation4|{{{translation-quote4|{{{trans-quote4|{{{tq4|{{{translation4|{{{trans4|{{{t4|{{{xlat4|}}}}}}}}}}}}}}}}}}}}}}}}}}}
|quote-cite={{{quotation-cite4|{{{quote-cite4|{{{qc4|}}}}}}}}}
|reference={{{reference4|{{{refn4|{{{r4|}}}}}}}}}
|annotation={{{annotation4|{{{annot4|{{{a4|}}}}}}}}}
|leadin={{{leadin|}}}
|postscript={{{postscript4|{{{ps4|{{{4ps|{{{postscript|{{{ps|}}}}}}}}}}}}}}}
|section={{{section4||{{{sec4|{{{s4|}}}}}}}}}
|needed-reason={{{needed-reason4|{{{needed4|}}}}}}
|needed-date={{{needed-date|{{{date|}}}}}}
|wrap={{{wrap|}}}
|no-pp={{{no-pp|{{{nopp|}}}}}}
|style={{{style|}}}
|content-id={{{ref4|{{{4ref|{{{id4|}}}}}}}}}
|link-id={{{link-id4|}}}
|debug={{{debug|}}}}}<!-- ### 5 ###
-->{{#if:{{{name5|{{{n5|{{{5|}}}}}}}}}|{{r/ref|{{{name5|{{{n5|{{{5|}}}}}}}}}|{{{group|{{{grp|{{{g|}}}}}}}}}|direction={{{direction5|{{{dir5|}}}}}}
|page{{#if:{{{page5|{{{p5|{{{5p|}}}}}}}}}||NULL}}={{{page5|{{{p5|{{{5p|}}}}}}}}}
|pages{{#if:{{{pages5|{{{pp5|{{{5pp|}}}}}}}}}||NULL}}={{{pages5|{{{pp5|{{{5pp|}}}}}}}}}
|location{{#if:{{{location5|{{{loc5|{{{5loc|{{{at5|}}}}}}}}}}}}||NULL}}={{{location5|{{{loc5|{{{5loc|{{{at5|}}}}}}}}}}}}
|quote-page{{#if:{{{quotation-page5|{{{quote-page5|{{{qp5|}}}}}}}}}||NULL}}={{{quotation-page5|{{{quote-page5|{{{qp5|}}}}}}}}}
|quote-pages{{#if:{{{quotation-pages5|{{{quote-pages5|{{{qpp5|}}}}}}}}}||NULL}}={{{quotation-pages5|{{{quote-pages5|{{{qpp5|}}}}}}}}}
|quote-location{{#if:{{{quotation-location5|{{{quote-location5|{{{quote-loc5|{{{quote-at5|}}}}}}}}}}}}||NULL}}={{{quotation-location5|{{{quote-location5|{{{quote-loc5|{{{quote-at5|}}}}}}}}}}}}
|quote={{{quotation5|{{{quote5|{{{q5|}}}}}}}}}
|language={{{quotation-language5|{{{quote-language5|{{{quotation-lang5|{{{quote-lang5|{{{ql5|{{{language5|{{{lang5|{{{l5|}}}}}}}}}}}}}}}}}}}}}}}}
|translation={{{translation-quotation5|{{{trans-quotation5|{{{translation-quote5|{{{trans-quote5|{{{tq5|{{{translation5|{{{trans5|{{{t5|{{{xlat5|}}}}}}}}}}}}}}}}}}}}}}}}}}}
|quote-cite={{{quotation-cite5|{{{quote-cite5|{{{qc5|}}}}}}}}}
|reference={{{reference5|{{{refn5|{{{r5|}}}}}}}}}
|annotation={{{annotation5|{{{annot5|{{{a5|}}}}}}}}}
|leadin={{{leadin|}}}
|postscript={{{postscript5|{{{ps5|{{{5ps|{{{postscript|{{{ps|}}}}}}}}}}}}}}}
|section={{{section5||{{{sec5|{{{s5|}}}}}}}}}
|needed-reason={{{needed-reason5|{{{needed5|}}}}}}
|needed-date={{{needed-date|{{{date|}}}}}}
|wrap={{{wrap|}}}
|no-pp={{{no-pp|{{{nopp|}}}}}}
|style={{{style|}}}
|content-id={{{ref5|{{{5ref|{{{id5|}}}}}}}}}
|link-id={{{link-id5|}}}
|debug={{{debug|}}}}}<!-- ### 6 ###
-->{{#if:{{{name6|{{{n6|{{{6|}}}}}}}}}|{{r/ref|{{{name6|{{{n6|{{{6|}}}}}}}}}|{{{group|{{{grp|{{{g|}}}}}}}}}|direction={{{direction6|{{{dir6|}}}}}}
|page{{#if:{{{page6|{{{p6|{{{6p|}}}}}}}}}||NULL}}={{{page6|{{{p6|{{{6p|}}}}}}}}}
|pages{{#if:{{{pages6|{{{pp6|{{{6pp|}}}}}}}}}||NULL}}={{{pages6|{{{pp6|{{{6pp|}}}}}}}}}
|location{{#if:{{{location6|{{{loc6|{{{6loc|{{{at6|}}}}}}}}}}}}||NULL}}={{{location6|{{{loc6|{{{6loc|{{{at6|}}}}}}}}}}}}
|quote-page{{#if:{{{quotation-page6|{{{quote-page6|{{{qp6|}}}}}}}}}||NULL}}={{{quotation-page6|{{{quote-page6|{{{qp6|}}}}}}}}}
|quote-pages{{#if:{{{quotation-pages6|{{{quote-pages6|{{{qpp6|}}}}}}}}}||NULL}}={{{quotation-pages6|{{{quote-pages6|{{{qpp6|}}}}}}}}}
|quote-location{{#if:{{{quotation-location6|{{{quote-location6|{{{quote-loc6|{{{quote-at6|}}}}}}}}}}}}||NULL}}={{{quotation-location6|{{{quote-location6|{{{quote-loc6|{{{quote-at6|}}}}}}}}}}}}
|quote={{{quotation6|{{{quote6|{{{q6|}}}}}}}}}
|language={{{quotation-language6|{{{quote-language6|{{{quotation-lang6|{{{quote-lang6|{{{ql6|{{{language6|{{{lang6|{{{l6|}}}}}}}}}}}}}}}}}}}}}}}}
|translation={{{translation-quotation6|{{{trans-quotation6|{{{translation-quote6|{{{trans-quote6|{{{tq6|{{{translation6|{{{trans6|{{{t6|{{{xlat6|}}}}}}}}}}}}}}}}}}}}}}}}}}}
|quote-cite={{{quotation-cite6|{{{quote-cite6|{{{qc6|}}}}}}}}}
|reference={{{reference6|{{{refn6|{{{r6|}}}}}}}}}
|annotation={{{annotation6|{{{annot6|{{{a6|}}}}}}}}}
|leadin={{{leadin|}}}
|postscript={{{postscript6|{{{ps6|{{{6ps|{{{postscript|{{{ps|}}}}}}}}}}}}}}}
|section={{{section6||{{{sec6|{{{s6|}}}}}}}}}
|needed-reason={{{needed-reason6|{{{needed6|}}}}}}
|needed-date={{{needed-date|{{{date|}}}}}}
|wrap={{{wrap|}}}
|no-pp={{{no-pp|{{{nopp|}}}}}}
|style={{{style|}}}
|content-id={{{ref6|{{{6ref|{{{id6|}}}}}}}}}
|link-id={{{link-id6|}}}
|debug={{{debug|}}}}}<!-- ### 7 ###
-->{{#if:{{{name7|{{{n7|{{{7|}}}}}}}}}|{{r/ref|{{{name7|{{{n7|{{{7|}}}}}}}}}|{{{group|{{{grp|{{{g|}}}}}}}}}|direction={{{direction7|{{{dir7|}}}}}}
|page{{#if:{{{page7|{{{p7|{{{7p|}}}}}}}}}||NULL}}={{{page7|{{{p7|{{{7p|}}}}}}}}}
|pages{{#if:{{{pages7|{{{pp7|{{{7pp|}}}}}}}}}||NULL}}={{{pages7|{{{pp7|{{{7pp|}}}}}}}}}
|location{{#if:{{{location7|{{{loc7|{{{7loc|{{{at7|}}}}}}}}}}}}||NULL}}={{{location7|{{{loc7|{{{loc7|{{{at7|}}}}}}}}}}}}
|quote-page{{#if:{{{quotation-page7|{{{quote-page7|{{{qp7|}}}}}}}}}||NULL}}={{{quotation-page7|{{{quote-page7|{{{qp7|}}}}}}}}}
|quote-pages{{#if:{{{quotation-pages7|{{{quote-pages7|{{{qpp7|}}}}}}}}}||NULL}}={{{quotation-pages7|{{{quote-pages7|{{{qpp7|}}}}}}}}}
|quote-location{{#if:{{{quotation-location7|{{{quote-location7|{{{quote-loc7|{{{quote-at7|}}}}}}}}}}}}||NULL}}={{{quotation-location7|{{{quote-location7|{{{quote-loc7|{{{quote-at7|}}}}}}}}}}}}
|quote={{{quotation7|{{{quote7|{{{q7|}}}}}}}}}
|language={{{quotation-language7|{{{quote-language7|{{{quotation-lang7|{{{quote-lang7|{{{ql7|{{{language7|{{{lang7|{{{l7|}}}}}}}}}}}}}}}}}}}}}}}}
|translation={{{translation-quotation7|{{{trans-quotation7|{{{translation-quote7|{{{trans-quote7|{{{tq7|{{{translation7|{{{trans7|{{{t7|{{{xlat7|}}}}}}}}}}}}}}}}}}}}}}}}}}}
|quote-cite={{{quotation-cite7|{{{quote-cite7|{{{qc7|}}}}}}}}}
|reference={{{reference7|{{{refn7|{{{r7|}}}}}}}}}
|annotation={{{annotation7|{{{annot7|{{{a7|}}}}}}}}}
|leadin={{{leadin|}}}
|postscript={{{postscript7|{{{ps7|{{{7ps|{{{postscript|{{{ps|}}}}}}}}}}}}}}}
|section={{{section7||{{{sec7|{{{s7|}}}}}}}}}
|needed-reason={{{needed-reason7|{{{needed7|}}}}}}
|needed-date={{{needed-date|{{{date|}}}}}}
|wrap={{{wrap|}}}
|no-pp={{{no-pp|{{{nopp|}}}}}}
|style={{{style|}}}
|content-id={{{ref7|{{{7ref|{{{id7|}}}}}}}}}
|link-id={{{link-id7|}}}
|debug={{{debug|}}}}}<!-- ### 8 ###
-->{{#if:{{{name8|{{{n8|{{{8|}}}}}}}}}|{{r/ref|{{{name8|{{{n8|{{{8|}}}}}}}}}|{{{group|{{{grp|{{{g|}}}}}}}}}|direction={{{direction8|{{{dir8|}}}}}}
|page{{#if:{{{page8|{{{p8|{{{8p|}}}}}}}}}||NULL}}={{{page8|{{{p8|{{{8p|}}}}}}}}}
|pages{{#if:{{{pages8|{{{pp8|{{{8pp|}}}}}}}}}||NULL}}={{{pages8|{{{pp8|{{{8pp|}}}}}}}}}
|location{{#if:{{{location8|{{{loc8|{{{8loc|{{{at8|}}}}}}}}}}}}||NULL}}={{{location8|{{{loc8|{{{8loc|{{{at8|}}}}}}}}}}}}
|quote-page{{#if:{{{quotation-page8|{{{quote-page8|{{{qp8|}}}}}}}}}||NULL}}={{{quotation-page8|{{{quote-page8|{{{qp8|}}}}}}}}}
|quote-pages{{#if:{{{quotation-pages8|{{{quote-pages8|{{{qpp8|}}}}}}}}}||NULL}}={{{quotation-pages8|{{{quote-pages8|{{{qpp8|}}}}}}}}}
|quote-location{{#if:{{{quotation-location8|{{{quote-location8|{{{quote-loc8|{{{quote-at8|}}}}}}}}}}}}||NULL}}={{{quotation-location8|{{{quote-location8|{{{quote-loc8|{{{quote-at8|}}}}}}}}}}}}
|quote={{{quotation8|{{{quote8|{{{q8|}}}}}}}}}
|language={{{quotation-language8|{{{quote-language8|{{{quotation-lang8|{{{quote-lang8|{{{ql8|{{{language8|{{{lang8|{{{l8|}}}}}}}}}}}}}}}}}}}}}}}}
|translation={{{translation-quotation8|{{{trans-quotation8|{{{translation-quote8|{{{trans-quote8|{{{tq8|{{{translation8|{{{trans8|{{{t8|{{{xlat8|}}}}}}}}}}}}}}}}}}}}}}}}}}}
|quote-cite={{{quotation-cite8|{{{quote-cite8|{{{qc8|}}}}}}}}}
|reference={{{reference8|{{{refn8|{{{r8|}}}}}}}}}
|annotation={{{annotation8|{{{annot8|{{{a8|}}}}}}}}}
|leadin={{{leadin|}}}
|postscript={{{postscript8|{{{ps8|{{{8ps|{{{postscript|{{{ps|}}}}}}}}}}}}}}}
|section={{{section8||{{{sec8|{{{s8|}}}}}}}}}
|needed-reason={{{needed-reason8|{{{needed8|}}}}}}
|needed-date={{{needed-date|{{{date|}}}}}}
|wrap={{{wrap|}}}
|no-pp={{{no-pp|{{{nopp|}}}}}}
|style={{{style|}}}
|content-id={{{ref8|{{{8ref|{{{id8|}}}}}}}}}
|link-id={{{link-id8|}}}
|debug={{{debug|}}}}}<!-- ### 9 ###
-->{{#if:{{{name9|{{{n9|{{{9|}}}}}}}}}|{{r/ref|{{{name9|{{{n9|{{{9|}}}}}}}}}|{{{group|{{{grp|{{{g|}}}}}}}}}|direction={{{direction9|{{{dir9|}}}}}}
|page{{#if:{{{page9|{{{p9|{{{9p|}}}}}}}}}||NULL}}={{{page9|{{{p9|{{{9p|}}}}}}}}}
|pages{{#if:{{{pages9|{{{pp9|{{{9pp|}}}}}}}}}||NULL}}={{{pages9|{{{pp9|{{{9pp|}}}}}}}}}
|location{{#if:{{{location9|{{{loc9|{{{9loc|{{{at9|}}}}}}}}}}}}||NULL}}={{{location9|{{{loc9|{{{9loc|{{{at9|}}}}}}}}}}}}
|quote-page{{#if:{{{quotation-page9|{{{quote-page9|{{{qp9|}}}}}}}}}||NULL}}={{{quotation-page9|{{{quote-page9|{{{qp9|}}}}}}}}}
|quote-pages{{#if:{{{quotation-pages9|{{{quote-pages9|{{{qpp9|}}}}}}}}}||NULL}}={{{quotation-pages9|{{{quote-pages9|{{{qpp9|}}}}}}}}}
|quote-location{{#if:{{{quotation-location9|{{{quote-location9|{{{quote-loc9|{{{quote-at9|}}}}}}}}}}}}||NULL}}={{{quotation-location9|{{{quote-location9|{{{quote-loc9|{{{quote-at9|}}}}}}}}}}}}
|quote={{{quotation9|{{{quote9|{{{q9|}}}}}}}}}
|language={{{quotation-language9|{{{quote-language9|{{{quotation-lang9|{{{quote-lang9|{{{ql9|{{{language9|{{{lang9|{{{l9|}}}}}}}}}}}}}}}}}}}}}}}}
|translation={{{translation-quotation9|{{{trans-quotation9|{{{translation-quote9|{{{trans-quote9|{{{tq9|{{{translation9|{{{trans9|{{{t9|{{{xlat9|}}}}}}}}}}}}}}}}}}}}}}}}}}}
|quote-cite={{{quotation-cite9|{{{quote-cite9|{{{qc9|}}}}}}}}}
|reference={{{reference9|{{{refn9|{{{r9|}}}}}}}}}
|annotation={{{annotation9|{{{annot9|{{{a9|}}}}}}}}}
|leadin={{{leadin|}}}
|postscript={{{postscript9|{{{ps9|{{{9ps|{{{postscript|{{{ps|}}}}}}}}}}}}}}}
|section={{{section9||{{{sec9|{{{s9|}}}}}}}}}
|needed-reason={{{needed-reason9|{{{needed9|}}}}}}
|needed-date={{{needed-date|{{{date|}}}}}}
|wrap={{{wrap|}}}
|no-pp={{{no-pp|{{{nopp|}}}}}}
|style={{{style|}}}
|content-id={{{ref9|{{{9ref|{{{id9|}}}}}}}}}
|link-id={{{link-id9|}}}
|debug={{{debug|}}}}}<!-- ### Error handling ###
-->{{#if:{{{name10|{{{n10|{{{10|}}}}}}}}}|<sup class="error" style="font-size:0.9em; line-height:0;">The template only supports up to 9 references.</sup> <!--
-->}}}}}}}}}}}}}}}}}}<noinclude>{{documentation}}</noinclude>
1wdllse0xfiqn3b8t9nasay3e51mnwk
754556
754554
2026-08-01T08:23:56Z
FinnElGhifari-78e
74755
/* */
754556
wikitext
text/x-wiki
<includeonly><!-- ### 1 ###
-->{{r/ref|{{{name1|{{{name|{{{n1|{{{n|{{{1|}}}}}}}}}}}}}}}|{{{group|{{{grp|{{{g|}}}}}}}}}|direction={{{direction1|{{{direction|{{{dir1|{{{dir|}}}}}}}}}}}}
|page{{#if:{{{page1|{{{page|{{{p1|{{{1p|{{{p|}}}}}}}}}}}}}}}||NULL}}={{{page1|{{{page|{{{p1|{{{1p|{{{p|}}}}}}}}}}}}}}}
|pages{{#if:{{{pages1|{{{pages|{{{pp1|{{{1pp|{{{pp|}}}}}}}}}}}}}}}||NULL}}={{{pages1|{{{pages|{{{pp1|{{{1pp|{{{pp|}}}}}}}}}}}}}}}
|location{{#if:{{{location1|{{{location|{{{loc1|{{{1loc|{{{loc|{{{at1|{{{at|}}}}}}}}}}}}}}}}}}}}}||NULL}}={{{location1|{{{location|{{{loc1|{{{1loc|{{{loc|{{{at1|{{{at|}}}}}}}}}}}}}}}}}}}}}
|quote-page{{#if:{{{quotation-page1|{{{quotation-page|{{{quote-page1|{{{quote-page|{{{qp1|{{{qp|}}}}}}}}}}}}}}}}}}||NULL}}={{{quotation-page1|{{{quotation-page|{{{quote-page1|{{{quote-page|{{{qp1|{{{qp|}}}}}}}}}}}}}}}}}}
|quote-pages{{#if:{{{quotation-pages1|{{{quotation-pages|{{{quote-pages1|{{{quote-pages|{{{qpp1|{{{qpp|}}}}}}}}}}}}}}}}}}||NULL}}={{{quotation-pages1|{{{quotation-pages|{{{quote-pages1|{{{quote-pages|{{{qpp1|{{{qpp|}}}}}}}}}}}}}}}}}}
|quote-location{{#if:{{{quotation-location1|{{{quotation-location|{{{quote-location1|{{{quote-location|{{{quote-loc1|{{{quote-loc|{{{quote-at1|{{{quote-at|}}}}}}}}}}}}}}}}}}}}}}}}||NULL}}={{{quotation-location1|{{{quotation-location|{{{quote-location1|{{{quote-location|{{{quote-loc1|{{{quote-loc|{{{quote-at1|{{{quote-at|}}}}}}}}}}}}}}}}}}}}}}}}
|quote={{{quotation1|{{{quotation|{{{quote1|{{{quote|{{{q1|{{{q|}}}}}}}}}}}}}}}}}}
|language={{{quotation-language1|{{{quotation-language|{{{quote-language1|{{{quote-language|{{{quotation-lang1|{{{quotation-lang|{{{quote-lang1|{{{quote-lang|{{{ql1|{{{ql|{{{language1|{{{language|{{{lang1|{{{language|{{{l1|{{{l|}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
|translation={{{translation-quotation1|{{{translation-quotation|{{{trans-quotation1|{{{trans-quotation|{{{translation-quote1|{{{translation-quote|{{{trans-quote1|{{{trans-quote|{{{tq1|{{{tq|{{{translation1|{{{translation|{{{trans1|{{{trans|{{{t1|{{{t|{{{xlat1|{{{xlat|}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
|quote-cite={{{quotation-cite1|{{{quotation-cite|{{{quote-cite1|{{{quote-cite|{{{qc1|{{{qc|}}}}}}}}}}}}}}}}}}
|reference={{{reference1|{{{references|{{{reference|{{{notes|{{{note|{{{content|{{{text|{{{refn1|{{{refn|{{{refs|{{{r1|{{{r|}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
|annotation={{{annotation1|{{{annotation|{{{annot1|{{{annot|{{{a1|{{{a|}}}}}}}}}}}}}}}}}}
|leadin={{{leadin|}}}
|postscript={{{postscript|{{{postscript1|{{{ps|{{{ps1|{{{1ps|}}}}}}}}}}}}}}}
|section={{{section1|{{{section|{{{sec1|{{{sec|{{{s1|{{{s|}}}}}}}}}}}}}}}}}}
|needed-reason={{{needed-reason1|{{{needed-reason|{{{needed1|{{{needed|{{{reason|}}}}}}}}}}}}}}}
|needed-date={{{needed-date|{{{date|}}}}}}
|wrap={{{wrap|}}}
|no-pp={{{no-pp|{{{nopp|}}}}}}
|style={{{style|}}}
|content-id={{{ref1|{{{1ref|{{{ref|{{{id1|{{{id|}}}}}}}}}}}}}}}
|link-id={{{link-id1|{{{link-id|}}}}}}
|debug={{{debug|}}}}}<!-- ### 2 ###
-->{{#if:{{{name2|{{{n2|{{{2|}}}}}}}}}|{{r/ref|{{{name2|{{{n2|{{{2|}}}}}}}}}|{{{group|{{{grp|{{{g|}}}}}}}}}|direction={{{direction2|{{{dir2|}}}}}}
|page{{#if:{{{page2|{{{p2|{{{2p|}}}}}}}}}||NULL}}={{{page2|{{{p2|{{{2p|}}}}}}}}}
|pages{{#if:{{{pages2|{{{pp2|{{{2pp|}}}}}}}}}||NULL}}={{{pages2|{{{pp2|{{{2pp|}}}}}}}}}
|location{{#if:{{{location2|{{{loc2|{{{2loc|{{{at2|}}}}}}}}}}}}||NULL}}={{{location2|{{{loc2|{{{2loc|{{{at2|}}}}}}}}}}}}
|quote-page{{#if:{{{quotation-page2|{{{quote-page2|{{{qp2|}}}}}}}}}||NULL}}={{{quotation-page2|{{{quote-page2|{{{qp2|}}}}}}}}}
|quote-pages{{#if:{{{quotation-pages2|{{{quote-pages2|{{{qpp2|}}}}}}}}}||NULL}}={{{quotation-pages2|{{{quote-pages2|{{{qpp2|}}}}}}}}}
|quote-location{{#if:{{{quotation-location2|{{{quote-location2|{{{quote-loc2|{{{quote-at2|}}}}}}}}}}}}||NULL}}={{{quotation-location2|{{{quote-location2|{{{quote-loc2|{{{quote-at2|}}}}}}}}}}}}
|quote={{{quotation2|{{{quote2|{{{q2|}}}}}}}}}
|language={{{quotation-language2|{{{quote-language2|{{{quotation-lang2|{{{quote-lang2|{{{ql2|{{{language2|{{{lang2|{{{l2|}}}}}}}}}}}}}}}}}}}}}}}}
|translation={{{translation-quotation2|{{{trans-quotation2|{{{translation-quote2|{{{trans-quote2|{{{tq2|{{{translation2|{{{trans2|{{{t2|{{{xlat2|}}}}}}}}}}}}}}}}}}}}}}}}}}}
|quote-cite={{{quotation-cite2|{{{quote-cite2|{{{qc2|}}}}}}}}}
|reference={{{reference2|{{{refn2|{{{r2|}}}}}}}}}
|annotation={{{annotation2|{{{annot2|{{{a2|}}}}}}}}}
|leadin={{{leadin|}}}
|postscript={{{postscript2|{{{ps2|{{{2ps|{{{postscript|{{{ps|}}}}}}}}}}}}}}}
|section={{{section2||{{{sec2|{{{s2|}}}}}}}}}
|needed-reason={{{needed-reason2|{{{needed2|}}}}}}
|needed-date={{{needed-date|{{{date|}}}}}}
|wrap={{{wrap|}}}
|no-pp={{{no-pp|{{{nopp|}}}}}}
|style={{{style|}}}
|content-id={{{ref2|{{{2ref|{{{id2|}}}}}}}}}
|link-id={{{link-id2|}}}
|debug={{{debug|}}}}}<!-- ### 3 ###
-->{{#if:{{{name3|{{{n3|{{{3|}}}}}}}}}|{{r/ref|{{{name3|{{{n3|{{{3|}}}}}}}}}|{{{group|{{{grp|{{{g|}}}}}}}}}|direction={{{direction3|{{{dir3|}}}}}}
|page{{#if:{{{page3|{{{p3|{{{3p|}}}}}}}}}||NULL}}={{{page3|{{{p3|{{{3p|}}}}}}}}}
|pages{{#if:{{{pages3|{{{pp3|{{{3pp|}}}}}}}}}||NULL}}={{{pages3|{{{pp3|{{{3pp|}}}}}}}}}
|location{{#if:{{{location3|{{{loc3|{{{3loc|{{{at3|}}}}}}}}}}}}||NULL}}={{{location3|{{{loc3|{{{3loc|{{{at3|}}}}}}}}}}}}
|quote-page{{#if:{{{quotation-page3|{{{quote-page3|{{{qp3|}}}}}}}}}||NULL}}={{{quotation-page3|{{{quote-page3|{{{qp3|}}}}}}}}}
|quote-pages{{#if:{{{quotation-pages3|{{{quote-pages3|{{{qpp3|}}}}}}}}}||NULL}}={{{quotation-pages3|{{{quote-pages3|{{{qpp3|}}}}}}}}}
|quote-location{{#if:{{{quotation-location3|{{{quote-location3|{{{quote-loc3|{{{quote-at3|}}}}}}}}}}}}||NULL}}={{{quotation-location3|{{{quote-location3|{{{quote-loc3|{{{quote-at3|}}}}}}}}}}}}
|quote={{{quotation3|{{{quote3|{{{q3|}}}}}}}}}
|language={{{quotation-language3|{{{quote-language3|{{{quotation-lang3|{{{quote-lang3|{{{ql3|{{{language3|{{{lang3|{{{l3|}}}}}}}}}}}}}}}}}}}}}}}}
|translation={{{translation-quotation3|{{{trans-quotation3|{{{translation-quote3|{{{trans-quote3|{{{tq3|{{{translation3|{{{trans3|{{{t3|{{{xlat3|}}}}}}}}}}}}}}}}}}}}}}}}}}}
|quote-cite={{{quotation-cite3|{{{quote-cite3|{{{qc3|}}}}}}}}}
|reference={{{reference3|{{{refn3|{{{r3|}}}}}}}}}
|annotation={{{annotation3|{{{annot3|{{{a3|}}}}}}}}}
|leadin={{{leadin|}}}
|postscript={{{postscript3|{{{ps3|{{{3ps|{{{postscript|{{{ps|}}}}}}}}}}}}}}}
|section={{{section3||{{{sec3|{{{s3|}}}}}}}}}
|needed-reason={{{needed-reason3|{{{needed3|}}}}}}
|needed-date={{{needed-date|{{{date|}}}}}}
|wrap={{{wrap|}}}
|no-pp={{{no-pp|{{{nopp|}}}}}}
|style={{{style|}}}
|content-id={{{ref3|{{{3ref|{{{id3|}}}}}}}}}
|link-id={{{link-id3|}}}
|debug={{{debug|}}}}}<!-- ### 4 ###
-->{{#if:{{{name4|{{{n4|{{{4|}}}}}}}}}|{{r/ref|{{{name4|{{{n4|{{{4|}}}}}}}}}|{{{group|{{{grp|{{{g|}}}}}}}}}|direction={{{direction4|{{{dir4|}}}}}}
|page{{#if:{{{page4|{{{p4|{{{4p|}}}}}}}}}||NULL}}={{{page4|{{{p4|{{{4p|}}}}}}}}}
|pages{{#if:{{{pages4|{{{pp4|{{{4pp|}}}}}}}}}||NULL}}={{{pages4|{{{pp4|{{{4pp|}}}}}}}}}
|location{{#if:{{{location4|{{{loc4|{{{4loc|{{{at4|}}}}}}}}}}}}||NULL}}={{{location4|{{{loc4|{{{4loc|{{{at4|}}}}}}}}}}}}
|quote-page{{#if:{{{quotation-page4|{{{quote-page4|{{{qp4|}}}}}}}}}||NULL}}={{{quotation-page4|{{{quote-page4|{{{qp4|}}}}}}}}}
|quote-pages{{#if:{{{quotation-pages4|{{{quote-pages4|{{{qpp4|}}}}}}}}}||NULL}}={{{quotation-pages4|{{{quote-pages4|{{{qpp4|}}}}}}}}}
|quote-location{{#if:{{{quotation-location4|{{{quote-location4|{{{quote-loc4|{{{quote-at4|}}}}}}}}}}}}||NULL}}={{{quotation-location4|{{{quote-location4|{{{quote-loc4|{{{quote-at4|}}}}}}}}}}}}
|quote={{{quotation4|{{{quote4|{{{q4|}}}}}}}}}
|language={{{quotation-language4|{{{quote-language4|{{{quotation-lang4|{{{quote-lang4|{{{ql4|{{{language4|{{{lang4|{{{l4|}}}}}}}}}}}}}}}}}}}}}}}}
|translation={{{translation-quotation4|{{{trans-quotation4|{{{translation-quote4|{{{trans-quote4|{{{tq4|{{{translation4|{{{trans4|{{{t4|{{{xlat4|}}}}}}}}}}}}}}}}}}}}}}}}}}}
|quote-cite={{{quotation-cite4|{{{quote-cite4|{{{qc4|}}}}}}}}}
|reference={{{reference4|{{{refn4|{{{r4|}}}}}}}}}
|annotation={{{annotation4|{{{annot4|{{{a4|}}}}}}}}}
|leadin={{{leadin|}}}
|postscript={{{postscript4|{{{ps4|{{{4ps|{{{postscript|{{{ps|}}}}}}}}}}}}}}}
|section={{{section4||{{{sec4|{{{s4|}}}}}}}}}
|needed-reason={{{needed-reason4|{{{needed4|}}}}}}
|needed-date={{{needed-date|{{{date|}}}}}}
|wrap={{{wrap|}}}
|no-pp={{{no-pp|{{{nopp|}}}}}}
|style={{{style|}}}
|content-id={{{ref4|{{{4ref|{{{id4|}}}}}}}}}
|link-id={{{link-id4|}}}
|debug={{{debug|}}}}}<!-- ### 5 ###
-->{{#if:{{{name5|{{{n5|{{{5|}}}}}}}}}|{{r/ref|{{{name5|{{{n5|{{{5|}}}}}}}}}|{{{group|{{{grp|{{{g|}}}}}}}}}|direction={{{direction5|{{{dir5|}}}}}}
|page{{#if:{{{page5|{{{p5|{{{5p|}}}}}}}}}||NULL}}={{{page5|{{{p5|{{{5p|}}}}}}}}}
|pages{{#if:{{{pages5|{{{pp5|{{{5pp|}}}}}}}}}||NULL}}={{{pages5|{{{pp5|{{{5pp|}}}}}}}}}
|location{{#if:{{{location5|{{{loc5|{{{5loc|{{{at5|}}}}}}}}}}}}||NULL}}={{{location5|{{{loc5|{{{5loc|{{{at5|}}}}}}}}}}}}
|quote-page{{#if:{{{quotation-page5|{{{quote-page5|{{{qp5|}}}}}}}}}||NULL}}={{{quotation-page5|{{{quote-page5|{{{qp5|}}}}}}}}}
|quote-pages{{#if:{{{quotation-pages5|{{{quote-pages5|{{{qpp5|}}}}}}}}}||NULL}}={{{quotation-pages5|{{{quote-pages5|{{{qpp5|}}}}}}}}}
|quote-location{{#if:{{{quotation-location5|{{{quote-location5|{{{quote-loc5|{{{quote-at5|}}}}}}}}}}}}||NULL}}={{{quotation-location5|{{{quote-location5|{{{quote-loc5|{{{quote-at5|}}}}}}}}}}}}
|quote={{{quotation5|{{{quote5|{{{q5|}}}}}}}}}
|language={{{quotation-language5|{{{quote-language5|{{{quotation-lang5|{{{quote-lang5|{{{ql5|{{{language5|{{{lang5|{{{l5|}}}}}}}}}}}}}}}}}}}}}}}}
|translation={{{translation-quotation5|{{{trans-quotation5|{{{translation-quote5|{{{trans-quote5|{{{tq5|{{{translation5|{{{trans5|{{{t5|{{{xlat5|}}}}}}}}}}}}}}}}}}}}}}}}}}}
|quote-cite={{{quotation-cite5|{{{quote-cite5|{{{qc5|}}}}}}}}}
|reference={{{reference5|{{{refn5|{{{r5|}}}}}}}}}
|annotation={{{annotation5|{{{annot5|{{{a5|}}}}}}}}}
|leadin={{{leadin|}}}
|postscript={{{postscript5|{{{ps5|{{{5ps|{{{postscript|{{{ps|}}}}}}}}}}}}}}}
|section={{{section5||{{{sec5|{{{s5|}}}}}}}}}
|needed-reason={{{needed-reason5|{{{needed5|}}}}}}
|needed-date={{{needed-date|{{{date|}}}}}}
|wrap={{{wrap|}}}
|no-pp={{{no-pp|{{{nopp|}}}}}}
|style={{{style|}}}
|content-id={{{ref5|{{{5ref|{{{id5|}}}}}}}}}
|link-id={{{link-id5|}}}
|debug={{{debug|}}}}}<!-- ### 6 ###
-->{{#if:{{{name6|{{{n6|{{{6|}}}}}}}}}|{{r/ref|{{{name6|{{{n6|{{{6|}}}}}}}}}|{{{group|{{{grp|{{{g|}}}}}}}}}|direction={{{direction6|{{{dir6|}}}}}}
|page{{#if:{{{page6|{{{p6|{{{6p|}}}}}}}}}||NULL}}={{{page6|{{{p6|{{{6p|}}}}}}}}}
|pages{{#if:{{{pages6|{{{pp6|{{{6pp|}}}}}}}}}||NULL}}={{{pages6|{{{pp6|{{{6pp|}}}}}}}}}
|location{{#if:{{{location6|{{{loc6|{{{6loc|{{{at6|}}}}}}}}}}}}||NULL}}={{{location6|{{{loc6|{{{6loc|{{{at6|}}}}}}}}}}}}
|quote-page{{#if:{{{quotation-page6|{{{quote-page6|{{{qp6|}}}}}}}}}||NULL}}={{{quotation-page6|{{{quote-page6|{{{qp6|}}}}}}}}}
|quote-pages{{#if:{{{quotation-pages6|{{{quote-pages6|{{{qpp6|}}}}}}}}}||NULL}}={{{quotation-pages6|{{{quote-pages6|{{{qpp6|}}}}}}}}}
|quote-location{{#if:{{{quotation-location6|{{{quote-location6|{{{quote-loc6|{{{quote-at6|}}}}}}}}}}}}||NULL}}={{{quotation-location6|{{{quote-location6|{{{quote-loc6|{{{quote-at6|}}}}}}}}}}}}
|quote={{{quotation6|{{{quote6|{{{q6|}}}}}}}}}
|language={{{quotation-language6|{{{quote-language6|{{{quotation-lang6|{{{quote-lang6|{{{ql6|{{{language6|{{{lang6|{{{l6|}}}}}}}}}}}}}}}}}}}}}}}}
|translation={{{translation-quotation6|{{{trans-quotation6|{{{translation-quote6|{{{trans-quote6|{{{tq6|{{{translation6|{{{trans6|{{{t6|{{{xlat6|}}}}}}}}}}}}}}}}}}}}}}}}}}}
|quote-cite={{{quotation-cite6|{{{quote-cite6|{{{qc6|}}}}}}}}}
|reference={{{reference6|{{{refn6|{{{r6|}}}}}}}}}
|annotation={{{annotation6|{{{annot6|{{{a6|}}}}}}}}}
|leadin={{{leadin|}}}
|postscript={{{postscript6|{{{ps6|{{{6ps|{{{postscript|{{{ps|}}}}}}}}}}}}}}}
|section={{{section6||{{{sec6|{{{s6|}}}}}}}}}
|needed-reason={{{needed-reason6|{{{needed6|}}}}}}
|needed-date={{{needed-date|{{{date|}}}}}}
|wrap={{{wrap|}}}
|no-pp={{{no-pp|{{{nopp|}}}}}}
|style={{{style|}}}
|content-id={{{ref6|{{{6ref|{{{id6|}}}}}}}}}
|link-id={{{link-id6|}}}
|debug={{{debug|}}}}}<!-- ### 7 ###
-->{{#if:{{{name7|{{{n7|{{{7|}}}}}}}}}|{{r/ref|{{{name7|{{{n7|{{{7|}}}}}}}}}|{{{group|{{{grp|{{{g|}}}}}}}}}|direction={{{direction7|{{{dir7|}}}}}}
|page{{#if:{{{page7|{{{p7|{{{7p|}}}}}}}}}||NULL}}={{{page7|{{{p7|{{{7p|}}}}}}}}}
|pages{{#if:{{{pages7|{{{pp7|{{{7pp|}}}}}}}}}||NULL}}={{{pages7|{{{pp7|{{{7pp|}}}}}}}}}
|location{{#if:{{{location7|{{{loc7|{{{7loc|{{{at7|}}}}}}}}}}}}||NULL}}={{{location7|{{{loc7|{{{loc7|{{{at7|}}}}}}}}}}}}
|quote-page{{#if:{{{quotation-page7|{{{quote-page7|{{{qp7|}}}}}}}}}||NULL}}={{{quotation-page7|{{{quote-page7|{{{qp7|}}}}}}}}}
|quote-pages{{#if:{{{quotation-pages7|{{{quote-pages7|{{{qpp7|}}}}}}}}}||NULL}}={{{quotation-pages7|{{{quote-pages7|{{{qpp7|}}}}}}}}}
|quote-location{{#if:{{{quotation-location7|{{{quote-location7|{{{quote-loc7|{{{quote-at7|}}}}}}}}}}}}||NULL}}={{{quotation-location7|{{{quote-location7|{{{quote-loc7|{{{quote-at7|}}}}}}}}}}}}
|quote={{{quotation7|{{{quote7|{{{q7|}}}}}}}}}
|language={{{quotation-language7|{{{quote-language7|{{{quotation-lang7|{{{quote-lang7|{{{ql7|{{{language7|{{{lang7|{{{l7|}}}}}}}}}}}}}}}}}}}}}}}}
|translation={{{translation-quotation7|{{{trans-quotation7|{{{translation-quote7|{{{trans-quote7|{{{tq7|{{{translation7|{{{trans7|{{{t7|{{{xlat7|}}}}}}}}}}}}}}}}}}}}}}}}}}}
|quote-cite={{{quotation-cite7|{{{quote-cite7|{{{qc7|}}}}}}}}}
|reference={{{reference7|{{{refn7|{{{r7|}}}}}}}}}
|annotation={{{annotation7|{{{annot7|{{{a7|}}}}}}}}}
|leadin={{{leadin|}}}
|postscript={{{postscript7|{{{ps7|{{{7ps|{{{postscript|{{{ps|}}}}}}}}}}}}}}}
|section={{{section7||{{{sec7|{{{s7|}}}}}}}}}
|needed-reason={{{needed-reason7|{{{needed7|}}}}}}
|needed-date={{{needed-date|{{{date|}}}}}}
|wrap={{{wrap|}}}
|no-pp={{{no-pp|{{{nopp|}}}}}}
|style={{{style|}}}
|content-id={{{ref7|{{{7ref|{{{id7|}}}}}}}}}
|link-id={{{link-id7|}}}
|debug={{{debug|}}}}}<!-- ### 8 ###
-->{{#if:{{{name8|{{{n8|{{{8|}}}}}}}}}|{{r/ref|{{{name8|{{{n8|{{{8|}}}}}}}}}|{{{group|{{{grp|{{{g|}}}}}}}}}|direction={{{direction8|{{{dir8|}}}}}}
|page{{#if:{{{page8|{{{p8|{{{8p|}}}}}}}}}||NULL}}={{{page8|{{{p8|{{{8p|}}}}}}}}}
|pages{{#if:{{{pages8|{{{pp8|{{{8pp|}}}}}}}}}||NULL}}={{{pages8|{{{pp8|{{{8pp|}}}}}}}}}
|location{{#if:{{{location8|{{{loc8|{{{8loc|{{{at8|}}}}}}}}}}}}||NULL}}={{{location8|{{{loc8|{{{8loc|{{{at8|}}}}}}}}}}}}
|quote-page{{#if:{{{quotation-page8|{{{quote-page8|{{{qp8|}}}}}}}}}||NULL}}={{{quotation-page8|{{{quote-page8|{{{qp8|}}}}}}}}}
|quote-pages{{#if:{{{quotation-pages8|{{{quote-pages8|{{{qpp8|}}}}}}}}}||NULL}}={{{quotation-pages8|{{{quote-pages8|{{{qpp8|}}}}}}}}}
|quote-location{{#if:{{{quotation-location8|{{{quote-location8|{{{quote-loc8|{{{quote-at8|}}}}}}}}}}}}||NULL}}={{{quotation-location8|{{{quote-location8|{{{quote-loc8|{{{quote-at8|}}}}}}}}}}}}
|quote={{{quotation8|{{{quote8|{{{q8|}}}}}}}}}
|language={{{quotation-language8|{{{quote-language8|{{{quotation-lang8|{{{quote-lang8|{{{ql8|{{{language8|{{{lang8|{{{l8|}}}}}}}}}}}}}}}}}}}}}}}}
|translation={{{translation-quotation8|{{{trans-quotation8|{{{translation-quote8|{{{trans-quote8|{{{tq8|{{{translation8|{{{trans8|{{{t8|{{{xlat8|}}}}}}}}}}}}}}}}}}}}}}}}}}}
|quote-cite={{{quotation-cite8|{{{quote-cite8|{{{qc8|}}}}}}}}}
|reference={{{reference8|{{{refn8|{{{r8|}}}}}}}}}
|annotation={{{annotation8|{{{annot8|{{{a8|}}}}}}}}}
|leadin={{{leadin|}}}
|postscript={{{postscript8|{{{ps8|{{{8ps|{{{postscript|{{{ps|}}}}}}}}}}}}}}}
|section={{{section8||{{{sec8|{{{s8|}}}}}}}}}
|needed-reason={{{needed-reason8|{{{needed8|}}}}}}
|needed-date={{{needed-date|{{{date|}}}}}}
|wrap={{{wrap|}}}
|no-pp={{{no-pp|{{{nopp|}}}}}}
|style={{{style|}}}
|content-id={{{ref8|{{{8ref|{{{id8|}}}}}}}}}
|link-id={{{link-id8|}}}
|debug={{{debug|}}}}}<!-- ### 9 ###
-->{{#if:{{{name9|{{{n9|{{{9|}}}}}}}}}|{{r/ref|{{{name9|{{{n9|{{{9|}}}}}}}}}|{{{group|{{{grp|{{{g|}}}}}}}}}|direction={{{direction9|{{{dir9|}}}}}}
|page{{#if:{{{page9|{{{p9|{{{9p|}}}}}}}}}||NULL}}={{{page9|{{{p9|{{{9p|}}}}}}}}}
|pages{{#if:{{{pages9|{{{pp9|{{{9pp|}}}}}}}}}||NULL}}={{{pages9|{{{pp9|{{{9pp|}}}}}}}}}
|location{{#if:{{{location9|{{{loc9|{{{9loc|{{{at9|}}}}}}}}}}}}||NULL}}={{{location9|{{{loc9|{{{9loc|{{{at9|}}}}}}}}}}}}
|quote-page{{#if:{{{quotation-page9|{{{quote-page9|{{{qp9|}}}}}}}}}||NULL}}={{{quotation-page9|{{{quote-page9|{{{qp9|}}}}}}}}}
|quote-pages{{#if:{{{quotation-pages9|{{{quote-pages9|{{{qpp9|}}}}}}}}}||NULL}}={{{quotation-pages9|{{{quote-pages9|{{{qpp9|}}}}}}}}}
|quote-location{{#if:{{{quotation-location9|{{{quote-location9|{{{quote-loc9|{{{quote-at9|}}}}}}}}}}}}||NULL}}={{{quotation-location9|{{{quote-location9|{{{quote-loc9|{{{quote-at9|}}}}}}}}}}}}
|quote={{{quotation9|{{{quote9|{{{q9|}}}}}}}}}
|language={{{quotation-language9|{{{quote-language9|{{{quotation-lang9|{{{quote-lang9|{{{ql9|{{{language9|{{{lang9|{{{l9|}}}}}}}}}}}}}}}}}}}}}}}}
|translation={{{translation-quotation9|{{{trans-quotation9|{{{translation-quote9|{{{trans-quote9|{{{tq9|{{{translation9|{{{trans9|{{{t9|{{{xlat9|}}}}}}}}}}}}}}}}}}}}}}}}}}}
|quote-cite={{{quotation-cite9|{{{quote-cite9|{{{qc9|}}}}}}}}}
|reference={{{reference9|{{{refn9|{{{r9|}}}}}}}}}
|annotation={{{annotation9|{{{annot9|{{{a9|}}}}}}}}}
|leadin={{{leadin|}}}
|postscript={{{postscript9|{{{ps9|{{{9ps|{{{postscript|{{{ps|}}}}}}}}}}}}}}}
|section={{{section9||{{{sec9|{{{s9|}}}}}}}}}
|needed-reason={{{needed-reason9|{{{needed9|}}}}}}
|needed-date={{{needed-date|{{{date|}}}}}}
|wrap={{{wrap|}}}
|no-pp={{{no-pp|{{{nopp|}}}}}}
|style={{{style|}}}
|content-id={{{ref9|{{{9ref|{{{id9|}}}}}}}}}
|link-id={{{link-id9|}}}
|debug={{{debug|}}}}}<!-- ### Error handling ###
-->{{#if:{{{name10|{{{n10|{{{10|}}}}}}}}}|<sup class="error" style="font-size:0.9em; line-height:0;">The template only supports up to 9 references.</sup> <!--
-->}}}}}}}}}}}}}}}}}}</includeonly><noinclude>{{documentation}}</noinclude>
jdls1u6fnd1kvoatt25nbbpw1jk5d4j
Hi
0
92934
754417
754347
2026-07-31T13:42:48Z
Enbi
72574
754417
wikitext
text/x-wiki
{{Codeblock}}
Hi is an informal greeting. It is the informal version of [[en:Hello]].
<nowiki>[http://bit.ly/3WdO9B1 example.com]</nowiki>
[[Category:Obvious Vandalism]]
ghewwiwsa5679w0ln597wy6nd61a5vn
754418
754417
2026-07-31T13:43:17Z
Enbi
72574
754418
wikitext
text/x-wiki
{{Codeblock}}
Hi is an informal greeting. It is the informal version of [[en:Hello]]...
<nowiki>[http://bit.ly/3WdO9B1 example.com]</nowiki>
[[Category:Obvious Vandalism]]
f3dwrvq78wwdcjj2e8ff63gsneqzsld
754419
754418
2026-07-31T13:44:15Z
Enbi
72574
754419
wikitext
text/x-wiki
{{Codeblock}}
Hi is an informal greeting. It is the informal version of [[en:Hello]].....
<nowiki>[http://bit.ly/3WdO9B1 example.com]</nowiki>
[[Category:Obvious Vandalism]]
mn7w5q1zol2wzmne5p69m1m0lryo2q5
754420
754419
2026-07-31T13:44:18Z
Enbi
72574
Reverting non-constructive edits by [[Special:Contributions/Enbi|Enbi]] (Fortress-Beta)
754346
wikitext
text/x-wiki
{{Codeblock}}
Hi is an informal greeting. It is the informal version of [[Hello]]. :0
<nowiki>[http://bit.ly/3WdO9B1 example.com]</nowiki>
[[Category:Obvious Vandalism]]
polq5o63cnijkcsv3wmt4ck9oesg315
754422
754420
2026-07-31T13:44:48Z
Enbi
72574
754422
wikitext
text/x-wiki
{{Codeblock}}
Hi is an informal greeting. It is the informal version of [[Hello]]. :0
<nowiki>[http://bit.ly/3WdO9B1 example.com]</nowiki>
[[Category:Obvious Vandalism]]
t
ricm8tsn6dasss0p13z8xja4o7lmuhe
754423
754422
2026-07-31T13:44:52Z
Enbi
72574
Reverting potentially disruptive edits by [[Special:Contributions/Enbi|Enbi]] (Fortress-Beta)
754346
wikitext
text/x-wiki
{{Codeblock}}
Hi is an informal greeting. It is the informal version of [[Hello]]. :0
<nowiki>[http://bit.ly/3WdO9B1 example.com]</nowiki>
[[Category:Obvious Vandalism]]
polq5o63cnijkcsv3wmt4ck9oesg315
754426
754423
2026-07-31T13:46:47Z
Enbi
72574
754426
wikitext
text/x-wiki
{{Codeblock}}
Hi is an informal greeting. It is the informal version of [[Hello]].
<nowiki>[http://bit.ly/3WdO9B1 example.com]</nowiki>
[[Category:Obvious Vandalism]]
hfcrfms10vbbc50rw2c1kcrsnsy86hd
754427
754426
2026-07-31T13:46:51Z
Enbi
72574
Reverting potentially disruptive edits by [[Special:Contributions/Enbi|Enbi]] (Fortress-Beta)
754346
wikitext
text/x-wiki
{{Codeblock}}
Hi is an informal greeting. It is the informal version of [[Hello]]. :0
<nowiki>[http://bit.ly/3WdO9B1 example.com]</nowiki>
[[Category:Obvious Vandalism]]
polq5o63cnijkcsv3wmt4ck9oesg315
754429
754427
2026-07-31T13:47:58Z
Enbi
72574
Blanked the page
754429
wikitext
text/x-wiki
phoiac9h4m842xq45sp7s6u21eteeq1
754430
754429
2026-07-31T13:48:01Z
Enbi
72574
Reverting edits (Fortress-Beta)
754346
wikitext
text/x-wiki
{{Codeblock}}
Hi is an informal greeting. It is the informal version of [[Hello]]. :0
<nowiki>[http://bit.ly/3WdO9B1 example.com]</nowiki>
[[Category:Obvious Vandalism]]
polq5o63cnijkcsv3wmt4ck9oesg315
Lleó marí sud-americà
0
95379
754449
314510
2026-07-31T19:02:52Z
Itsied
75098
Redirected page to [[Template:Short description]]
754449
wikitext
text/x-wiki
#REDIRECT [[Template:Short description]]
== {{-ca-}} ==
=== Nom ===
{{ca-nom|f}}
# {{sense accepcions}} (''[[Otaria flavescens]]'')
{{-hiper-}}
* [[carnívors]] > [[pinnípedes]] > [[otàrids]]
{{-trad-}}
{{inici}}
* {{en}}: {{trad|en|South American sea lion}}
* {{es}}: {{trad|es|lobo común}}
{{mig}}
* {{fr}}: {{trad|fr|lion de mer d'Amérique du Sud}}
{{final}}
=== Referències ===
* {{ca-dicc|termcat}}
{{catllengua|ca|Mamífers marins}}
7ubbyw7ttpexfc71yq4eww3l47nfx2w
754475
754449
2026-07-31T19:34:42Z
Itsied
75098
/* */
754475
wikitext
text/x-wiki
== {{-ca-}} ==
=== Nom ===
{{ca-nom|f}}
# {{sense accepcions}} (''[[Otaria flavescens]]'')
{{-hiper-}}
* [[carnívors]] > [[pinnípedes]] > [[otàrids]]
{{-trad-}}
{{inici}}
* {{en}}: {{trad|en|South American sea lion}}
* {{es}}: {{trad|es|lobo común}}
{{mig}}
* {{fr}}: {{trad|fr|lion de mer d'Amérique du Sud}}
{{final}}
=== Referències ===
* {{ca-dicc|termcat}}
{{catllengua|ca|Mamífers marins}}
lkkkgcsl6unfdn9b8qi85iz6wu4xlhr
IOS
0
97325
754452
754071
2026-07-31T19:14:37Z
Ealbizzati-test
75047
754452
wikitext
text/x-wiki
{{Short description|Animal kept for companionship rather than utility, very cute, probably soft!!}}
{{About|animals kept for companionship|the use of "pet" as a verb, "petting"|Social grooming|other uses of the abbreviations "PET" and "PETS"|PET (disambiguation){{!}}PET|and|PETS (disambiguation){{!}}PETS}}
{{pp-vandalism|small=yes}}
{{Use dmy dates|date=March 2024}}asdf
asdf1 3
[[File:Dhole(Asiatic wild dog).jpg|thumb| alt=Red brown Dhole standing alert in green meadow | Brown fox]]
[[File:June odd-eyed-cat cropped.jpg|thumb]]
[[File:Landsvale.jpg|thumb| Blue bird]]
[[File:Synchiropus splendidus 2 Luc Viatour.jpg|thumb]]
Test RS 2
Test
Test RS
Temp account edit
Test temp 6
Test TS 3
....
Sfffs
http://eff.org
I think animals are neat and very cute
temp account [[testing]] more
Test1
Testing
Testing 21
a '''pet''', or '''companion animal''', is an [[animal]] kept primarily for a person's company or entertainment rather than as a [[working animal]], [[livestock]], or a [[laboratory animal]]. Popular pets are often considered to have attractive/[[Cuteness|cute]] appearances, [[animal cognition|intelligence]], and relatable personalities, but some pets may be taken in on an [[altruistic]] basis (such as a stray animal) and accepted by the owner regardless of these characteristics.
Test
Two of the most popular pets are [[dog]]s and [[cat]]s. Other animals commonly kept include [[House rabbit|rabbits]]; [[ferret]]s; [[domestic pig|pig]]s; [[rodent]]s such as [[gerbil]]s, [[hamster]]s, [[chinchilla]]s, [[rats]], [[mice]], and [[guinea pig]]s; [[bird]]s such as [[parrot]]s, [[passerine]]s, and [[fowl]]s; [[reptiles]] such as [[turtle]]s, [[lizard]]s, [[snake]]s, and [[iguana]]s; [[aquarium|aquatic pets]] such as [[fish]], [[freshwater snail]]s, and [[sea snail|saltwater]] snails; [[amphibians]] such as [[frog]]s and [[salamanders]]; and [[arthropod]] pets such as [[tarantula]]s and [[hermit crab]]s. Smaller pets include [[Rodents as pets|rodents]], while the [[equine]] and [[bovine]] group include the largest companion animals.
Pets provide their owners, or guardians,<ref>{{Cite web|date=2015|title=Position Statement on Ownership/Guardianship|url=https://www.aspca.org/about-us/aspca-policy-and-position-statements/position-statement-ownershipguardianship|url-status=live|access-date=7 November 2021|website=ASPCA|archive-url=https://web.archive.org/web/20151110075259/https://www.aspca.org/about-us/aspca-policy-and-position-statements/position-statement-ownershipguardianship|archive-date=10 November 2015}}</ref> both physical and emotional benefits. Walking a dog can provide both the human and the dog with exercise, fresh air, and [[social interaction]]. Pets can give companionship to people who are living alone or elderly adults who do not have adequate social interaction with other people. There is a medically approved class of [[therapy animals]] that are brought to visit confined humans, such as [[Children's hospital|children in hospitals]] or elders in [[nursing homes]]. Pet therapy utilizes trained animals and handlers to achieve specific physical, social, cognitive, or emotional goals with patients.
Pet rock [[Image:Pet rock.jpg | thumb | right | Pet rocks]]
People most commonly get pets for companionship, to protect a home or property, or because of the perceived beauty or attractiveness of the animals.<ref name="leslie" /> a 1994 Canadian study found that the most common reasons for not owning a pet were lack of ability to care for the pet when traveling (34.6%), lack of time (28.6%), and lack of suitable housing (28.3%), with dislike of pets being less common (19.6%).<ref name="leslie">{{Cite journal | pmc = 1686751 | pmid = 8076276 |date=April 1994|author1=Leslie, Be |author2=Meek, Ah |author3=Kawash, Gf |author4=Mckeown, Db | title = An epidemiological investigation of pet ownership in Ontario | volume = 35 | issue = 4 | pages = 218–22 | issn = 0008-5286 | journal = The Canadian Veterinary Journal | format = Free full text }}</ref> Some [[scholars]], [[ethicist]]s, and [[animal rights organizations]] have raised concerns over keeping pets because of the lack of autonomy and the objectification of [[non-human]] animals.<ref>{{cite news |last= McRobbie|first=Linda Rodriguez|date=1 August 2017|title=Should we stop keeping pets? Why more and more ethicists say yes|url=https://www.theguardian.com/lifeandstyle/2017/aug/01/should-we-stop-keeping-pets-why-more-and-more-ethicists-say-yes|work=[[The Guardian]] |access-date=3 August 2017}}</ref>
Lorem ipsum dolor
[[Talk:IOS|Test talk page link]]
more temp account testing on the same temp account as the last temp account
[https://www.merriam-webster.com/dictionary/cat External Cat Link]
82ydue52er85qhf2lbmhbu5tslqp3t9
754476
754452
2026-07-31T19:36:32Z
Ealbizzati-test
75047
754476
wikitext
text/x-wiki
{{Short description|Animal kept for companionship rather than utility, very cute, probably soft!!}}
{{About|animals kept for companionship|the use of "pet" as a verb, "petting"|Social grooming|other uses of the abbreviations "PET" and "PETS"|PET (disambiguation){{!}}PET|and|PETS (disambiguation){{!}}PETS}}
{{pp-vandalism|small=yes}}
{{Use dmy dates|date=March 2024}}asdf
asdf1 3
[[File:Dhole(Asiatic wild dog).jpg|thumb| alt=Red brown Dhole standing alert in green meadow | Brown fox]]
[[File:June odd-eyed-cat cropped.jpg|thumb]]
[[File:Landsvale.jpg|thumb| Blue bird]]
[[File:Synchiropus splendidus 2 Luc Viatour.jpg|thumb]]
Test RS 2
Test
Test RS
Temp account edit
Test temp 6
Test TS 3
....
Sfffs
http://eff.org
I think animals are neat and very cute
temp account [[testing]] more
Test1
Testing
Testing 21
a '''pet''', or '''companion animal''', is an [[animal]] kept primarily for a person's company or entertainment rather than as a [[working animal]], [[livestock]], or a [[laboratory animal]]. Popular pets are often considered to have attractive/[[Cuteness|cute]] appearances, [[animal cognition|intelligence]], and relatable personalities, but some pets may be taken in on an [[altruistic]] basis (such as a stray animal) and accepted by the owner regardless of these characteristics.
Test
Two of the most popular pets are [[dog]]s and [[cat]]s. Other animals commonly kept include [[House rabbit|rabbits]]; [[ferret]]s; [[domestic pig|pig]]s; [[rodent]]s such as [[gerbil]]s, [[hamster]]s, [[chinchilla]]s, [[rats]], [[mice]], and [[guinea pig]]s; [[bird]]s such as [[parrot]]s, [[passerine]]s, and [[fowl]]s; [[reptiles]] such as [[turtle]]s, [[lizard]]s, [[snake]]s, and [[iguana]]s; [[aquarium|aquatic pets]] such as [[fish]], [[freshwater snail]]s, and [[sea snail|saltwater]] snails; [[amphibians]] such as [[frog]]s and [[salamanders]]; and [[arthropod]] pets such as [[tarantula]]s and [[hermit crab]]s. Smaller pets include [[Rodents as pets|rodents]], while the [[equine]] and [[bovine]] group include the largest companion animals.
Pets provide their owners, or guardians,<ref>{{Cite web|date=2015|title=Position Statement on Ownership/Guardianship|url=https://www.aspca.org/about-us/aspca-policy-and-position-statements/position-statement-ownershipguardianship|url-status=live|access-date=7 November 2021|website=ASPCA|archive-url=https://web.archive.org/web/20151110075259/https://www.aspca.org/about-us/aspca-policy-and-position-statements/position-statement-ownershipguardianship|archive-date=10 November 2015}}</ref> both physical and emotional benefits. Walking a dog can provide both the human and the dog with exercise, fresh air, and [[social interaction]]. Pets can give companionship to people who are living alone or elderly adults who do not have adequate social interaction with other people. There is a medically approved class of [[therapy animals]] that are brought to visit confined humans, such as [[Children's hospital|children in hospitals]] or elders in [[nursing homes]]. Pet therapy utilizes trained animals and handlers to achieve specific physical, social, cognitive, or emotional goals with patients.
Pet rock [[Image:Pet rock.jpg | thumb | right | Pet rocks]]
People most commonly get pets for companionship, to protect a home or property, or because of the perceived beauty or attractiveness of the animals.<ref name="leslie" /> a 1994 Canadian study found that the most common reasons for not owning a pet were lack of ability to care for the pet when traveling (34.6%), lack of time (28.6%), and lack of suitable housing (28.3%), with dislike of pets being less common (19.6%).<ref name="leslie">{{Cite journal | pmc = 1686751 | pmid = 8076276 |date=April 1994|author1=Leslie, Be |author2=Meek, Ah |author3=Kawash, Gf |author4=Mckeown, Db | title = An epidemiological investigation of pet ownership in Ontario | volume = 35 | issue = 4 | pages = 218–22 | issn = 0008-5286 | journal = The Canadian Veterinary Journal | format = Free full text }}</ref> Some [[scholars]], [[ethicist]]s, and [[animal rights organizations]] have raised concerns over keeping pets because of the lack of autonomy and the objectification of [[non-human]] animals.<ref>{{cite news |last= McRobbie|first=Linda Rodriguez|date=1 August 2017|title=Should we stop keeping pets? Why more and more ethicists say yes|url=https://www.theguardian.com/lifeandstyle/2017/aug/01/should-we-stop-keeping-pets-why-more-and-more-ethicists-say-yes|work=[[The Guardian]] |access-date=3 August 2017}}</ref>
Lorem ipsum dolor
[[Talk:IOS|Test talk page link]]
more temp account testing on the same temp account as the last temp account
[https://www.merriam-webster.com/dictionary/cat External Cat Link]
a2h8n9ve85adqelny7179fy5fqfoaw5
Detranslate
0
100091
754471
353993
2026-07-31T19:25:38Z
Itsied
75098
/* */
754471
wikitext
text/x-wiki
add
adi3ta6v0genn1icalabs4xvn3saqgb
Test234
0
103102
754487
673760
2026-07-31T21:28:33Z
Enbi
72574
754487
wikitext
text/x-wiki
== ? == test
{{slink|Main Page|What we do on this wiki}} [[User:Newslinger|Newslinger]] ([[User talk:Newslinger|talk]]) 06:12, 11 April 2019 (UTC)
qdahyc1t7626b9f0cwk7lqun2cbajix
754488
754487
2026-07-31T21:28:38Z
Enbi
72574
Reverting test edits by by [[Special:Contributions/Enbi|Enbi]] (Fortress-Beta)
673760
wikitext
text/x-wiki
== ? ==
{{slink|Main Page|What we do on this wiki}} [[User:Newslinger|Newslinger]] ([[User talk:Newslinger|talk]]) 06:12, 11 April 2019 (UTC)
0y3b3ts40gart0svqbzmrqbna4lemcp
754493
754488
2026-07-31T21:41:58Z
Enbi
72574
754493
wikitext
text/x-wiki
== ? ==
{{slink|Main Page|What we do on this wiki}} [[User:Newslinger|Newslinger]] ([[User talk:Newslinger|talk]]) 06:12, 11 April 2019 (UTC)
test
72n7icw0llr3b507qmjtnwmenjfgu3p
754494
754493
2026-07-31T21:48:04Z
Enbi
72574
754494
wikitext
text/x-wiki
== ? ==
{{slink|Main Page|What we do on this wiki}} [[User:Newslinger|Newslinger]] ([[User talk:Newslinger|talk]]) 06:12, 11 April 2019 (UTC)
test
test
quxz0ta3z0ezly1y71b3kmpxq3butzq
754495
754494
2026-07-31T22:04:42Z
Enbi
72574
754495
wikitext
text/x-wiki
== ? ==
{{slink|Main Page|What we do on this wiki}} [[User:Newslinger|Newslinger]] ([[User talk:Newslinger|talk]]) 06:12, 11 April 2019 (UTC)
test
test
test
04yf2h75xdle0xiog2i9byhozr5mxr2
754496
754495
2026-07-31T22:10:01Z
Enbi
72574
Reverting edits (Fortress-Beta)
673760
wikitext
text/x-wiki
== ? ==
{{slink|Main Page|What we do on this wiki}} [[User:Newslinger|Newslinger]] ([[User talk:Newslinger|talk]]) 06:12, 11 April 2019 (UTC)
0y3b3ts40gart0svqbzmrqbna4lemcp
754503
754496
2026-07-31T22:17:28Z
Enbi
72574
754503
wikitext
text/x-wiki
== ? ==
{{slink|Main Page|What we do on this wiki}} [[User:Newslinger|Newslinger]] ([[User talk:Newslinger|talk]]) 06:12, 11 April 2019 (UTC)
i
6l8o34enr6yb6ytl196a91gfxzt3mmu
754504
754503
2026-07-31T22:17:32Z
Enbi
72574
Reverting edits (Fortress-Beta)
673760
wikitext
text/x-wiki
== ? ==
{{slink|Main Page|What we do on this wiki}} [[User:Newslinger|Newslinger]] ([[User talk:Newslinger|talk]]) 06:12, 11 April 2019 (UTC)
0y3b3ts40gart0svqbzmrqbna4lemcp
754508
754504
2026-07-31T22:34:35Z
Enbi
72574
754508
wikitext
text/x-wiki
== ? ==
{{slink|Main Page|What we do on this wiki}} [[User:Newslinger|Newslinger]] ([[User talk:Newslinger|talk]]) 06:12, 11 April 2019 (UTC)
i
6l8o34enr6yb6ytl196a91gfxzt3mmu
754509
754508
2026-07-31T22:34:41Z
Enbi
72574
Reverting Promotional contend added by [[Special:Contributions/Enbi|Enbi]] (Fortress-Beta)
673760
wikitext
text/x-wiki
== ? ==
{{slink|Main Page|What we do on this wiki}} [[User:Newslinger|Newslinger]] ([[User talk:Newslinger|talk]]) 06:12, 11 April 2019 (UTC)
0y3b3ts40gart0svqbzmrqbna4lemcp
754512
754509
2026-07-31T22:36:02Z
Enbi
72574
754512
wikitext
text/x-wiki
== ? ==
{{slink|Main Page|What we do on this wiki}} [[User:Newslinger|Newslinger]] ([[User talk:Newslinger|talk]]) 06:12, 11 April 2019 (UTC)
e
9xdxhtwzskvact4jly924ae8tk8ebod
754513
754512
2026-07-31T22:36:10Z
Enbi
72574
Reverting potentially promotional content added by [[Special:Contributions/Enbi|Enbi]] (Fortress-Beta)
673760
wikitext
text/x-wiki
== ? ==
{{slink|Main Page|What we do on this wiki}} [[User:Newslinger|Newslinger]] ([[User talk:Newslinger|talk]]) 06:12, 11 April 2019 (UTC)
0y3b3ts40gart0svqbzmrqbna4lemcp
754515
754513
2026-07-31T22:37:36Z
Enbi
72574
754515
wikitext
text/x-wiki
== ? ==
{{slink|Main Page|What we do on this wiki}} [[User:Newslinger|Newslinger]] ([[User talk:Newslinger|talk]]) 06:12, 11 April 2019 (UTC)
test
72n7icw0llr3b507qmjtnwmenjfgu3p
754516
754515
2026-07-31T22:37:41Z
Enbi
72574
Reverting non-neutral-edits by [[Special:Contributions/Enbi|Enbi]] (Fortress-Beta)
673760
wikitext
text/x-wiki
== ? ==
{{slink|Main Page|What we do on this wiki}} [[User:Newslinger|Newslinger]] ([[User talk:Newslinger|talk]]) 06:12, 11 April 2019 (UTC)
0y3b3ts40gart0svqbzmrqbna4lemcp
754518
754516
2026-07-31T22:40:55Z
Enbi
72574
754518
wikitext
text/x-wiki
== ? ==
{{slink|Main Page|What we do on this wiki}} [[User:Newslinger|Newslinger]] ([[User talk:Newslinger|talk]]) 06:12, 11 April 2019 (UTC)
y
6ongfymt6ps83kqiir2hk6n0m647t0b
754519
754518
2026-07-31T22:41:01Z
Enbi
72574
Reverting unexplained content removal by [[Special:Contributions/Enbi|Enbi]] (Fortress-Beta)
673760
wikitext
text/x-wiki
== ? ==
{{slink|Main Page|What we do on this wiki}} [[User:Newslinger|Newslinger]] ([[User talk:Newslinger|talk]]) 06:12, 11 April 2019 (UTC)
0y3b3ts40gart0svqbzmrqbna4lemcp
754521
754519
2026-07-31T22:41:22Z
Enbi
72574
Blanked the page
754521
wikitext
text/x-wiki
phoiac9h4m842xq45sp7s6u21eteeq1
754522
754521
2026-07-31T22:41:37Z
Enbi
72574
Reverting incorrect English variants by [[Special:Contributions/Enbi|Enbi]] (Fortress-Beta)
673760
wikitext
text/x-wiki
== ? ==
{{slink|Main Page|What we do on this wiki}} [[User:Newslinger|Newslinger]] ([[User talk:Newslinger|talk]]) 06:12, 11 April 2019 (UTC)
0y3b3ts40gart0svqbzmrqbna4lemcp
754524
754522
2026-07-31T22:58:15Z
Enbi
72574
754524
wikitext
text/x-wiki
== ? ==
{{slink|Main Page|What we do on this wiki}} [[User:Newslinger|Newslinger]] ([[User talk:Newslinger|talk]]) 06:12, 11 April 2019 (UTC)
t
9z05sfgd1h7zpszao43kc54b0y72brn
754525
754524
2026-07-31T22:58:23Z
Enbi
72574
Reverting factual errors by [[Special:Contributions/Enbi|Enbi]] (Fortress-Beta)
673760
wikitext
text/x-wiki
== ? ==
{{slink|Main Page|What we do on this wiki}} [[User:Newslinger|Newslinger]] ([[User talk:Newslinger|talk]]) 06:12, 11 April 2019 (UTC)
0y3b3ts40gart0svqbzmrqbna4lemcp
754528
754525
2026-07-31T22:59:04Z
Enbi
72574
754528
wikitext
text/x-wiki
== ? ==
{{slink|Main Page|What we do on this wiki}} [[User:Newslinger|Newslinger]] ([[User talk:Newslinger|talk]]) 06:12, 11 April 2019 (UTC)
t
9z05sfgd1h7zpszao43kc54b0y72brn
754529
754528
2026-07-31T22:59:12Z
Enbi
72574
Reverting Editing tests by [[Special:Contributions/Enbi|Enbi]] (Fortress-Test)
673760
wikitext
text/x-wiki
== ? ==
{{slink|Main Page|What we do on this wiki}} [[User:Newslinger|Newslinger]] ([[User talk:Newslinger|talk]]) 06:12, 11 April 2019 (UTC)
0y3b3ts40gart0svqbzmrqbna4lemcp
Touring Club Suisse
0
113888
754485
562934
2026-07-31T20:54:39Z
Itsied
75098
/* */
754485
wikitext
text/x-wiki
{{Multiple issues|
{{Advert|date=December 2018}}
{{No footnotes|date=December 2018}}
{{Prose|date=December 2018}}
}}
{{Infobox company
| name = Touring Club Suisse
| logo = Profilbild TCS.png
| type =
| industry =
| fate = Representing the interests and providing services in the area of mobility
| predecessor = <!-- or: | predecessors = -->
| successor = <!-- or: | successors = -->
| founded = 1 September 1896
| founder = <!-- or: | founders = -->
| defunct = <!-- {{End date|YYYY|MM|DD}} -->
| hq_location_city = Vernier
| hq_location_country = Switzerland
| area_served = <!-- or: | areas_served = -->
| key_people = Peter Goetschi (President) <br />Jürg Wittwer (General Director)
| products =
| owner = <!-- or: | owners = -->
| num_employees =
| num_employees_year = <!-- Year of num_employees data (if known) -->
| parent =
| members = 1.5 million (2015)
| website = <!-- {{URL|https://www.tcs.ch|tcs.ch}} -->
}}
[[File:TCS Patrouille 2.jpg|thumb|A TCS patrol vehicle at a roadside assistance call]]
<!-- Deleted image removed: [[File:Tcscampsitethun.jpg|thumb|TCS camp site on Lake Thun [[Thun-Gwatt]]]] -->
The '''Touring Club Suisse''' (TCS) is a non-profit association with approximately 1.5 million members in [[Switzerland]]. As the largest [[Mobility as a service|mobility]] club in Switzerland, the TCS offers services to its members in the following areas: assistance to persons, assistance to vehicles, tourism and leisure. In addition, the TCS is committed to the benefit of the community by carrying out tests on all objects related to mobility and by working towards road safety and electric mobility.
[[import test]]
Its flagship products are membership, overseas assistance, legal protection, vehicle insurance, credit cards, driving courses and leisure (camping and travel). In addition, its members enjoy benefits from other service providers in Switzerland. Test123.
==Origin and structure==
The TCS was founded in Geneva on September 1, 1896 by 205 cyclists with the aim of developing bicycle tourism. It is an association, headquartered in [[Vernier, Switzerland|Vernier]] in the [[canton of Geneva]].
Structurally, the TCS consists of 24 sections and a central Club. Each section delegates a representative who sits on the Board of Directors. It appoints a director who manages the Central Club’s business. The highest body is the Delegate Assembly, which represents all TCS members.
==Mobility Academy==
The [https://www.mobilityacademy.ch/akademie-de/index.php Mobility Academy] was founded in 2008 by the TCS. It offers an interdisciplinary exchange platform on the mobility of the future. It studies all forms of mobility that are promising and sustainable. As a unit for reflection and action, the Academy of Mobility organizes, with the support of national and international organizations, several conferences in Switzerland around topics such as electric mobility, shared mobility, collaborative mobility, etc. . As a leading Swiss actor, the Mobility Academy also develops innovative concepts such as "Carvelo", "Carvelo2go" or "Let's move!” and manages the association "Swiss eMobility".
==Activities==
The TCS is known throughout Switzerland by its helpdesk service, reachable in Switzerland on 0800 140 140 and its 220 yellow patrol vehicles.
The ETI Booklet (Entraide Touristique Internationale, or International Tourist Assistance) is a travel insurance that covers the events that can take place before and during a travel abroad: breakdown service, legal protection, baggage insurance, cancellation insurance, remote medical advice, repatriation and medical expenses.
The legal protection service of the TCS was founded in 1958. It defends its members on the following topics: private legal protection, motorist's legal protection, real estate and internet.
The TCS also carries out product tests every year - [[child seats]], [[tire]]s, [[helmet]]s, driving systems, etc. - as well as vehicles tests - [[car]]s, [[motorcycle]]s, [[Electric bicycle|ebikes]], scooters etc. - and publishes these tests for free to benefit the whole community. Since its creation, the TCS has been committed to [[road safety]]. It publishes brochures and leaflets for the use of its members and schools. It participates in national prevention campaigns funded by the Road Safety Fund. The TCS also conducts studies on the safety of the road infrastructure.
A privileged partner of the authorities, the TCS’ expertise is recognized at the Swiss level and it participates in all public consultations on the topic of road safety and mobility in general.
Once a month, TCS members receive the Touring magazine for free, published in French, German and Italian. The magazine’s editorial offices are centralized in [[Bern]].
The TCS has 21 technical centers, 29 campsites and 15 driving training tracks.
The TCS has been a member of the International Automobile Federation ([[Fédération Internationale de l'Automobile|FIA]]) since 1998.
==Services delivery==
* Automobile and legal insurance
*Assistance to people and vehicles in Switzerland and abroad
*Traffic information
*Tourism, leisure and camping
*Organization of driving courses and two-phase driving license
*Road prevention and education
*Tests and tips
==Further reading==
* [https://www.tcs.ch/de/der-tcs/der-club/geschichte.php Touring Club Suisse: A history spanning over 100 years]
* Touring No. 33, dated 18 August 1966, page 3
* [http://www.statuten.tcs.ch Statues on the TCS website, visited on 4 March 2011]
==References==
* François Antoniazzi, Der Touring Club Schweiz im Spiegel von 100 Ereignissen 1896–1996, TCS Publishing, Geneva, 1996.
* Joseph Britschgi, Manuel d'enseignement de la circulation, TCS Publishing, Geneva, 1946.
==External links ==
* {{Official website}}
* [http://www.mobilityacademy.ch/akademie-de/index.php Mobility Academy]
{{Authority control}}
[[Category:Clubs and societies in Switzerland]]
[[Category:1896 establishments in Switzerland]]
[[Category:Automobile associations]]
[[Category:Organizations established in 1896]]
<noinclude>
<small>This page was moved from [[:en:Touring Club Suisse]]. Its edit history can be viewed at [[Touring Club Suisse/edithistory]]</small></noinclude>
guflvtphdvsmy03jgbc5tm0cv1cu1ji
Red Giant Entertainment
0
114144
754535
731767
2026-08-01T00:05:57Z
InternetArchiveBot
34092
Rescuing 7 sources and tagging 0 as dead.) #IABot (v2.0.9.5
754535
wikitext
text/x-wiki
{{short description|American comic book publisher}}
{{other uses|Red giant (disambiguation)}}
{{multiple issues|
{{COI|date=September 2015}}
{{cleanup rewrite|date=March 2016}}
{{cleanup-PR|date=March 2016}}
{{primary sources|date=March 2016}}
{{out of date|date=February 2020}}
}}
{{Infobox publisher
| name = Red Giant Entertainment, Inc.
| image = [[File:redgiantentertainmentlogo.jpg|125px]]
| caption =
| parent =
| status =
| traded_as = {{OTCQB|REDG}}
| predecessor =
| founded = {{start date|2005}} in [[Nevada]]
| founder = [[Benny R. Powell]]
| successor =
| country = United States
| headquarters = [[Clermont, Florida]]
| distribution = [[Diamond Book Distributors]]<ref>{{Cite web |url=http://www.diamondbookdistributors.com/default.asp?t=2&m=1&c=53&s=660 |title=Our Publishers |access-date=2020-07-07 |archive-date=2017-09-11 |archive-url=https://web.archive.org/web/20170911072326/http://www.diamondbookdistributors.com/default.asp?t=2&m=1&c=53&s=660 }}</ref>
| keypeople = [[Benny R. Powell]] (CEO)<br>[[David Campiti]] (COO)<br>Isen Robbins (CIPO)<br>Aimee Schoof (CBDO)<br>[[Chris Crosby (comics)|Chris Crosby]] (CTO)<br>[[Mark Fischbach]] Board member
| publications = [[Comic books]]
| topics =
| genre =
| imprints =
| revenue =
| owner =
| numemployees =
| website = {{URL|http://www.redgiantentertainment.com}}
}}
'''Red Giant Entertainment, Inc.''' is a Florida-headquartered comic book publisher and "transmedia" entertainment company first established in 2010. As a transmedia company, Red Giant develops intellectual properties into various ancillary media forms including: movies, television, video games, phone apps, online comics, toy lines, cartoons, T-shirts, and other merchandising opportunities.<ref>{{cite web|url=http://www.redgiantentertainment.com/aboutnew.html|title=Red Giant Entertainment - About }}</ref> Red Giant was founded [[Benny R. Powell]], who also served as the head marketing writer for [[Priceline.com]] in the company's early days.<ref>{{cite news|url=http://www.linkedin.com/pub/benny-powell/16/401/413 |title=LinkedIn Profile: Benny R. Powell |work=LinkedIn.com}}</ref> [[David Campiti]], director and COO, also is CEO of Glass House Graphics. Isen Robbins (CIPO) and Aimee Schoof (CBDO) are both from Intrinsic Value Films and Red Giant Media. [[Chris Crosby (comics)|Chris Crosby]] is CTO and the CEO of Keenspot Entertainment.<ref>{{cite news|url=http://www.bizjournals.com/orlando/print-edition/2013/04/05/meet-red-giants-5-key-players.html|title=Meet Red Giant's 5 Key Players |work=BizJournal}}</ref> [[Internet]] personality Mark "[[Markiplier]]" Fischbach joined the board in November 2014.<ref>{{cite news|url=http://money.cnn.com/news/newsfeeds/articles/marketwire/11G026162-001.htm|title=Mark 'Markiplier' Fischbach Joins Red Giant Entertainment's Board of Directors: YouTube Superstar Brings Extraordinary New Media Expertise To Board|work=CNN Money|url-status=dead|archiveurl=https://web.archive.org/web/20141112183801/http://money.cnn.com/news/newsfeeds/articles/marketwire/11G026162-001.htm|archivedate=2014-11-12}}</ref>
==Works==
===Comics===
<!-- Deleted image removed: [[File:Giantsizecomicspreviewsad-jan2014.jpg|thumb|right|''Giant-Size Comics'' advertisement from January 2014 ''Diamond Previews'' catalog.]] -->
====Webcomics and digital comics====
Red Giant publishes a variety of webcomics with strategic partner [[Keenspot]], including ''Wayward Sons: Legends'', ''Exposure'', ''Jade Warriors'', ''Buzzboy'', ''Medusa's Daughter'', ''Katrina'', and ''[[Porcelain]]''.<ref>{{cite news|url=http://www.keenspot.com |title=Keenspot.com Homepage}}</ref> These comics are then collected as digital collections on [[ComiXology]].<ref>{{cite news |url=http://www.marketwired.com/press-release/update-red-giants-supernovas-explodes-onto-comixology-otcqb-redg-1775878.htm |title=Red Giant's 'SUPERNOVAS' Explodes Onto comiXology |work=Marketwired |date=April 7, 2013 |access-date=July 7, 2020 |archive-date=July 15, 2018 |archive-url=https://web.archive.org/web/20180715040343/http://www.marketwired.com/press-release/update-red-giants-supernovas-explodes-onto-comixology-otcqb-redg-1775878.htm |url-status=dead }}</ref>{{primary source inline|date=September 2015}}
====Giant-Size Comics====
Red Giant's ''Giant-Size Comics'' is a print comic book line of free, ad-supported anthology titles set to debut on May 3, 2014 as part of [[Free Comic Book Day]]<ref>{{cite news |url=http://www.freecomicbookday.com/Home/1/1/27/206?articleID=141866 |title=Red Giant To Join In Free Comic Book Day |url-status=dead |archiveurl=https://web.archive.org/web/20131216201926/http://www.freecomicbookday.com/Home/1/1/27/206?articleID=141866 |archivedate=2013-12-16 }} {{Webarchive|url=https://web.archive.org/web/20131216201926/http://www.freecomicbookday.com/Home/1/1/27/206?articleID=141866 |date=2013-12-16 }}</ref> before their full weekly launch in July 2014.<ref>{{cite news|url=http://www.bizjournals.com/orlando/print-edition/2013/04/05/they-might-be-red-giants.html |title=They Might Be Red Giants |work=Orlando Business Journal |date=April 5, 2013}}</ref>
The four free ''Giant-Size'' titles include ''Giant-Size Action'' (''Wayward Sons / Tesla''), ''Giant-Size Adventure'' (''Magika / The First Daughter''), ''Giant-Size Fantasy'' (''Duel Identity / Pandora's Blog''), and ''Giant-Size Thrills'' (''Shadow Children / Darchon'').
In August 2013 it was announced<ref>{{cite news |url=http://www.marketwired.com/press-release/award-winning-horror-writer-mort-castle-signs-on-for-new-red-giant-comic-darchon-otcqb-redg-1822123.htm |title=Award-Winning Horror Writer Mort Castle Signs on for New Red Giant Comic 'Darchon' |work=Marketwired |date=August 19, 2013 |access-date=July 7, 2020 |archive-date=March 4, 2016 |archive-url=https://web.archive.org/web/20160304094919/http://www.marketwired.com/press-release/award-winning-horror-writer-mort-castle-signs-on-for-new-red-giant-comic-darchon-otcqb-redg-1822123.htm |url-status=dead }}</ref>{{primary source inline|date=September 2015}} that [[Mort Castle]] will be scripting the Red Giant Entertainment comic book ''Darchon'', an ongoing feature of their ''Giant-Size Comics'' line of free print comic book titles set to debut on May 3, 2014, as part of [[Free Comic Book Day]].<ref>{{cite news |url=http://www.freecomicbookday.com/Home/1/1/27/206?articleID=141866 |title=Red Giant To Join In Free Comic Book Day |url-status=dead |archiveurl=https://web.archive.org/web/20131216201926/http://www.freecomicbookday.com/Home/1/1/27/206?articleID=141866 |archivedate=2013-12-16 }} {{Webarchive|url=https://web.archive.org/web/20131216201926/http://www.freecomicbookday.com/Home/1/1/27/206?articleID=141866 |date=2013-12-16 }}</ref> ''Darchon'' is scheduled to appear monthly in ''Giant-Size Thrills'', the companies horror title.
In November 2013, it was announced that [[DC Comics]] veteran [[Brian Augustyn]] had been hired as story editor for the ''Giant-Size Comics'' line.<ref>{{cite news |url=https://online.wsj.com/article/PR-CO-20131119-910741.html |title=Comics Veteran Brian Augustyn Joins Red Giant Entertainment |work=The Wall Street Journal |date=November 19, 2013 |access-date=July 7, 2020 |archive-date=December 31, 2013 |archive-url=https://web.archive.org/web/20131231185546/http://online.wsj.com/article/PR-CO-20131119-910741.html |url-status=dead }}</ref>
On August 26, 2014, Red Giant announced that [[Larry Hama]] is writing the Company's new ''Monster Isle'' monthly series debuting this November.<ref>{{cite news |url=http://www.marketwired.com/press-release/transmedia-legend-larry-hama-takes-red-giant-to-monster-isle-pinksheets-redg-1941375.htm |title=Transmedia Legend Larry Hama Takes Red Giant to MONSTER ISLE |work=MarketWired |date=August 26, 2014 |access-date=July 7, 2020 |archive-date=April 11, 2019 |archive-url=https://web.archive.org/web/20190411142334/http://www.marketwired.com/press-release/transmedia-legend-larry-hama-takes-red-giant-to-monster-isle-pinksheets-redg-1941375.htm |url-status=dead }}</ref>{{primary source inline|date=September 2015}}
On August 27, 2014, Red Giant announced that [[Brian Augustyn]] is scripting a new ''Amped'' comic series debuting in November as part of the monthly Giant-Sized line.<ref>{{cite news |url=http://www.marketwired.com/press-release/brian-augustyn-gets-amped-for-red-giant-entertainment-pinksheets-redg-1941857.htm |title=Brian Augustyn Gets AMPED for Red Giant Entertainment |work=MarketWired |date=August 27, 2014 |access-date=July 7, 2020 |archive-date=July 4, 2018 |archive-url=https://web.archive.org/web/20180704154713/http://www.marketwired.com/press-release/brian-augustyn-gets-amped-for-red-giant-entertainment-pinksheets-redg-1941857.htm |url-status=dead }}</ref>{{primary source inline|date=September 2015}}
On June 19, 2015, Red Giant announced it released a new GSL #1 comic for download with online advertising featuring [[Markiplier]]. This comic was scheduled to be available in print form free at the 2015 [[San Diego Comic-Con International|San Diego Comic Con International]] <ref>{{cite news|url=http://globenewswire.com/news-release/2015/06/19/745941/0/en/Red-Giant-Entertainment-Gives-Fans-Early-Online-Access-to-GIANT-SIZE-1-Comic-With-Interactive-Ads.html |work=Global Newswire |date=June 19, 2015|access-date=2015-09-29|title=Red Giant Entertainment Gives Fans Early Online Access to GIANT-SIZE #1 Comic With Interactive Ads}}</ref>{{primary source inline|date=September 2015}}
On June 24, 2015, Red Giant announced it re-released GSL #0 digitally for download with online advertising.<ref>{{cite news|url=https://globenewswire.com/news-release/2015/06/24/747263/0/en/Red-Giant-Entertainment-s-GIANT-SIZE-0-Comics-Now-Available-Due-to-Popular-Demand.html |work=Global Newswire |date=June 24, 2015|access-date=2015-09-29|title=Red Giant Entertainment's GIANT-SIZE #0 Comics Now Available Due to Popular Demand}}</ref>{{primary source inline|date=September 2015}}
===Collections and Novels===
The company publishes collected print editions of their webcomics, which are distributed to comic book and specialty stores worldwide through [[Diamond Comic Distributors]].<ref>{{cite news|url=http://www.diamondcomics.com/Home/1/1/3/597?articleID=142620 |title=Red Giant Entertainment Signs Multi-Channel, International Distribution Deal with Diamond |work=DiamondComics.com |date=November 27, 2013}}</ref>
====Collections====
* ''The Cartoon Art of Mike Deodato, Jr.'' (Dec 2013)
* ''Mike Deodato's Jade Warriors'' (Spring 2014)
* ''Mike Deodato's Comics & Stories'' (Summer 2014) <ref>{{cite press release |url=http://www.marketwired.com/press-release/red-giant-to-release-new-original-projects-from-superstar-comic-artist-mike-deodato-otcqb-redg-1827745.htm |title=Red Giant to Release New Original Projects From Superstar Comic Artist Mike Deodato |publisher=MarketWired |date=September 5, 2013 |access-date=July 7, 2020 |archive-date=October 1, 2015 |archive-url=https://web.archive.org/web/20151001002959/http://www.marketwired.com/press-release/red-giant-to-release-new-original-projects-from-superstar-comic-artist-mike-deodato-otcqb-redg-1827745.htm |url-status=dead }}</ref>{{primary source inline|date=September 2015}}
* ''Mike Deodato Jr's Sketchbook'' (2014)
====Graphic Novels====
* ''Banzai Girl Volume 1 Dreams Betrayed'' (November 2014)
* ''Buzzboy: Sidekicks Rule!'' Paperback (January 3, 2012)
* ''Drow Tales Volume 1: Moonless Age'' TP Paperback (July 3, 2012)
* ''Exposure Volume 1'' (January 21, 2014)
* ''Exposure Volume 2 Blind Faith'' (November 2014)
* ''Medusa's Daughter'' Graphic Novel HC (2012)
* ''Medusa's Daughter'' Graphic Novel Library HC (February 17, 2015)
* ''Roboy Red'' Graphic Novel Comic (2012)
* ''Wayward Sons Volume 1 (Wayward Sons: Legends)'' (December 2011)
* ''Wayward Sons Volume 2 (Wayward Sons: Legends)'' (February 2014)
* ''Wayward Sons Volume 3'' (April 2014)
* ''Wayward Sons Volume 4'' (October 2014)
<ref>{{cite web|url=http://www.barnesandnoble.com/s/-Red-Giant-Entertainment-?store=allproducts&keyword=%22Red+Giant+Entertainment%22|title=BN Search|accessdate=23 December 2014}}</ref>
===Film===
The following Red Giant Media film projects are in various stages of development, production or release.
* ''[[Niko: The Journey To Magika]]'' (status: released; Released on [[Hulu]] 12/12/2014 [http://www.hulu.com/watch/721296 View Movie] {{Webarchive|url=https://web.archive.org/web/20160304001007/http://www.hulu.com/watch/721296 |date=2016-03-04 }})<ref>{{cite news |url=http://www.marketwired.com/press-release/red-giant-entertainment-wraps-magika-post-production-1765156.htm |title=Red Giant Entertainment Wraps "Magika" Post-Production |work=Marketwired |date=March 6, 2013 |access-date=July 7, 2020 |archive-date=July 15, 2018 |archive-url=https://web.archive.org/web/20180715040107/http://www.marketwired.com/press-release/red-giant-entertainment-wraps-magika-post-production-1765156.htm |url-status=dead }}</ref>{{primary source inline|date=September 2015}}<ref>{{cite web|url=https://www.imdb.com/title/tt1814809/|title=Niko: Journey to Magika|work=IMDb |date=January 19, 2014}}</ref><ref>{{cite web|url=http://www.marketwired.com/press-release/red-giant-animated-movie-niko-journey-to-magika-to-premiere-on-hulu-otc-redg-1972320.htm|work=Press Release|date=November 28, 2014|access-date=2015-09-29|title=Red Giant Animated Movie NIKO: JOURNEY TO MAGIKA To Premiere On Hulu|archive-date=2015-10-01|archive-url=https://web.archive.org/web/20151001010648/http://www.marketwired.com/press-release/red-giant-animated-movie-niko-journey-to-magika-to-premiere-on-hulu-otc-redg-1972320.htm|url-status=dead}}</ref>{{primary source inline|date=September 2015}}
* ''Katrina'' (status: In production)
* ''[[Last Blood (Blatant Comics)|Last Blood]]'' (status: now casting with director Simon Hunter attached)<ref>{{cite news|url=https://variety.com/2008/film/news/benderspink-to-adapt-last-blood-1117983287/ |title=Benderspink to adapt 'Last Blood' |work=Variety |date=April 1, 2008}}</ref><ref>{{cite news|url=https://www.hollywoodreporter.com/news/blood-work-family-guy-scribe-116399 |title='Blood' work for 'Family Guy' scribe |work=The Hollywood Reporter |date=July 28, 2008|access-date=2015-09-29|first1=Mike|last1=Fleming Jr}}</ref><ref>{{cite news|url=https://www.deadline.com/2011/07/comic-con-simon-hunter-helms-last-blood/ |title=Simon Hunter Helms Vampiric 'Last Blood' |work=Deadline Hollywood |date=July 22, 2011}}</ref><ref>{{cite news|url=https://www.deadline.com/2012/07/comic-con-last-blood-movie-secures-co-financing/ |title=Comic-Con: 'Last Blood' Movie Secures Co-Financing |work=Deadline Hollywood |date=July 14, 2012}}</ref>
* ''[[Omphalos (2014)]]'' (status: post-production) <ref>{{cite web|url=https://www.imdb.com/title/tt1884378/ |title=Omphalos (2014) - IMDb|work=IMDb |date=February 16, 2014}}</ref>
* ''[[Shockwave, Darkside]]'' (status: RELEASED;<ref>{{cite web|url=http://redgiantentertainment.com/shockwavedarksidefilm.html |title=Red Giant Entertainment - SHOCKWAVE DARKSIDE Feature Film |work=RedGiant |date=February 20, 2014}}</ref><ref>{{cite web|url=https://www.imdb.com/title/tt1972752/ |title=Shockwave Darkside (2014) - IMDb |work=IMDb |date=February 21, 2014}}</ref> UK Premiere: August 21, 2014 <ref>{{cite news|url=https://variety.com/2014/film/news/london-frightfest-unveils-biggest-ever-line-up-1201252832/|title=London FrightFest Unveils Biggest Ever Line-up - Variety |work=Variety|date=June 27, 2014|first1=Leo|last1=Barraclough|access-date=2015-09-29}}</ref> )
* ''[[Supernovas]]'' (status: development announced)<ref>{{cite news |url=http://www.marketwired.com/press-release/-1765308.htm |title=Red Giant Entertainment Taps SUPERNOVAS |work=Marketwired |date=March 7, 2013 |access-date=July 7, 2020 |archive-date=September 25, 2017 |archive-url=https://web.archive.org/web/20170925181445/http://www.marketwired.com/press-release/-1765308.htm |url-status=dead }}</ref>{{primary source inline|date=September 2015}}
* ''Wayard Sons'' (status: in development)
* ''Wayward Sons: Legends'' (status: in development with producer [[Dan Lin]])<ref>{{cite news|url=https://www.hollywoodreporter.com/heat-vision/web-comic-wayward-sons-getting-436907 |title=Web Comic 'Wayward Sons' Getting Big-Screen Adaptation |work=The Hollywood Reporter |date=April 10, 2013}}</ref>
===Television===
The following Red Giant television projects are in various stages of development and production.
* ''Exposure'' (status: development announced; [[Kevin VanHook]] producer)<ref>{{cite news |url=http://www.marketwired.com/press-release/producer-kevin-vanhook-to-develop-red-giants-exposure-franchise-for-television-1815729.htm |title=Producer Kevin VanHook to Develop Red Giant's EXPOSURE Franchise for Television |work=Marketwired |date=July 30, 2013 |access-date=July 7, 2020 |archive-date=July 15, 2018 |archive-url=https://web.archive.org/web/20180715040450/http://www.marketwired.com/press-release/producer-kevin-vanhook-to-develop-red-giants-exposure-franchise-for-television-1815729.htm |url-status=dead }}</ref>{{primary source inline|date=September 2015}}<ref>{{cite news|url=http://www.bizjournals.com/orlando/news/2013/07/30/red-giant-entertainments-exposure-to.html|title='I, Robot' effects supervisor to produce Red Giant's 'Exposure' as TV show|work=Bizjournals |date=July 30, 2013}}</ref>
===Video Games and Apps===
[[Bandai Namco Games]] America Inc. announced a partnership to provide more comic influenced games on July 23, 2014.<ref>{{cite news|url=https://online.wsj.com/article/PR-CO-20140723-907956.html|title=BANDAI NAMCO Announces Outcast Odyssey as a Part of San Diego Comic Con Mobile Games Lineup!|work=Wall Street Journal|date=July 23, 2014|access-date=July 7, 2020|archive-date=August 8, 2014|archive-url=https://web.archive.org/web/20140808054747/http://online.wsj.com/article/PR-CO-20140723-907956.html|url-status=dead}}</ref> First game to be released by 2014 Holiday season.<ref>{{cite video|url=https://www.youtube.com/watch?v=p21-SatpSEU|title=REDG Shareholder Report & Comic Con wrap-up|work=Youtube|date=July 31, 2014}}</ref>
==History==
* Incorporated June 27, 2005 under the name Castmor Resources, Ltd.
* Red Giant Entertainment, Inc. established in Clermont, Florida, in 2010.
* Acquired Red Giant Entertainment, Inc., a Florida corporation ("RGE"), on June 11, 2012.
* On June 26, 2012, Castmor Resources changed name to Red Giant Entertainment, Inc.
* On March 4, 2013, Red Giant acquired ComicGenesis, LLC ("ComicGenesis"), a Nevada limited liability company that operates a user-generated comic site that hosts over 10,000 independent webcomics.<ref>{{cite web|url=https://www.sec.gov/Archives/edgar/data/1411179/000116552713001017/g7183a.txt|title=Red Giant Entertainment 10K Filing|work=SEC |date=February 20, 2014}}</ref>
==Partners==
Strategic partners include:
* [[Bandai Namco Games]] <ref>{{cite news|title=BANDAI NAMCO Announces Outcast Odyssey as a Part of San Diego Comic Con Mobile Games Lineup! |url=https://online.wsj.com/article/PR-CO-20140723-907956.html |publisher=Wall Street Journal |accessdate=23 July 2014 |url-status=dead |archiveurl=https://web.archive.org/web/20140808054747/http://online.wsj.com/article/PR-CO-20140723-907956.html |archivedate=August 8, 2014 }}</ref>
==Controversy==
''Japan Needs Heroes'', the company's [[Kickstarter]] crowd-funded anthology project designed to benefit "victims of Japan's tragedies", was fully funded in May 2011, and ''Japan Needs Heroes II'', the company's second such project was fully funded in 2013. Neither had been delivered as of January 2014.<ref>{{cite news|url=https://www.youtube.com/watch?v=Q7A3lZhGqog |title=JAPAN NEEDS HEROES stalled Kickstarter project, a timeline|work=YouTube |date=January 2, 2014}}</ref> The company said both projects had gone to the printer as of December 30, 2014 and that digital downloads would be sent to the Kickstarter backers in January 2015.<ref>{{cite web|url=https://www.facebook.com/groups/RedGiantEntertainmentFansAndInvestorsGroup/permalink/1561619607413715/|title=Red Giant Entertainment Fans and Investors Group|accessdate=1 January 2015}}</ref><ref>{{cite web |url=https://redgiant.myshopify.com/products/japan-needs-heroes-digital-download |title=Japan Needs Heroes - Digital Download |work=Red Giant Entertainment, Online Store |date=January 16, 2015 |access-date=July 7, 2020 |archive-date=September 17, 2016 |archive-url=https://web.archive.org/web/20160917154320/http://redgiant.myshopify.com/products/japan-needs-heroes-digital-download |url-status=dead }} {{Webarchive|url=https://web.archive.org/web/20160917154320/http://redgiant.myshopify.com/products/japan-needs-heroes-digital-download |date=September 17, 2016 }}</ref> As of at least February 2015, printed hardcover and paperback books had not been mailed to Kickstarter backers.<ref>{{cite web|url=http://www.bleedingcool.com/2015/02/11/red-giant-entertainment-needs-heroes/ |title=Red Giant Entertainment Needs Heroes|work=Rich Johnston, BleedingCool.com |date=February 11, 2015}}</ref> At [[San Diego Comic-Con International]] in 2015, [[Stan Lee]] and Red Giant's [[David Campiti]] showed the printed copies of ''Japan Needs Heroes''.<ref>{{cite web|url=https://www.facebook.com/RedGiantEntertainment/photos/a.406579232813695.1073741836.129182517220036/627386444066305/?type=1&theater |title=Foreword writer Stan "The Man" Lee and Dazzlin' Dave Campiti celebrate the release of Red Giant's benefit book JAPAN NEEDS HEROES! |work=Red Giant Entertainment, Facebook |date=July 12, 2015}}</ref>
==References==
{{Reflist|33em}}
==External links==
* [http://www.redgiantentertainment.com Official Website] [[Category:Companies based in Florida]] [[Category:Companies established in 2010]] [[Category:Entertainment companies of the United States]] [[Category:Film production companies of the United States]] [[Category:Comic book publishing companies of the United States]] [[Category:Webcomic creators]] [[Category:Toys based on comics]] <noinclude>
<small>This page was moved from [[:en:Red Giant Entertainment]]. Its edit history can be viewed at [[Red Giant Entertainment/edithistory]]</small></noinclude>
9ceoilo6725rl62fgj4cxqx9jgdudz4
T
0
118399
754490
519728
2026-07-31T21:37:51Z
Enbi
72574
Blanked the page
754490
wikitext
text/x-wiki
phoiac9h4m842xq45sp7s6u21eteeq1
754492
754490
2026-07-31T21:39:19Z
Enbi
72574
754492
wikitext
text/x-wiki
test
jrwjerxiekdtj9k82lg930wpkr6tq6r
L'expérience Messmer (émission)
0
118508
754448
691820
2026-07-31T19:00:50Z
Itsied
75098
Undid revision [[Special:Diff/691820|691820]] by [[Special:Contributions/Zilant13|Zilant13]] ([[User talk:Zilant13|talk]])
754448
wikitext
text/x-wiki
Animée par Gino Chouinard, ''L'expérience Messmer'' met en vedette Messmer, référence mondiale en hypnose et en magnétisme. Ensemble, ils reçoivent des personnalités québécoises sur un plateau de grande envergure pour leur faire vivre différentes aventures sous hypnose.Enregistrée devant public, l’émission présente également de grands numéros hypnotiques, tournés dans divers environnements et mettant en vedette de nombreux invités (animateurs, journalistes, comédiens, humoristes, chanteurs, etc.). À l'image de la série ''Messmer fascine les stars'', beaucoup de surprises vous attendent avec le visionnement des numéros tournés au préalable avec les personnalités ayant vécus l’hypnose et leurs complices, mais aussi avec des numéros en direct du plateau.
Bref, c'est un rendez-vous qui promet toutes sortes d’expériences, des plus scientifiques aux plus loufoques et toujours divertissantes! Une incursion à la fois hilarante, surprenante et intrigante dans le monde de la fascination!
*
[[Category:Émission de télévision de variétés ou de divertissment]]
fo0369rfvxgx4v91rlk6m1qq3feru07
User:Nardog/sandbox2.js
2
118608
754437
749249
2026-07-31T17:55:07Z
Nardog
40946
754437
javascript
text/javascript
(async function listTools() {
let pageAction = mw.config.get('wgAction');
let isView = pageAction === 'view';
let isEdit = ['edit', 'submit'].includes(pageAction);
if (!isView && !isEdit) return;
let pageType = mw.config.get('wgCanonicalSpecialPageName') ||
mw.config.get('wgNamespaceNumber');
if (isView && !pageType && !mw.config.exists('wgRedirectedFrom') &&
!mw.config.get('wgIsRedirect') &&
!mw.config.get('wgPageName').includes('/')
) {
return;
}
await mw.loader.using([
'mediawiki.util', 'mediawiki.Title', 'mediawiki.api',
'mediawiki.interface.helpers.styles'
]);
mw.loader.addStyleTag(`.listtools:not(#mw-content-subtitle .listtools) {
font-size: 85%;
}
.listtools, .listtools a {
font-weight: normal !important;
font-style: normal;
}
.mw-datatable .listtools {
display: block;
}
.listtools + .mw-whatlinkshere-tools,
#watchlist-edit-form .listtools ~ .mw-changeslist-links,
.mw-special-DisambiguationPageLinks .listtools + a {
display: none;
}`);
let messages = Object.assign({
watched: 'Added "$1" to your watchlist',
watchFail: `Couldn't watch "$1"`,
unwatchFail: `Couldn't unwatch "$1"`
}, window.listtoolsMessages);
let getMsg = (key, ...args) => (
Object.hasOwn(messages, key) ? mw.format(messages[key], ...args) : key
);
let notif;
let watchHandler = async function (e) {
e.preventDefault();
let $link = $(this);
let $wrapper = $link.parent();
$link.detach();
let params = new URLSearchParams(this.search);
let action = params.get('action');
$wrapper.text(getMsg(action + 'ing'));
let pn = params.get('title').replaceAll('_', ' ');
let promise = new mw.Api()[action](pn);
if (notif) {
notif.close();
notif = null;
}
try {
let result = await promise;
if (!result || !result[action + 'ed']) throw '';
let newAction = action === 'watch' ? 'unwatch' : 'watch';
params.set('action', newAction);
$link.add(`.listtools-watch > a[href="${this.pathname + this.search}"]`)
.attr('href', this.pathname + '?' + params)
.text(getMsg(newAction));
if (action !== 'watch') return;
let require = await mw.loader.using([
'mediawiki.notification', 'mediawiki.watchstar.widgets'
]);
notif = await mw.notify(
new (require('mediawiki.watchstar.widgets'))('watch', pn, null, $.noop, {
message: getMsg('watched', pn)
}).$element,
{ tag: 'listtools' }
);
} catch {
notif = await mw.notify(getMsg(action + 'Fail', pn), {
tag: 'listtools',
type: 'error'
});
} finally {
$wrapper.html($link);
}
};
let extGetMain = function () {
return this.title;
};
let re = new RegExp(`(?:\\?title=|${
mw.util.escapeRegExp(mw.format(mw.config.get('wgArticlePath'), ''))
})([^#&?]+)`);
let processed = new WeakSet();
let processLinks = ($links, module, titles) => {
let isBatch = !!titles;
titles = titles || new Set();
$links.each(function (i) {
if (processed.has(this)) return;
let $link = $links.eq(i);
let pn;
if (module.useText) {
pn = $link.text();
} else {
let match = $link.attr('href')?.match(re);
if (!match) return;
pn = decodeURIComponent(match[1]);
}
let t = mw.Title.newFromText(pn);
if (!t) return;
if (module.titlesOnly) {
let text = $link.text();
if (text !== pn.replaceAll('_', ' ') &&
(text !== t.getMainText() || t.namespace === 2)
) {
return;
}
}
if ($link.is('.external, .extiw')) {
Object.assign(t, {
getMain: extGetMain,
host: this.host,
namespace: 0,
title: pn
});
} else {
if (t.namespace < 0) return;
if ($link.hasClass('new')) {
t.missing = true;
}
titles.add(t.getSubjectPage().toText());
}
let $tools = $('<span>').addClass('listtools mw-changeslist-links')
.data('listtools', t);
tools.forEach(tool => {
addTool($tools, tool);
});
if ($link.is(':is(del, bdi) > :only-child')) {
if (module.position === 'end') {
$link.parent().parent().append(' ', $tools);
} else {
$link.parent().after(' ', $tools);
}
} else if (module.position === 'end') {
$link.parent().append(' ', $tools);
} else {
$link.after(' ', $tools);
}
if (module.post) {
module.post($tools);
}
processed.add(this);
});
if (!isBatch) {
getWatched(titles);
}
};
let tools = [
{
name: 'edit',
url: t => t.getUrl({ action: 'edit' })
},
{
name: 'hist',
url: t => !t.missing && t.getUrl({ action: 'history' })
},
{
name: 'links',
url: t => mw.util.getUrl('Special:WhatLinksHere/' + t)
},
{
name: 'watch',
url: t => !t.host && t.getSubjectPage().getUrl({ action: 'watch' }),
callback: watchHandler
}
];
let addTool = ($tools, tool, escapedName) => {
let t = $tools.data('listtools');
let $duplicate = escapedName &&
$tools.children('.listtools-' + escapedName);
let url = tool.url;
if (typeof url === 'function') {
url = url(t);
if (!url) {
$duplicate?.remove();
return;
}
}
let $link = $('<a>').attr('href', url).text(getMsg(tool.name));
if (t.host) {
$link.prop('host', t.host);
}
if (tool.callback) {
$link.on('click', tool.callback);
}
let $wrapper = $('<span>').addClass('listtools-' + tool.name)
.append($link);
let $next = tool.next && $tools.children('.listtools-' + tool.next);
if ($next?.length) {
$duplicate?.remove();
$next.before($wrapper);
} else if ($duplicate?.length) {
$duplicate.replaceWith($wrapper);
} else {
$tools.append($wrapper);
}
};
let extend = tool => {
if (tool.label && !Object.hasOwn(messages, tool.label)) {
messages[tool.name] = tool.label;
}
if (tool.next) {
tool.next = $.escapeSelector(tool.next);
}
let existingTool = tools.find(t => t.name === tool.name);
if (existingTool) {
Object.assign(existingTool, tool);
} else {
tools.push(tool);
}
let escapedName = existingTool && $.escapeSelector(tool.name);
let $allTools = $('.listtools');
$allTools.each(function (i) {
addTool($allTools.eq(i), tool, escapedName);
});
};
let getWatched = async titles => {
if (!Array.isArray(titles)) {
titles = [...titles].slice(0, 500);
}
if (!titles.length) return;
(await new mw.Api().post({
action: 'query',
titles: titles.slice(0, 50),
prop: 'info',
inprop: 'watched',
formatversion: 2
}, {
headers: { 'Promise-Non-Write-API-Action': 1 }
})).query.pages.forEach(page => {
if (!page.watched) return;
$(`.listtools-watch > a[href="${mw.util.getUrl(page.title, { action: 'watch' })}"]`)
.attr('href', mw.util.getUrl(page.title, { action: 'unwatch' }))
.text(getMsg('unwatch'));
});
getWatched(titles.slice(50));
};
mw.hook('listtools.ready').fire(extend);
let catTreeCallback = (records, observer) => {
let $links = $(records[0].target).find('.CategoryTreeItem > bdi > a');
if ($links.length) {
observer.takeRecords();
observer.disconnect();
processLinks($links, catTreeModule);
}
};
let catTreeModule = {
selector: '.CategoryTreeItem > bdi > a',
types: [14, 'CategoryTree'],
position: 'end',
post: $tools => {
$tools.parent().next('.CategoryTreeChildren').each(function () {
new MutationObserver(catTreeCallback)
.observe(this, { childList: true });
});
}
};
let modules = [
{
selector: '#mw-pages li > a:not(:empty), #mw-pages li > span > a',
types: [14]
},
catTreeModule,
{
selector: '#mw-imagepage-section-linkstoimage a, #mw-imagepage-section-globalusage a',
types: [6]
},
{
selector: '#mw-globalusage-result a',
types: ['GlobalUsage']
},
{
selector: '.mw-search-result-heading > a, .searchalttitle > a.mw-redirect, .iw-result__title > a, .mw-search-exists a',
types: ['Search']
},
{
selector: '.mw-search-createlink a',
types: ['Search'],
titlesOnly: true
},
{
selector: '#watchlist-edit-form .cdx-table td > label > a',
types: ['EditWatchlist']
},
{
selector: '.plainlinks > li > a',
types: ['AbuseLog'],
titlesOnly: true
},
{
selector: '#mw-allmessagestable td:first-child > a:first-child:not(.new)',
types: ['Allmessages'],
position: 'end'
},
{
selector: '.mw-spcontent li a',
types: ['DisambiguationPageLinks', 'Listredirects'],
titlesOnly: true
},
{
selector: 'li > a:first-child',
types: ['FileDuplicateSearch']
},
{
selector: '.TablePager_col_title > a:first-child, .TablePager_col_template > a',
types: ['LintErrors'],
post: $tools => {
$tools.parent().contents().slice(3).remove();
}
},
{
selector: 'form > ul > li > a',
types: ['Nuke'],
position: 'end',
titlesOnly: true
},
{
selector: '.page-assessments a',
types: ['PageAssessments'],
titlesOnly: true
},
{
selector: '.TablePager_col_pr_page > a',
types: ['Protectedpages'],
position: 'end'
},
{
selector: '#mw-content-text > ul a',
types: ['Protectedtitles'],
position: 'end'
},
{
selector: '.mw-fr-pending-changes-page-title',
types: ['PendingChanges'],
post: $tools => {
$tools.parent().contents().slice(3).remove();
}
},
{
selector: '#mw-content-text > ul a:first-child',
types: ['StablePages'],
position: 'end'
},
{
selector: '.TablePager_col__page a',
types: ['TopicSubscriptions']
},
{
selector: '.undeleteResult > a',
types: ['Undelete'],
position: 'end',
useText: true
},
{
selector: '.TablePager_col_img_name > a:first-child',
// types: ['Listfiles'],
position: 'end'
},
{
selector: '.mw-newpages-pagename:not(:empty), .mw-newpages-pagename:empty + a',
post: $tools => {
let $nodes = $tools.parent().contents();
$nodes.slice(
$nodes.index($tools) + 1,
$nodes.index($nodes.filter('.mw-newpages-length'))
).replaceWith(' ');
}
},
{
selector: '#mw-whatlinkshere-list li > bdi > a'
},
{
selector: '.mw-changeslist-log-entry > a:not(.mw-changeslist-log-gblblock a, .mw-changeslist-log-globalauth a)',
titlesOnly: true
},
{
selector: '.mw-logevent-loglines > li:not(.mw-logline-gblblock, .mw-logline-globalauth) > a',
types: ['Log'],
titlesOnly: true
},
{
selector: '#mw-diff-otitle1 > strong > a, #mw-diff-ntitle1 > strong > a',
types: ['ComparePages'],
position: 'end'
},
{
selector: '#movepage-oldlink, #movepage-newlink',
types: ['Movepage']
},
{
selector: '.mw-undelete-revision a:not(.mw-userlink, .mw-usertoollinks > a)',
types: ['Undelete'],
useText: true
},
{
selector: '.galleryfilename, ' +
'.mw-allpages-chunk > li > a, ' +
'.mw-prefixindex-list > li > a, ' +
'.mw-changeslist-line.mw-changeslist-src-mw-categorize .mw-changeslist-line-inner > .comment > a:not(:empty), ' +
'.mw-changeslist-line.mw-changeslist-src-mw-categorize .mw-changeslist-line-inner-comment > .comment > a:not(:empty), ' +
'.mw-changeslist-line.mw-changeslist-src-mw-categorize .mw-enhanced-rc-nested > .comment > a:not(:empty)'
},
{
selector: '.mw-spcontent li a',
position: 'end',
titlesOnly: true
}
];
if (isEdit) {
let post = $tools => {
if (!$tools[0].closest('.templatesUsed')) return;
$tools.parent().contents().last().each(function () {
this.textContent = this.textContent.slice(1);
}).end().slice(-3, -1).remove();
};
let callback = mw.util.debounce(() => {
processLinks(
$('.mw-editfooter-list a, #wikiPreview > .previewnote a'),
{ titlesOnly: true, post }
);
}, 500);
mw.hook('wikipage.editform').add($form => {
callback();
$form.find('.templatesUsed').each(function () {
if (processed.has(this)) return;
processed.add(this);
new MutationObserver(callback)
.observe(this, { childList: true, subtree: true });
});
});
} else if (typeof pageType === 'number') {
$(() => {
processLinks($('.subpages a, .mw-redirectedfrom a, .redirectText a'), {});
});
}
mw.hook('wikipage.content').add($content => {
let titles = new Set();
let $links = $content.find('a');
modules.forEach(module => {
if (module.types && !module.types.includes(pageType)) return;
processLinks($links.filter(module.selector), module, titles);
});
getWatched(titles);
});
}());
mw.hook('listtools.ready').add(extend => {
// extend({
// name: 'talk',
// url: t => !t.isTalkPage() && t.canHaveTalkPage() && t.getTalkPage().getUrl(),
// next: 'hist'
// });
extend({
name: 'subject',
url: t => t.isTalkPage() && t.getSubjectPage().getUrl(),
next: 'hist'
});
extend({
name: 'last',
url: t => !t.missing && t.getUrl({ diff: 'cur', diffonly: 1 }),
next: 'links'
});
// extend({
// name: 'purge',
// url: t => t.getUrl({ action: 'purge' }),
// next: 'watch',
// callback: function (e) {
// e.preventDefault();
// let $link = $(this);
// let $wrapper = $link.parent();
// $link.detach();
// $wrapper.text('purging');
// let pn = $wrapper.closest('.listtools').data('listtools').toText();
// new mw.Api().post({
// action: 'purge',
// forcelinkupdate: 1,
// titles: pn,
// formatversion: 2
// }).then(response => {
// if (response.purge[0].purged) {
// mw.notify(`Purged "${pn}"'`);
// }
// }).always(() => {
// $wrapper.html($link);
// });
// }
// });
extend({
name: 'copy',
url: '#',
callback: function (e) {
e.preventDefault();
let text = $(this).closest('.listtools').data('listtools').toText();
let $input = $('<input>').attr({
type: 'text',
readonly: '',
style: 'position:fixed;top:-100%'
}).val(text).appendTo(document.body);
$input[0].select();
let copied;
try {
copied = document.execCommand('copy');
} catch (err) {}
$input.remove();
if (copied) {
mw.notify(`Copied "${text}"`);
} else {
mw.notify('Copy failed', { type: 'error' });
}
}
});
});
(mw.config.get('wgNamespaceNumber') || mw.config.get('wgAction') !== 'view') &&
mw.config.get('wgCanonicalSpecialPageName') !== 'GlobalContributions' &&
(function consecudiff() {
mw.loader.addStyleTag('.consecudiff::before{content:" ["} .consecudiff::after{content:"]"} .consecudiff-top::before{content:" ⟨"} .consecudiff-top::after{content:"⟩"}');
let isHist = mw.config.get('wgAction') === 'history';
class Consecudiff {
constructor(lis, isContribs) {
this.isContribs = isContribs;
this.isEnhanced = !isHist && !isContribs &&
lis[0].classList.contains('mw-enhanced-rc');
this.threshold = isContribs ? window.consecudiffContribsThreshold || 120
: isHist ? window.consecudiffHistThreshold || 720
: window.consecudiffThreshold || 720;
this.strictMode = !isContribs &&
!!window.consecudiffDetectInterruptions;
this.diffSelector = isHist
? 'a.mw-history-histlinks-previous'
: '.mw-changeslist-diff';
this.permaSelector = this.isEnhanced && '.mw-enhanced-rc-time > a' ||
(isHist || isContribs) && 'a.mw-changeslist-date';
this.hybridSelector = this.diffSelector;
if (this.permaSelector) {
this.hybridSelector += ', ' + this.permaSelector;
}
this.topClass = isContribs
? 'mw-contributions-current'
: 'mw-changeslist-last';
let dependencies = ['mediawiki.util'];
if ((isHist || isContribs) && mw.config.get('wgUserLanguage') !== 'en') {
dependencies.push('mediawiki.language.months');
}
mw.loader.using(dependencies, () => {
let chunks;
if (isHist) {
chunks = this.chunkByUser(lis);
} else {
chunks = [];
this.groupByTitle(lis).forEach(group => {
chunks.push(...this.chunkByUser(group));
});
}
let subchunks = [];
chunks.forEach(chunk => {
subchunks.push(...this.divideByDate(chunk));
});
let linkPairs = [];
subchunks.forEach(subchunk => {
linkPairs.push(...this.makeLinks(subchunk));
});
linkPairs.forEach(([$span, parent]) => {
$span.appendTo(parent);
});
});
}
groupByTitle(lis) {
let selector = this.isContribs
? '.mw-contributions-title'
: '.mw-changeslist-title';
let lisByTitle = {};
lis.forEach(li => {
let link = (this.isEnhanced ? li.closest('table') : li)
.querySelector(selector);
if (!link) return;
let title = link.textContent;
if (!lisByTitle.hasOwnProperty(title)) {
lisByTitle[title] = [];
}
lisByTitle[title].push(li);
});
return Object.values(lisByTitle).filter(group => group.length > 1);
}
chunkByUser(lis) {
if (this.isSingleContribs) {
return [lis];
}
let chunks = [], lastSplitAt = 0, prevUser;
this.isSingleContribs = lis.some((li, i) => {
let link = li.querySelector('.mw-userlink');
if (!link && this.isContribs) {
return true;
}
let user = link && link.textContent;
if (!link || i && user !== prevUser) {
chunks.push(lis.slice(lastSplitAt, i));
lastSplitAt = i;
}
prevUser = user;
});
if (this.isSingleContribs) {
return [lis];
}
chunks.push(lis.slice(lastSplitAt));
return chunks.filter(chunk => chunk.length > 1);
}
divideByDate(lis) {
let chunks = [], lastSplitAt = 0, prevDate;
lis.forEach((li, i) => {
let date;
if (isHist || this.isContribs) {
date = this.parseDate(
li.querySelector('.mw-changeslist-date').textContent
);
} else {
date = Date.parse(
li.dataset.mwTs.replace(/(....)(..)(..)(..)(..)(..)/, '$1-$2-$3T$4:$5:$6Z')
);
}
if (date) {
date = date / 60000;
}
if (i && prevDate - date > this.threshold) {
chunks.push(lis.slice(lastSplitAt, i));
lastSplitAt = i;
}
prevDate = date;
if (!this.strictMode || lastSplitAt === i) return;
let prevDiff = lis[i - 1].querySelector(this.diffSelector);
if (prevDiff) {
let prevNext = mw.util.getParamValue('oldid', prevDiff.search);
if (prevNext !== li.dataset.mwRevid) {
chunks.push(lis.slice(lastSplitAt, i));
lastSplitAt = i;
}
}
});
chunks.push(lis.slice(lastSplitAt));
return chunks.filter(chunk => chunk.length > 1);
}
makeLinks(lis) {
let count = lis.length;
let firstPerma;
let start = lis.findIndex(li => (
firstPerma = li.querySelector(this.hybridSelector)
));
if (start === -1 || count - start < 2) return [];
let end, lastDiff;
for (let i = count - 1; i > start; i--) {
if (!isHist && !this.isContribs) {
lastDiff = lis[i].querySelector(this.diffSelector);
if (lastDiff ||
lis[i].classList.contains('mw-changeslist-src-mw-new')
) {
end = i + 1;
break;
}
}
if (this.permaSelector && lis[i].querySelector(this.permaSelector)) {
end = i + 1;
break;
}
}
if (!end) return [];
count = end - start;
let params = { diff: lis[start].dataset.mwRevid };
if (lastDiff) {
params.oldid = mw.util.getParamValue('oldid', lastDiff.search);
} else {
params.oldid = lis[end - 1].dataset.mwRevid;
if (isHist && lis[end - 1].querySelector(this.diffSelector) ||
this.isContribs && !lis[end - 1].querySelector('.newpage')
) {
params.direction = 'prev';
}
}
let title = !isHist && mw.util.getParamValue('title', firstPerma.search);
let url = mw.util.getUrl(title, params);
let classes = 'consecudiff';
if (!isHist && lis[start].classList.contains(this.topClass)) {
classes += ' consecudiff-top';
}
return lis.slice(start, end).map((li, i) => [
$('<span>').addClass(classes).append(
$('<a>')
.attr('href', url)
.text(this.convertNumber(count - i + '/' + count))
),
this.isEnhanced
? li.tagName === 'TR'
? li.lastElementChild
: li.querySelector('.mw-changeslist-line-inner')
: li
]);
}
parseDate(s) {
let date = Date.parse(s);
if (date) {
return date;
}
if (s.includes(',')) date = Date.parse(s.replace(',', ''));
if (date) {
return date;
}
if (mw.loader.getState('mediawiki.language.months') !== 'ready') return;
s = s.replace(/\D/g, c => {
let n = mw.language.convertNumber(c, true);
return Number.isNaN(n) ? c : n;
});
let h, m;
s = s.replace(/(\d\d?)[.:h](\d\d?)/, ($0, $1, $2) => {
h = $1;
m = $2;
return ' ';
});
if (!h) return;
let y, dateFirst;
s = s.replace(/^(.*?)(\d{4})(?!\d)/, ($0, $1, $2) => {
y = $2;
dateFirst = /\d/.test($1);
return $1 + ' ';
});
if (!y) return;
let mo, d;
if (dateFirst) {
[d, s] = this.getDate(s);
if (!d) return;
[mo, s] = this.getMonth(s);
if (mo === -1) return;
} else {
[mo, s] = this.getMonth(s);
if (mo === -1) return;
[d, s] = this.getDate(s);
if (!d) return;
}
return new Date(y, mo, d, h, m).getTime();
}
getMonth(s) {
if (!this.months) {
this.months = mw.language.months.abbrev
.concat(mw.language.months.names, mw.language.months.genitive)
.reverse();
}
let mo = this.months.findIndex(mn => {
let temp = s.replace(mn, ' ');
if (temp !== s) {
s = temp;
return true;
}
});
if (mo === -1) {
let [numeric, temp] = this.getDate(s);
numeric = parseInt(numeric);
if (numeric > 0 && numeric < 13) {
mo = numeric - 1;
s = temp;
}
} else {
mo = 11 - mo % 12;
}
return [mo, s];
}
getDate(s) {
let d;
s = s.replace(/(^|\D)(\d\d?)(?!\d)/, ($0, $1, $2) => {
d = $2;
return $1 + ' ';
});
return [d, s];
}
convertNumber(num) {
try {
return mw.language.convertNumber(num);
} catch (e) {
return num;
}
}
}
mw.hook('wikipage.content').add($content => {
$content.find('.mw-pager-body').each(function () {
let lis = this.querySelectorAll('.mw-contributions-list > li');
if (lis.length > 1) {
new Consecudiff([...lis], !isHist);
}
});
if (isHist) return;
let $lists = $content.filter('.mw-changeslist');
if (!$lists.length) {
$lists = $content.find('.mw-changeslist');
}
$lists.each(function () {
let lis = this.querySelectorAll('.mw-changeslist-edit:not(.mw-changeslist-src-mw-categorize)[data-mw-revid]');
if (lis.length > 1) {
new Consecudiff([...lis]);
}
});
});
}());
if (mw.config.get('wgNamespaceNumber') === 14 && (
mw.config.get('wgAction') === 'view' || !mw.config.get('wgArticleId')
)) {
mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Nardog/sandbox8.js&action=raw&ctype=text/javascript');
mw.loader.using([
'mediawiki.api', 'mediawiki.util', 'mediawiki.DateFormatter',
'oojs-ui-widgets', 'mediawiki.widgets',
'mediawiki.widgets.UserInputWidget', 'mediawiki.widgets.datetime',
'oojs-ui.styles.icons-interactions', 'oojs-ui.styles.icons-movement',
'mediawiki.interface.helpers.styles', 'user.options'
]);
}
$(function moveHistory() {
if (!document.getElementById('p-tb')) return;
mw.loader.using('mediawiki.util', () => {
let clicked;
mw.util.addPortletLink('p-tb', '#', 'Move history', 't-movehistory').firstElementChild.addEventListener('click', e => {
e.preventDefault();
if (clicked) {
if (window.moveHistoryDialog) {
window.moveHistoryDialog.open();
}
return;
}
clicked = true;
mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Nardog/sandbox5.js&action=raw&ctype=text/javascript');
mw.loader.using([
'mediawiki.api', 'mediawiki.util', 'mediawiki.Title', 'mediawiki.DateFormatter',
'oojs-ui-windows', 'oojs-ui-widgets', 'mediawiki.widgets',
'mediawiki.widgets.DateInputWidget', 'oojs-ui.styles.icons-interactions',
'mediawiki.interface.helpers.styles'
]);
});
});
});
$(function sectionSearch() {
if (!document.getElementById('p-tb')) return;
mw.loader.using('mediawiki.util', () => {
let clicked;
mw.util.addPortletLink('p-tb', '#', 'Section search', 't-sectionsearch').firstElementChild.addEventListener('click', e => {
e.preventDefault();
if (clicked) {
if (window.sectionSearchDialog) {
window.sectionSearchDialog.open();
}
return;
}
clicked = true;
mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Nardog/sandbox7.js&action=raw&ctype=text/javascript');
mw.loader.using([
'mediawiki.api', 'mediawiki.util', 'oojs-ui-core', 'oojs-ui-windows',
'mediawiki.widgets', 'mediawiki.widgets.NamespacesMultiselectWidget'
]);
});
});
});
mw.config.get('wgCanonicalSpecialPageName') === 'CentralAuth' &&
mw.loader.using('jquery.tablesorter', function sortCentralAuthByEditCount() {
mw.hook('wikipage.content').add($content => {
let $table = $content.find('.mw-centralauth-wikislist').has('td');
if (!$table.length) return;
$table.tablesorter().data('tablesorter').sort([{ 4: 'desc' }, { 1: 'asc' }]);
});
});
['edit', 'submit'].includes(mw.config.get('wgAction')) &&
[10, 828].includes(mw.config.get('wgNamespaceNumber')) &&
!mw.config.get('wgTitle').endsWith('/doc') &&
mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/AutoTestcases.js&action=raw&ctype=text/javascript', 's');
// ['edit', 'submit'].includes(mw.config.get('wgAction')) &&
// mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/TemplatePreviewGuard.js&action=raw&ctype=text/javascript', 's');
// ['edit', 'submit'].includes(mw.config.get('wgAction')) &&
// $(function templatePreviewGuard() {
// let button = document.querySelector('input[name="wpTemplateSandboxPreview"]');
// if (!button) return;
// let proceed;
// button.addEventListener('click', e => {
// if (proceed) {
// proceed = false;
// return;
// }
// e.preventDefault();
// e.stopPropagation();
// let formData = new FormData(button.form);
// let page = formData.get('wpTemplateSandboxPage');
// let temp = formData.get('wpTemplateSandboxTemplate');
// if (!page || !temp) return;
// mw.loader.using('mediawiki.api').then(() => (
// new mw.Api().get({
// action: 'query',
// titles: page,
// prop: 'templates',
// tltemplates: temp,
// formatversion: 2
// })
// )).always(response => {
// if (((((response || {}).query || {}).pages || [])[0] || {}).templates ||
// confirm(`"${page}" doesn't appear to transclude "${temp}". Continue?`)
// ) {
// proceed = true;
// button.click();
// }
// });
// }, true);
// if (!mw.config.get('wgArticleId')) return;
// let widgetEl = document.querySelector('#wpTemplateSandboxPage.oo-ui-widget');
// if (!widgetEl) return;
// let pn = mw.config.get('wgPageName').replace(/_/g, ' ');
// mw.loader.using(['mediawiki.api', 'oojs-ui-core']).then(() => (
// new mw.Api().get({
// action: 'query',
// titles: pn,
// prop: 'transcludedin',
// tiprop: 'title',
// tilimit: 'max',
// formatversion: 2
// })
// )).then(response => {
// if (!response.batchcomplete) return;
// let pages = response.query.pages[0].transcludedin
// .filter(o => o.title !== pn);
// if (!pages.length) return;
// let widget = OO.ui.infuse(widgetEl);
// if (pages.length === 1) {
// widget.setValue(pages[0].title);
// return;
// }
// widget.$element.replaceWith(
// new OO.ui.ComboBoxInputWidget({
// id: 'wpTemplateSandboxPage',
// maxlength: widget.$input.prop('maxLength'),
// name: widget.$input.prop('name'),
// options: pages
// .sort((a, b) => a.ns - b.ns || -(a.title < b.title))
// .map(o => ({ data: o.title })),
// placeholder: widget.$input.prop('placeholder'),
// tabIndex: widget.getTabIndex(),
// value: widget.getValue()
// }).on('enter', e => {
// e.preventDefault();
// button.click();
// }).$element
// );
// });
// });
['edit', 'submit'].includes(mw.config.get('wgAction')) &&
mw.config.get('wgArticleId') &&
mw.config.get('wgPageContentModel') === 'wikitext' &&
$(async () => {
let form = document.getElementById('editform');
if (!form) return;
let formData = new FormData(form);
let section = formData.get('wpSection');
if (section === 'new') return;
let widget = document.getElementById('wpSummaryWidget');
if (!widget) return;
let isOld = formData.get('altBaseRevId') > 0 ||
(formData.get('baseRevId') || formData.get('parentRevId')) !== formData.get('editRevId');
await mw.loader.using([
'jquery.textSelection', 'mediawiki.util', 'mediawiki.api', 'oojs-ui-core',
'oojs-ui.styles.icons-editing-core'
]);
let $textarea = $('#wpTextbox1');
let input = OO.ui.infuse(widget);
let button = new OO.ui.ButtonWidget({
framed: false,
icon: 'undo',
classes: ['autosectionlink-button'],
invisibleLabel: true,
label: 'Restore previous section link'
}).toggle().on('click', () => {
let cache = button.getData();
input.setValue(input.getValue().replace(
/^(\/\*.*?\*\/)?\s*/,
cache[0] ? '/* ' + cache[0] + ' */ ' : ''
));
updatePreview(cache[0]);
cache.reverse();
}).on('toggle', () => {
input.$input.css('width', `calc(100% - ${button.$element.width()}px)`);
});
input.$input.after(button.$element);
let update = mw.util.debounce($diff => {
let lines = $textarea.textSelection('getContents').trimEnd().split('\n');
let firstLineNum, lastLineNum;
if (isOld) {
let i;
$diff.find('td:last-child').each(function () {
if (this.classList.contains('diff-lineno')) {
i = this.textContent.replace(/\D+/g, '') - 1;
} else if (this.classList.contains('diff-context')) {
i++;
} else if (this.classList.contains('diff-addedline')) {
i++;
if (!firstLineNum) {
firstLineNum = i;
}
lastLineNum = i;
} else if (this.classList.contains('diff-empty')) {
if (!firstLineNum) {
firstLineNum = i === 0 ? 1 : i;
}
lastLineNum = i;
}
});
} else {
let origLines = $textarea.prop('defaultValue').trimEnd().split('\n');
firstLineNum = lines.findIndex((line, i) => line !== origLines[i]) + 1;
if (!firstLineNum) {
firstLineNum = lines.length < origLines.length
? lines.length
: 1;
}
lastLineNum = lines.length;
for (let i = 1, x = lastLineNum, y = origLines.length;
(section ? i < x : i <= x) && lines[x - i] === origLines[y - i];
i++
) {
lastLineNum--;
}
}
let modLines = lines.slice(0, lastLineNum || 0);
let re = /^(={1,6})\s*(.+?)\s*\1\s*(?:<!--.+-->\s*)?$/;
let lowest = 7;
modLines.slice(firstLineNum).forEach(line => {
let match = line.match(re);
if (match?.[1].length < lowest) {
lowest = match[1].length;
}
});
let head;
modLines.slice(0, firstLineNum).reverse().some(line => {
let match = line.match(re);
if (match?.[1].length < lowest) {
head = match[2];
return true;
}
});
if (head) {
head = head
.replace(/'''(.+?)'''|\[\[:?(?:[^|\]]+\|)?([^\]]+)\]\]|<\/?(?:abbr|b|bdi|bdo|big|cite|code|data|del|dfn|em|font|i|ins|kbd|mark|nowiki|q|rb|ref|rp|rt|rtc|ruby|s|samp|small|span|strike|strong|sub|sup|templatestyles|time|translate|tt|u|var)(?:\s[^>]*)?>|<!--.*?-->|\[(?:https?:)?\/\/[^\s\[\]]+\s([^\]]+)\]/gi, '$1$2$3')
.replace(/''(.+?)''/g, '$1')
.trim();
} else if (modLines.length && lowest === 7 && section < 1 && (
section === '0' || lines.slice(modLines.length).some(line => re.test(line))
)) {
head = '';
}
let v = input.getValue();
let match = v.match(/^\/\*\s*(.+?)\s*\*\/\s*/);
let prev = match?.[1];
if (prev === head) return;
input.setValue((
head || head === '' ? '/* ' + head + ' */ ' : ''
) + (match ? v.slice(match[0].length) : v));
button.setData([prev, head]).toggle(true);
updatePreview(head);
}, 500);
let updatePreview = head => {
let $comment = $('.mw-summary-preview > .comment');
if (!$comment.length) return;
let url;
if (head) {
url = mw.util.getUrl() + '#' + head.replace(/[\s_]+/g, '_');
} else if (head === '') {
head = mw.messages.get('autocomment-top', '(top)');
url = mw.util.getUrl();
}
let paren = [...mw.messages.get('parentheses', '($1)')][0];
let $nodes = $comment.contents();
let $ac = $nodes.eq(1);
if ($nodes[0]?.textContent === paren && $ac.is('.autocomment:first-child')) {
if (head) {
$ac.children('a').attr('href', url).children('bdi').text(head);
} else {
if ($nodes[2]?.nodeType === 3) {
$nodes[2].textContent = $nodes[2].textContent.trimStart();
}
$ac.remove();
}
} else if (head) {
let rtl = document.body.classList.contains('sitedir-rtl');
$comment.prepend(
paren,
$('<span>').addClass('autocomment').append(
$('<a>').attr({
href: url,
title: mw.config.get('wgPageName').replaceAll('_', ' ')
}).text(rtl ? '←' : '→').append(
$('<bdi>').attr('dir', rtl ? 'rtl' : 'ltr').text(head)
),
mw.messages.get('colon-separator', ': ')
)
);
if ($nodes[0]?.nodeType === 3) {
let text = $nodes[0].textContent;
if (text.startsWith(paren)) {
text = text.slice(paren.length);
}
$nodes[0].textContent = ' ' + text;
}
}
};
if (isOld) {
mw.hook('wikipage.diff').add(update);
} else {
$textarea.on('input', update);
mw.hook('ext.CodeMirror.input').add(update);
update();
}
new mw.Api().loadMessagesIfMissing(['autocomment-top', 'colon-separator', 'parentheses']);
mw.loader.addStyleTag('.autosectionlink-button{position:absolute;top:0;right:0;margin:0}');
});
(mw.config.get('wgNamespaceNumber') === -1 || mw.config.exists('wgDiffNewId') ||
mw.config.get('wgAction') === 'history') &&
(function copyRevId() {
let handler = function (e) {
e.preventDefault();
let text = this.closest('.diff td')?.querySelector('[data-mw-revid]')?.dataset.mwRevid ||
this.closest('[data-mw-revid]')?.dataset.mwRevid;
if (!text) return;
let $input = $('<input>').attr({
type: 'text',
readonly: '',
style: 'position:fixed;top:-100%'
}).val(text).appendTo(document.body);
$input[0].select();
document.execCommand('copy');
$input.remove();
let copied;
try {
copied = document.execCommand('copy');
} catch {}
$input.remove();
if (copied) {
mw.notify(`Copied "${text}"`);
} else {
mw.notify('Copy failed', { type: 'error' });
}
};
mw.hook('wikipage.diff').add($diff => {
$diff.find('#mw-diff-otitle1, #mw-diff-ntitle1').append(
' (',
$('<a>').attr({
href: '#',
role: 'button'
}).on('click', handler).text('id'),
')'
);
});
if (mw.config.get('wgAction') !== 'history') return;
mw.hook('wikipage.content').add($content => {
$content.find('.mw-pager-tools').append(
$('<span>').append(
$('<a>').attr({
href: '#',
role: 'button'
}).on('click', handler).text('id')
)
);
});
}());
(mw.config.get('wgNamespaceNumber') === -1 || mw.config.exists('wgDiffNewId') ||
mw.config.get('wgAction') === 'history') &&
(() => {
let handler = async function (e) {
e.preventDefault();
let td = this.closest('.diff td');
let rev = td
? td.querySelector('[data-mw-revid]')?.dataset.mwRevid
: this.closest('[data-mw-revid]')?.dataset.mwRevid;
if (!rev) {
mw.notify(`Couldn't get the revision.`, {
tag: 'markasunseen',
type: 'error'
});
return;
}
let pn = td
? new URLSearchParams([...td.querySelectorAll('a')].pop()?.search).get('title')
: mw.config.get('wgPageName');
if (!pn) return;
await mw.loader.using('mediawiki.api');
let result = (await new mw.Api().postWithEditToken({
action: 'setnotificationtimestamp',
[td ? 'newerthanrevid' : 'torevid']: rev,
titles: pn,
formatversion: 2
})).setnotificationtimestamp?.[0];
if (Object.hasOwn(result, 'notificationtimestamp')) {
mw.notify(`Marked revisions ${td ? 'after' : 'since'} ${rev} as unseen.`, {
tag: 'markasunseen',
type: 'success'
});
} else if (result?.notwatched) {
mw.notify('This page is not on your watchlist.', {
tag: 'markasunseen',
type: 'warn'
});
} else {
mw.notify(`Couldn't mark revisions ${td ? 'after' : 'since'} ${rev} as unseen.`, {
tag: 'markasunseen',
type: 'error'
});
}
};
mw.hook('wikipage.diff').add($diff => {
$diff.find('#mw-diff-otitle1').append(
' (',
$('<a>').attr({
href: '#',
role: 'button',
title: 'Mark revisions after this one as unseen'
}).on('click', handler).text('unseen'),
')'
);
});
if (mw.config.get('wgAction') !== 'history') return;
mw.hook('wikipage.content').add($content => {
$content.find('.mw-pager-tools').append(
$('<span>').append(
$('<a>').attr({
href: '#',
role: 'button',
title: 'Mark revisions since this one as unseen'
}).on('click', handler).text('unseen')
)
);
});
})();
(mw.config.get('wgNamespaceNumber') === -1 || mw.config.exists('wgDiffNewId') ||
mw.config.get('wgAction') === 'history') &&
((mw.config.get('wgNamespaceNumber') % 2 || mw.config.get('wgNamespaceNumber') === 4) ||
(mw.config.get('wgWikiID') === 'metawiki' && mw.config.get('wgPageContentModel') === 'wikitext')) &&
mw.loader.using(['mediawiki.util', 'mediawiki.Title'], function copyUnsig() {
let handler = function (e) {
e.preventDefault();
let parent = this.closest('li, td');
let ts = parent.textContent.match(/\d\d:\d\d, \d\d? [A-Z][a-z]+ \d{4}/)?.[0];
if (!ts) return;
let user = parent.querySelector('.mw-userlink').textContent;
if (mw.util.isIPv6Address(user)) {
user = user.toUpperCase();
}
let temp = mw.util.isIPAddress(user) ? 'unsigned IP' : 'unsigned';
let text = `{{subst:${temp}|${user}|${ts}}}`;
let $input = $('<input>').attr({
type: 'text',
readonly: '',
style: 'position:fixed;top:-100%'
}).val(text).appendTo(document.body);
$input[0].select();
let copied;
try {
copied = document.execCommand('copy');
} catch {}
$input.remove();
if (copied) {
mw.notify(`Copied "${text}"`);
} else {
mw.notify('Copy failed', { type: 'error' });
}
};
mw.hook('wikipage.diff').add($diff => {
$diff.find('#mw-diff-otitle1, #mw-diff-ntitle1').filter(function () {
if (mw.config.get('wgWikiID') === 'metawiki') {
return true;
}
let link = this.querySelector('strong > a') ||
this.parentElement.querySelector('#differences-prevlink, #differences-nextlink');
if (!link) return;
let t = mw.Title.newFromText(mw.util.getParamValue('title', link.search));
return t.isTalkPage() || t.namespace === 4;
}).append(
' (',
$('<a>').attr({
href: '#',
role: 'button'
}).on('click', handler).text('sig'),
')'
);
});
if (mw.config.get('wgAction') !== 'history') return;
mw.hook('wikipage.content').add($content => {
$content.find('.mw-pager-tools').append(
$('<span>').append(
$('<a>').attr({
href: '#',
role: 'button'
}).on('click', handler).text('sig')
)
);
});
});
// mw.config.get('wgAction') === 'history' &&
// mw.loader.using('mediawiki.util', function () {
// mw.hook('wikipage.content').add($content => {
// $content.find('a.mw-changeslist-date').after(function () {
// return [
// ' (',
// $('<a>').attr('href', mw.util.getUrl(null, {
// action: 'edit',
// oldid: this.closest('li').dataset.mwRevid
// })).text('e'),
// ')'
// ];
// });
// });
// });
// ['Contributions', 'IPContributions', 'Blankpage'].includes(mw.config.get('wgCanonicalSpecialPageName')) &&
// mw.hook('wikipage.content').add($content => {
// $content.find('.mw-changeslist-history').parent().after(function () {
// return $('<span>').append(
// $('<a>').attr(
// 'href',
// this.firstElementChild.getAttribute('href').slice(0, -7) + 'edit'
// ).text('e')
// );
// });
// });
if (screen.width < 500) {
mw.loader.addStyleTag('@font-face{font-family:CharisW;src:url(//fontlibrary.org/assets/fonts/charis/10b9f94ed21e56254b068c91ead7ec6f/017b2b2ad86e09d3c22b8cf0dfc78247/CharisSILRegular.ttf) format(truetype)} @font-face{font-family:CharisW;font-weight:700;src:url(//fontlibrary.org/assets/fonts/charis/10b9f94ed21e56254b068c91ead7ec6f/6f5069ac6a300dad45383c952e92c573/CharisSILBold.ttf) format(truetype)} body .IPA{font-family:CharisW,sans-serif} .mw-highlight-lines > pre{width:120em}');
location.hash && $(() => {
let target = document.querySelector(':target');
if (target?.getBoundingClientRect().top < 0) {
target.scrollIntoView();
}
});
}
['edit', 'submit'].includes(mw.config.get('wgAction')) &&
(mw.config.exists('wgCodeEditorCurrentLanguage') ||
mw.config.exists('cmMode') && mw.config.get('cmMode') !== 'mediawiki') &&
(function saveNEdit() {
let notif;
$(document.body).on('click', '#wpSave', async function (e) {
if (e.ctrlKey || e.shiftKey || e.metaKey || e.altKey ||
e.originalEvent?.defaultPrevented
) {
return;
}
e.preventDefault();
await mw.loader.using([
'mediawiki.api', 'mediawiki.util', 'jquery.textSelection', 'oojs-ui-core'
]);
let button = OO.ui.infuse(this.parentElement).setDisabled(true);
let $textarea = $('#wpTextbox1');
let text = $textarea.textSelection('getContents');
let $summary = $('#wpSummary');
let formData = new FormData(this.form);
let promise = new mw.Api().postWithEditToken({
action: 'edit',
title: mw.config.get('wgPageName'),
text: text,
section: formData.get('wpSection') || undefined,
summary: $summary.textSelection('getContents'),
[$('#wpMinoredit').prop('checked') ? 'minor' : 'notminor']: 1,
baserevid: formData.get('editRevId'),
basetimestamp: formData.get('wpEdittime'),
starttimestamp: formData.get('wpStarttime'),
watchlist: $('#wpWatchthis').prop('checked') ? 'watch' : 'unwatch',
watchlistexpiry: formData.get('wpWatchlistExpiry') || undefined,
undo: formData.get('wpUndidRevision') || undefined,
undoafter: formData.get('wpUndoAfter') || undefined,
contentformat: formData.get('format'),
contentmodel: formData.get('model'),
assertuser: mw.config.get('wgUserName'),
formatversion: 2
});
notif?.close();
notif = null;
try {
let response = await promise;
if (response?.edit?.result !== 'Success') throw '';
$('#editform > input[name="wpUndidRevision"], #editform > input[name="wpUndoAfter"]').remove();
$textarea.data('origtext', text).prop('defaultValue', text);
$summary.val($summary.prop('defaultValue'));
if (mw.loader.getState('mediawiki.editRecovery.edit') === 'ready') {
let storage = mw.loader.moduleRegistry['mediawiki.editRecovery.edit'].packageExports['storage.js'];
storage.deleteData(mw.config.get('wgPageName'));
storage.closeDatabase();
}
notif = await mw.notify(response.edit.nochange ? 'No change' : [
document.createTextNode('Saved'),
$('<p>').append(
new OO.ui.ButtonWidget({
href: mw.util.getUrl(),
target: '_blank',
label: 'View'
}).$element,
new OO.ui.ButtonWidget({
href: mw.util.getUrl(null, {
diff: response.edit.newrevid || 'cur',
diffonly: 1
}),
target: '_blank',
label: 'Diff'
}).$element,
new OO.ui.ButtonWidget({
href: mw.util.getUrl(null, { action: 'history' }),
target: '_blank',
label: 'History'
}).$element
)[0]
], { tag: 'savenedit' });
} catch (error) {
notif = await mw.notify(error?.error?.info || error || 'Save failed', {
autoHideSeconds: 'long',
tag: 'savenedit',
type: 'error'
});
} finally {
button.setDisabled();
}
});
}());
mw.config.get('wgNamespaceNumber') === 0 &&
mw.config.get('wgAction') === 'view' &&
mw.config.get('wgCategories')?.some(c => c.endsWith(' actors') || c.endsWith(' actresses')) &&
$(() => {
let n = $.escapeSelector(mw.config.get('wgTitle').replace(/ \(.+\)$/, ''));
let $links = $(`.hatnote a[title$="${n} filmography"], .hatnote a[title*="${n} on "], .hatnote a[title*="${n} performances"]`);
if (!$links.length) return;
let titles = {};
$links = $links.filter(function () {
let text = this.textContent;
return !(titles[text] = Object.hasOwn(titles, text));
});
mw.notify(
$links.length === 1
? $links.clone()
: $('<ul>').append($links.clone().wrap('<li>').parent()),
{ autoHideSeconds: 'long' }
);
});
['Recentchanges', 'Recentchangeslinked', 'Watchlist'].includes(mw.config.get('wgCanonicalSpecialPageName')) &&
mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/RCMuter.js&action=raw&ctype=text/javascript', 's');
location.hostname.endsWith('.wikipedia.org') &&
mw.config.get('wgNamespaceNumber') % 2 === 0 &&
// mw.config.get('wgArticleId') &&
mw.config.get('wgPageContentModel') === 'wikitext' &&
$.when($.ready, mw.loader.using('mediawiki.util')).then(function refRenamer() {
if (!document.getElementById('p-tb')) return;
let messages = Object.assign({
portlet: 'RefRenamer',
loading: 'Loading RefRenamer...'
}, window.refrenamerMessages);
let clicked;
mw.util.addPortletLink('p-tb', '#', messages.portlet, 't-refrenamer').firstElementChild.addEventListener('click', e => {
e.preventDefault();
if (clicked) {
if (window.refRenamer) {
window.refRenamer();
}
return;
}
clicked = true;
mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Nardog/sandbox6.js&action=raw&ctype=text/javascript');
mw.notify(messages.loading, {
autoHideSeconds: 'long',
tag: 'refrenamer'
});
});
});
if (['edit', 'submit'].includes(mw.config.get('wgAction'))) {
mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/ExpandContractions.js&action=raw&ctype=text/javascript', 's');
}
['edit', 'submit'].includes(mw.config.get('wgAction')) &&
$.when(
$.ajax(
'//tools-static.wmflabs.org/meta/scripts/pathoschild.templatescript.js',
{ dataType: 'script', cache: true }
),
mw.loader.using(['mediawiki.api', 'mediawiki.Title'])
).then(function unpipe() {
let replace = data => {
Object.entries(data.tokens).forEach(([source, ts]) => {
if (!ts.some(t => data.redirs[t.pn])) return;
let links = ts.map(t => {
let r = data.redirs[t.pn] || {};
return [r.to || t.pn, t.fragment || r.tofragment].join('#');
});
if (links[0] !== links[1]) return;
data.repl = data.repl.split(source).join(source.replace(/^[^|]+\|/, '[['));
});
if (data.repl === data.orig) {
mw.notify('No change.');
return;
}
data.editor
.set(data.repl)
.appendEditSummary('[[WP:NOPIPE|unpiped]] links using [[User:Nardog/Unpipe|script]]')
.options({ minor: true })
.clickDiff();
};
let query = (titles, data) => {
if (!titles.length) {
replace(data);
return;
}
new mw.Api().post({
action: 'query',
titles: titles.slice(0, 50),
redirects: 1,
formatversion: 2
}, {
headers: { 'Promise-Non-Write-API-Action': 1 }
}).then(response => {
(response.query.redirects || []).forEach(r => {
data.redirs[r.from] = r;
});
query(titles.slice(50), data);
});
};
window.pathoschild.TemplateScript.add([{
name: 'Unpipe links',
script: editor => {
let orig = editor.get(), repl = orig, tokens = {};
let titles = new Set();
let match, re = /\[\[([^|\]]+)\|([^\]]+)\]\]/g;
while ((match = re.exec(orig))) {
if (tokens[match[0]]) continue;
let ts = match.slice(1).map(s => mw.Title.newFromText(s));
if (ts.some(t => !t || t.namespace)) continue;
let pns = ts.map(t => t.toText());
if (pns[0].endsWith(' (disambiguation)')) continue;
if (pns[0] === pns[1] && ts[0].fragment === ts[1].fragment) {
repl = repl.split(match[0]).join(`[[${match[2]}]]`);
continue;
}
tokens[match[0]] = pns.map((pn, i) => {
titles.add(pn);
return { pn, fragment: ts[i].fragment };
});
}
query([...titles], { editor, orig, repl, tokens, redirs: {} });
}
}]);
});
mw.config.get('wgAction') !== 'history' &&
mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/CopyCodeBlock.js&action=raw&ctype=text/javascript', 's');
mw.config.exists('wgDiffNewId') &&
mw.config.get('wgDiscussionToolsFeaturesEnabled') &&
(function () {
let data = {}, clickHandler, autoClear, run;
window.dtc = data;
let highlight = revId => {
let ids = data[revId];
if (!ids || !ids.length) return;
mw.loader.moduleRegistry['ext.discussionTools.init'].packageExports['highlighter.js']
.highlightNewComments(mw.dt.pageThreads, true, ids);
if (clickHandler) {
$(document.body).off('click', clickHandler);
return;
}
$._data(document.body, 'events').click.some(o => {
if (String(o.handler).includes('highlighter.clearHighlightTargetComment(')) {
$(document.body).off('click', o.handler);
clickHandler = o.handler;
return true;
}
});
$._data(window, 'events').popstate.some(o => {
if (String(o.handler).includes('highlighter.highlightTargetComment(')) {
$(window).off('popstate', o.handler);
return true;
}
});
};
let scroll = revId => {
let ids = data[revId];
if (!ids || !ids.length) return;
let yToSpan = Object.fromEntries(
ids.map(id => document.getElementById(id)).filter(Boolean)
.map(span => [span.getBoundingClientRect().y, span])
);
let ys = Object.keys(yToSpan);
if (!ys.length) return;
let lower = ys.filter(y => y > 10);
if (!lower.length ||
Math.max(...lower) < document.documentElement.clientHeight
) {
yToSpan[Math.min(...ys)].scrollIntoView({ behavior: 'smooth' });
} else {
yToSpan[Math.min(...lower)].scrollIntoView({ behavior: 'smooth' });
}
};
let scrollToNext = function (e) {
e.preventDefault();
let revId = mw.config.get('wgDiffOldId');
if (!revId || !data[revId]) return;
let i = data[revId].indexOf(
this.closest('[data-mw-thread-id]').dataset.mwThreadId
);
if (i === -1) return;
let next = data[revId][i + 1] || data[revId][0];
document.getElementById(next).scrollIntoView({ behavior: 'smooth' });
};
mw.hook('wikipage.content').add(async $content => {
let revId = mw.config.get('wgDiffOldId');
if (!revId) return;
let param = new URLSearchParams(location.search).get('diffonly');
if (param && param !== '0') return;
if (data[revId]) {
highlight(revId);
return;
}
await mw.loader.using(['ext.discussionTools.init', 'mediawiki.util']);
let begin = Date.parse($('#mw-diff-otitle1 .mw-diff-timestamp').data('timestamp'));
data[revId] = mw.dt.pageThreads.getCommentItems()
.filter(c => c.timestamp > begin).map(c => c.id);
if (!data[revId].length) return;
await new Promise(setTimeout);
highlight(revId);
$content.find('.ext-discussiontools-init-replylink-buttons').filter(function () {
return data[revId].includes(this.dataset.mwThreadId);
}).append(
$('<a>').attr({
href: '#',
role: 'button'
}).text('next').on('click', scrollToNext)
);
if (run || !document.getElementById('p-tb')) return;
run = true;
let portlet = mw.util.addPortletLink('p-tb', '#', 'Scroll to next', 't-scrolltonext');
portlet.firstElementChild.addEventListener('click', e => {
e.preventDefault();
scroll(mw.config.get('wgDiffOldId'));
});
mw.util.addPortletLink('p-tb', '#', 'Toggle highlight', 't-togglehighlight').firstElementChild.addEventListener('click', e => {
e.preventDefault();
autoClear = !autoClear;
if (autoClear) {
$(document.body).on('click', clickHandler)[0].click();
} else {
highlight(mw.config.get('wgDiffOldId'));
}
});
mw.loader.addStyleTag(`#t-scrolltonext{position:fixed;bottom:${portlet.clientHeight}px} #t-togglehighlight{position:fixed;bottom:0}`);
});
}());
mw.config.get('wgNamespaceNumber') === 6 &&
mw.config.get('wgAction') === 'view' &&
mw.hook('wikipage.content').add($content => {
$content.find('.filehistory .mw-usertoollinks-contribs').after(function () {
return [
' | ',
$('<a>').attr('href', `${
mw.config.get('wgScript')
}?title=Special:ListFiles/${
this.pathname.replace(/^.+\//, '')
}&ilshowall=1`).text('uploads')
];
});
});
['edit', 'submit'].includes(mw.config.get('wgAction')) &&
mw.config.get('wgArticleId') &&
mw.config.get('wgPageContentModel') === 'wikitext' &&
$(function () {
if (!$('input[name="wpSection"]').val()) return;
mw.hook('wikipage.content').add(async $content => {
let $refs = $content.find('.mw-ext-cite-warning-sectionpreview_no_text');
if (!$refs.length) return;
let ids = {};
$refs.each(function () {
ids[this.closest('[id]').id.replace(/-\d+$/, '')] = this;
});
let response = await $.get(`/api/rest_v1/page/html/${encodeURIComponent(mw.config.get('wgPageName'))}`);
$($.parseHTML(response)).find('.mw-reference-text').each(function () {
ids[this.id.replace(/^mw-reference-text-|-\d+$/g, '')]?.replaceWith(this);
});
});
});
mw.hook('moremenu.ready').add(config => {
$('#mm-page-purge-cache > a').on('click', e => {
e.preventDefault();
new mw.Api().post({
action: 'purge',
forcelinkupdate: 1,
titles: config.page.name,
formatversion: 2
}).then(() => {
location.href = mw.util.getUrl();
});
});
$('#mm-page-search-search-history-wikiblame > a').on('click', function (e) {
e.preventDefault();
let q = prompt();
if (q === null) return;
let href = this.href;
if (q) {
let removal = q[0] === '!';
if (removal) {
q = q.slice(1);
}
href += '&needle=' + encodeURIComponent(q);
if (removal) {
href += '&binary_search_inverse=on';
}
href += '&force_wikitags=on';
}
open(href, '_blank');
});
$('#mm-page-expand-templates > a').on('click auxclick', function (e) {
if (e.which > 2) return;
e.preventDefault();
let revId = mw.config.get('wgRevisionId') || Number($('input[name=oldid]').val());
let url = revId
? '/w/rest.php/v1/revision/' + revId
: '/w/rest.php/v1/page/' + config.page.encodedName;
$.get(url).then(response => {
$('<form>').attr({
method: 'post',
action: this.href,
target: '_blank'
}).append(
[
['wpInput', response.source],
['wpContextTitle', config.page.name],
['wpRemoveComments', 1]
].map(([n, v]) => $('<input>').attr({
name: n,
type: 'hidden'
}).val(v))
).appendTo(document.body).trigger('submit').remove();
});
});
});
mw.config.get('wgCanonicalSpecialPageName') === 'ApiSandbox' &&
mw.hook('apisandbox.formatRequest').add((...args) => {
args[4].complete = function () {
setTimeout(() => {
mw.hook('wikipage.content').fire($('.oo-ui-pageLayout-active'));
}, 100);
};
});
['edit', 'submit'].includes(mw.config.get('wgAction')) &&
mw.config.get('wgArticleId') &&
mw.config.get('wgPageContentModel') === 'wikitext' &&
$.when($.ready, mw.loader.using('mediawiki.storage')).then(async () => {
let infuseAndCall = (query, method, ...args) => {
let $widget = $(query);
if ($widget.length) {
return OO.ui.infuse($widget)[method](...args);
}
};
let section = $('input[name="wpSection"]').val();
if (section) {
let $textarea = $('#wpTextbox1');
let source = $textarea.prop('defaultValue');
let save = () => {
let newSource = $textarea.textSelection('getContents');
if (newSource === source) {
mw.storage.session.remove('editfullpage');
} else {
mw.storage.session.setObject('editfullpage', [
mw.config.get('wgPageName'),
section,
newSource.trimEnd(),
infuseAndCall('#wpSummaryWidget', 'getValue') || '',
Number(infuseAndCall('#wpMinoreditWidget', 'isSelected')) || 0,
Number(infuseAndCall('#wpWatchthisWidget', 'isSelected')) || 0,
infuseAndCall('#wpWatchlistExpiryWidget', 'getValue') || 'infinite'
]);
}
};
await mw.loader.using(['jquery.textSelection', 'oojs-ui-core']);
setInterval(() => {
mw.requestIdleCallback(save);
}, 3000);
window.addEventListener('beforeunload', save);
return;
}
let data = mw.storage.session.getObject('editfullpage');
mw.storage.session.remove('editfullpage');
console.log(data);
if (!data || data[0] !== mw.config.get('wgPageName')) return;
let isNew = data[1] === 'new';
let isLead = data[1] === '0';
let $textarea = $('#wpTextbox1');
let source = $textarea.prop('defaultValue');
let newSource, start, msg, notifOpts = { autoHideSeconds: 'long' };
let orig = [];
if (isNew) {
await mw.loader.using(['jquery.textSelection', 'oojs-ui-core']);
newSource = source + (data[3] ? '\n== ' + data[3] + ' ==\n\n' : '\n') + data[2] + '\n';
start = source.length;
} else {
await mw.loader.using(['jquery.textSelection', 'oojs-ui-core', 'mediawiki.api']);
let { parse } = await new mw.Api().get({
action: 'parse',
page: mw.config.get('wgPageName'),
prop: 'sections',
wrapoutputclass: '',
disablelimitreport: 1,
disableeditsection: 1,
disabletoc: 1,
formatversion: 2
});
let target = !isLead && parse.sections.find(s => s.index === data[1]);
if (isLead || target) {
let next = parse.sections.find(s => s.index - 1 === Number(data[1]));
newSource = (isLead ? '' : [...source].slice(0, target.byteoffset)).join('') +
data[2] + (next ? '\n\n' + [...source].slice(next.byteoffset).join('') : '\n');
start = isLead ? 0 : target.byteoffset;
} else {
newSource = source + '\n\n' + data[2] + '\n';
start = source.length;
msg = `Section restored. Couldn't find the section. The source is appended at bottom.`;
notifOpts.type = 'warn';
}
orig[0] = infuseAndCall('#wpSummaryWidget', 'getValue');
infuseAndCall('#wpSummaryWidget', 'setValue', data[3]);
}
$textarea.textSelection('setContents', newSource);
orig[1] = infuseAndCall('#wpMinoreditWidget', 'getSelected');
infuseAndCall('#wpMinoreditWidget', 'setSelected', data[4]);
orig[2] = infuseAndCall('#wpWatchthisWidget', 'getSelected');
infuseAndCall('#wpWatchthisWidget', 'setSelected', data[5]);
orig[3] = infuseAndCall('#wpWatchlistExpiryWidget', 'getValue');
infuseAndCall('#wpWatchlistExpiryWidget', 'setValue', data[6]);
setTimeout(() => {
$textarea.textSelection('setSelection', { start });
});
let notif = await mw.notify($([
document.createTextNode(msg || 'Section restored.'),
$('<p>').append(
new OO.ui.ButtonWidget({
flags: 'destructive',
label: 'Discard'
}).on('click', () => {
$textarea.textSelection('setContents', source);
if (orig[0]) {
infuseAndCall('#wpSummaryWidget', 'setValue', orig[0]);
}
infuseAndCall('#wpMinoreditWidget', 'setSelected', orig[1]);
infuseAndCall('#wpWatchthisWidget', 'setSelected', orig[2]);
infuseAndCall('#wpWatchlistExpiryWidget', 'setValue', orig[3]);
notif.close();
}).$element
)[0]
]), notifOpts);
});
mw.config.exists('wgPostEdit') &&
mw.loader.using('mediawiki.storage', () => {
mw.storage.session.remove('editfullpage');
});
mw.config.get('wgAction') === 'history' &&
mw.hook('wikipage.content').add(async $content => {
if (!$content.has('.mw-history-line-updated').length) return;
let href = $content.find('a.mw-history-histlinks-current:not(.mw-history-line-updated a)').attr('href');
if (!href) {
await mw.loader.using(['mediawiki.api', 'mediawiki.util']);
let page = (await new mw.Api().get({
action: 'query',
titles: mw.config.get('wgPageName'),
prop: 'info',
inprop: 'notificationtimestamp',
formatversion: 2
})).query.pages[0];
let rev = (await new mw.Api().get({
action: 'query',
titles: page.title,
prop: 'revisions',
rvprop: 'ids',
rvlimit: 1,
rvstart: Date.parse(page.notificationtimestamp) / 1000 - 1,
formatversion: 2
})).query.pages[0].revisions?.[0].revid;
if (!rev || rev >= page.lastrevid) return;
href = mw.util.getUrl(page.title, { diff: page.lastrevid, oldid: rev });
}
$content.find('.mw-history-compareselectedversions-button').first().after(
' ',
$('<a>').attr({
class: 'unseendiff',
href: href
}).text('unseen')
);
});
(async () => {
let cspn = mw.config.get('wgCanonicalSpecialPageName');
let isBp = cspn === 'Blankpage';
if (!isBp && cspn !== 'Watchlist') return;
await mw.loader.using('mediawiki.util');
let notify = async (text, options, pn) => {
let msg = [document.createTextNode(text)];
if (pn) {
msg.push(
$('<p>').append(
$('<a>').attr('href', mw.util.getUrl(pn)).text(pn),
' ',
$('<span>').addClass('mw-changeslist-links').append(
$('<span>').append(
$('<a>')
.attr('href', mw.util.getUrl(pn, { action: 'edit' }))
.text('edit')
),
$('<span>').append(
$('<a>')
.attr('href', mw.util.getUrl(pn, { action: 'history' }))
.text('history')
)
)
)[0]
);
}
if (isBp) {
await $.ready;
$('#mw-content-text').html(msg);
} else {
return mw.notify(msg, Object.assign(options || {}, {
tag: 'unseendiff'
}));
}
};
let getUrl = async pn => {
await mw.loader.using('mediawiki.api');
let page = (await new mw.Api().get({
action: 'query',
titles: pn,
prop: 'info',
inprop: 'notificationtimestamp',
formatversion: 2
})).query.pages[0];
if (!page.notificationtimestamp) {
notify(`Couldn't get the last seen time.`, {
type: 'warn'
}, pn);
return;
}
let rev = (await new mw.Api().get({
action: 'query',
titles: pn,
prop: 'revisions',
rvprop: 'ids',
rvlimit: 1,
rvstart: Date.parse(page.notificationtimestamp) / 1000 - 1,
formatversion: 2
})).query.pages[0].revisions?.[0].revid;
if (rev === page.lastrevid) {
notify('Already seen.', {
type: 'warn'
}, pn);
return;
}
if (!rev) {
rev = (await new mw.Api().get({
action: 'query',
titles: pn,
prop: 'revisions',
rvprop: 'ids',
rvlimit: 1,
rvstart: Date.parse(page.notificationtimestamp) / 1000 - 1,
rvdir: 'newer',
formatversion: 2
})).query.pages[0].revisions?.[0].revid;
if (!rev) {
notify(`Couldn't get the last seen revision.`, {
type: 'warn'
}, pn);
return;
}
}
if (rev > page.lastrevid) {
notify(`Invalid rev for "${pn}" (rev: ${rev}, lastrevid: ${page.lastrevid})`, {
autoHideSeconds: 'long',
type: 'warn'
}, pn);
return;
}
return mw.util.getUrl(page.title, { diff: page.lastrevid, oldid: rev });
};
if (isBp) {
let pn = mw.config.get('wgTitle').match(/^[^/]+\/unseendiff\/(.+)$/)?.[1];
if (!pn) return;
notify('Loading...', null, pn);
let href = await getUrl(pn);
if (!href) return;
notify('Redirecting...', null, pn);
location.href = href;
return;
}
let handler = async function (e) {
if (e.which > 2) return;
e.preventDefault();
let pn = this.dataset.pn;
if (!pn) {
notify(`Couldn't get the page name.`, {
type: 'error'
});
return;
}
let notifPromise = notify('Loading...', {
autoHideSeconds: 'long'
});
let href = await getUrl(pn);
if (!href) return;
$(`.unseendiff-loader[data-pn="${$.escapeSelector(pn)}"]`).attr({
class: 'unseendiff',
href: href,
target: '_blank'
}).off('click auxclick', handler);
if (e.type === 'auxclick' || e.ctrlKey || e.metaKey || e.shiftKey) {
open(href);
} else {
this.click();
}
(await notifPromise).close();
};
mw.hook('wikipage.content').add($content => {
$content.find(
'.mw-changeslist-src-mw-edit.mw-changeslist-watchedunseen:not(.mw-changeslist-watchedseen) .mw-changeslist-line-inner'
).each(function () {
let pn = this.dataset.targetPage ||
this.closest('[data-target-page]')?.dataset.targetPage ||
this.closest('table.mw-enhanced-rc')?.querySelector('[data-target-page]')?.dataset.targetPage;
if (!pn) return;
$('<span>').append(
$('<a>').attr({
class: 'unseendiff-loader',
href: mw.util.getUrl(`Special:BlankPage/unseendiff/${pn}`),
'data-pn': pn
}).on('click auxclick', handler).text('unseen')
).appendTo(
[...this.querySelectorAll('.mw-pager-tools')].pop() ||
$('<span>').addClass('mw-changeslist-links mw-pager-tools').appendTo(this).before(' ')
);
});
});
})();
['Contributions', 'IPContributions', 'Blankpage'].includes(mw.config.get('wgCanonicalSpecialPageName')) &&
mw.loader.using('mediawiki.util', () => {
let watched = new Set();
let query = async lis => {
let titles = Object.keys(lis).slice(0, 50);
if (!titles.length) return;
await mw.loader.using('mediawiki.api');
let pages = (await new mw.Api().post({
action: 'query',
titles: titles,
prop: 'info',
inprop: 'notificationtimestamp|watched',
formatversion: 2
}, {
headers: { 'Promise-Non-Write-API-Action': 1 }
})).query.pages;
for (let page of pages) {
if (!Object.hasOwn(lis, page.title)) continue;
if (page.watched) {
watched.add(page);
$(lis[page.title]).addClass('watched');
}
if (!page.notificationtimestamp) continue;
let rev = (await new mw.Api().get({
action: 'query',
titles: page.title,
prop: 'revisions',
rvprop: 'ids',
rvlimit: 1,
rvstart: Date.parse(page.notificationtimestamp) / 1000 - 1,
formatversion: 2
})).query.pages[0].revisions?.[0].revid;
if (!rev || rev === page.lastrevid) continue;
if (rev > page.lastrevid) {
mw.notify($([
document.createTextNode('Invalid rev for "'),
$('<a>').attr({
href: mw.util.getUrl(page.title, { action: 'history' }),
target: '_blank'
}).text(page.title)[0],
document.createTextNode(`" (rev: ${rev}, lastrevid: ${page.lastrevid})`),
]), {
autoHideSeconds: 'long',
type: 'warn'
});
continue;
}
$('<span>').append(
$('<a>').attr({
class: 'unseendiff',
href: mw.util.getUrl(page.title, {
diff: page.lastrevid,
oldid: rev
})
}).text('unseen')
).appendTo(
lis[page.title].map(li => (
[...li.querySelectorAll(':scope > .mw-pager-tools')].pop() ||
$('<span>').addClass('mw-changeslist-links mw-pager-tools').appendTo(li).before(' ')
))
);
}
titles.forEach(title => {
delete lis[title];
});
query(lis);
};
mw.hook('wikipage.content').add($content => {
$content.find(
'.mw-contributions-list > li:not(.mw-contributions-current)[data-mw-revid]'
).each(function () {
let link = this.querySelector('a.mw-changeslist-date, a.mw-changeslist-history');
let pn = link ? new URLSearchParams(link.search).get('title') : '';
$('<span>').append(
$('<a>').attr({
class: 'mw-changeslist-diff',
href: mw.util.getUrl(pn, {
diff: 'cur',
oldid: this.dataset.mwRevid
})
}).text('cur')
).appendTo(
[...this.querySelectorAll(':scope > .mw-pager-tools')].pop() ||
$('<span>').addClass('mw-changeslist-links mw-pager-tools').appendTo(this).before(' ')
);
});
if (mw.config.get('wgWikiID') === 'wikidatawiki') return;
let lis = {};
$content.find('.mw-contributions-title').each(function () {
let title = this.textContent;
if (!Object.hasOwn(lis, title)) {
lis[title] = [];
}
lis[title].push(this.closest('li'));
});
Object.keys(lis).forEach(title => {
if (watched.has(title)) {
$(lis[title]).addClass('watched');
delete lis[title];
}
});
query(lis);
});
});
['edit', 'submit'].includes(mw.config.get('wgAction')) &&
mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Nardog/sandbox9.js&action=raw&ctype=text/javascript');
mw.config.get('wgWikiID') === 'metawiki' &&
(async () => {
let css = mw.loader.addStyleTag(`.wishtitle {
font-size: 90%;
font-style: italic;
word-break: break-word;
}
.wishtitle > a {
color: var(--color-warning, #886425);
}
.wishtitle > a:visited {
color: var(--border-color-warning--hover, #735421);
}
.wishtitle-declined > a {
text-decoration: line-through;
}
.wishtitle-declined > a:hover,
.wishtitle-declined > a:focus,
.mw-underline-always .wishtitle-declined > a {
text-decoration: line-through underline;
}
#watchlist-edit-form .wishtitle {
display: inline-block;
}
.mw-search-result-heading > .wishtitle,
.catchangesviewer-table .wishtitle {
display: block;
}
.catchangesviewer-table:has(.wishtitle) {
white-space: wrap;
}`);
let lang = mw.config.get('wgUserLanguage');
let titles;
let loadTitles = async () => {
await mw.loader.using('mediawiki.storage');
titles = titles || mw.storage.getObject('wishtitles');
if (titles?.lang !== lang) {
titles = { lang, w: [], fa: [] };
}
};
let updateTitles = async (crwstatuses, crwcontinue) => {
await mw.loader.using('mediawiki.api');
let params = {
action: 'query',
list: 'communityrequests-wishes',
crwlang: lang,
crwstatuses: crwstatuses,
crwprop: 'title|updated',
crwsort: 'updated',
crwdir: 'ascending',
crwlimit: 'max',
crwcontinue: crwcontinue,
formatversion: 2
};
if (!crwcontinue && !crwstatuses && titles._) {
params.crwcontinue = `|${titles._}|0`;
}
let response = await new mw.Api().get(params);
let wishes = response?.query?.['communityrequests-wishes'];
if (wishes?.length) {
let $span = $('<span>');
wishes.forEach(w => {
let id = w.crwtitle.match(/^Community Wishlist\/W(\d+)/)?.[1];
if (!id) return;
titles.w[id - 1] = $span.html(w.title).text();
if (crwstatuses === 'declined') {
(titles.wd = titles.wd || []).push(id - 1);
}
let faId = w.crfatitle?.match(/^Community Wishlist\/FA(\d+)/)?.[1];
if (!faId) return;
titles.fa[faId - 1] = w.focusareatitle;
});
if (!crwstatuses) {
titles._ = wishes.at(-1).updated.replace(/\D/g, '');
}
}
let expiry = 86400;
if (crwstatuses || crwcontinue) {
let prev = mw.storage.getObject('_EXPIRY_wishtitles');
if (prev) {
expiry = Math.round(Date.now() / 1000) + 86400 - prev;
}
}
mw.storage.setObject('wishtitles', titles, expiry);
crwcontinue = response?.continue?.crwcontinue;
if (crwcontinue) {
await updateTitles(crwstatuses, crwcontinue);
}
};
let getTitle = id => (
id[0] === 'W' ? titles.w[id.slice(1) - 1] : titles.fa[id.slice(2) - 1]
);
let renderTitle = (title, id, tag = 'span') => {
let classes = 'wishtitle';
if (id[0] === 'W' && titles.wd?.includes(id.slice(1) - 1)) {
classes += ' wishtitle-declined';
}
return $(`<${tag}>`).addClass(classes).append(
$('<a>').attr({
href: `/wiki/Community_Wishlist/${id}`,
title: `Community Wishlist/${id}`
}).text(title)
);
};
let callback = ([id, links]) => {
let title = getTitle(id);
if (!title) {
return true;
}
$(links).after(' ', renderTitle(title, id));
};
let selector = '.mw-changeslist-title, ' +
'.mw-changeslist-log-entry > a:not(.mw-userlink), ' +
'.mw-changeslist-line.mw-changeslist-src-mw-categorize :is(.mw-changeslist-line-inner, .mw-changeslist-line-inner-comment, .mw-enhanced-rc-nested) > .comment > a, ' +
'#watchlist-edit-form .cdx-table td > label > a, ' +
'.mw-search-result-heading > a:not(:has(> .ext-communityrequests-entity-link--label)), ' +
'.mw-contributions-title, ' +
'#mw-whatlinkshere-list li > bdi > a, ' +
'.mw-allpages-chunk > li > a, ' +
'.mw-prefixindex-list > li > a, ' +
'.mw-logevent-loglines > li > a, ' +
'#mw-pages li > a, ' +
'.catchangesviewer-table td:nth-child(3) > a';
mw.hook('wikipage.content').add(async $content => {
let links = {};
$content.find('a').each(function () {
if (!this.matches(selector)) return;
let id = this.textContent.match(
/^(?:Talk:|Translations:)?Community Wishlist\/((?:W|FA)\d+)/
)?.[1];
if (!id) return;
(links[id] = links[id] || []).push(this);
});
links = Object.entries(links);
if (!links.length) return;
await loadTitles();
links = links.filter(callback);
if (!links.length) return;
await updateTitles();
links = links.filter(callback);
if (!links.length) return;
await updateTitles('declined');
links.forEach(callback);
});
let pn = mw.config.get('wgRelevantPageName');
let id = pn.match(/^(?:Talk:|Translations:)?Community_Wishlist\/((?:W|FA)\d+)/)?.[1];
if (!id) return;
await $.ready;
let extTitle = document.querySelector('.ext-communityrequests-wish--title');
if (extTitle && $('.mw-pt-languages-selected').attr('lang') === lang) return;
await loadTitles();
let title = getTitle(id);
if (!title) {
await updateTitles();
title = getTitle(id);
if (!title) {
await updateTitles('declined');
title = getTitle(id);
if (!title) return;
}
}
let $title = renderTitle(title, id, 'div');
if (mw.config.get('skin') === 'vector-2022') {
$title.prependTo('.vector-page-toolbar');
} else {
$title.insertAfter('#firstHeading');
}
css.textContent += ' .ext-communityrequests-entity-talk-header{display:none}';
if (extTitle) return;
document.title = document.title.replace(
pn.replaceAll('_', ' '),
`${pn.replace(`Community_Wishlist/${id}`, title)} ($&)`
);
})();
mw.config.get('wgWikiID') === 'metawiki' &&
mw.hook('wikipage.watchlistChange').add(async (isWatched, expiry) => {
if (![0, 1].includes(mw.config.get('wgNamespaceNumber'))) return;
let title = mw.config.get('wgTitle');
if (!/^Community Wishlist\/(?:W|FA)\d+$/.test(title)) return;
if (isWatched) {
await new mw.Api().watch(title + '/Votes', expiry);
mw.notify('Watching /Votes too.');
} else {
await new mw.Api().unwatch(title + '/Votes');
mw.notify('Unwatched /Votes too.');
}
});
['edit', 'submit'].includes(mw.config.get('wgAction')) &&
$(async () => {
let $input = $('#wpTemplateSandboxTemplate');
if (!$input.length) return;
mw.loader.addStyleTag('#templatesandbox-editform .oo-ui-fieldLayout{max-width:50em} #templatesandbox-editform .oo-ui-fieldLayout-field{flex-grow:999}');
let makeTemplateField = () => new OO.ui.FieldLayout(
new mw.widgets.TitleInputWidget({
inputId: 'wpTemplateSandboxTemplate',
name: 'wpTemplateSandboxTemplate',
showMissing: false,
value: $input.val()
}),
{ label: 'Template name:' }
);
if (mw.loader.getState('ext.TemplateSandbox') !== 'registered') {
await mw.loader.using('mediawiki.widgets');
$input.parent().replaceWith(makeTemplateField().$element);
return;
}
let require = await mw.loader.using([
'ext.TemplateSandbox.TemplateSandboxTitleWidget',
'ext.TemplateSandbox.styles', 'jquery.makeCollapsible', 'user.options'
]);
let widget = new (require('ext.TemplateSandbox.TemplateSandboxTitleWidget'))({
$overlay: true,
id: 'wpTemplateSandboxPage',
maxLength: 255,
name: 'wpTemplateSandboxPage',
placeholder: 'Page title',
required: false,
tabIndex: 10,
templateTitleFunc: () => $('#wpTemplateSandboxTemplate').val()
});
widget.$element.attr('data-ooui', '{"_":"mw.widgets.TemplateSandboxTitleWidget"}')
.data('oouiInfused', widget);
let fieldset = new OO.ui.FieldsetLayout({
classes: ['mw-templatesandbox-fieldset', 'mw-collapsed'],
id: 'templatesandbox-editform',
items: [
makeTemplateField(),
new OO.ui.ActionFieldLayout(
widget,
new OO.ui.ButtonInputWidget({
id: 'wpTemplateSandboxPreview',
name: 'wpTemplateSandboxPreview',
label: 'Show preview',
tabIndex: 10,
type: 'submit',
useInputTag: true
}),
{ align: 'top' }
)
],
label: 'Preview page with this template'
});
fieldset.$label.append(' ', $('<span>').addClass('mw-collapsible-toggle-placeholder'));
fieldset.$group.addClass('mw-collapsible-content');
$('#templatesandbox-editform').replaceWith(fieldset.$element.makeCollapsible());
let modules = ['ext.TemplateSandbox'];
if (Number(mw.user.options.get('uselivepreview'))) {
modules.push('ext.TemplateSandbox.preview');
}
mw.loader.load(modules);
});
mw.config.get('wgWikiID') === 'enwiki' &&
mw.config.get('wgCanonicalSpecialPageName') === 'Watchlist' &&
(async () => {
mw.loader.addStyleTag('.xfdnotifier-sublinks::before{content:" ["} .xfdnotifier-sublinks::after{content:"]"} .xfdnotifier-sublinks > span:not(:first-child)::before{content:"\\2009·\\2009"} .mw-portlet.vector-menu[id^="p-xfdnotifier-"] a{display:inline}');
await mw.loader.using(['mediawiki.api', 'mediawiki.Title', 'mediawiki.storage']);
let xfds = [
{
id: 'rm',
label: 'RM',
full: 'Requested moves',
cat: 'Requested moves',
},
{
id: 'rmt',
label: 'RM/T',
full: 'Requested moves (technical)',
page: 'Wikipedia:Requested_moves/Technical_requests',
titleExtractor: $page => (
$page.find(`[data-mw*='"wt":"RMassist/core"']`).closest('li').map(function () {
return this.querySelector('a[rel="mw:WikiLink"]')?.title;
}).get()
)
},
{
id: 'afd',
label: 'AfD',
full: 'Articles for deletion',
cat: 'Articles for deletion'
},
{
id: 'mfd',
label: 'MfD',
full: 'Miscellaneous for deletion',
cat: 'Miscellaneous pages for deletion'
},
{
id: 'tfd',
label: 'TfD',
full: 'Templates for deletion',
cat: 'Templates for deletion'
},
{
id: 'tfm',
label: 'TfM',
full: 'Templates for merging',
cat: 'Templates for merging'
},
{
id: 'cfd',
label: 'CfD',
full: 'Categories for deletion',
cat: 'Categories for deletion'
},
{
id: 'cfr',
label: 'CfR',
full: 'Categories for renaming',
cat: 'Categories for renaming'
},
{
id: 'cfsr',
label: 'CfSR',
full: 'Categories for speedy renaming',
cat: 'Categories for speedy renaming'
},
{
id: 'cfm',
label: 'CfM',
full: 'Categories for merging',
cat: 'Categories for merging'
},
{
id: 'cfs',
label: 'CfS',
full: 'Categories for splitting',
cat: 'Categories for splitting'
},
{
id: 'cfl',
label: 'CfL',
full: 'Categories for listifying',
cat: 'Categories for listifying'
},
{
id: 'cfc',
label: 'CfC',
full: 'Categories for conversion',
cat: 'Categories for conversion'
},
{
id: 'cfgd',
label: 'CfGD',
full: 'Categories for general discussion',
cat: 'Categories for general discussion'
},
{
id: 'ffd',
label: 'FfD',
full: 'Files for discussion',
cat: 'Wikipedia files for discussion'
},
{
id: 'rfd',
label: 'RfD',
full: 'Redirects for discussion',
cat: 'All redirects for discussion'
},
{
id: 'prod',
label: 'PROD',
full: 'Articles proposed for deletion',
cat: 'All articles proposed for deletion'
}
];
window.xfd = xfds;
let queryTitles = async (xfd, titles) => {
if (!titles.length) return;
let response = await new mw.Api().get({
action: 'query',
titles: titles.slice(0, 50),
prop: 'info',
inprop: 'watched',
formatversion: 2
});
response?.query?.pages?.forEach(p => {
if (p.watched) {
xfd.pages.push(p.title);
}
});
await queryTitles(xfd, titles.slice(50));
};
let queryPage = async xfd => {
let $page = $($.parseHTML(await $.get(
`https://en.wikipedia.org/w/rest.php/v1/page/${encodeURIComponent(xfd.page)}/html`
)));
await queryTitles(xfd, xfd.titleExtractor($page));
};
let queryCat = async (xfd, gcmcontinue) => {
let response = await new mw.Api().get({
action: 'query',
prop: 'info|categories',
inprop: 'watched',
clprop: 'sortkey',
clcategories: `Category:${xfd.cat}`,
generator: 'categorymembers',
gcmtitle: `Category:${xfd.cat}`,
gcmlimit: 'max',
gcmsort: 'timestamp',
gcmdir: 'older',
gcmcontinue: gcmcontinue,
formatversion: 2
});
response?.query?.pages?.forEach(p => {
if (p.watched && p.categories?.[0]?.sortkeyprefix !== ' ') {
xfd.pages.push(p.title);
}
});
if (response?.continue?.gcmcontinue) {
await queryCat(xfd, response.continue.gcmcontinue);
}
};
let show = async (xfd, lastId, isCache) => {
if (xfd.portlet && isCache) return;
let portletId = 'p-xfdnotifier-' + xfd.id;
if (xfd.portlet) {
$(xfd.portlet).find('ul').empty();
if (!xfd.pages.length) return;
} else {
await $.ready;
xfd.portlet = mw.util.addPortlet(portletId, xfd.label, '#' + lastId);
}
let $label = $(`#${portletId}-label`).attr('title', xfd.full);
if (xfd.page) {
$label.wrapInner($('<a>').attr('href', mw.util.getUrl(xfd.page)));
}
xfd.pages.forEach(p => {
let t = mw.Title.newFromText(p);
let isTalk = t.isTalkPage();
let $other = $('<a>').attr({
href: t[isTalk ? 'getSubjectPage' : 'getTalkPage']().getUrl(),
title: isTalk ? 'subject' : 'talk'
}).text(isTalk ? 's' : 't');
let link = mw.util.addPortletLink(portletId, t.getUrl(), p).querySelector('a');
$('<span>').addClass('xfdnotifier-sublinks').append(
$('<span>').append($other),
$('<span>').append(
$('<a>').attr({
href: t.getUrl({ action: 'history' }),
title: 'history'
}).text('h')
)
).insertAfter(link);
});
};
mw.hook('wikipage.content').add(mw.util.throttle(async () => {
let cache = mw.storage.getObject('xfdnotifier') || {};
let lastId = 'p-tb';
for (let xfd of xfds) {
let portletId = 'p-xfdnotifier-' + xfd.id;
let now = Math.floor(Date.now() / 1000);
if (now - cache[xfd.id]?.[0] < 600) {
xfd.pages = cache[xfd.id].slice(1);
await show(xfd, lastId, true);
lastId = portletId;
continue;
}
xfd.pages = [];
if (xfd.cat) {
await queryCat(xfd);
} else if (xfd.page) {
await queryPage(xfd);
}
cache[xfd.id] = [now, ...xfd.pages];
mw.storage.setObject('xfdnotifier', cache, 604800);
await show(xfd, lastId);
lastId = portletId;
}
}, 1800000));
})();
nsnfj1s6v1fbw3id9d2ihrdbjnxs7vp
754438
754437
2026-07-31T17:57:40Z
Nardog
40946
754438
javascript
text/javascript
(async function listTools() {
let pageAction = mw.config.get('wgAction');
let isView = pageAction === 'view';
let isEdit = ['edit', 'submit'].includes(pageAction);
if (!isView && !isEdit) return;
let pageType = mw.config.get('wgCanonicalSpecialPageName') ||
mw.config.get('wgNamespaceNumber');
if (isView && !pageType && !mw.config.exists('wgRedirectedFrom') &&
!mw.config.get('wgIsRedirect') &&
!mw.config.get('wgPageName').includes('/')
) {
return;
}
await mw.loader.using([
'mediawiki.util', 'mediawiki.Title', 'mediawiki.api',
'mediawiki.interface.helpers.styles'
]);
mw.loader.addStyleTag(`.listtools:not(#mw-content-subtitle .listtools) {
font-size: 85%;
}
.listtools, .listtools a {
font-weight: normal !important;
font-style: normal;
}
.mw-datatable .listtools {
display: block;
}
.listtools + .mw-whatlinkshere-tools,
#watchlist-edit-form .listtools ~ .mw-changeslist-links,
.mw-special-DisambiguationPageLinks .listtools + a {
display: none;
}`);
let messages = Object.assign({
watched: 'Added "$1" to your watchlist',
watchFail: `Couldn't watch "$1"`,
unwatchFail: `Couldn't unwatch "$1"`
}, window.listtoolsMessages);
let getMsg = (key, ...args) => (
Object.hasOwn(messages, key) ? mw.format(messages[key], ...args) : key
);
let notif;
let watchHandler = async function (e) {
e.preventDefault();
let $link = $(this);
let $wrapper = $link.parent();
$link.detach();
let params = new URLSearchParams(this.search);
let action = params.get('action');
$wrapper.text(getMsg(action + 'ing'));
let pn = params.get('title').replaceAll('_', ' ');
let promise = new mw.Api()[action](pn);
if (notif) {
notif.close();
notif = null;
}
try {
let result = await promise;
if (!result || !result[action + 'ed']) throw '';
let newAction = action === 'watch' ? 'unwatch' : 'watch';
params.set('action', newAction);
$link.add(`.listtools-watch > a[href="${this.pathname + this.search}"]`)
.attr('href', this.pathname + '?' + params)
.text(getMsg(newAction));
if (action !== 'watch') return;
let require = await mw.loader.using([
'mediawiki.notification', 'mediawiki.watchstar.widgets'
]);
notif = await mw.notify(
new (require('mediawiki.watchstar.widgets'))('watch', pn, null, $.noop, {
message: getMsg('watched', pn)
}).$element,
{ tag: 'listtools' }
);
} catch {
notif = await mw.notify(getMsg(action + 'Fail', pn), {
tag: 'listtools',
type: 'error'
});
} finally {
$wrapper.html($link);
}
};
let extGetMain = function () {
return this.title;
};
let re = new RegExp(`(?:\\?title=|${
mw.util.escapeRegExp(mw.format(mw.config.get('wgArticlePath'), ''))
})([^#&?]+)`);
let processed = new WeakSet();
let processLinks = ($links, module, titles) => {
let isBatch = !!titles;
titles = titles || new Set();
$links.each(function (i) {
if (processed.has(this)) return;
let $link = $links.eq(i);
let pn;
if (module.useText) {
pn = $link.text();
} else {
let match = $link.attr('href')?.match(re);
if (!match) return;
pn = decodeURIComponent(match[1]);
}
let t = mw.Title.newFromText(pn);
if (!t) return;
if (module.titlesOnly) {
let text = $link.text();
if (text !== pn.replaceAll('_', ' ') &&
(text !== t.getMainText() || t.namespace === 2)
) {
return;
}
}
if ($link.is('.external, .extiw')) {
Object.assign(t, {
getMain: extGetMain,
host: this.host,
namespace: 0,
title: pn
});
} else {
if (t.namespace < 0) return;
if ($link.hasClass('new')) {
t.missing = true;
}
titles.add(t.getSubjectPage().toText());
}
let $tools = $('<span>').addClass('listtools mw-changeslist-links')
.data('listtools', t);
tools.forEach(tool => {
addTool($tools, tool);
});
if ($link.is(':is(del, bdi) > :only-child')) {
if (module.position === 'end') {
$link.parent().parent().append(' ', $tools);
} else {
$link.parent().after(' ', $tools);
}
} else if (module.position === 'end') {
$link.parent().append(' ', $tools);
} else {
$link.after(' ', $tools);
}
if (module.post) {
module.post($tools);
}
processed.add(this);
});
if (!isBatch) {
getWatched(titles);
}
};
let tools = [
{
name: 'edit',
url: t => t.getUrl({ action: 'edit' })
},
{
name: 'hist',
url: t => !t.missing && t.getUrl({ action: 'history' })
},
{
name: 'links',
url: t => mw.util.getUrl('Special:WhatLinksHere/' + t)
},
{
name: 'watch',
url: t => !t.host && t.getSubjectPage().getUrl({ action: 'watch' }),
callback: watchHandler
}
];
let addTool = ($tools, tool, escapedName) => {
let t = $tools.data('listtools');
let $duplicate = escapedName &&
$tools.children('.listtools-' + escapedName);
let url = tool.url;
if (typeof url === 'function') {
url = url(t);
if (!url) {
$duplicate?.remove();
return;
}
}
let $link = $('<a>').attr('href', url).text(getMsg(tool.name));
if (t.host) {
$link.prop('host', t.host);
}
if (tool.callback) {
$link.on('click', tool.callback);
}
let $wrapper = $('<span>').addClass('listtools-' + tool.name)
.append($link);
let $next = tool.next && $tools.children('.listtools-' + tool.next);
if ($next?.length) {
$duplicate?.remove();
$next.before($wrapper);
} else if ($duplicate?.length) {
$duplicate.replaceWith($wrapper);
} else {
$tools.append($wrapper);
}
};
let extend = tool => {
if (tool.label && !Object.hasOwn(messages, tool.label)) {
messages[tool.name] = tool.label;
}
if (tool.next) {
tool.next = $.escapeSelector(tool.next);
}
let existingTool = tools.find(t => t.name === tool.name);
if (existingTool) {
Object.assign(existingTool, tool);
} else {
tools.push(tool);
}
let escapedName = existingTool && $.escapeSelector(tool.name);
let $allTools = $('.listtools');
$allTools.each(function (i) {
addTool($allTools.eq(i), tool, escapedName);
});
};
let getWatched = async titles => {
if (!Array.isArray(titles)) {
titles = [...titles].slice(0, 500);
}
if (!titles.length) return;
(await new mw.Api().post({
action: 'query',
titles: titles.slice(0, 50),
prop: 'info',
inprop: 'watched',
formatversion: 2
}, {
headers: { 'Promise-Non-Write-API-Action': 1 }
})).query.pages.forEach(page => {
if (!page.watched) return;
$(`.listtools-watch > a[href="${mw.util.getUrl(page.title, { action: 'watch' })}"]`)
.attr('href', mw.util.getUrl(page.title, { action: 'unwatch' }))
.text(getMsg('unwatch'));
});
getWatched(titles.slice(50));
};
mw.hook('listtools.ready').fire(extend);
let catTreeCallback = (records, observer) => {
let $links = $(records[0].target).find('.CategoryTreeItem > bdi > a');
if ($links.length) {
observer.takeRecords();
observer.disconnect();
processLinks($links, catTreeModule);
}
};
let catTreeModule = {
selector: '.CategoryTreeItem > bdi > a',
types: [14, 'CategoryTree'],
position: 'end',
post: $tools => {
$tools.parent().next('.CategoryTreeChildren').each(function () {
new MutationObserver(catTreeCallback)
.observe(this, { childList: true });
});
}
};
let modules = [
{
selector: '#mw-pages li > a:not(:empty), #mw-pages li > span > a',
types: [14]
},
catTreeModule,
{
selector: '#mw-imagepage-section-linkstoimage a, #mw-imagepage-section-globalusage a',
types: [6]
},
{
selector: '#mw-globalusage-result a',
types: ['GlobalUsage']
},
{
selector: '.mw-search-result-heading > a, .searchalttitle > a.mw-redirect, .iw-result__title > a, .mw-search-exists a',
types: ['Search']
},
{
selector: '.mw-search-createlink a',
types: ['Search'],
titlesOnly: true
},
{
selector: '#watchlist-edit-form .cdx-table td > label > a',
types: ['EditWatchlist']
},
{
selector: '.plainlinks > li > a',
types: ['AbuseLog'],
titlesOnly: true
},
{
selector: '#mw-allmessagestable td:first-child > a:first-child:not(.new)',
types: ['Allmessages'],
position: 'end'
},
{
selector: '.mw-spcontent li a',
types: ['DisambiguationPageLinks', 'Listredirects'],
titlesOnly: true
},
{
selector: 'li > a:first-child',
types: ['FileDuplicateSearch']
},
{
selector: '.TablePager_col_title > a:first-child, .TablePager_col_template > a',
types: ['LintErrors'],
post: $tools => {
$tools.parent().contents().slice(3).remove();
}
},
{
selector: 'form > ul > li > a',
types: ['Nuke'],
position: 'end',
titlesOnly: true
},
{
selector: '.page-assessments a',
types: ['PageAssessments'],
titlesOnly: true
},
{
selector: '.TablePager_col_pr_page > a',
types: ['Protectedpages'],
position: 'end'
},
{
selector: '#mw-content-text > ul a',
types: ['Protectedtitles'],
position: 'end'
},
{
selector: '.mw-fr-pending-changes-page-title',
types: ['PendingChanges'],
post: $tools => {
$tools.parent().contents().slice(3).remove();
}
},
{
selector: '#mw-content-text > ul a:first-child',
types: ['StablePages'],
position: 'end'
},
{
selector: '.TablePager_col__page a',
types: ['TopicSubscriptions']
},
{
selector: '.undeleteResult > a',
types: ['Undelete'],
position: 'end',
useText: true
},
{
selector: '.TablePager_col_img_name > a:first-child',
// types: ['Listfiles'],
position: 'end'
},
{
selector: '.mw-newpages-pagename:not(:empty), .mw-newpages-pagename:empty + a',
post: $tools => {
let $nodes = $tools.parent().contents();
$nodes.slice(
$nodes.index($tools) + 1,
$nodes.index($nodes.filter('.mw-newpages-length'))
).replaceWith(' ');
}
},
{
selector: '#mw-whatlinkshere-list li > bdi > a'
},
{
selector: '.mw-changeslist-log-entry > a:not(.mw-changeslist-log-gblblock a, .mw-changeslist-log-globalauth a)',
titlesOnly: true
},
{
selector: '.mw-logevent-loglines > li:not(.mw-logline-gblblock, .mw-logline-globalauth) > a',
types: ['Log'],
titlesOnly: true
},
{
selector: '#mw-diff-otitle1 > strong > a, #mw-diff-ntitle1 > strong > a',
types: ['ComparePages'],
position: 'end'
},
{
selector: '#movepage-oldlink, #movepage-newlink',
types: ['Movepage']
},
{
selector: '.mw-undelete-revision a:not(.mw-userlink, .mw-usertoollinks > a)',
types: ['Undelete'],
useText: true
},
{
selector: '.galleryfilename, ' +
'.mw-allpages-chunk > li > a, ' +
'.mw-prefixindex-list > li > a, ' +
'.mw-changeslist-line.mw-changeslist-src-mw-categorize .mw-changeslist-line-inner > .comment > a:not(:empty), ' +
'.mw-changeslist-line.mw-changeslist-src-mw-categorize .mw-changeslist-line-inner-comment > .comment > a:not(:empty), ' +
'.mw-changeslist-line.mw-changeslist-src-mw-categorize .mw-enhanced-rc-nested > .comment > a:not(:empty)'
},
{
selector: '.mw-spcontent li a',
position: 'end',
titlesOnly: true
}
];
if (isEdit) {
let post = $tools => {
if (!$tools[0].closest('.templatesUsed')) return;
$tools.parent().contents().last().each(function () {
this.textContent = this.textContent.slice(1);
}).end().slice(-3, -1).remove();
};
let callback = mw.util.debounce(() => {
processLinks(
$('.mw-editfooter-list a, #wikiPreview > .previewnote a'),
{ titlesOnly: true, post }
);
}, 500);
mw.hook('wikipage.editform').add($form => {
callback();
$form.find('.templatesUsed').each(function () {
if (processed.has(this)) return;
processed.add(this);
new MutationObserver(callback)
.observe(this, { childList: true, subtree: true });
});
});
} else if (typeof pageType === 'number') {
$(() => {
processLinks($('.subpages a, .mw-redirectedfrom a, .redirectText a'), {});
});
}
mw.hook('wikipage.content').add($content => {
let titles = new Set();
let $links = $content.find('a');
modules.forEach(module => {
if (module.types && !module.types.includes(pageType)) return;
processLinks($links.filter(module.selector), module, titles);
});
getWatched(titles);
});
}());
mw.hook('listtools.ready').add(extend => {
// extend({
// name: 'talk',
// url: t => !t.isTalkPage() && t.canHaveTalkPage() && t.getTalkPage().getUrl(),
// next: 'hist'
// });
extend({
name: 'subject',
url: t => t.isTalkPage() && t.getSubjectPage().getUrl(),
next: 'hist'
});
extend({
name: 'last',
url: t => !t.missing && t.getUrl({ diff: 'cur', diffonly: 1 }),
next: 'links'
});
// extend({
// name: 'purge',
// url: t => t.getUrl({ action: 'purge' }),
// next: 'watch',
// callback: function (e) {
// e.preventDefault();
// let $link = $(this);
// let $wrapper = $link.parent();
// $link.detach();
// $wrapper.text('purging');
// let pn = $wrapper.closest('.listtools').data('listtools').toText();
// new mw.Api().post({
// action: 'purge',
// forcelinkupdate: 1,
// titles: pn,
// formatversion: 2
// }).then(response => {
// if (response.purge[0].purged) {
// mw.notify(`Purged "${pn}"'`);
// }
// }).always(() => {
// $wrapper.html($link);
// });
// }
// });
extend({
name: 'copy',
url: '#',
callback: function (e) {
e.preventDefault();
let text = $(this).closest('.listtools').data('listtools').toText();
let $input = $('<input>').attr({
type: 'text',
readonly: '',
style: 'position:fixed;top:-100%'
}).val(text).appendTo(document.body);
$input[0].select();
let copied;
try {
copied = document.execCommand('copy');
} catch (err) {}
$input.remove();
if (copied) {
mw.notify(`Copied "${text}"`);
} else {
mw.notify('Copy failed', { type: 'error' });
}
}
});
});
(mw.config.get('wgNamespaceNumber') || mw.config.get('wgAction') !== 'view') &&
mw.config.get('wgCanonicalSpecialPageName') !== 'GlobalContributions' &&
(function consecudiff() {
mw.loader.addStyleTag('.consecudiff::before{content:" ["} .consecudiff::after{content:"]"} .consecudiff-top::before{content:" ⟨"} .consecudiff-top::after{content:"⟩"}');
let isHist = mw.config.get('wgAction') === 'history';
class Consecudiff {
constructor(lis, isContribs) {
this.isContribs = isContribs;
this.isEnhanced = !isHist && !isContribs &&
lis[0].classList.contains('mw-enhanced-rc');
this.threshold = isContribs ? window.consecudiffContribsThreshold || 120
: isHist ? window.consecudiffHistThreshold || 720
: window.consecudiffThreshold || 720;
this.strictMode = !isContribs &&
!!window.consecudiffDetectInterruptions;
this.diffSelector = isHist
? 'a.mw-history-histlinks-previous'
: '.mw-changeslist-diff';
this.permaSelector = this.isEnhanced && '.mw-enhanced-rc-time > a' ||
(isHist || isContribs) && 'a.mw-changeslist-date';
this.hybridSelector = this.diffSelector;
if (this.permaSelector) {
this.hybridSelector += ', ' + this.permaSelector;
}
this.topClass = isContribs
? 'mw-contributions-current'
: 'mw-changeslist-last';
let dependencies = ['mediawiki.util'];
if ((isHist || isContribs) && mw.config.get('wgUserLanguage') !== 'en') {
dependencies.push('mediawiki.language.months');
}
mw.loader.using(dependencies, () => {
let chunks;
if (isHist) {
chunks = this.chunkByUser(lis);
} else {
chunks = [];
this.groupByTitle(lis).forEach(group => {
chunks.push(...this.chunkByUser(group));
});
}
let subchunks = [];
chunks.forEach(chunk => {
subchunks.push(...this.divideByDate(chunk));
});
let linkPairs = [];
subchunks.forEach(subchunk => {
linkPairs.push(...this.makeLinks(subchunk));
});
linkPairs.forEach(([$span, parent]) => {
$span.appendTo(parent);
});
});
}
groupByTitle(lis) {
let selector = this.isContribs
? '.mw-contributions-title'
: '.mw-changeslist-title';
let lisByTitle = {};
lis.forEach(li => {
let link = (this.isEnhanced ? li.closest('table') : li)
.querySelector(selector);
if (!link) return;
let title = link.textContent;
if (!lisByTitle.hasOwnProperty(title)) {
lisByTitle[title] = [];
}
lisByTitle[title].push(li);
});
return Object.values(lisByTitle).filter(group => group.length > 1);
}
chunkByUser(lis) {
if (this.isSingleContribs) {
return [lis];
}
let chunks = [], lastSplitAt = 0, prevUser;
this.isSingleContribs = lis.some((li, i) => {
let link = li.querySelector('.mw-userlink');
if (!link && this.isContribs) {
return true;
}
let user = link && link.textContent;
if (!link || i && user !== prevUser) {
chunks.push(lis.slice(lastSplitAt, i));
lastSplitAt = i;
}
prevUser = user;
});
if (this.isSingleContribs) {
return [lis];
}
chunks.push(lis.slice(lastSplitAt));
return chunks.filter(chunk => chunk.length > 1);
}
divideByDate(lis) {
let chunks = [], lastSplitAt = 0, prevDate;
lis.forEach((li, i) => {
let date;
if (isHist || this.isContribs) {
date = this.parseDate(
li.querySelector('.mw-changeslist-date').textContent
);
} else {
date = Date.parse(
li.dataset.mwTs.replace(/(....)(..)(..)(..)(..)(..)/, '$1-$2-$3T$4:$5:$6Z')
);
}
if (date) {
date = date / 60000;
}
if (i && prevDate - date > this.threshold) {
chunks.push(lis.slice(lastSplitAt, i));
lastSplitAt = i;
}
prevDate = date;
if (!this.strictMode || lastSplitAt === i) return;
let prevDiff = lis[i - 1].querySelector(this.diffSelector);
if (prevDiff) {
let prevNext = mw.util.getParamValue('oldid', prevDiff.search);
if (prevNext !== li.dataset.mwRevid) {
chunks.push(lis.slice(lastSplitAt, i));
lastSplitAt = i;
}
}
});
chunks.push(lis.slice(lastSplitAt));
return chunks.filter(chunk => chunk.length > 1);
}
makeLinks(lis) {
let count = lis.length;
let firstPerma;
let start = lis.findIndex(li => (
firstPerma = li.querySelector(this.hybridSelector)
));
if (start === -1 || count - start < 2) return [];
let end, lastDiff;
for (let i = count - 1; i > start; i--) {
if (!isHist && !this.isContribs) {
lastDiff = lis[i].querySelector(this.diffSelector);
if (lastDiff ||
lis[i].classList.contains('mw-changeslist-src-mw-new')
) {
end = i + 1;
break;
}
}
if (this.permaSelector && lis[i].querySelector(this.permaSelector)) {
end = i + 1;
break;
}
}
if (!end) return [];
count = end - start;
let params = { diff: lis[start].dataset.mwRevid };
if (lastDiff) {
params.oldid = mw.util.getParamValue('oldid', lastDiff.search);
} else {
params.oldid = lis[end - 1].dataset.mwRevid;
if (isHist && lis[end - 1].querySelector(this.diffSelector) ||
this.isContribs && !lis[end - 1].querySelector('.newpage')
) {
params.direction = 'prev';
}
}
let title = !isHist && mw.util.getParamValue('title', firstPerma.search);
let url = mw.util.getUrl(title, params);
let classes = 'consecudiff';
if (!isHist && lis[start].classList.contains(this.topClass)) {
classes += ' consecudiff-top';
}
return lis.slice(start, end).map((li, i) => [
$('<span>').addClass(classes).append(
$('<a>')
.attr('href', url)
.text(this.convertNumber(count - i + '/' + count))
),
this.isEnhanced
? li.tagName === 'TR'
? li.lastElementChild
: li.querySelector('.mw-changeslist-line-inner')
: li
]);
}
parseDate(s) {
let date = Date.parse(s);
if (date) {
return date;
}
if (s.includes(',')) date = Date.parse(s.replace(',', ''));
if (date) {
return date;
}
if (mw.loader.getState('mediawiki.language.months') !== 'ready') return;
s = s.replace(/\D/g, c => {
let n = mw.language.convertNumber(c, true);
return Number.isNaN(n) ? c : n;
});
let h, m;
s = s.replace(/(\d\d?)[.:h](\d\d?)/, ($0, $1, $2) => {
h = $1;
m = $2;
return ' ';
});
if (!h) return;
let y, dateFirst;
s = s.replace(/^(.*?)(\d{4})(?!\d)/, ($0, $1, $2) => {
y = $2;
dateFirst = /\d/.test($1);
return $1 + ' ';
});
if (!y) return;
let mo, d;
if (dateFirst) {
[d, s] = this.getDate(s);
if (!d) return;
[mo, s] = this.getMonth(s);
if (mo === -1) return;
} else {
[mo, s] = this.getMonth(s);
if (mo === -1) return;
[d, s] = this.getDate(s);
if (!d) return;
}
return new Date(y, mo, d, h, m).getTime();
}
getMonth(s) {
if (!this.months) {
this.months = mw.language.months.abbrev
.concat(mw.language.months.names, mw.language.months.genitive)
.reverse();
}
let mo = this.months.findIndex(mn => {
let temp = s.replace(mn, ' ');
if (temp !== s) {
s = temp;
return true;
}
});
if (mo === -1) {
let [numeric, temp] = this.getDate(s);
numeric = parseInt(numeric);
if (numeric > 0 && numeric < 13) {
mo = numeric - 1;
s = temp;
}
} else {
mo = 11 - mo % 12;
}
return [mo, s];
}
getDate(s) {
let d;
s = s.replace(/(^|\D)(\d\d?)(?!\d)/, ($0, $1, $2) => {
d = $2;
return $1 + ' ';
});
return [d, s];
}
convertNumber(num) {
try {
return mw.language.convertNumber(num);
} catch (e) {
return num;
}
}
}
mw.hook('wikipage.content').add($content => {
$content.find('.mw-pager-body').each(function () {
let lis = this.querySelectorAll('.mw-contributions-list > li');
if (lis.length > 1) {
new Consecudiff([...lis], !isHist);
}
});
if (isHist) return;
let $lists = $content.filter('.mw-changeslist');
if (!$lists.length) {
$lists = $content.find('.mw-changeslist');
}
$lists.each(function () {
let lis = this.querySelectorAll('.mw-changeslist-edit:not(.mw-changeslist-src-mw-categorize)[data-mw-revid]');
if (lis.length > 1) {
new Consecudiff([...lis]);
}
});
});
}());
if (mw.config.get('wgNamespaceNumber') === 14 && (
mw.config.get('wgAction') === 'view' || !mw.config.get('wgArticleId')
)) {
mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Nardog/sandbox8.js&action=raw&ctype=text/javascript');
mw.loader.using([
'mediawiki.api', 'mediawiki.util', 'mediawiki.DateFormatter',
'oojs-ui-widgets', 'mediawiki.widgets',
'mediawiki.widgets.UserInputWidget', 'mediawiki.widgets.datetime',
'oojs-ui.styles.icons-interactions', 'oojs-ui.styles.icons-movement',
'mediawiki.interface.helpers.styles', 'user.options'
]);
}
$(function moveHistory() {
if (!document.getElementById('p-tb')) return;
mw.loader.using('mediawiki.util', () => {
let clicked;
mw.util.addPortletLink('p-tb', '#', 'Move history', 't-movehistory').firstElementChild.addEventListener('click', e => {
e.preventDefault();
if (clicked) {
if (window.moveHistoryDialog) {
window.moveHistoryDialog.open();
}
return;
}
clicked = true;
mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Nardog/sandbox5.js&action=raw&ctype=text/javascript');
mw.loader.using([
'mediawiki.api', 'mediawiki.util', 'mediawiki.Title', 'mediawiki.DateFormatter',
'oojs-ui-windows', 'oojs-ui-widgets', 'mediawiki.widgets',
'mediawiki.widgets.DateInputWidget', 'oojs-ui.styles.icons-interactions',
'mediawiki.interface.helpers.styles'
]);
});
});
});
$(function sectionSearch() {
if (!document.getElementById('p-tb')) return;
mw.loader.using('mediawiki.util', () => {
let clicked;
mw.util.addPortletLink('p-tb', '#', 'Section search', 't-sectionsearch').firstElementChild.addEventListener('click', e => {
e.preventDefault();
if (clicked) {
if (window.sectionSearchDialog) {
window.sectionSearchDialog.open();
}
return;
}
clicked = true;
mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Nardog/sandbox7.js&action=raw&ctype=text/javascript');
mw.loader.using([
'mediawiki.api', 'mediawiki.util', 'oojs-ui-core', 'oojs-ui-windows',
'mediawiki.widgets', 'mediawiki.widgets.NamespacesMultiselectWidget'
]);
});
});
});
mw.config.get('wgCanonicalSpecialPageName') === 'CentralAuth' &&
mw.loader.using('jquery.tablesorter', function sortCentralAuthByEditCount() {
mw.hook('wikipage.content').add($content => {
let $table = $content.find('.mw-centralauth-wikislist').has('td');
if (!$table.length) return;
$table.tablesorter().data('tablesorter').sort([{ 4: 'desc' }, { 1: 'asc' }]);
});
});
['edit', 'submit'].includes(mw.config.get('wgAction')) &&
[10, 828].includes(mw.config.get('wgNamespaceNumber')) &&
!mw.config.get('wgTitle').endsWith('/doc') &&
mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/AutoTestcases.js&action=raw&ctype=text/javascript', 's');
// ['edit', 'submit'].includes(mw.config.get('wgAction')) &&
// mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/TemplatePreviewGuard.js&action=raw&ctype=text/javascript', 's');
// ['edit', 'submit'].includes(mw.config.get('wgAction')) &&
// $(function templatePreviewGuard() {
// let button = document.querySelector('input[name="wpTemplateSandboxPreview"]');
// if (!button) return;
// let proceed;
// button.addEventListener('click', e => {
// if (proceed) {
// proceed = false;
// return;
// }
// e.preventDefault();
// e.stopPropagation();
// let formData = new FormData(button.form);
// let page = formData.get('wpTemplateSandboxPage');
// let temp = formData.get('wpTemplateSandboxTemplate');
// if (!page || !temp) return;
// mw.loader.using('mediawiki.api').then(() => (
// new mw.Api().get({
// action: 'query',
// titles: page,
// prop: 'templates',
// tltemplates: temp,
// formatversion: 2
// })
// )).always(response => {
// if (((((response || {}).query || {}).pages || [])[0] || {}).templates ||
// confirm(`"${page}" doesn't appear to transclude "${temp}". Continue?`)
// ) {
// proceed = true;
// button.click();
// }
// });
// }, true);
// if (!mw.config.get('wgArticleId')) return;
// let widgetEl = document.querySelector('#wpTemplateSandboxPage.oo-ui-widget');
// if (!widgetEl) return;
// let pn = mw.config.get('wgPageName').replace(/_/g, ' ');
// mw.loader.using(['mediawiki.api', 'oojs-ui-core']).then(() => (
// new mw.Api().get({
// action: 'query',
// titles: pn,
// prop: 'transcludedin',
// tiprop: 'title',
// tilimit: 'max',
// formatversion: 2
// })
// )).then(response => {
// if (!response.batchcomplete) return;
// let pages = response.query.pages[0].transcludedin
// .filter(o => o.title !== pn);
// if (!pages.length) return;
// let widget = OO.ui.infuse(widgetEl);
// if (pages.length === 1) {
// widget.setValue(pages[0].title);
// return;
// }
// widget.$element.replaceWith(
// new OO.ui.ComboBoxInputWidget({
// id: 'wpTemplateSandboxPage',
// maxlength: widget.$input.prop('maxLength'),
// name: widget.$input.prop('name'),
// options: pages
// .sort((a, b) => a.ns - b.ns || -(a.title < b.title))
// .map(o => ({ data: o.title })),
// placeholder: widget.$input.prop('placeholder'),
// tabIndex: widget.getTabIndex(),
// value: widget.getValue()
// }).on('enter', e => {
// e.preventDefault();
// button.click();
// }).$element
// );
// });
// });
['edit', 'submit'].includes(mw.config.get('wgAction')) &&
mw.config.get('wgArticleId') &&
mw.config.get('wgPageContentModel') === 'wikitext' &&
$(async () => {
let form = document.getElementById('editform');
if (!form) return;
let formData = new FormData(form);
let section = formData.get('wpSection');
if (section === 'new') return;
let widget = document.getElementById('wpSummaryWidget');
if (!widget) return;
let isOld = formData.get('altBaseRevId') > 0 ||
(formData.get('baseRevId') || formData.get('parentRevId')) !== formData.get('editRevId');
await mw.loader.using([
'jquery.textSelection', 'mediawiki.util', 'mediawiki.api', 'oojs-ui-core',
'oojs-ui.styles.icons-editing-core'
]);
let $textarea = $('#wpTextbox1');
let input = OO.ui.infuse(widget);
let button = new OO.ui.ButtonWidget({
framed: false,
icon: 'undo',
classes: ['autosectionlink-button'],
invisibleLabel: true,
label: 'Restore previous section link'
}).toggle().on('click', () => {
let cache = button.getData();
input.setValue(input.getValue().replace(
/^(\/\*.*?\*\/)?\s*/,
cache[0] ? '/* ' + cache[0] + ' */ ' : ''
));
updatePreview(cache[0]);
cache.reverse();
}).on('toggle', () => {
input.$input.css('width', `calc(100% - ${button.$element.width()}px)`);
});
input.$input.after(button.$element);
let update = mw.util.debounce($diff => {
let lines = $textarea.textSelection('getContents').trimEnd().split('\n');
let firstLineNum, lastLineNum;
if (isOld) {
let i;
$diff.find('td:last-child').each(function () {
if (this.classList.contains('diff-lineno')) {
i = this.textContent.replace(/\D+/g, '') - 1;
} else if (this.classList.contains('diff-context')) {
i++;
} else if (this.classList.contains('diff-addedline')) {
i++;
if (!firstLineNum) {
firstLineNum = i;
}
lastLineNum = i;
} else if (this.classList.contains('diff-empty')) {
if (!firstLineNum) {
firstLineNum = i === 0 ? 1 : i;
}
lastLineNum = i;
}
});
} else {
let origLines = $textarea.prop('defaultValue').trimEnd().split('\n');
firstLineNum = lines.findIndex((line, i) => line !== origLines[i]) + 1;
if (!firstLineNum) {
firstLineNum = lines.length < origLines.length
? lines.length
: 1;
}
lastLineNum = lines.length;
for (let i = 1, x = lastLineNum, y = origLines.length;
(section ? i < x : i <= x) && lines[x - i] === origLines[y - i];
i++
) {
lastLineNum--;
}
}
let modLines = lines.slice(0, lastLineNum || 0);
let re = /^(={1,6})\s*(.+?)\s*\1\s*(?:<!--.+-->\s*)?$/;
let lowest = 7;
modLines.slice(firstLineNum).forEach(line => {
let match = line.match(re);
if (match?.[1].length < lowest) {
lowest = match[1].length;
}
});
let head;
modLines.slice(0, firstLineNum).reverse().some(line => {
let match = line.match(re);
if (match?.[1].length < lowest) {
head = match[2];
return true;
}
});
if (head) {
head = head
.replace(/'''(.+?)'''|\[\[:?(?:[^|\]]+\|)?([^\]]+)\]\]|<\/?(?:abbr|b|bdi|bdo|big|cite|code|data|del|dfn|em|font|i|ins|kbd|mark|nowiki|q|rb|ref|rp|rt|rtc|ruby|s|samp|small|span|strike|strong|sub|sup|templatestyles|time|translate|tt|u|var)(?:\s[^>]*)?>|<!--.*?-->|\[(?:https?:)?\/\/[^\s\[\]]+\s([^\]]+)\]/gi, '$1$2$3')
.replace(/''(.+?)''/g, '$1')
.trim();
} else if (modLines.length && lowest === 7 && section < 1 && (
section === '0' || lines.slice(modLines.length).some(line => re.test(line))
)) {
head = '';
}
let v = input.getValue();
let match = v.match(/^\/\*\s*(.+?)\s*\*\/\s*/);
let prev = match?.[1];
if (prev === head) return;
input.setValue((
head || head === '' ? '/* ' + head + ' */ ' : ''
) + (match ? v.slice(match[0].length) : v));
button.setData([prev, head]).toggle(true);
updatePreview(head);
}, 500);
let updatePreview = head => {
let $comment = $('.mw-summary-preview > .comment');
if (!$comment.length) return;
let url;
if (head) {
url = mw.util.getUrl() + '#' + head.replace(/[\s_]+/g, '_');
} else if (head === '') {
head = mw.messages.get('autocomment-top', '(top)');
url = mw.util.getUrl();
}
let paren = [...mw.messages.get('parentheses', '($1)')][0];
let $nodes = $comment.contents();
let $ac = $nodes.eq(1);
if ($nodes[0]?.textContent === paren && $ac.is('.autocomment:first-child')) {
if (head) {
$ac.children('a').attr('href', url).children('bdi').text(head);
} else {
if ($nodes[2]?.nodeType === 3) {
$nodes[2].textContent = $nodes[2].textContent.trimStart();
}
$ac.remove();
}
} else if (head) {
let rtl = document.body.classList.contains('sitedir-rtl');
$comment.prepend(
paren,
$('<span>').addClass('autocomment').append(
$('<a>').attr({
href: url,
title: mw.config.get('wgPageName').replaceAll('_', ' ')
}).text(rtl ? '←' : '→').append(
$('<bdi>').attr('dir', rtl ? 'rtl' : 'ltr').text(head)
),
mw.messages.get('colon-separator', ': ')
)
);
if ($nodes[0]?.nodeType === 3) {
let text = $nodes[0].textContent;
if (text.startsWith(paren)) {
text = text.slice(paren.length);
}
$nodes[0].textContent = ' ' + text;
}
}
};
if (isOld) {
mw.hook('wikipage.diff').add(update);
} else {
$textarea.on('input', update);
mw.hook('ext.CodeMirror.input').add(update);
update();
}
new mw.Api().loadMessagesIfMissing(['autocomment-top', 'colon-separator', 'parentheses']);
mw.loader.addStyleTag('.autosectionlink-button{position:absolute;top:0;right:0;margin:0}');
});
(mw.config.get('wgNamespaceNumber') === -1 || mw.config.exists('wgDiffNewId') ||
mw.config.get('wgAction') === 'history') &&
(function copyRevId() {
let handler = function (e) {
e.preventDefault();
let text = this.closest('.diff td')?.querySelector('[data-mw-revid]')?.dataset.mwRevid ||
this.closest('[data-mw-revid]')?.dataset.mwRevid;
if (!text) return;
let $input = $('<input>').attr({
type: 'text',
readonly: '',
style: 'position:fixed;top:-100%'
}).val(text).appendTo(document.body);
$input[0].select();
document.execCommand('copy');
$input.remove();
let copied;
try {
copied = document.execCommand('copy');
} catch {}
$input.remove();
if (copied) {
mw.notify(`Copied "${text}"`);
} else {
mw.notify('Copy failed', { type: 'error' });
}
};
mw.hook('wikipage.diff').add($diff => {
$diff.find('#mw-diff-otitle1, #mw-diff-ntitle1').append(
' (',
$('<a>').attr({
href: '#',
role: 'button'
}).on('click', handler).text('id'),
')'
);
});
if (mw.config.get('wgAction') !== 'history') return;
mw.hook('wikipage.content').add($content => {
$content.find('.mw-pager-tools').append(
$('<span>').append(
$('<a>').attr({
href: '#',
role: 'button'
}).on('click', handler).text('id')
)
);
});
}());
(mw.config.get('wgNamespaceNumber') === -1 || mw.config.exists('wgDiffNewId') ||
mw.config.get('wgAction') === 'history') &&
(() => {
let handler = async function (e) {
e.preventDefault();
let td = this.closest('.diff td');
let rev = td
? td.querySelector('[data-mw-revid]')?.dataset.mwRevid
: this.closest('[data-mw-revid]')?.dataset.mwRevid;
if (!rev) {
mw.notify(`Couldn't get the revision.`, {
tag: 'markasunseen',
type: 'error'
});
return;
}
let pn = td
? new URLSearchParams([...td.querySelectorAll('a')].pop()?.search).get('title')
: mw.config.get('wgPageName');
if (!pn) return;
await mw.loader.using('mediawiki.api');
let result = (await new mw.Api().postWithEditToken({
action: 'setnotificationtimestamp',
[td ? 'newerthanrevid' : 'torevid']: rev,
titles: pn,
formatversion: 2
})).setnotificationtimestamp?.[0];
if (Object.hasOwn(result, 'notificationtimestamp')) {
mw.notify(`Marked revisions ${td ? 'after' : 'since'} ${rev} as unseen.`, {
tag: 'markasunseen',
type: 'success'
});
} else if (result?.notwatched) {
mw.notify('This page is not on your watchlist.', {
tag: 'markasunseen',
type: 'warn'
});
} else {
mw.notify(`Couldn't mark revisions ${td ? 'after' : 'since'} ${rev} as unseen.`, {
tag: 'markasunseen',
type: 'error'
});
}
};
mw.hook('wikipage.diff').add($diff => {
$diff.find('#mw-diff-otitle1').append(
' (',
$('<a>').attr({
href: '#',
role: 'button',
title: 'Mark revisions after this one as unseen'
}).on('click', handler).text('unseen'),
')'
);
});
if (mw.config.get('wgAction') !== 'history') return;
mw.hook('wikipage.content').add($content => {
$content.find('.mw-pager-tools').append(
$('<span>').append(
$('<a>').attr({
href: '#',
role: 'button',
title: 'Mark revisions since this one as unseen'
}).on('click', handler).text('unseen')
)
);
});
})();
(mw.config.get('wgNamespaceNumber') === -1 || mw.config.exists('wgDiffNewId') ||
mw.config.get('wgAction') === 'history') &&
((mw.config.get('wgNamespaceNumber') % 2 || mw.config.get('wgNamespaceNumber') === 4) ||
(mw.config.get('wgWikiID') === 'metawiki' && mw.config.get('wgPageContentModel') === 'wikitext')) &&
mw.loader.using(['mediawiki.util', 'mediawiki.Title'], function copyUnsig() {
let handler = function (e) {
e.preventDefault();
let parent = this.closest('li, td');
let ts = parent.textContent.match(/\d\d:\d\d, \d\d? [A-Z][a-z]+ \d{4}/)?.[0];
if (!ts) return;
let user = parent.querySelector('.mw-userlink').textContent;
if (mw.util.isIPv6Address(user)) {
user = user.toUpperCase();
}
let temp = mw.util.isIPAddress(user) ? 'unsigned IP' : 'unsigned';
let text = `{{subst:${temp}|${user}|${ts}}}`;
let $input = $('<input>').attr({
type: 'text',
readonly: '',
style: 'position:fixed;top:-100%'
}).val(text).appendTo(document.body);
$input[0].select();
let copied;
try {
copied = document.execCommand('copy');
} catch {}
$input.remove();
if (copied) {
mw.notify(`Copied "${text}"`);
} else {
mw.notify('Copy failed', { type: 'error' });
}
};
mw.hook('wikipage.diff').add($diff => {
$diff.find('#mw-diff-otitle1, #mw-diff-ntitle1').filter(function () {
if (mw.config.get('wgWikiID') === 'metawiki') {
return true;
}
let link = this.querySelector('strong > a') ||
this.parentElement.querySelector('#differences-prevlink, #differences-nextlink');
if (!link) return;
let t = mw.Title.newFromText(mw.util.getParamValue('title', link.search));
return t.isTalkPage() || t.namespace === 4;
}).append(
' (',
$('<a>').attr({
href: '#',
role: 'button'
}).on('click', handler).text('sig'),
')'
);
});
if (mw.config.get('wgAction') !== 'history') return;
mw.hook('wikipage.content').add($content => {
$content.find('.mw-pager-tools').append(
$('<span>').append(
$('<a>').attr({
href: '#',
role: 'button'
}).on('click', handler).text('sig')
)
);
});
});
// mw.config.get('wgAction') === 'history' &&
// mw.loader.using('mediawiki.util', function () {
// mw.hook('wikipage.content').add($content => {
// $content.find('a.mw-changeslist-date').after(function () {
// return [
// ' (',
// $('<a>').attr('href', mw.util.getUrl(null, {
// action: 'edit',
// oldid: this.closest('li').dataset.mwRevid
// })).text('e'),
// ')'
// ];
// });
// });
// });
// ['Contributions', 'IPContributions', 'Blankpage'].includes(mw.config.get('wgCanonicalSpecialPageName')) &&
// mw.hook('wikipage.content').add($content => {
// $content.find('.mw-changeslist-history').parent().after(function () {
// return $('<span>').append(
// $('<a>').attr(
// 'href',
// this.firstElementChild.getAttribute('href').slice(0, -7) + 'edit'
// ).text('e')
// );
// });
// });
if (screen.width < 500) {
mw.loader.addStyleTag('@font-face{font-family:CharisW;src:url(//fontlibrary.org/assets/fonts/charis/10b9f94ed21e56254b068c91ead7ec6f/017b2b2ad86e09d3c22b8cf0dfc78247/CharisSILRegular.ttf) format(truetype)} @font-face{font-family:CharisW;font-weight:700;src:url(//fontlibrary.org/assets/fonts/charis/10b9f94ed21e56254b068c91ead7ec6f/6f5069ac6a300dad45383c952e92c573/CharisSILBold.ttf) format(truetype)} body .IPA{font-family:CharisW,sans-serif} .mw-highlight-lines > pre{width:120em}');
location.hash && $(() => {
let target = document.querySelector(':target');
if (target?.getBoundingClientRect().top < 0) {
target.scrollIntoView();
}
});
}
['edit', 'submit'].includes(mw.config.get('wgAction')) &&
(mw.config.exists('wgCodeEditorCurrentLanguage') ||
mw.config.exists('cmMode') && mw.config.get('cmMode') !== 'mediawiki') &&
(function saveNEdit() {
let notif;
$(document.body).on('click', '#wpSave', async function (e) {
if (e.ctrlKey || e.shiftKey || e.metaKey || e.altKey ||
e.originalEvent?.defaultPrevented
) {
return;
}
e.preventDefault();
await mw.loader.using([
'mediawiki.api', 'mediawiki.util', 'jquery.textSelection', 'oojs-ui-core'
]);
let button = OO.ui.infuse(this.parentElement).setDisabled(true);
let $textarea = $('#wpTextbox1');
let text = $textarea.textSelection('getContents');
let $summary = $('#wpSummary');
let formData = new FormData(this.form);
let promise = new mw.Api().postWithEditToken({
action: 'edit',
title: mw.config.get('wgPageName'),
text: text,
section: formData.get('wpSection') || undefined,
summary: $summary.textSelection('getContents'),
[$('#wpMinoredit').prop('checked') ? 'minor' : 'notminor']: 1,
baserevid: formData.get('editRevId'),
basetimestamp: formData.get('wpEdittime'),
starttimestamp: formData.get('wpStarttime'),
watchlist: $('#wpWatchthis').prop('checked') ? 'watch' : 'unwatch',
watchlistexpiry: formData.get('wpWatchlistExpiry') || undefined,
undo: formData.get('wpUndidRevision') || undefined,
undoafter: formData.get('wpUndoAfter') || undefined,
contentformat: formData.get('format'),
contentmodel: formData.get('model'),
assertuser: mw.config.get('wgUserName'),
formatversion: 2
});
notif?.close();
notif = null;
try {
let response = await promise;
if (response?.edit?.result !== 'Success') throw '';
$('#editform > input[name="wpUndidRevision"], #editform > input[name="wpUndoAfter"]').remove();
$textarea.data('origtext', text).prop('defaultValue', text);
$summary.val($summary.prop('defaultValue'));
if (mw.loader.getState('mediawiki.editRecovery.edit') === 'ready') {
let storage = mw.loader.moduleRegistry['mediawiki.editRecovery.edit'].packageExports['storage.js'];
storage.deleteData(mw.config.get('wgPageName'));
storage.closeDatabase();
}
notif = await mw.notify(response.edit.nochange ? 'No change' : [
document.createTextNode('Saved'),
$('<p>').append(
new OO.ui.ButtonWidget({
href: mw.util.getUrl(),
target: '_blank',
label: 'View'
}).$element,
new OO.ui.ButtonWidget({
href: mw.util.getUrl(null, {
diff: response.edit.newrevid || 'cur',
diffonly: 1
}),
target: '_blank',
label: 'Diff'
}).$element,
new OO.ui.ButtonWidget({
href: mw.util.getUrl(null, { action: 'history' }),
target: '_blank',
label: 'History'
}).$element
)[0]
], { tag: 'savenedit' });
} catch (error) {
notif = await mw.notify(error?.error?.info || error || 'Save failed', {
autoHideSeconds: 'long',
tag: 'savenedit',
type: 'error'
});
} finally {
button.setDisabled();
}
});
}());
mw.config.get('wgNamespaceNumber') === 0 &&
mw.config.get('wgAction') === 'view' &&
mw.config.get('wgCategories')?.some(c => c.endsWith(' actors') || c.endsWith(' actresses')) &&
$(() => {
let n = $.escapeSelector(mw.config.get('wgTitle').replace(/ \(.+\)$/, ''));
let $links = $(`.hatnote a[title$="${n} filmography"], .hatnote a[title*="${n} on "], .hatnote a[title*="${n} performances"]`);
if (!$links.length) return;
let titles = {};
$links = $links.filter(function () {
let text = this.textContent;
return !(titles[text] = Object.hasOwn(titles, text));
});
mw.notify(
$links.length === 1
? $links.clone()
: $('<ul>').append($links.clone().wrap('<li>').parent()),
{ autoHideSeconds: 'long' }
);
});
['Recentchanges', 'Recentchangeslinked', 'Watchlist'].includes(mw.config.get('wgCanonicalSpecialPageName')) &&
mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/RCMuter.js&action=raw&ctype=text/javascript', 's');
location.hostname.endsWith('.wikipedia.org') &&
mw.config.get('wgNamespaceNumber') % 2 === 0 &&
// mw.config.get('wgArticleId') &&
mw.config.get('wgPageContentModel') === 'wikitext' &&
$.when($.ready, mw.loader.using('mediawiki.util')).then(function refRenamer() {
if (!document.getElementById('p-tb')) return;
let messages = Object.assign({
portlet: 'RefRenamer',
loading: 'Loading RefRenamer...'
}, window.refrenamerMessages);
let clicked;
mw.util.addPortletLink('p-tb', '#', messages.portlet, 't-refrenamer').firstElementChild.addEventListener('click', e => {
e.preventDefault();
if (clicked) {
if (window.refRenamer) {
window.refRenamer();
}
return;
}
clicked = true;
mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Nardog/sandbox6.js&action=raw&ctype=text/javascript');
mw.notify(messages.loading, {
autoHideSeconds: 'long',
tag: 'refrenamer'
});
});
});
if (['edit', 'submit'].includes(mw.config.get('wgAction'))) {
mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/ExpandContractions.js&action=raw&ctype=text/javascript', 's');
}
['edit', 'submit'].includes(mw.config.get('wgAction')) &&
$.when(
$.ajax(
'//tools-static.wmflabs.org/meta/scripts/pathoschild.templatescript.js',
{ dataType: 'script', cache: true }
),
mw.loader.using(['mediawiki.api', 'mediawiki.Title'])
).then(function unpipe() {
let replace = data => {
Object.entries(data.tokens).forEach(([source, ts]) => {
if (!ts.some(t => data.redirs[t.pn])) return;
let links = ts.map(t => {
let r = data.redirs[t.pn] || {};
return [r.to || t.pn, t.fragment || r.tofragment].join('#');
});
if (links[0] !== links[1]) return;
data.repl = data.repl.split(source).join(source.replace(/^[^|]+\|/, '[['));
});
if (data.repl === data.orig) {
mw.notify('No change.');
return;
}
data.editor
.set(data.repl)
.appendEditSummary('[[WP:NOPIPE|unpiped]] links using [[User:Nardog/Unpipe|script]]')
.options({ minor: true })
.clickDiff();
};
let query = (titles, data) => {
if (!titles.length) {
replace(data);
return;
}
new mw.Api().post({
action: 'query',
titles: titles.slice(0, 50),
redirects: 1,
formatversion: 2
}, {
headers: { 'Promise-Non-Write-API-Action': 1 }
}).then(response => {
(response.query.redirects || []).forEach(r => {
data.redirs[r.from] = r;
});
query(titles.slice(50), data);
});
};
window.pathoschild.TemplateScript.add([{
name: 'Unpipe links',
script: editor => {
let orig = editor.get(), repl = orig, tokens = {};
let titles = new Set();
let match, re = /\[\[([^|\]]+)\|([^\]]+)\]\]/g;
while ((match = re.exec(orig))) {
if (tokens[match[0]]) continue;
let ts = match.slice(1).map(s => mw.Title.newFromText(s));
if (ts.some(t => !t || t.namespace)) continue;
let pns = ts.map(t => t.toText());
if (pns[0].endsWith(' (disambiguation)')) continue;
if (pns[0] === pns[1] && ts[0].fragment === ts[1].fragment) {
repl = repl.split(match[0]).join(`[[${match[2]}]]`);
continue;
}
tokens[match[0]] = pns.map((pn, i) => {
titles.add(pn);
return { pn, fragment: ts[i].fragment };
});
}
query([...titles], { editor, orig, repl, tokens, redirs: {} });
}
}]);
});
mw.config.get('wgAction') !== 'history' &&
mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/CopyCodeBlock.js&action=raw&ctype=text/javascript', 's');
mw.config.exists('wgDiffNewId') &&
mw.config.get('wgDiscussionToolsFeaturesEnabled') &&
(function () {
let css = mw.loader.addStyleTag('.scrolltonext::before{content:" | "}');
let data = {}, clickHandler, autoClear, run;
window.dtc = data;
let highlight = revId => {
let ids = data[revId];
if (!ids || !ids.length) return;
mw.loader.moduleRegistry['ext.discussionTools.init'].packageExports['highlighter.js']
.highlightNewComments(mw.dt.pageThreads, true, ids);
if (clickHandler) {
$(document.body).off('click', clickHandler);
return;
}
$._data(document.body, 'events').click.some(o => {
if (String(o.handler).includes('highlighter.clearHighlightTargetComment(')) {
$(document.body).off('click', o.handler);
clickHandler = o.handler;
return true;
}
});
$._data(window, 'events').popstate.some(o => {
if (String(o.handler).includes('highlighter.highlightTargetComment(')) {
$(window).off('popstate', o.handler);
return true;
}
});
};
let scroll = revId => {
let ids = data[revId];
if (!ids || !ids.length) return;
let yToSpan = Object.fromEntries(
ids.map(id => document.getElementById(id)).filter(Boolean)
.map(span => [span.getBoundingClientRect().y, span])
);
let ys = Object.keys(yToSpan);
if (!ys.length) return;
let lower = ys.filter(y => y > 10);
if (!lower.length ||
Math.max(...lower) < document.documentElement.clientHeight
) {
yToSpan[Math.min(...ys)].scrollIntoView({ behavior: 'smooth' });
} else {
yToSpan[Math.min(...lower)].scrollIntoView({ behavior: 'smooth' });
}
};
let scrollToNext = function (e) {
e.preventDefault();
let revId = mw.config.get('wgDiffOldId');
if (!revId || !data[revId]) return;
let i = data[revId].indexOf(
this.closest('[data-mw-thread-id]').dataset.mwThreadId
);
if (i === -1) return;
let next = data[revId][i + 1] || data[revId][0];
document.getElementById(next).scrollIntoView({ behavior: 'smooth' });
};
mw.hook('wikipage.content').add(async $content => {
let revId = mw.config.get('wgDiffOldId');
if (!revId) return;
let param = new URLSearchParams(location.search).get('diffonly');
if (param && param !== '0') return;
if (data[revId]) {
highlight(revId);
return;
}
await mw.loader.using(['ext.discussionTools.init', 'mediawiki.util']);
let begin = Date.parse($('#mw-diff-otitle1 .mw-diff-timestamp').data('timestamp'));
data[revId] = mw.dt.pageThreads.getCommentItems()
.filter(c => c.timestamp > begin).map(c => c.id);
if (!data[revId].length) return;
await new Promise(setTimeout);
highlight(revId);
$content.find('.ext-discussiontools-init-replylink-buttons').filter(function () {
return data[revId].includes(this.dataset.mwThreadId);
}).append(
$('<a>').attr({
class: 'scrolltonext',
href: '#',
role: 'button'
}).text('next').on('click', scrollToNext)
);
if (run || !document.getElementById('p-tb')) return;
run = true;
let portlet = mw.util.addPortletLink('p-tb', '#', 'Scroll to next', 't-scrolltonext');
portlet.firstElementChild.addEventListener('click', e => {
e.preventDefault();
scroll(mw.config.get('wgDiffOldId'));
});
mw.util.addPortletLink('p-tb', '#', 'Toggle highlight', 't-togglehighlight').firstElementChild.addEventListener('click', e => {
e.preventDefault();
autoClear = !autoClear;
if (autoClear) {
$(document.body).on('click', clickHandler)[0].click();
} else {
highlight(mw.config.get('wgDiffOldId'));
}
});
css.textContent += ` #t-scrolltonext{position:fixed;bottom:${portlet.clientHeight}px} #t-togglehighlight{position:fixed;bottom:0}`;
});
}());
mw.config.get('wgNamespaceNumber') === 6 &&
mw.config.get('wgAction') === 'view' &&
mw.hook('wikipage.content').add($content => {
$content.find('.filehistory .mw-usertoollinks-contribs').after(function () {
return [
' | ',
$('<a>').attr('href', `${
mw.config.get('wgScript')
}?title=Special:ListFiles/${
this.pathname.replace(/^.+\//, '')
}&ilshowall=1`).text('uploads')
];
});
});
['edit', 'submit'].includes(mw.config.get('wgAction')) &&
mw.config.get('wgArticleId') &&
mw.config.get('wgPageContentModel') === 'wikitext' &&
$(function () {
if (!$('input[name="wpSection"]').val()) return;
mw.hook('wikipage.content').add(async $content => {
let $refs = $content.find('.mw-ext-cite-warning-sectionpreview_no_text');
if (!$refs.length) return;
let ids = {};
$refs.each(function () {
ids[this.closest('[id]').id.replace(/-\d+$/, '')] = this;
});
let response = await $.get(`/api/rest_v1/page/html/${encodeURIComponent(mw.config.get('wgPageName'))}`);
$($.parseHTML(response)).find('.mw-reference-text').each(function () {
ids[this.id.replace(/^mw-reference-text-|-\d+$/g, '')]?.replaceWith(this);
});
});
});
mw.hook('moremenu.ready').add(config => {
$('#mm-page-purge-cache > a').on('click', e => {
e.preventDefault();
new mw.Api().post({
action: 'purge',
forcelinkupdate: 1,
titles: config.page.name,
formatversion: 2
}).then(() => {
location.href = mw.util.getUrl();
});
});
$('#mm-page-search-search-history-wikiblame > a').on('click', function (e) {
e.preventDefault();
let q = prompt();
if (q === null) return;
let href = this.href;
if (q) {
let removal = q[0] === '!';
if (removal) {
q = q.slice(1);
}
href += '&needle=' + encodeURIComponent(q);
if (removal) {
href += '&binary_search_inverse=on';
}
href += '&force_wikitags=on';
}
open(href, '_blank');
});
$('#mm-page-expand-templates > a').on('click auxclick', function (e) {
if (e.which > 2) return;
e.preventDefault();
let revId = mw.config.get('wgRevisionId') || Number($('input[name=oldid]').val());
let url = revId
? '/w/rest.php/v1/revision/' + revId
: '/w/rest.php/v1/page/' + config.page.encodedName;
$.get(url).then(response => {
$('<form>').attr({
method: 'post',
action: this.href,
target: '_blank'
}).append(
[
['wpInput', response.source],
['wpContextTitle', config.page.name],
['wpRemoveComments', 1]
].map(([n, v]) => $('<input>').attr({
name: n,
type: 'hidden'
}).val(v))
).appendTo(document.body).trigger('submit').remove();
});
});
});
mw.config.get('wgCanonicalSpecialPageName') === 'ApiSandbox' &&
mw.hook('apisandbox.formatRequest').add((...args) => {
args[4].complete = function () {
setTimeout(() => {
mw.hook('wikipage.content').fire($('.oo-ui-pageLayout-active'));
}, 100);
};
});
['edit', 'submit'].includes(mw.config.get('wgAction')) &&
mw.config.get('wgArticleId') &&
mw.config.get('wgPageContentModel') === 'wikitext' &&
$.when($.ready, mw.loader.using('mediawiki.storage')).then(async () => {
let infuseAndCall = (query, method, ...args) => {
let $widget = $(query);
if ($widget.length) {
return OO.ui.infuse($widget)[method](...args);
}
};
let section = $('input[name="wpSection"]').val();
if (section) {
let $textarea = $('#wpTextbox1');
let source = $textarea.prop('defaultValue');
let save = () => {
let newSource = $textarea.textSelection('getContents');
if (newSource === source) {
mw.storage.session.remove('editfullpage');
} else {
mw.storage.session.setObject('editfullpage', [
mw.config.get('wgPageName'),
section,
newSource.trimEnd(),
infuseAndCall('#wpSummaryWidget', 'getValue') || '',
Number(infuseAndCall('#wpMinoreditWidget', 'isSelected')) || 0,
Number(infuseAndCall('#wpWatchthisWidget', 'isSelected')) || 0,
infuseAndCall('#wpWatchlistExpiryWidget', 'getValue') || 'infinite'
]);
}
};
await mw.loader.using(['jquery.textSelection', 'oojs-ui-core']);
setInterval(() => {
mw.requestIdleCallback(save);
}, 3000);
window.addEventListener('beforeunload', save);
return;
}
let data = mw.storage.session.getObject('editfullpage');
mw.storage.session.remove('editfullpage');
console.log(data);
if (!data || data[0] !== mw.config.get('wgPageName')) return;
let isNew = data[1] === 'new';
let isLead = data[1] === '0';
let $textarea = $('#wpTextbox1');
let source = $textarea.prop('defaultValue');
let newSource, start, msg, notifOpts = { autoHideSeconds: 'long' };
let orig = [];
if (isNew) {
await mw.loader.using(['jquery.textSelection', 'oojs-ui-core']);
newSource = source + (data[3] ? '\n== ' + data[3] + ' ==\n\n' : '\n') + data[2] + '\n';
start = source.length;
} else {
await mw.loader.using(['jquery.textSelection', 'oojs-ui-core', 'mediawiki.api']);
let { parse } = await new mw.Api().get({
action: 'parse',
page: mw.config.get('wgPageName'),
prop: 'sections',
wrapoutputclass: '',
disablelimitreport: 1,
disableeditsection: 1,
disabletoc: 1,
formatversion: 2
});
let target = !isLead && parse.sections.find(s => s.index === data[1]);
if (isLead || target) {
let next = parse.sections.find(s => s.index - 1 === Number(data[1]));
newSource = (isLead ? '' : [...source].slice(0, target.byteoffset)).join('') +
data[2] + (next ? '\n\n' + [...source].slice(next.byteoffset).join('') : '\n');
start = isLead ? 0 : target.byteoffset;
} else {
newSource = source + '\n\n' + data[2] + '\n';
start = source.length;
msg = `Section restored. Couldn't find the section. The source is appended at bottom.`;
notifOpts.type = 'warn';
}
orig[0] = infuseAndCall('#wpSummaryWidget', 'getValue');
infuseAndCall('#wpSummaryWidget', 'setValue', data[3]);
}
$textarea.textSelection('setContents', newSource);
orig[1] = infuseAndCall('#wpMinoreditWidget', 'getSelected');
infuseAndCall('#wpMinoreditWidget', 'setSelected', data[4]);
orig[2] = infuseAndCall('#wpWatchthisWidget', 'getSelected');
infuseAndCall('#wpWatchthisWidget', 'setSelected', data[5]);
orig[3] = infuseAndCall('#wpWatchlistExpiryWidget', 'getValue');
infuseAndCall('#wpWatchlistExpiryWidget', 'setValue', data[6]);
setTimeout(() => {
$textarea.textSelection('setSelection', { start });
});
let notif = await mw.notify($([
document.createTextNode(msg || 'Section restored.'),
$('<p>').append(
new OO.ui.ButtonWidget({
flags: 'destructive',
label: 'Discard'
}).on('click', () => {
$textarea.textSelection('setContents', source);
if (orig[0]) {
infuseAndCall('#wpSummaryWidget', 'setValue', orig[0]);
}
infuseAndCall('#wpMinoreditWidget', 'setSelected', orig[1]);
infuseAndCall('#wpWatchthisWidget', 'setSelected', orig[2]);
infuseAndCall('#wpWatchlistExpiryWidget', 'setValue', orig[3]);
notif.close();
}).$element
)[0]
]), notifOpts);
});
mw.config.exists('wgPostEdit') &&
mw.loader.using('mediawiki.storage', () => {
mw.storage.session.remove('editfullpage');
});
mw.config.get('wgAction') === 'history' &&
mw.hook('wikipage.content').add(async $content => {
if (!$content.has('.mw-history-line-updated').length) return;
let href = $content.find('a.mw-history-histlinks-current:not(.mw-history-line-updated a)').attr('href');
if (!href) {
await mw.loader.using(['mediawiki.api', 'mediawiki.util']);
let page = (await new mw.Api().get({
action: 'query',
titles: mw.config.get('wgPageName'),
prop: 'info',
inprop: 'notificationtimestamp',
formatversion: 2
})).query.pages[0];
let rev = (await new mw.Api().get({
action: 'query',
titles: page.title,
prop: 'revisions',
rvprop: 'ids',
rvlimit: 1,
rvstart: Date.parse(page.notificationtimestamp) / 1000 - 1,
formatversion: 2
})).query.pages[0].revisions?.[0].revid;
if (!rev || rev >= page.lastrevid) return;
href = mw.util.getUrl(page.title, { diff: page.lastrevid, oldid: rev });
}
$content.find('.mw-history-compareselectedversions-button').first().after(
' ',
$('<a>').attr({
class: 'unseendiff',
href: href
}).text('unseen')
);
});
(async () => {
let cspn = mw.config.get('wgCanonicalSpecialPageName');
let isBp = cspn === 'Blankpage';
if (!isBp && cspn !== 'Watchlist') return;
await mw.loader.using('mediawiki.util');
let notify = async (text, options, pn) => {
let msg = [document.createTextNode(text)];
if (pn) {
msg.push(
$('<p>').append(
$('<a>').attr('href', mw.util.getUrl(pn)).text(pn),
' ',
$('<span>').addClass('mw-changeslist-links').append(
$('<span>').append(
$('<a>')
.attr('href', mw.util.getUrl(pn, { action: 'edit' }))
.text('edit')
),
$('<span>').append(
$('<a>')
.attr('href', mw.util.getUrl(pn, { action: 'history' }))
.text('history')
)
)
)[0]
);
}
if (isBp) {
await $.ready;
$('#mw-content-text').html(msg);
} else {
return mw.notify(msg, Object.assign(options || {}, {
tag: 'unseendiff'
}));
}
};
let getUrl = async pn => {
await mw.loader.using('mediawiki.api');
let page = (await new mw.Api().get({
action: 'query',
titles: pn,
prop: 'info',
inprop: 'notificationtimestamp',
formatversion: 2
})).query.pages[0];
if (!page.notificationtimestamp) {
notify(`Couldn't get the last seen time.`, {
type: 'warn'
}, pn);
return;
}
let rev = (await new mw.Api().get({
action: 'query',
titles: pn,
prop: 'revisions',
rvprop: 'ids',
rvlimit: 1,
rvstart: Date.parse(page.notificationtimestamp) / 1000 - 1,
formatversion: 2
})).query.pages[0].revisions?.[0].revid;
if (rev === page.lastrevid) {
notify('Already seen.', {
type: 'warn'
}, pn);
return;
}
if (!rev) {
rev = (await new mw.Api().get({
action: 'query',
titles: pn,
prop: 'revisions',
rvprop: 'ids',
rvlimit: 1,
rvstart: Date.parse(page.notificationtimestamp) / 1000 - 1,
rvdir: 'newer',
formatversion: 2
})).query.pages[0].revisions?.[0].revid;
if (!rev) {
notify(`Couldn't get the last seen revision.`, {
type: 'warn'
}, pn);
return;
}
}
if (rev > page.lastrevid) {
notify(`Invalid rev for "${pn}" (rev: ${rev}, lastrevid: ${page.lastrevid})`, {
autoHideSeconds: 'long',
type: 'warn'
}, pn);
return;
}
return mw.util.getUrl(page.title, { diff: page.lastrevid, oldid: rev });
};
if (isBp) {
let pn = mw.config.get('wgTitle').match(/^[^/]+\/unseendiff\/(.+)$/)?.[1];
if (!pn) return;
notify('Loading...', null, pn);
let href = await getUrl(pn);
if (!href) return;
notify('Redirecting...', null, pn);
location.href = href;
return;
}
let handler = async function (e) {
if (e.which > 2) return;
e.preventDefault();
let pn = this.dataset.pn;
if (!pn) {
notify(`Couldn't get the page name.`, {
type: 'error'
});
return;
}
let notifPromise = notify('Loading...', {
autoHideSeconds: 'long'
});
let href = await getUrl(pn);
if (!href) return;
$(`.unseendiff-loader[data-pn="${$.escapeSelector(pn)}"]`).attr({
class: 'unseendiff',
href: href,
target: '_blank'
}).off('click auxclick', handler);
if (e.type === 'auxclick' || e.ctrlKey || e.metaKey || e.shiftKey) {
open(href);
} else {
this.click();
}
(await notifPromise).close();
};
mw.hook('wikipage.content').add($content => {
$content.find(
'.mw-changeslist-src-mw-edit.mw-changeslist-watchedunseen:not(.mw-changeslist-watchedseen) .mw-changeslist-line-inner'
).each(function () {
let pn = this.dataset.targetPage ||
this.closest('[data-target-page]')?.dataset.targetPage ||
this.closest('table.mw-enhanced-rc')?.querySelector('[data-target-page]')?.dataset.targetPage;
if (!pn) return;
$('<span>').append(
$('<a>').attr({
class: 'unseendiff-loader',
href: mw.util.getUrl(`Special:BlankPage/unseendiff/${pn}`),
'data-pn': pn
}).on('click auxclick', handler).text('unseen')
).appendTo(
[...this.querySelectorAll('.mw-pager-tools')].pop() ||
$('<span>').addClass('mw-changeslist-links mw-pager-tools').appendTo(this).before(' ')
);
});
});
})();
['Contributions', 'IPContributions', 'Blankpage'].includes(mw.config.get('wgCanonicalSpecialPageName')) &&
mw.loader.using('mediawiki.util', () => {
let watched = new Set();
let query = async lis => {
let titles = Object.keys(lis).slice(0, 50);
if (!titles.length) return;
await mw.loader.using('mediawiki.api');
let pages = (await new mw.Api().post({
action: 'query',
titles: titles,
prop: 'info',
inprop: 'notificationtimestamp|watched',
formatversion: 2
}, {
headers: { 'Promise-Non-Write-API-Action': 1 }
})).query.pages;
for (let page of pages) {
if (!Object.hasOwn(lis, page.title)) continue;
if (page.watched) {
watched.add(page);
$(lis[page.title]).addClass('watched');
}
if (!page.notificationtimestamp) continue;
let rev = (await new mw.Api().get({
action: 'query',
titles: page.title,
prop: 'revisions',
rvprop: 'ids',
rvlimit: 1,
rvstart: Date.parse(page.notificationtimestamp) / 1000 - 1,
formatversion: 2
})).query.pages[0].revisions?.[0].revid;
if (!rev || rev === page.lastrevid) continue;
if (rev > page.lastrevid) {
mw.notify($([
document.createTextNode('Invalid rev for "'),
$('<a>').attr({
href: mw.util.getUrl(page.title, { action: 'history' }),
target: '_blank'
}).text(page.title)[0],
document.createTextNode(`" (rev: ${rev}, lastrevid: ${page.lastrevid})`),
]), {
autoHideSeconds: 'long',
type: 'warn'
});
continue;
}
$('<span>').append(
$('<a>').attr({
class: 'unseendiff',
href: mw.util.getUrl(page.title, {
diff: page.lastrevid,
oldid: rev
})
}).text('unseen')
).appendTo(
lis[page.title].map(li => (
[...li.querySelectorAll(':scope > .mw-pager-tools')].pop() ||
$('<span>').addClass('mw-changeslist-links mw-pager-tools').appendTo(li).before(' ')
))
);
}
titles.forEach(title => {
delete lis[title];
});
query(lis);
};
mw.hook('wikipage.content').add($content => {
$content.find(
'.mw-contributions-list > li:not(.mw-contributions-current)[data-mw-revid]'
).each(function () {
let link = this.querySelector('a.mw-changeslist-date, a.mw-changeslist-history');
let pn = link ? new URLSearchParams(link.search).get('title') : '';
$('<span>').append(
$('<a>').attr({
class: 'mw-changeslist-diff',
href: mw.util.getUrl(pn, {
diff: 'cur',
oldid: this.dataset.mwRevid
})
}).text('cur')
).appendTo(
[...this.querySelectorAll(':scope > .mw-pager-tools')].pop() ||
$('<span>').addClass('mw-changeslist-links mw-pager-tools').appendTo(this).before(' ')
);
});
if (mw.config.get('wgWikiID') === 'wikidatawiki') return;
let lis = {};
$content.find('.mw-contributions-title').each(function () {
let title = this.textContent;
if (!Object.hasOwn(lis, title)) {
lis[title] = [];
}
lis[title].push(this.closest('li'));
});
Object.keys(lis).forEach(title => {
if (watched.has(title)) {
$(lis[title]).addClass('watched');
delete lis[title];
}
});
query(lis);
});
});
['edit', 'submit'].includes(mw.config.get('wgAction')) &&
mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Nardog/sandbox9.js&action=raw&ctype=text/javascript');
mw.config.get('wgWikiID') === 'metawiki' &&
(async () => {
let css = mw.loader.addStyleTag(`.wishtitle {
font-size: 90%;
font-style: italic;
word-break: break-word;
}
.wishtitle > a {
color: var(--color-warning, #886425);
}
.wishtitle > a:visited {
color: var(--border-color-warning--hover, #735421);
}
.wishtitle-declined > a {
text-decoration: line-through;
}
.wishtitle-declined > a:hover,
.wishtitle-declined > a:focus,
.mw-underline-always .wishtitle-declined > a {
text-decoration: line-through underline;
}
#watchlist-edit-form .wishtitle {
display: inline-block;
}
.mw-search-result-heading > .wishtitle,
.catchangesviewer-table .wishtitle {
display: block;
}
.catchangesviewer-table:has(.wishtitle) {
white-space: wrap;
}`);
let lang = mw.config.get('wgUserLanguage');
let titles;
let loadTitles = async () => {
await mw.loader.using('mediawiki.storage');
titles = titles || mw.storage.getObject('wishtitles');
if (titles?.lang !== lang) {
titles = { lang, w: [], fa: [] };
}
};
let updateTitles = async (crwstatuses, crwcontinue) => {
await mw.loader.using('mediawiki.api');
let params = {
action: 'query',
list: 'communityrequests-wishes',
crwlang: lang,
crwstatuses: crwstatuses,
crwprop: 'title|updated',
crwsort: 'updated',
crwdir: 'ascending',
crwlimit: 'max',
crwcontinue: crwcontinue,
formatversion: 2
};
if (!crwcontinue && !crwstatuses && titles._) {
params.crwcontinue = `|${titles._}|0`;
}
let response = await new mw.Api().get(params);
let wishes = response?.query?.['communityrequests-wishes'];
if (wishes?.length) {
let $span = $('<span>');
wishes.forEach(w => {
let id = w.crwtitle.match(/^Community Wishlist\/W(\d+)/)?.[1];
if (!id) return;
titles.w[id - 1] = $span.html(w.title).text();
if (crwstatuses === 'declined') {
(titles.wd = titles.wd || []).push(id - 1);
}
let faId = w.crfatitle?.match(/^Community Wishlist\/FA(\d+)/)?.[1];
if (!faId) return;
titles.fa[faId - 1] = w.focusareatitle;
});
if (!crwstatuses) {
titles._ = wishes.at(-1).updated.replace(/\D/g, '');
}
}
let expiry = 86400;
if (crwstatuses || crwcontinue) {
let prev = mw.storage.getObject('_EXPIRY_wishtitles');
if (prev) {
expiry = Math.round(Date.now() / 1000) + 86400 - prev;
}
}
mw.storage.setObject('wishtitles', titles, expiry);
crwcontinue = response?.continue?.crwcontinue;
if (crwcontinue) {
await updateTitles(crwstatuses, crwcontinue);
}
};
let getTitle = id => (
id[0] === 'W' ? titles.w[id.slice(1) - 1] : titles.fa[id.slice(2) - 1]
);
let renderTitle = (title, id, tag = 'span') => {
let classes = 'wishtitle';
if (id[0] === 'W' && titles.wd?.includes(id.slice(1) - 1)) {
classes += ' wishtitle-declined';
}
return $(`<${tag}>`).addClass(classes).append(
$('<a>').attr({
href: `/wiki/Community_Wishlist/${id}`,
title: `Community Wishlist/${id}`
}).text(title)
);
};
let callback = ([id, links]) => {
let title = getTitle(id);
if (!title) {
return true;
}
$(links).after(' ', renderTitle(title, id));
};
let selector = '.mw-changeslist-title, ' +
'.mw-changeslist-log-entry > a:not(.mw-userlink), ' +
'.mw-changeslist-line.mw-changeslist-src-mw-categorize :is(.mw-changeslist-line-inner, .mw-changeslist-line-inner-comment, .mw-enhanced-rc-nested) > .comment > a, ' +
'#watchlist-edit-form .cdx-table td > label > a, ' +
'.mw-search-result-heading > a:not(:has(> .ext-communityrequests-entity-link--label)), ' +
'.mw-contributions-title, ' +
'#mw-whatlinkshere-list li > bdi > a, ' +
'.mw-allpages-chunk > li > a, ' +
'.mw-prefixindex-list > li > a, ' +
'.mw-logevent-loglines > li > a, ' +
'#mw-pages li > a, ' +
'.catchangesviewer-table td:nth-child(3) > a';
mw.hook('wikipage.content').add(async $content => {
let links = {};
$content.find('a').each(function () {
if (!this.matches(selector)) return;
let id = this.textContent.match(
/^(?:Talk:|Translations:)?Community Wishlist\/((?:W|FA)\d+)/
)?.[1];
if (!id) return;
(links[id] = links[id] || []).push(this);
});
links = Object.entries(links);
if (!links.length) return;
await loadTitles();
links = links.filter(callback);
if (!links.length) return;
await updateTitles();
links = links.filter(callback);
if (!links.length) return;
await updateTitles('declined');
links.forEach(callback);
});
let pn = mw.config.get('wgRelevantPageName');
let id = pn.match(/^(?:Talk:|Translations:)?Community_Wishlist\/((?:W|FA)\d+)/)?.[1];
if (!id) return;
await $.ready;
let extTitle = document.querySelector('.ext-communityrequests-wish--title');
if (extTitle && $('.mw-pt-languages-selected').attr('lang') === lang) return;
await loadTitles();
let title = getTitle(id);
if (!title) {
await updateTitles();
title = getTitle(id);
if (!title) {
await updateTitles('declined');
title = getTitle(id);
if (!title) return;
}
}
let $title = renderTitle(title, id, 'div');
if (mw.config.get('skin') === 'vector-2022') {
$title.prependTo('.vector-page-toolbar');
} else {
$title.insertAfter('#firstHeading');
}
css.textContent += ' .ext-communityrequests-entity-talk-header{display:none}';
if (extTitle) return;
document.title = document.title.replace(
pn.replaceAll('_', ' '),
`${pn.replace(`Community_Wishlist/${id}`, title)} ($&)`
);
})();
mw.config.get('wgWikiID') === 'metawiki' &&
mw.hook('wikipage.watchlistChange').add(async (isWatched, expiry) => {
if (![0, 1].includes(mw.config.get('wgNamespaceNumber'))) return;
let title = mw.config.get('wgTitle');
if (!/^Community Wishlist\/(?:W|FA)\d+$/.test(title)) return;
if (isWatched) {
await new mw.Api().watch(title + '/Votes', expiry);
mw.notify('Watching /Votes too.');
} else {
await new mw.Api().unwatch(title + '/Votes');
mw.notify('Unwatched /Votes too.');
}
});
['edit', 'submit'].includes(mw.config.get('wgAction')) &&
$(async () => {
let $input = $('#wpTemplateSandboxTemplate');
if (!$input.length) return;
mw.loader.addStyleTag('#templatesandbox-editform .oo-ui-fieldLayout{max-width:50em} #templatesandbox-editform .oo-ui-fieldLayout-field{flex-grow:999}');
let makeTemplateField = () => new OO.ui.FieldLayout(
new mw.widgets.TitleInputWidget({
inputId: 'wpTemplateSandboxTemplate',
name: 'wpTemplateSandboxTemplate',
showMissing: false,
value: $input.val()
}),
{ label: 'Template name:' }
);
if (mw.loader.getState('ext.TemplateSandbox') !== 'registered') {
await mw.loader.using('mediawiki.widgets');
$input.parent().replaceWith(makeTemplateField().$element);
return;
}
let require = await mw.loader.using([
'ext.TemplateSandbox.TemplateSandboxTitleWidget',
'ext.TemplateSandbox.styles', 'jquery.makeCollapsible', 'user.options'
]);
let widget = new (require('ext.TemplateSandbox.TemplateSandboxTitleWidget'))({
$overlay: true,
id: 'wpTemplateSandboxPage',
maxLength: 255,
name: 'wpTemplateSandboxPage',
placeholder: 'Page title',
required: false,
tabIndex: 10,
templateTitleFunc: () => $('#wpTemplateSandboxTemplate').val()
});
widget.$element.attr('data-ooui', '{"_":"mw.widgets.TemplateSandboxTitleWidget"}')
.data('oouiInfused', widget);
let fieldset = new OO.ui.FieldsetLayout({
classes: ['mw-templatesandbox-fieldset', 'mw-collapsed'],
id: 'templatesandbox-editform',
items: [
makeTemplateField(),
new OO.ui.ActionFieldLayout(
widget,
new OO.ui.ButtonInputWidget({
id: 'wpTemplateSandboxPreview',
name: 'wpTemplateSandboxPreview',
label: 'Show preview',
tabIndex: 10,
type: 'submit',
useInputTag: true
}),
{ align: 'top' }
)
],
label: 'Preview page with this template'
});
fieldset.$label.append(' ', $('<span>').addClass('mw-collapsible-toggle-placeholder'));
fieldset.$group.addClass('mw-collapsible-content');
$('#templatesandbox-editform').replaceWith(fieldset.$element.makeCollapsible());
let modules = ['ext.TemplateSandbox'];
if (Number(mw.user.options.get('uselivepreview'))) {
modules.push('ext.TemplateSandbox.preview');
}
mw.loader.load(modules);
});
mw.config.get('wgWikiID') === 'enwiki' &&
mw.config.get('wgCanonicalSpecialPageName') === 'Watchlist' &&
(async () => {
mw.loader.addStyleTag('.xfdnotifier-sublinks::before{content:" ["} .xfdnotifier-sublinks::after{content:"]"} .xfdnotifier-sublinks > span:not(:first-child)::before{content:"\\2009·\\2009"} .mw-portlet.vector-menu[id^="p-xfdnotifier-"] a{display:inline}');
await mw.loader.using(['mediawiki.api', 'mediawiki.Title', 'mediawiki.storage']);
let xfds = [
{
id: 'rm',
label: 'RM',
full: 'Requested moves',
cat: 'Requested moves',
},
{
id: 'rmt',
label: 'RM/T',
full: 'Requested moves (technical)',
page: 'Wikipedia:Requested_moves/Technical_requests',
titleExtractor: $page => (
$page.find(`[data-mw*='"wt":"RMassist/core"']`).closest('li').map(function () {
return this.querySelector('a[rel="mw:WikiLink"]')?.title;
}).get()
)
},
{
id: 'afd',
label: 'AfD',
full: 'Articles for deletion',
cat: 'Articles for deletion'
},
{
id: 'mfd',
label: 'MfD',
full: 'Miscellaneous for deletion',
cat: 'Miscellaneous pages for deletion'
},
{
id: 'tfd',
label: 'TfD',
full: 'Templates for deletion',
cat: 'Templates for deletion'
},
{
id: 'tfm',
label: 'TfM',
full: 'Templates for merging',
cat: 'Templates for merging'
},
{
id: 'cfd',
label: 'CfD',
full: 'Categories for deletion',
cat: 'Categories for deletion'
},
{
id: 'cfr',
label: 'CfR',
full: 'Categories for renaming',
cat: 'Categories for renaming'
},
{
id: 'cfsr',
label: 'CfSR',
full: 'Categories for speedy renaming',
cat: 'Categories for speedy renaming'
},
{
id: 'cfm',
label: 'CfM',
full: 'Categories for merging',
cat: 'Categories for merging'
},
{
id: 'cfs',
label: 'CfS',
full: 'Categories for splitting',
cat: 'Categories for splitting'
},
{
id: 'cfl',
label: 'CfL',
full: 'Categories for listifying',
cat: 'Categories for listifying'
},
{
id: 'cfc',
label: 'CfC',
full: 'Categories for conversion',
cat: 'Categories for conversion'
},
{
id: 'cfgd',
label: 'CfGD',
full: 'Categories for general discussion',
cat: 'Categories for general discussion'
},
{
id: 'ffd',
label: 'FfD',
full: 'Files for discussion',
cat: 'Wikipedia files for discussion'
},
{
id: 'rfd',
label: 'RfD',
full: 'Redirects for discussion',
cat: 'All redirects for discussion'
},
{
id: 'prod',
label: 'PROD',
full: 'Articles proposed for deletion',
cat: 'All articles proposed for deletion'
}
];
window.xfd = xfds;
let queryTitles = async (xfd, titles) => {
if (!titles.length) return;
let response = await new mw.Api().get({
action: 'query',
titles: titles.slice(0, 50),
prop: 'info',
inprop: 'watched',
formatversion: 2
});
response?.query?.pages?.forEach(p => {
if (p.watched) {
xfd.pages.push(p.title);
}
});
await queryTitles(xfd, titles.slice(50));
};
let queryPage = async xfd => {
let $page = $($.parseHTML(await $.get(
`https://en.wikipedia.org/w/rest.php/v1/page/${encodeURIComponent(xfd.page)}/html`
)));
await queryTitles(xfd, xfd.titleExtractor($page));
};
let queryCat = async (xfd, gcmcontinue) => {
let response = await new mw.Api().get({
action: 'query',
prop: 'info|categories',
inprop: 'watched',
clprop: 'sortkey',
clcategories: `Category:${xfd.cat}`,
generator: 'categorymembers',
gcmtitle: `Category:${xfd.cat}`,
gcmlimit: 'max',
gcmsort: 'timestamp',
gcmdir: 'older',
gcmcontinue: gcmcontinue,
formatversion: 2
});
response?.query?.pages?.forEach(p => {
if (p.watched && p.categories?.[0]?.sortkeyprefix !== ' ') {
xfd.pages.push(p.title);
}
});
if (response?.continue?.gcmcontinue) {
await queryCat(xfd, response.continue.gcmcontinue);
}
};
let show = async (xfd, lastId, isCache) => {
if (xfd.portlet && isCache) return;
let portletId = 'p-xfdnotifier-' + xfd.id;
if (xfd.portlet) {
$(xfd.portlet).find('ul').empty();
if (!xfd.pages.length) return;
} else {
await $.ready;
xfd.portlet = mw.util.addPortlet(portletId, xfd.label, '#' + lastId);
}
let $label = $(`#${portletId}-label`).attr('title', xfd.full);
if (xfd.page) {
$label.wrapInner($('<a>').attr('href', mw.util.getUrl(xfd.page)));
}
xfd.pages.forEach(p => {
let t = mw.Title.newFromText(p);
let isTalk = t.isTalkPage();
let $other = $('<a>').attr({
href: t[isTalk ? 'getSubjectPage' : 'getTalkPage']().getUrl(),
title: isTalk ? 'subject' : 'talk'
}).text(isTalk ? 's' : 't');
let link = mw.util.addPortletLink(portletId, t.getUrl(), p).querySelector('a');
$('<span>').addClass('xfdnotifier-sublinks').append(
$('<span>').append($other),
$('<span>').append(
$('<a>').attr({
href: t.getUrl({ action: 'history' }),
title: 'history'
}).text('h')
)
).insertAfter(link);
});
};
mw.hook('wikipage.content').add(mw.util.throttle(async () => {
let cache = mw.storage.getObject('xfdnotifier') || {};
let lastId = 'p-tb';
for (let xfd of xfds) {
let portletId = 'p-xfdnotifier-' + xfd.id;
let now = Math.floor(Date.now() / 1000);
if (now - cache[xfd.id]?.[0] < 600) {
xfd.pages = cache[xfd.id].slice(1);
await show(xfd, lastId, true);
lastId = portletId;
continue;
}
xfd.pages = [];
if (xfd.cat) {
await queryCat(xfd);
} else if (xfd.page) {
await queryPage(xfd);
}
cache[xfd.id] = [now, ...xfd.pages];
mw.storage.setObject('xfdnotifier', cache, 604800);
await show(xfd, lastId);
lastId = portletId;
}
}, 1800000));
})();
f91vnlddi4w8pistknkzddg5ojynitv
754439
754438
2026-07-31T17:58:14Z
Nardog
40946
754439
javascript
text/javascript
(async function listTools() {
let pageAction = mw.config.get('wgAction');
let isView = pageAction === 'view';
let isEdit = ['edit', 'submit'].includes(pageAction);
if (!isView && !isEdit) return;
let pageType = mw.config.get('wgCanonicalSpecialPageName') ||
mw.config.get('wgNamespaceNumber');
if (isView && !pageType && !mw.config.exists('wgRedirectedFrom') &&
!mw.config.get('wgIsRedirect') &&
!mw.config.get('wgPageName').includes('/')
) {
return;
}
await mw.loader.using([
'mediawiki.util', 'mediawiki.Title', 'mediawiki.api',
'mediawiki.interface.helpers.styles'
]);
mw.loader.addStyleTag(`.listtools:not(#mw-content-subtitle .listtools) {
font-size: 85%;
}
.listtools, .listtools a {
font-weight: normal !important;
font-style: normal;
}
.mw-datatable .listtools {
display: block;
}
.listtools + .mw-whatlinkshere-tools,
#watchlist-edit-form .listtools ~ .mw-changeslist-links,
.mw-special-DisambiguationPageLinks .listtools + a {
display: none;
}`);
let messages = Object.assign({
watched: 'Added "$1" to your watchlist',
watchFail: `Couldn't watch "$1"`,
unwatchFail: `Couldn't unwatch "$1"`
}, window.listtoolsMessages);
let getMsg = (key, ...args) => (
Object.hasOwn(messages, key) ? mw.format(messages[key], ...args) : key
);
let notif;
let watchHandler = async function (e) {
e.preventDefault();
let $link = $(this);
let $wrapper = $link.parent();
$link.detach();
let params = new URLSearchParams(this.search);
let action = params.get('action');
$wrapper.text(getMsg(action + 'ing'));
let pn = params.get('title').replaceAll('_', ' ');
let promise = new mw.Api()[action](pn);
if (notif) {
notif.close();
notif = null;
}
try {
let result = await promise;
if (!result || !result[action + 'ed']) throw '';
let newAction = action === 'watch' ? 'unwatch' : 'watch';
params.set('action', newAction);
$link.add(`.listtools-watch > a[href="${this.pathname + this.search}"]`)
.attr('href', this.pathname + '?' + params)
.text(getMsg(newAction));
if (action !== 'watch') return;
let require = await mw.loader.using([
'mediawiki.notification', 'mediawiki.watchstar.widgets'
]);
notif = await mw.notify(
new (require('mediawiki.watchstar.widgets'))('watch', pn, null, $.noop, {
message: getMsg('watched', pn)
}).$element,
{ tag: 'listtools' }
);
} catch {
notif = await mw.notify(getMsg(action + 'Fail', pn), {
tag: 'listtools',
type: 'error'
});
} finally {
$wrapper.html($link);
}
};
let extGetMain = function () {
return this.title;
};
let re = new RegExp(`(?:\\?title=|${
mw.util.escapeRegExp(mw.format(mw.config.get('wgArticlePath'), ''))
})([^#&?]+)`);
let processed = new WeakSet();
let processLinks = ($links, module, titles) => {
let isBatch = !!titles;
titles = titles || new Set();
$links.each(function (i) {
if (processed.has(this)) return;
let $link = $links.eq(i);
let pn;
if (module.useText) {
pn = $link.text();
} else {
let match = $link.attr('href')?.match(re);
if (!match) return;
pn = decodeURIComponent(match[1]);
}
let t = mw.Title.newFromText(pn);
if (!t) return;
if (module.titlesOnly) {
let text = $link.text();
if (text !== pn.replaceAll('_', ' ') &&
(text !== t.getMainText() || t.namespace === 2)
) {
return;
}
}
if ($link.is('.external, .extiw')) {
Object.assign(t, {
getMain: extGetMain,
host: this.host,
namespace: 0,
title: pn
});
} else {
if (t.namespace < 0) return;
if ($link.hasClass('new')) {
t.missing = true;
}
titles.add(t.getSubjectPage().toText());
}
let $tools = $('<span>').addClass('listtools mw-changeslist-links')
.data('listtools', t);
tools.forEach(tool => {
addTool($tools, tool);
});
if ($link.is(':is(del, bdi) > :only-child')) {
if (module.position === 'end') {
$link.parent().parent().append(' ', $tools);
} else {
$link.parent().after(' ', $tools);
}
} else if (module.position === 'end') {
$link.parent().append(' ', $tools);
} else {
$link.after(' ', $tools);
}
if (module.post) {
module.post($tools);
}
processed.add(this);
});
if (!isBatch) {
getWatched(titles);
}
};
let tools = [
{
name: 'edit',
url: t => t.getUrl({ action: 'edit' })
},
{
name: 'hist',
url: t => !t.missing && t.getUrl({ action: 'history' })
},
{
name: 'links',
url: t => mw.util.getUrl('Special:WhatLinksHere/' + t)
},
{
name: 'watch',
url: t => !t.host && t.getSubjectPage().getUrl({ action: 'watch' }),
callback: watchHandler
}
];
let addTool = ($tools, tool, escapedName) => {
let t = $tools.data('listtools');
let $duplicate = escapedName &&
$tools.children('.listtools-' + escapedName);
let url = tool.url;
if (typeof url === 'function') {
url = url(t);
if (!url) {
$duplicate?.remove();
return;
}
}
let $link = $('<a>').attr('href', url).text(getMsg(tool.name));
if (t.host) {
$link.prop('host', t.host);
}
if (tool.callback) {
$link.on('click', tool.callback);
}
let $wrapper = $('<span>').addClass('listtools-' + tool.name)
.append($link);
let $next = tool.next && $tools.children('.listtools-' + tool.next);
if ($next?.length) {
$duplicate?.remove();
$next.before($wrapper);
} else if ($duplicate?.length) {
$duplicate.replaceWith($wrapper);
} else {
$tools.append($wrapper);
}
};
let extend = tool => {
if (tool.label && !Object.hasOwn(messages, tool.label)) {
messages[tool.name] = tool.label;
}
if (tool.next) {
tool.next = $.escapeSelector(tool.next);
}
let existingTool = tools.find(t => t.name === tool.name);
if (existingTool) {
Object.assign(existingTool, tool);
} else {
tools.push(tool);
}
let escapedName = existingTool && $.escapeSelector(tool.name);
let $allTools = $('.listtools');
$allTools.each(function (i) {
addTool($allTools.eq(i), tool, escapedName);
});
};
let getWatched = async titles => {
if (!Array.isArray(titles)) {
titles = [...titles].slice(0, 500);
}
if (!titles.length) return;
(await new mw.Api().post({
action: 'query',
titles: titles.slice(0, 50),
prop: 'info',
inprop: 'watched',
formatversion: 2
}, {
headers: { 'Promise-Non-Write-API-Action': 1 }
})).query.pages.forEach(page => {
if (!page.watched) return;
$(`.listtools-watch > a[href="${mw.util.getUrl(page.title, { action: 'watch' })}"]`)
.attr('href', mw.util.getUrl(page.title, { action: 'unwatch' }))
.text(getMsg('unwatch'));
});
getWatched(titles.slice(50));
};
mw.hook('listtools.ready').fire(extend);
let catTreeCallback = (records, observer) => {
let $links = $(records[0].target).find('.CategoryTreeItem > bdi > a');
if ($links.length) {
observer.takeRecords();
observer.disconnect();
processLinks($links, catTreeModule);
}
};
let catTreeModule = {
selector: '.CategoryTreeItem > bdi > a',
types: [14, 'CategoryTree'],
position: 'end',
post: $tools => {
$tools.parent().next('.CategoryTreeChildren').each(function () {
new MutationObserver(catTreeCallback)
.observe(this, { childList: true });
});
}
};
let modules = [
{
selector: '#mw-pages li > a:not(:empty), #mw-pages li > span > a',
types: [14]
},
catTreeModule,
{
selector: '#mw-imagepage-section-linkstoimage a, #mw-imagepage-section-globalusage a',
types: [6]
},
{
selector: '#mw-globalusage-result a',
types: ['GlobalUsage']
},
{
selector: '.mw-search-result-heading > a, .searchalttitle > a.mw-redirect, .iw-result__title > a, .mw-search-exists a',
types: ['Search']
},
{
selector: '.mw-search-createlink a',
types: ['Search'],
titlesOnly: true
},
{
selector: '#watchlist-edit-form .cdx-table td > label > a',
types: ['EditWatchlist']
},
{
selector: '.plainlinks > li > a',
types: ['AbuseLog'],
titlesOnly: true
},
{
selector: '#mw-allmessagestable td:first-child > a:first-child:not(.new)',
types: ['Allmessages'],
position: 'end'
},
{
selector: '.mw-spcontent li a',
types: ['DisambiguationPageLinks', 'Listredirects'],
titlesOnly: true
},
{
selector: 'li > a:first-child',
types: ['FileDuplicateSearch']
},
{
selector: '.TablePager_col_title > a:first-child, .TablePager_col_template > a',
types: ['LintErrors'],
post: $tools => {
$tools.parent().contents().slice(3).remove();
}
},
{
selector: 'form > ul > li > a',
types: ['Nuke'],
position: 'end',
titlesOnly: true
},
{
selector: '.page-assessments a',
types: ['PageAssessments'],
titlesOnly: true
},
{
selector: '.TablePager_col_pr_page > a',
types: ['Protectedpages'],
position: 'end'
},
{
selector: '#mw-content-text > ul a',
types: ['Protectedtitles'],
position: 'end'
},
{
selector: '.mw-fr-pending-changes-page-title',
types: ['PendingChanges'],
post: $tools => {
$tools.parent().contents().slice(3).remove();
}
},
{
selector: '#mw-content-text > ul a:first-child',
types: ['StablePages'],
position: 'end'
},
{
selector: '.TablePager_col__page a',
types: ['TopicSubscriptions']
},
{
selector: '.undeleteResult > a',
types: ['Undelete'],
position: 'end',
useText: true
},
{
selector: '.TablePager_col_img_name > a:first-child',
// types: ['Listfiles'],
position: 'end'
},
{
selector: '.mw-newpages-pagename:not(:empty), .mw-newpages-pagename:empty + a',
post: $tools => {
let $nodes = $tools.parent().contents();
$nodes.slice(
$nodes.index($tools) + 1,
$nodes.index($nodes.filter('.mw-newpages-length'))
).replaceWith(' ');
}
},
{
selector: '#mw-whatlinkshere-list li > bdi > a'
},
{
selector: '.mw-changeslist-log-entry > a:not(.mw-changeslist-log-gblblock a, .mw-changeslist-log-globalauth a)',
titlesOnly: true
},
{
selector: '.mw-logevent-loglines > li:not(.mw-logline-gblblock, .mw-logline-globalauth) > a',
types: ['Log'],
titlesOnly: true
},
{
selector: '#mw-diff-otitle1 > strong > a, #mw-diff-ntitle1 > strong > a',
types: ['ComparePages'],
position: 'end'
},
{
selector: '#movepage-oldlink, #movepage-newlink',
types: ['Movepage']
},
{
selector: '.mw-undelete-revision a:not(.mw-userlink, .mw-usertoollinks > a)',
types: ['Undelete'],
useText: true
},
{
selector: '.galleryfilename, ' +
'.mw-allpages-chunk > li > a, ' +
'.mw-prefixindex-list > li > a, ' +
'.mw-changeslist-line.mw-changeslist-src-mw-categorize .mw-changeslist-line-inner > .comment > a:not(:empty), ' +
'.mw-changeslist-line.mw-changeslist-src-mw-categorize .mw-changeslist-line-inner-comment > .comment > a:not(:empty), ' +
'.mw-changeslist-line.mw-changeslist-src-mw-categorize .mw-enhanced-rc-nested > .comment > a:not(:empty)'
},
{
selector: '.mw-spcontent li a',
position: 'end',
titlesOnly: true
}
];
if (isEdit) {
let post = $tools => {
if (!$tools[0].closest('.templatesUsed')) return;
$tools.parent().contents().last().each(function () {
this.textContent = this.textContent.slice(1);
}).end().slice(-3, -1).remove();
};
let callback = mw.util.debounce(() => {
processLinks(
$('.mw-editfooter-list a, #wikiPreview > .previewnote a'),
{ titlesOnly: true, post }
);
}, 500);
mw.hook('wikipage.editform').add($form => {
callback();
$form.find('.templatesUsed').each(function () {
if (processed.has(this)) return;
processed.add(this);
new MutationObserver(callback)
.observe(this, { childList: true, subtree: true });
});
});
} else if (typeof pageType === 'number') {
$(() => {
processLinks($('.subpages a, .mw-redirectedfrom a, .redirectText a'), {});
});
}
mw.hook('wikipage.content').add($content => {
let titles = new Set();
let $links = $content.find('a');
modules.forEach(module => {
if (module.types && !module.types.includes(pageType)) return;
processLinks($links.filter(module.selector), module, titles);
});
getWatched(titles);
});
}());
mw.hook('listtools.ready').add(extend => {
// extend({
// name: 'talk',
// url: t => !t.isTalkPage() && t.canHaveTalkPage() && t.getTalkPage().getUrl(),
// next: 'hist'
// });
extend({
name: 'subject',
url: t => t.isTalkPage() && t.getSubjectPage().getUrl(),
next: 'hist'
});
extend({
name: 'last',
url: t => !t.missing && t.getUrl({ diff: 'cur', diffonly: 1 }),
next: 'links'
});
// extend({
// name: 'purge',
// url: t => t.getUrl({ action: 'purge' }),
// next: 'watch',
// callback: function (e) {
// e.preventDefault();
// let $link = $(this);
// let $wrapper = $link.parent();
// $link.detach();
// $wrapper.text('purging');
// let pn = $wrapper.closest('.listtools').data('listtools').toText();
// new mw.Api().post({
// action: 'purge',
// forcelinkupdate: 1,
// titles: pn,
// formatversion: 2
// }).then(response => {
// if (response.purge[0].purged) {
// mw.notify(`Purged "${pn}"'`);
// }
// }).always(() => {
// $wrapper.html($link);
// });
// }
// });
extend({
name: 'copy',
url: '#',
callback: function (e) {
e.preventDefault();
let text = $(this).closest('.listtools').data('listtools').toText();
let $input = $('<input>').attr({
type: 'text',
readonly: '',
style: 'position:fixed;top:-100%'
}).val(text).appendTo(document.body);
$input[0].select();
let copied;
try {
copied = document.execCommand('copy');
} catch (err) {}
$input.remove();
if (copied) {
mw.notify(`Copied "${text}"`);
} else {
mw.notify('Copy failed', { type: 'error' });
}
}
});
});
(mw.config.get('wgNamespaceNumber') || mw.config.get('wgAction') !== 'view') &&
mw.config.get('wgCanonicalSpecialPageName') !== 'GlobalContributions' &&
(function consecudiff() {
mw.loader.addStyleTag('.consecudiff::before{content:" ["} .consecudiff::after{content:"]"} .consecudiff-top::before{content:" ⟨"} .consecudiff-top::after{content:"⟩"}');
let isHist = mw.config.get('wgAction') === 'history';
class Consecudiff {
constructor(lis, isContribs) {
this.isContribs = isContribs;
this.isEnhanced = !isHist && !isContribs &&
lis[0].classList.contains('mw-enhanced-rc');
this.threshold = isContribs ? window.consecudiffContribsThreshold || 120
: isHist ? window.consecudiffHistThreshold || 720
: window.consecudiffThreshold || 720;
this.strictMode = !isContribs &&
!!window.consecudiffDetectInterruptions;
this.diffSelector = isHist
? 'a.mw-history-histlinks-previous'
: '.mw-changeslist-diff';
this.permaSelector = this.isEnhanced && '.mw-enhanced-rc-time > a' ||
(isHist || isContribs) && 'a.mw-changeslist-date';
this.hybridSelector = this.diffSelector;
if (this.permaSelector) {
this.hybridSelector += ', ' + this.permaSelector;
}
this.topClass = isContribs
? 'mw-contributions-current'
: 'mw-changeslist-last';
let dependencies = ['mediawiki.util'];
if ((isHist || isContribs) && mw.config.get('wgUserLanguage') !== 'en') {
dependencies.push('mediawiki.language.months');
}
mw.loader.using(dependencies, () => {
let chunks;
if (isHist) {
chunks = this.chunkByUser(lis);
} else {
chunks = [];
this.groupByTitle(lis).forEach(group => {
chunks.push(...this.chunkByUser(group));
});
}
let subchunks = [];
chunks.forEach(chunk => {
subchunks.push(...this.divideByDate(chunk));
});
let linkPairs = [];
subchunks.forEach(subchunk => {
linkPairs.push(...this.makeLinks(subchunk));
});
linkPairs.forEach(([$span, parent]) => {
$span.appendTo(parent);
});
});
}
groupByTitle(lis) {
let selector = this.isContribs
? '.mw-contributions-title'
: '.mw-changeslist-title';
let lisByTitle = {};
lis.forEach(li => {
let link = (this.isEnhanced ? li.closest('table') : li)
.querySelector(selector);
if (!link) return;
let title = link.textContent;
if (!lisByTitle.hasOwnProperty(title)) {
lisByTitle[title] = [];
}
lisByTitle[title].push(li);
});
return Object.values(lisByTitle).filter(group => group.length > 1);
}
chunkByUser(lis) {
if (this.isSingleContribs) {
return [lis];
}
let chunks = [], lastSplitAt = 0, prevUser;
this.isSingleContribs = lis.some((li, i) => {
let link = li.querySelector('.mw-userlink');
if (!link && this.isContribs) {
return true;
}
let user = link && link.textContent;
if (!link || i && user !== prevUser) {
chunks.push(lis.slice(lastSplitAt, i));
lastSplitAt = i;
}
prevUser = user;
});
if (this.isSingleContribs) {
return [lis];
}
chunks.push(lis.slice(lastSplitAt));
return chunks.filter(chunk => chunk.length > 1);
}
divideByDate(lis) {
let chunks = [], lastSplitAt = 0, prevDate;
lis.forEach((li, i) => {
let date;
if (isHist || this.isContribs) {
date = this.parseDate(
li.querySelector('.mw-changeslist-date').textContent
);
} else {
date = Date.parse(
li.dataset.mwTs.replace(/(....)(..)(..)(..)(..)(..)/, '$1-$2-$3T$4:$5:$6Z')
);
}
if (date) {
date = date / 60000;
}
if (i && prevDate - date > this.threshold) {
chunks.push(lis.slice(lastSplitAt, i));
lastSplitAt = i;
}
prevDate = date;
if (!this.strictMode || lastSplitAt === i) return;
let prevDiff = lis[i - 1].querySelector(this.diffSelector);
if (prevDiff) {
let prevNext = mw.util.getParamValue('oldid', prevDiff.search);
if (prevNext !== li.dataset.mwRevid) {
chunks.push(lis.slice(lastSplitAt, i));
lastSplitAt = i;
}
}
});
chunks.push(lis.slice(lastSplitAt));
return chunks.filter(chunk => chunk.length > 1);
}
makeLinks(lis) {
let count = lis.length;
let firstPerma;
let start = lis.findIndex(li => (
firstPerma = li.querySelector(this.hybridSelector)
));
if (start === -1 || count - start < 2) return [];
let end, lastDiff;
for (let i = count - 1; i > start; i--) {
if (!isHist && !this.isContribs) {
lastDiff = lis[i].querySelector(this.diffSelector);
if (lastDiff ||
lis[i].classList.contains('mw-changeslist-src-mw-new')
) {
end = i + 1;
break;
}
}
if (this.permaSelector && lis[i].querySelector(this.permaSelector)) {
end = i + 1;
break;
}
}
if (!end) return [];
count = end - start;
let params = { diff: lis[start].dataset.mwRevid };
if (lastDiff) {
params.oldid = mw.util.getParamValue('oldid', lastDiff.search);
} else {
params.oldid = lis[end - 1].dataset.mwRevid;
if (isHist && lis[end - 1].querySelector(this.diffSelector) ||
this.isContribs && !lis[end - 1].querySelector('.newpage')
) {
params.direction = 'prev';
}
}
let title = !isHist && mw.util.getParamValue('title', firstPerma.search);
let url = mw.util.getUrl(title, params);
let classes = 'consecudiff';
if (!isHist && lis[start].classList.contains(this.topClass)) {
classes += ' consecudiff-top';
}
return lis.slice(start, end).map((li, i) => [
$('<span>').addClass(classes).append(
$('<a>')
.attr('href', url)
.text(this.convertNumber(count - i + '/' + count))
),
this.isEnhanced
? li.tagName === 'TR'
? li.lastElementChild
: li.querySelector('.mw-changeslist-line-inner')
: li
]);
}
parseDate(s) {
let date = Date.parse(s);
if (date) {
return date;
}
if (s.includes(',')) date = Date.parse(s.replace(',', ''));
if (date) {
return date;
}
if (mw.loader.getState('mediawiki.language.months') !== 'ready') return;
s = s.replace(/\D/g, c => {
let n = mw.language.convertNumber(c, true);
return Number.isNaN(n) ? c : n;
});
let h, m;
s = s.replace(/(\d\d?)[.:h](\d\d?)/, ($0, $1, $2) => {
h = $1;
m = $2;
return ' ';
});
if (!h) return;
let y, dateFirst;
s = s.replace(/^(.*?)(\d{4})(?!\d)/, ($0, $1, $2) => {
y = $2;
dateFirst = /\d/.test($1);
return $1 + ' ';
});
if (!y) return;
let mo, d;
if (dateFirst) {
[d, s] = this.getDate(s);
if (!d) return;
[mo, s] = this.getMonth(s);
if (mo === -1) return;
} else {
[mo, s] = this.getMonth(s);
if (mo === -1) return;
[d, s] = this.getDate(s);
if (!d) return;
}
return new Date(y, mo, d, h, m).getTime();
}
getMonth(s) {
if (!this.months) {
this.months = mw.language.months.abbrev
.concat(mw.language.months.names, mw.language.months.genitive)
.reverse();
}
let mo = this.months.findIndex(mn => {
let temp = s.replace(mn, ' ');
if (temp !== s) {
s = temp;
return true;
}
});
if (mo === -1) {
let [numeric, temp] = this.getDate(s);
numeric = parseInt(numeric);
if (numeric > 0 && numeric < 13) {
mo = numeric - 1;
s = temp;
}
} else {
mo = 11 - mo % 12;
}
return [mo, s];
}
getDate(s) {
let d;
s = s.replace(/(^|\D)(\d\d?)(?!\d)/, ($0, $1, $2) => {
d = $2;
return $1 + ' ';
});
return [d, s];
}
convertNumber(num) {
try {
return mw.language.convertNumber(num);
} catch (e) {
return num;
}
}
}
mw.hook('wikipage.content').add($content => {
$content.find('.mw-pager-body').each(function () {
let lis = this.querySelectorAll('.mw-contributions-list > li');
if (lis.length > 1) {
new Consecudiff([...lis], !isHist);
}
});
if (isHist) return;
let $lists = $content.filter('.mw-changeslist');
if (!$lists.length) {
$lists = $content.find('.mw-changeslist');
}
$lists.each(function () {
let lis = this.querySelectorAll('.mw-changeslist-edit:not(.mw-changeslist-src-mw-categorize)[data-mw-revid]');
if (lis.length > 1) {
new Consecudiff([...lis]);
}
});
});
}());
if (mw.config.get('wgNamespaceNumber') === 14 && (
mw.config.get('wgAction') === 'view' || !mw.config.get('wgArticleId')
)) {
mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Nardog/sandbox8.js&action=raw&ctype=text/javascript');
mw.loader.using([
'mediawiki.api', 'mediawiki.util', 'mediawiki.DateFormatter',
'oojs-ui-widgets', 'mediawiki.widgets',
'mediawiki.widgets.UserInputWidget', 'mediawiki.widgets.datetime',
'oojs-ui.styles.icons-interactions', 'oojs-ui.styles.icons-movement',
'mediawiki.interface.helpers.styles', 'user.options'
]);
}
$(function moveHistory() {
if (!document.getElementById('p-tb')) return;
mw.loader.using('mediawiki.util', () => {
let clicked;
mw.util.addPortletLink('p-tb', '#', 'Move history', 't-movehistory').firstElementChild.addEventListener('click', e => {
e.preventDefault();
if (clicked) {
if (window.moveHistoryDialog) {
window.moveHistoryDialog.open();
}
return;
}
clicked = true;
mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Nardog/sandbox5.js&action=raw&ctype=text/javascript');
mw.loader.using([
'mediawiki.api', 'mediawiki.util', 'mediawiki.Title', 'mediawiki.DateFormatter',
'oojs-ui-windows', 'oojs-ui-widgets', 'mediawiki.widgets',
'mediawiki.widgets.DateInputWidget', 'oojs-ui.styles.icons-interactions',
'mediawiki.interface.helpers.styles'
]);
});
});
});
$(function sectionSearch() {
if (!document.getElementById('p-tb')) return;
mw.loader.using('mediawiki.util', () => {
let clicked;
mw.util.addPortletLink('p-tb', '#', 'Section search', 't-sectionsearch').firstElementChild.addEventListener('click', e => {
e.preventDefault();
if (clicked) {
if (window.sectionSearchDialog) {
window.sectionSearchDialog.open();
}
return;
}
clicked = true;
mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Nardog/sandbox7.js&action=raw&ctype=text/javascript');
mw.loader.using([
'mediawiki.api', 'mediawiki.util', 'oojs-ui-core', 'oojs-ui-windows',
'mediawiki.widgets', 'mediawiki.widgets.NamespacesMultiselectWidget'
]);
});
});
});
mw.config.get('wgCanonicalSpecialPageName') === 'CentralAuth' &&
mw.loader.using('jquery.tablesorter', function sortCentralAuthByEditCount() {
mw.hook('wikipage.content').add($content => {
let $table = $content.find('.mw-centralauth-wikislist').has('td');
if (!$table.length) return;
$table.tablesorter().data('tablesorter').sort([{ 4: 'desc' }, { 1: 'asc' }]);
});
});
['edit', 'submit'].includes(mw.config.get('wgAction')) &&
[10, 828].includes(mw.config.get('wgNamespaceNumber')) &&
!mw.config.get('wgTitle').endsWith('/doc') &&
mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/AutoTestcases.js&action=raw&ctype=text/javascript', 's');
// ['edit', 'submit'].includes(mw.config.get('wgAction')) &&
// mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/TemplatePreviewGuard.js&action=raw&ctype=text/javascript', 's');
// ['edit', 'submit'].includes(mw.config.get('wgAction')) &&
// $(function templatePreviewGuard() {
// let button = document.querySelector('input[name="wpTemplateSandboxPreview"]');
// if (!button) return;
// let proceed;
// button.addEventListener('click', e => {
// if (proceed) {
// proceed = false;
// return;
// }
// e.preventDefault();
// e.stopPropagation();
// let formData = new FormData(button.form);
// let page = formData.get('wpTemplateSandboxPage');
// let temp = formData.get('wpTemplateSandboxTemplate');
// if (!page || !temp) return;
// mw.loader.using('mediawiki.api').then(() => (
// new mw.Api().get({
// action: 'query',
// titles: page,
// prop: 'templates',
// tltemplates: temp,
// formatversion: 2
// })
// )).always(response => {
// if (((((response || {}).query || {}).pages || [])[0] || {}).templates ||
// confirm(`"${page}" doesn't appear to transclude "${temp}". Continue?`)
// ) {
// proceed = true;
// button.click();
// }
// });
// }, true);
// if (!mw.config.get('wgArticleId')) return;
// let widgetEl = document.querySelector('#wpTemplateSandboxPage.oo-ui-widget');
// if (!widgetEl) return;
// let pn = mw.config.get('wgPageName').replace(/_/g, ' ');
// mw.loader.using(['mediawiki.api', 'oojs-ui-core']).then(() => (
// new mw.Api().get({
// action: 'query',
// titles: pn,
// prop: 'transcludedin',
// tiprop: 'title',
// tilimit: 'max',
// formatversion: 2
// })
// )).then(response => {
// if (!response.batchcomplete) return;
// let pages = response.query.pages[0].transcludedin
// .filter(o => o.title !== pn);
// if (!pages.length) return;
// let widget = OO.ui.infuse(widgetEl);
// if (pages.length === 1) {
// widget.setValue(pages[0].title);
// return;
// }
// widget.$element.replaceWith(
// new OO.ui.ComboBoxInputWidget({
// id: 'wpTemplateSandboxPage',
// maxlength: widget.$input.prop('maxLength'),
// name: widget.$input.prop('name'),
// options: pages
// .sort((a, b) => a.ns - b.ns || -(a.title < b.title))
// .map(o => ({ data: o.title })),
// placeholder: widget.$input.prop('placeholder'),
// tabIndex: widget.getTabIndex(),
// value: widget.getValue()
// }).on('enter', e => {
// e.preventDefault();
// button.click();
// }).$element
// );
// });
// });
['edit', 'submit'].includes(mw.config.get('wgAction')) &&
mw.config.get('wgArticleId') &&
mw.config.get('wgPageContentModel') === 'wikitext' &&
$(async () => {
let form = document.getElementById('editform');
if (!form) return;
let formData = new FormData(form);
let section = formData.get('wpSection');
if (section === 'new') return;
let widget = document.getElementById('wpSummaryWidget');
if (!widget) return;
let isOld = formData.get('altBaseRevId') > 0 ||
(formData.get('baseRevId') || formData.get('parentRevId')) !== formData.get('editRevId');
await mw.loader.using([
'jquery.textSelection', 'mediawiki.util', 'mediawiki.api', 'oojs-ui-core',
'oojs-ui.styles.icons-editing-core'
]);
let $textarea = $('#wpTextbox1');
let input = OO.ui.infuse(widget);
let button = new OO.ui.ButtonWidget({
framed: false,
icon: 'undo',
classes: ['autosectionlink-button'],
invisibleLabel: true,
label: 'Restore previous section link'
}).toggle().on('click', () => {
let cache = button.getData();
input.setValue(input.getValue().replace(
/^(\/\*.*?\*\/)?\s*/,
cache[0] ? '/* ' + cache[0] + ' */ ' : ''
));
updatePreview(cache[0]);
cache.reverse();
}).on('toggle', () => {
input.$input.css('width', `calc(100% - ${button.$element.width()}px)`);
});
input.$input.after(button.$element);
let update = mw.util.debounce($diff => {
let lines = $textarea.textSelection('getContents').trimEnd().split('\n');
let firstLineNum, lastLineNum;
if (isOld) {
let i;
$diff.find('td:last-child').each(function () {
if (this.classList.contains('diff-lineno')) {
i = this.textContent.replace(/\D+/g, '') - 1;
} else if (this.classList.contains('diff-context')) {
i++;
} else if (this.classList.contains('diff-addedline')) {
i++;
if (!firstLineNum) {
firstLineNum = i;
}
lastLineNum = i;
} else if (this.classList.contains('diff-empty')) {
if (!firstLineNum) {
firstLineNum = i === 0 ? 1 : i;
}
lastLineNum = i;
}
});
} else {
let origLines = $textarea.prop('defaultValue').trimEnd().split('\n');
firstLineNum = lines.findIndex((line, i) => line !== origLines[i]) + 1;
if (!firstLineNum) {
firstLineNum = lines.length < origLines.length
? lines.length
: 1;
}
lastLineNum = lines.length;
for (let i = 1, x = lastLineNum, y = origLines.length;
(section ? i < x : i <= x) && lines[x - i] === origLines[y - i];
i++
) {
lastLineNum--;
}
}
let modLines = lines.slice(0, lastLineNum || 0);
let re = /^(={1,6})\s*(.+?)\s*\1\s*(?:<!--.+-->\s*)?$/;
let lowest = 7;
modLines.slice(firstLineNum).forEach(line => {
let match = line.match(re);
if (match?.[1].length < lowest) {
lowest = match[1].length;
}
});
let head;
modLines.slice(0, firstLineNum).reverse().some(line => {
let match = line.match(re);
if (match?.[1].length < lowest) {
head = match[2];
return true;
}
});
if (head) {
head = head
.replace(/'''(.+?)'''|\[\[:?(?:[^|\]]+\|)?([^\]]+)\]\]|<\/?(?:abbr|b|bdi|bdo|big|cite|code|data|del|dfn|em|font|i|ins|kbd|mark|nowiki|q|rb|ref|rp|rt|rtc|ruby|s|samp|small|span|strike|strong|sub|sup|templatestyles|time|translate|tt|u|var)(?:\s[^>]*)?>|<!--.*?-->|\[(?:https?:)?\/\/[^\s\[\]]+\s([^\]]+)\]/gi, '$1$2$3')
.replace(/''(.+?)''/g, '$1')
.trim();
} else if (modLines.length && lowest === 7 && section < 1 && (
section === '0' || lines.slice(modLines.length).some(line => re.test(line))
)) {
head = '';
}
let v = input.getValue();
let match = v.match(/^\/\*\s*(.+?)\s*\*\/\s*/);
let prev = match?.[1];
if (prev === head) return;
input.setValue((
head || head === '' ? '/* ' + head + ' */ ' : ''
) + (match ? v.slice(match[0].length) : v));
button.setData([prev, head]).toggle(true);
updatePreview(head);
}, 500);
let updatePreview = head => {
let $comment = $('.mw-summary-preview > .comment');
if (!$comment.length) return;
let url;
if (head) {
url = mw.util.getUrl() + '#' + head.replace(/[\s_]+/g, '_');
} else if (head === '') {
head = mw.messages.get('autocomment-top', '(top)');
url = mw.util.getUrl();
}
let paren = [...mw.messages.get('parentheses', '($1)')][0];
let $nodes = $comment.contents();
let $ac = $nodes.eq(1);
if ($nodes[0]?.textContent === paren && $ac.is('.autocomment:first-child')) {
if (head) {
$ac.children('a').attr('href', url).children('bdi').text(head);
} else {
if ($nodes[2]?.nodeType === 3) {
$nodes[2].textContent = $nodes[2].textContent.trimStart();
}
$ac.remove();
}
} else if (head) {
let rtl = document.body.classList.contains('sitedir-rtl');
$comment.prepend(
paren,
$('<span>').addClass('autocomment').append(
$('<a>').attr({
href: url,
title: mw.config.get('wgPageName').replaceAll('_', ' ')
}).text(rtl ? '←' : '→').append(
$('<bdi>').attr('dir', rtl ? 'rtl' : 'ltr').text(head)
),
mw.messages.get('colon-separator', ': ')
)
);
if ($nodes[0]?.nodeType === 3) {
let text = $nodes[0].textContent;
if (text.startsWith(paren)) {
text = text.slice(paren.length);
}
$nodes[0].textContent = ' ' + text;
}
}
};
if (isOld) {
mw.hook('wikipage.diff').add(update);
} else {
$textarea.on('input', update);
mw.hook('ext.CodeMirror.input').add(update);
update();
}
new mw.Api().loadMessagesIfMissing(['autocomment-top', 'colon-separator', 'parentheses']);
mw.loader.addStyleTag('.autosectionlink-button{position:absolute;top:0;right:0;margin:0}');
});
(mw.config.get('wgNamespaceNumber') === -1 || mw.config.exists('wgDiffNewId') ||
mw.config.get('wgAction') === 'history') &&
(function copyRevId() {
let handler = function (e) {
e.preventDefault();
let text = this.closest('.diff td')?.querySelector('[data-mw-revid]')?.dataset.mwRevid ||
this.closest('[data-mw-revid]')?.dataset.mwRevid;
if (!text) return;
let $input = $('<input>').attr({
type: 'text',
readonly: '',
style: 'position:fixed;top:-100%'
}).val(text).appendTo(document.body);
$input[0].select();
document.execCommand('copy');
$input.remove();
let copied;
try {
copied = document.execCommand('copy');
} catch {}
$input.remove();
if (copied) {
mw.notify(`Copied "${text}"`);
} else {
mw.notify('Copy failed', { type: 'error' });
}
};
mw.hook('wikipage.diff').add($diff => {
$diff.find('#mw-diff-otitle1, #mw-diff-ntitle1').append(
' (',
$('<a>').attr({
href: '#',
role: 'button'
}).on('click', handler).text('id'),
')'
);
});
if (mw.config.get('wgAction') !== 'history') return;
mw.hook('wikipage.content').add($content => {
$content.find('.mw-pager-tools').append(
$('<span>').append(
$('<a>').attr({
href: '#',
role: 'button'
}).on('click', handler).text('id')
)
);
});
}());
(mw.config.get('wgNamespaceNumber') === -1 || mw.config.exists('wgDiffNewId') ||
mw.config.get('wgAction') === 'history') &&
(() => {
let handler = async function (e) {
e.preventDefault();
let td = this.closest('.diff td');
let rev = td
? td.querySelector('[data-mw-revid]')?.dataset.mwRevid
: this.closest('[data-mw-revid]')?.dataset.mwRevid;
if (!rev) {
mw.notify(`Couldn't get the revision.`, {
tag: 'markasunseen',
type: 'error'
});
return;
}
let pn = td
? new URLSearchParams([...td.querySelectorAll('a')].pop()?.search).get('title')
: mw.config.get('wgPageName');
if (!pn) return;
await mw.loader.using('mediawiki.api');
let result = (await new mw.Api().postWithEditToken({
action: 'setnotificationtimestamp',
[td ? 'newerthanrevid' : 'torevid']: rev,
titles: pn,
formatversion: 2
})).setnotificationtimestamp?.[0];
if (Object.hasOwn(result, 'notificationtimestamp')) {
mw.notify(`Marked revisions ${td ? 'after' : 'since'} ${rev} as unseen.`, {
tag: 'markasunseen',
type: 'success'
});
} else if (result?.notwatched) {
mw.notify('This page is not on your watchlist.', {
tag: 'markasunseen',
type: 'warn'
});
} else {
mw.notify(`Couldn't mark revisions ${td ? 'after' : 'since'} ${rev} as unseen.`, {
tag: 'markasunseen',
type: 'error'
});
}
};
mw.hook('wikipage.diff').add($diff => {
$diff.find('#mw-diff-otitle1').append(
' (',
$('<a>').attr({
href: '#',
role: 'button',
title: 'Mark revisions after this one as unseen'
}).on('click', handler).text('unseen'),
')'
);
});
if (mw.config.get('wgAction') !== 'history') return;
mw.hook('wikipage.content').add($content => {
$content.find('.mw-pager-tools').append(
$('<span>').append(
$('<a>').attr({
href: '#',
role: 'button',
title: 'Mark revisions since this one as unseen'
}).on('click', handler).text('unseen')
)
);
});
})();
(mw.config.get('wgNamespaceNumber') === -1 || mw.config.exists('wgDiffNewId') ||
mw.config.get('wgAction') === 'history') &&
((mw.config.get('wgNamespaceNumber') % 2 || mw.config.get('wgNamespaceNumber') === 4) ||
(mw.config.get('wgWikiID') === 'metawiki' && mw.config.get('wgPageContentModel') === 'wikitext')) &&
mw.loader.using(['mediawiki.util', 'mediawiki.Title'], function copyUnsig() {
let handler = function (e) {
e.preventDefault();
let parent = this.closest('li, td');
let ts = parent.textContent.match(/\d\d:\d\d, \d\d? [A-Z][a-z]+ \d{4}/)?.[0];
if (!ts) return;
let user = parent.querySelector('.mw-userlink').textContent;
if (mw.util.isIPv6Address(user)) {
user = user.toUpperCase();
}
let temp = mw.util.isIPAddress(user) ? 'unsigned IP' : 'unsigned';
let text = `{{subst:${temp}|${user}|${ts}}}`;
let $input = $('<input>').attr({
type: 'text',
readonly: '',
style: 'position:fixed;top:-100%'
}).val(text).appendTo(document.body);
$input[0].select();
let copied;
try {
copied = document.execCommand('copy');
} catch {}
$input.remove();
if (copied) {
mw.notify(`Copied "${text}"`);
} else {
mw.notify('Copy failed', { type: 'error' });
}
};
mw.hook('wikipage.diff').add($diff => {
$diff.find('#mw-diff-otitle1, #mw-diff-ntitle1').filter(function () {
if (mw.config.get('wgWikiID') === 'metawiki') {
return true;
}
let link = this.querySelector('strong > a') ||
this.parentElement.querySelector('#differences-prevlink, #differences-nextlink');
if (!link) return;
let t = mw.Title.newFromText(mw.util.getParamValue('title', link.search));
return t.isTalkPage() || t.namespace === 4;
}).append(
' (',
$('<a>').attr({
href: '#',
role: 'button'
}).on('click', handler).text('sig'),
')'
);
});
if (mw.config.get('wgAction') !== 'history') return;
mw.hook('wikipage.content').add($content => {
$content.find('.mw-pager-tools').append(
$('<span>').append(
$('<a>').attr({
href: '#',
role: 'button'
}).on('click', handler).text('sig')
)
);
});
});
// mw.config.get('wgAction') === 'history' &&
// mw.loader.using('mediawiki.util', function () {
// mw.hook('wikipage.content').add($content => {
// $content.find('a.mw-changeslist-date').after(function () {
// return [
// ' (',
// $('<a>').attr('href', mw.util.getUrl(null, {
// action: 'edit',
// oldid: this.closest('li').dataset.mwRevid
// })).text('e'),
// ')'
// ];
// });
// });
// });
// ['Contributions', 'IPContributions', 'Blankpage'].includes(mw.config.get('wgCanonicalSpecialPageName')) &&
// mw.hook('wikipage.content').add($content => {
// $content.find('.mw-changeslist-history').parent().after(function () {
// return $('<span>').append(
// $('<a>').attr(
// 'href',
// this.firstElementChild.getAttribute('href').slice(0, -7) + 'edit'
// ).text('e')
// );
// });
// });
if (screen.width < 500) {
mw.loader.addStyleTag('@font-face{font-family:CharisW;src:url(//fontlibrary.org/assets/fonts/charis/10b9f94ed21e56254b068c91ead7ec6f/017b2b2ad86e09d3c22b8cf0dfc78247/CharisSILRegular.ttf) format(truetype)} @font-face{font-family:CharisW;font-weight:700;src:url(//fontlibrary.org/assets/fonts/charis/10b9f94ed21e56254b068c91ead7ec6f/6f5069ac6a300dad45383c952e92c573/CharisSILBold.ttf) format(truetype)} body .IPA{font-family:CharisW,sans-serif} .mw-highlight-lines > pre{width:120em}');
location.hash && $(() => {
let target = document.querySelector(':target');
if (target?.getBoundingClientRect().top < 0) {
target.scrollIntoView();
}
});
}
['edit', 'submit'].includes(mw.config.get('wgAction')) &&
(mw.config.exists('wgCodeEditorCurrentLanguage') ||
mw.config.exists('cmMode') && mw.config.get('cmMode') !== 'mediawiki') &&
(function saveNEdit() {
let notif;
$(document.body).on('click', '#wpSave', async function (e) {
if (e.ctrlKey || e.shiftKey || e.metaKey || e.altKey ||
e.originalEvent?.defaultPrevented
) {
return;
}
e.preventDefault();
await mw.loader.using([
'mediawiki.api', 'mediawiki.util', 'jquery.textSelection', 'oojs-ui-core'
]);
let button = OO.ui.infuse(this.parentElement).setDisabled(true);
let $textarea = $('#wpTextbox1');
let text = $textarea.textSelection('getContents');
let $summary = $('#wpSummary');
let formData = new FormData(this.form);
let promise = new mw.Api().postWithEditToken({
action: 'edit',
title: mw.config.get('wgPageName'),
text: text,
section: formData.get('wpSection') || undefined,
summary: $summary.textSelection('getContents'),
[$('#wpMinoredit').prop('checked') ? 'minor' : 'notminor']: 1,
baserevid: formData.get('editRevId'),
basetimestamp: formData.get('wpEdittime'),
starttimestamp: formData.get('wpStarttime'),
watchlist: $('#wpWatchthis').prop('checked') ? 'watch' : 'unwatch',
watchlistexpiry: formData.get('wpWatchlistExpiry') || undefined,
undo: formData.get('wpUndidRevision') || undefined,
undoafter: formData.get('wpUndoAfter') || undefined,
contentformat: formData.get('format'),
contentmodel: formData.get('model'),
assertuser: mw.config.get('wgUserName'),
formatversion: 2
});
notif?.close();
notif = null;
try {
let response = await promise;
if (response?.edit?.result !== 'Success') throw '';
$('#editform > input[name="wpUndidRevision"], #editform > input[name="wpUndoAfter"]').remove();
$textarea.data('origtext', text).prop('defaultValue', text);
$summary.val($summary.prop('defaultValue'));
if (mw.loader.getState('mediawiki.editRecovery.edit') === 'ready') {
let storage = mw.loader.moduleRegistry['mediawiki.editRecovery.edit'].packageExports['storage.js'];
storage.deleteData(mw.config.get('wgPageName'));
storage.closeDatabase();
}
notif = await mw.notify(response.edit.nochange ? 'No change' : [
document.createTextNode('Saved'),
$('<p>').append(
new OO.ui.ButtonWidget({
href: mw.util.getUrl(),
target: '_blank',
label: 'View'
}).$element,
new OO.ui.ButtonWidget({
href: mw.util.getUrl(null, {
diff: response.edit.newrevid || 'cur',
diffonly: 1
}),
target: '_blank',
label: 'Diff'
}).$element,
new OO.ui.ButtonWidget({
href: mw.util.getUrl(null, { action: 'history' }),
target: '_blank',
label: 'History'
}).$element
)[0]
], { tag: 'savenedit' });
} catch (error) {
notif = await mw.notify(error?.error?.info || error || 'Save failed', {
autoHideSeconds: 'long',
tag: 'savenedit',
type: 'error'
});
} finally {
button.setDisabled();
}
});
}());
mw.config.get('wgNamespaceNumber') === 0 &&
mw.config.get('wgAction') === 'view' &&
mw.config.get('wgCategories')?.some(c => c.endsWith(' actors') || c.endsWith(' actresses')) &&
$(() => {
let n = $.escapeSelector(mw.config.get('wgTitle').replace(/ \(.+\)$/, ''));
let $links = $(`.hatnote a[title$="${n} filmography"], .hatnote a[title*="${n} on "], .hatnote a[title*="${n} performances"]`);
if (!$links.length) return;
let titles = {};
$links = $links.filter(function () {
let text = this.textContent;
return !(titles[text] = Object.hasOwn(titles, text));
});
mw.notify(
$links.length === 1
? $links.clone()
: $('<ul>').append($links.clone().wrap('<li>').parent()),
{ autoHideSeconds: 'long' }
);
});
['Recentchanges', 'Recentchangeslinked', 'Watchlist'].includes(mw.config.get('wgCanonicalSpecialPageName')) &&
mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/RCMuter.js&action=raw&ctype=text/javascript', 's');
location.hostname.endsWith('.wikipedia.org') &&
mw.config.get('wgNamespaceNumber') % 2 === 0 &&
// mw.config.get('wgArticleId') &&
mw.config.get('wgPageContentModel') === 'wikitext' &&
$.when($.ready, mw.loader.using('mediawiki.util')).then(function refRenamer() {
if (!document.getElementById('p-tb')) return;
let messages = Object.assign({
portlet: 'RefRenamer',
loading: 'Loading RefRenamer...'
}, window.refrenamerMessages);
let clicked;
mw.util.addPortletLink('p-tb', '#', messages.portlet, 't-refrenamer').firstElementChild.addEventListener('click', e => {
e.preventDefault();
if (clicked) {
if (window.refRenamer) {
window.refRenamer();
}
return;
}
clicked = true;
mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Nardog/sandbox6.js&action=raw&ctype=text/javascript');
mw.notify(messages.loading, {
autoHideSeconds: 'long',
tag: 'refrenamer'
});
});
});
if (['edit', 'submit'].includes(mw.config.get('wgAction'))) {
mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/ExpandContractions.js&action=raw&ctype=text/javascript', 's');
}
['edit', 'submit'].includes(mw.config.get('wgAction')) &&
$.when(
$.ajax(
'//tools-static.wmflabs.org/meta/scripts/pathoschild.templatescript.js',
{ dataType: 'script', cache: true }
),
mw.loader.using(['mediawiki.api', 'mediawiki.Title'])
).then(function unpipe() {
let replace = data => {
Object.entries(data.tokens).forEach(([source, ts]) => {
if (!ts.some(t => data.redirs[t.pn])) return;
let links = ts.map(t => {
let r = data.redirs[t.pn] || {};
return [r.to || t.pn, t.fragment || r.tofragment].join('#');
});
if (links[0] !== links[1]) return;
data.repl = data.repl.split(source).join(source.replace(/^[^|]+\|/, '[['));
});
if (data.repl === data.orig) {
mw.notify('No change.');
return;
}
data.editor
.set(data.repl)
.appendEditSummary('[[WP:NOPIPE|unpiped]] links using [[User:Nardog/Unpipe|script]]')
.options({ minor: true })
.clickDiff();
};
let query = (titles, data) => {
if (!titles.length) {
replace(data);
return;
}
new mw.Api().post({
action: 'query',
titles: titles.slice(0, 50),
redirects: 1,
formatversion: 2
}, {
headers: { 'Promise-Non-Write-API-Action': 1 }
}).then(response => {
(response.query.redirects || []).forEach(r => {
data.redirs[r.from] = r;
});
query(titles.slice(50), data);
});
};
window.pathoschild.TemplateScript.add([{
name: 'Unpipe links',
script: editor => {
let orig = editor.get(), repl = orig, tokens = {};
let titles = new Set();
let match, re = /\[\[([^|\]]+)\|([^\]]+)\]\]/g;
while ((match = re.exec(orig))) {
if (tokens[match[0]]) continue;
let ts = match.slice(1).map(s => mw.Title.newFromText(s));
if (ts.some(t => !t || t.namespace)) continue;
let pns = ts.map(t => t.toText());
if (pns[0].endsWith(' (disambiguation)')) continue;
if (pns[0] === pns[1] && ts[0].fragment === ts[1].fragment) {
repl = repl.split(match[0]).join(`[[${match[2]}]]`);
continue;
}
tokens[match[0]] = pns.map((pn, i) => {
titles.add(pn);
return { pn, fragment: ts[i].fragment };
});
}
query([...titles], { editor, orig, repl, tokens, redirs: {} });
}
}]);
});
mw.config.get('wgAction') !== 'history' &&
mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/CopyCodeBlock.js&action=raw&ctype=text/javascript', 's');
mw.config.exists('wgDiffNewId') &&
mw.config.get('wgDiscussionToolsFeaturesEnabled') &&
(function () {
let data = {}, clickHandler, autoClear, run;
window.dtc = data;
let highlight = revId => {
let ids = data[revId];
if (!ids || !ids.length) return;
mw.loader.moduleRegistry['ext.discussionTools.init'].packageExports['highlighter.js']
.highlightNewComments(mw.dt.pageThreads, true, ids);
if (clickHandler) {
$(document.body).off('click', clickHandler);
return;
}
$._data(document.body, 'events').click.some(o => {
if (String(o.handler).includes('highlighter.clearHighlightTargetComment(')) {
$(document.body).off('click', o.handler);
clickHandler = o.handler;
return true;
}
});
$._data(window, 'events').popstate.some(o => {
if (String(o.handler).includes('highlighter.highlightTargetComment(')) {
$(window).off('popstate', o.handler);
return true;
}
});
};
let scroll = revId => {
let ids = data[revId];
if (!ids || !ids.length) return;
let yToSpan = Object.fromEntries(
ids.map(id => document.getElementById(id)).filter(Boolean)
.map(span => [span.getBoundingClientRect().y, span])
);
let ys = Object.keys(yToSpan);
if (!ys.length) return;
let lower = ys.filter(y => y > 10);
if (!lower.length ||
Math.max(...lower) < document.documentElement.clientHeight
) {
yToSpan[Math.min(...ys)].scrollIntoView({ behavior: 'smooth' });
} else {
yToSpan[Math.min(...lower)].scrollIntoView({ behavior: 'smooth' });
}
};
let scrollToNext = function (e) {
e.preventDefault();
let revId = mw.config.get('wgDiffOldId');
if (!revId || !data[revId]) return;
let i = data[revId].indexOf(
this.closest('[data-mw-thread-id]').dataset.mwThreadId
);
if (i === -1) return;
let next = data[revId][i + 1] || data[revId][0];
document.getElementById(next).scrollIntoView({ behavior: 'smooth' });
};
mw.hook('wikipage.content').add(async $content => {
let revId = mw.config.get('wgDiffOldId');
if (!revId) return;
let param = new URLSearchParams(location.search).get('diffonly');
if (param && param !== '0') return;
if (data[revId]) {
highlight(revId);
return;
}
await mw.loader.using(['ext.discussionTools.init', 'mediawiki.util']);
let begin = Date.parse($('#mw-diff-otitle1 .mw-diff-timestamp').data('timestamp'));
data[revId] = mw.dt.pageThreads.getCommentItems()
.filter(c => c.timestamp > begin).map(c => c.id);
if (!data[revId].length) return;
await new Promise(setTimeout);
highlight(revId);
$content.find('.ext-discussiontools-init-replylink-buttons').filter(function () {
return data[revId].includes(this.dataset.mwThreadId);
}).append(
' | ',
$('<a>').attr({
href: '#',
role: 'button'
}).text('next').on('click', scrollToNext)
);
if (run || !document.getElementById('p-tb')) return;
run = true;
let portlet = mw.util.addPortletLink('p-tb', '#', 'Scroll to next', 't-scrolltonext');
portlet.firstElementChild.addEventListener('click', e => {
e.preventDefault();
scroll(mw.config.get('wgDiffOldId'));
});
mw.util.addPortletLink('p-tb', '#', 'Toggle highlight', 't-togglehighlight').firstElementChild.addEventListener('click', e => {
e.preventDefault();
autoClear = !autoClear;
if (autoClear) {
$(document.body).on('click', clickHandler)[0].click();
} else {
highlight(mw.config.get('wgDiffOldId'));
}
});
mw.loader.addStyleTag(`#t-scrolltonext{position:fixed;bottom:${portlet.clientHeight}px} #t-togglehighlight{position:fixed;bottom:0}`);
});
}());
mw.config.get('wgNamespaceNumber') === 6 &&
mw.config.get('wgAction') === 'view' &&
mw.hook('wikipage.content').add($content => {
$content.find('.filehistory .mw-usertoollinks-contribs').after(function () {
return [
' | ',
$('<a>').attr('href', `${
mw.config.get('wgScript')
}?title=Special:ListFiles/${
this.pathname.replace(/^.+\//, '')
}&ilshowall=1`).text('uploads')
];
});
});
['edit', 'submit'].includes(mw.config.get('wgAction')) &&
mw.config.get('wgArticleId') &&
mw.config.get('wgPageContentModel') === 'wikitext' &&
$(function () {
if (!$('input[name="wpSection"]').val()) return;
mw.hook('wikipage.content').add(async $content => {
let $refs = $content.find('.mw-ext-cite-warning-sectionpreview_no_text');
if (!$refs.length) return;
let ids = {};
$refs.each(function () {
ids[this.closest('[id]').id.replace(/-\d+$/, '')] = this;
});
let response = await $.get(`/api/rest_v1/page/html/${encodeURIComponent(mw.config.get('wgPageName'))}`);
$($.parseHTML(response)).find('.mw-reference-text').each(function () {
ids[this.id.replace(/^mw-reference-text-|-\d+$/g, '')]?.replaceWith(this);
});
});
});
mw.hook('moremenu.ready').add(config => {
$('#mm-page-purge-cache > a').on('click', e => {
e.preventDefault();
new mw.Api().post({
action: 'purge',
forcelinkupdate: 1,
titles: config.page.name,
formatversion: 2
}).then(() => {
location.href = mw.util.getUrl();
});
});
$('#mm-page-search-search-history-wikiblame > a').on('click', function (e) {
e.preventDefault();
let q = prompt();
if (q === null) return;
let href = this.href;
if (q) {
let removal = q[0] === '!';
if (removal) {
q = q.slice(1);
}
href += '&needle=' + encodeURIComponent(q);
if (removal) {
href += '&binary_search_inverse=on';
}
href += '&force_wikitags=on';
}
open(href, '_blank');
});
$('#mm-page-expand-templates > a').on('click auxclick', function (e) {
if (e.which > 2) return;
e.preventDefault();
let revId = mw.config.get('wgRevisionId') || Number($('input[name=oldid]').val());
let url = revId
? '/w/rest.php/v1/revision/' + revId
: '/w/rest.php/v1/page/' + config.page.encodedName;
$.get(url).then(response => {
$('<form>').attr({
method: 'post',
action: this.href,
target: '_blank'
}).append(
[
['wpInput', response.source],
['wpContextTitle', config.page.name],
['wpRemoveComments', 1]
].map(([n, v]) => $('<input>').attr({
name: n,
type: 'hidden'
}).val(v))
).appendTo(document.body).trigger('submit').remove();
});
});
});
mw.config.get('wgCanonicalSpecialPageName') === 'ApiSandbox' &&
mw.hook('apisandbox.formatRequest').add((...args) => {
args[4].complete = function () {
setTimeout(() => {
mw.hook('wikipage.content').fire($('.oo-ui-pageLayout-active'));
}, 100);
};
});
['edit', 'submit'].includes(mw.config.get('wgAction')) &&
mw.config.get('wgArticleId') &&
mw.config.get('wgPageContentModel') === 'wikitext' &&
$.when($.ready, mw.loader.using('mediawiki.storage')).then(async () => {
let infuseAndCall = (query, method, ...args) => {
let $widget = $(query);
if ($widget.length) {
return OO.ui.infuse($widget)[method](...args);
}
};
let section = $('input[name="wpSection"]').val();
if (section) {
let $textarea = $('#wpTextbox1');
let source = $textarea.prop('defaultValue');
let save = () => {
let newSource = $textarea.textSelection('getContents');
if (newSource === source) {
mw.storage.session.remove('editfullpage');
} else {
mw.storage.session.setObject('editfullpage', [
mw.config.get('wgPageName'),
section,
newSource.trimEnd(),
infuseAndCall('#wpSummaryWidget', 'getValue') || '',
Number(infuseAndCall('#wpMinoreditWidget', 'isSelected')) || 0,
Number(infuseAndCall('#wpWatchthisWidget', 'isSelected')) || 0,
infuseAndCall('#wpWatchlistExpiryWidget', 'getValue') || 'infinite'
]);
}
};
await mw.loader.using(['jquery.textSelection', 'oojs-ui-core']);
setInterval(() => {
mw.requestIdleCallback(save);
}, 3000);
window.addEventListener('beforeunload', save);
return;
}
let data = mw.storage.session.getObject('editfullpage');
mw.storage.session.remove('editfullpage');
console.log(data);
if (!data || data[0] !== mw.config.get('wgPageName')) return;
let isNew = data[1] === 'new';
let isLead = data[1] === '0';
let $textarea = $('#wpTextbox1');
let source = $textarea.prop('defaultValue');
let newSource, start, msg, notifOpts = { autoHideSeconds: 'long' };
let orig = [];
if (isNew) {
await mw.loader.using(['jquery.textSelection', 'oojs-ui-core']);
newSource = source + (data[3] ? '\n== ' + data[3] + ' ==\n\n' : '\n') + data[2] + '\n';
start = source.length;
} else {
await mw.loader.using(['jquery.textSelection', 'oojs-ui-core', 'mediawiki.api']);
let { parse } = await new mw.Api().get({
action: 'parse',
page: mw.config.get('wgPageName'),
prop: 'sections',
wrapoutputclass: '',
disablelimitreport: 1,
disableeditsection: 1,
disabletoc: 1,
formatversion: 2
});
let target = !isLead && parse.sections.find(s => s.index === data[1]);
if (isLead || target) {
let next = parse.sections.find(s => s.index - 1 === Number(data[1]));
newSource = (isLead ? '' : [...source].slice(0, target.byteoffset)).join('') +
data[2] + (next ? '\n\n' + [...source].slice(next.byteoffset).join('') : '\n');
start = isLead ? 0 : target.byteoffset;
} else {
newSource = source + '\n\n' + data[2] + '\n';
start = source.length;
msg = `Section restored. Couldn't find the section. The source is appended at bottom.`;
notifOpts.type = 'warn';
}
orig[0] = infuseAndCall('#wpSummaryWidget', 'getValue');
infuseAndCall('#wpSummaryWidget', 'setValue', data[3]);
}
$textarea.textSelection('setContents', newSource);
orig[1] = infuseAndCall('#wpMinoreditWidget', 'getSelected');
infuseAndCall('#wpMinoreditWidget', 'setSelected', data[4]);
orig[2] = infuseAndCall('#wpWatchthisWidget', 'getSelected');
infuseAndCall('#wpWatchthisWidget', 'setSelected', data[5]);
orig[3] = infuseAndCall('#wpWatchlistExpiryWidget', 'getValue');
infuseAndCall('#wpWatchlistExpiryWidget', 'setValue', data[6]);
setTimeout(() => {
$textarea.textSelection('setSelection', { start });
});
let notif = await mw.notify($([
document.createTextNode(msg || 'Section restored.'),
$('<p>').append(
new OO.ui.ButtonWidget({
flags: 'destructive',
label: 'Discard'
}).on('click', () => {
$textarea.textSelection('setContents', source);
if (orig[0]) {
infuseAndCall('#wpSummaryWidget', 'setValue', orig[0]);
}
infuseAndCall('#wpMinoreditWidget', 'setSelected', orig[1]);
infuseAndCall('#wpWatchthisWidget', 'setSelected', orig[2]);
infuseAndCall('#wpWatchlistExpiryWidget', 'setValue', orig[3]);
notif.close();
}).$element
)[0]
]), notifOpts);
});
mw.config.exists('wgPostEdit') &&
mw.loader.using('mediawiki.storage', () => {
mw.storage.session.remove('editfullpage');
});
mw.config.get('wgAction') === 'history' &&
mw.hook('wikipage.content').add(async $content => {
if (!$content.has('.mw-history-line-updated').length) return;
let href = $content.find('a.mw-history-histlinks-current:not(.mw-history-line-updated a)').attr('href');
if (!href) {
await mw.loader.using(['mediawiki.api', 'mediawiki.util']);
let page = (await new mw.Api().get({
action: 'query',
titles: mw.config.get('wgPageName'),
prop: 'info',
inprop: 'notificationtimestamp',
formatversion: 2
})).query.pages[0];
let rev = (await new mw.Api().get({
action: 'query',
titles: page.title,
prop: 'revisions',
rvprop: 'ids',
rvlimit: 1,
rvstart: Date.parse(page.notificationtimestamp) / 1000 - 1,
formatversion: 2
})).query.pages[0].revisions?.[0].revid;
if (!rev || rev >= page.lastrevid) return;
href = mw.util.getUrl(page.title, { diff: page.lastrevid, oldid: rev });
}
$content.find('.mw-history-compareselectedversions-button').first().after(
' ',
$('<a>').attr({
class: 'unseendiff',
href: href
}).text('unseen')
);
});
(async () => {
let cspn = mw.config.get('wgCanonicalSpecialPageName');
let isBp = cspn === 'Blankpage';
if (!isBp && cspn !== 'Watchlist') return;
await mw.loader.using('mediawiki.util');
let notify = async (text, options, pn) => {
let msg = [document.createTextNode(text)];
if (pn) {
msg.push(
$('<p>').append(
$('<a>').attr('href', mw.util.getUrl(pn)).text(pn),
' ',
$('<span>').addClass('mw-changeslist-links').append(
$('<span>').append(
$('<a>')
.attr('href', mw.util.getUrl(pn, { action: 'edit' }))
.text('edit')
),
$('<span>').append(
$('<a>')
.attr('href', mw.util.getUrl(pn, { action: 'history' }))
.text('history')
)
)
)[0]
);
}
if (isBp) {
await $.ready;
$('#mw-content-text').html(msg);
} else {
return mw.notify(msg, Object.assign(options || {}, {
tag: 'unseendiff'
}));
}
};
let getUrl = async pn => {
await mw.loader.using('mediawiki.api');
let page = (await new mw.Api().get({
action: 'query',
titles: pn,
prop: 'info',
inprop: 'notificationtimestamp',
formatversion: 2
})).query.pages[0];
if (!page.notificationtimestamp) {
notify(`Couldn't get the last seen time.`, {
type: 'warn'
}, pn);
return;
}
let rev = (await new mw.Api().get({
action: 'query',
titles: pn,
prop: 'revisions',
rvprop: 'ids',
rvlimit: 1,
rvstart: Date.parse(page.notificationtimestamp) / 1000 - 1,
formatversion: 2
})).query.pages[0].revisions?.[0].revid;
if (rev === page.lastrevid) {
notify('Already seen.', {
type: 'warn'
}, pn);
return;
}
if (!rev) {
rev = (await new mw.Api().get({
action: 'query',
titles: pn,
prop: 'revisions',
rvprop: 'ids',
rvlimit: 1,
rvstart: Date.parse(page.notificationtimestamp) / 1000 - 1,
rvdir: 'newer',
formatversion: 2
})).query.pages[0].revisions?.[0].revid;
if (!rev) {
notify(`Couldn't get the last seen revision.`, {
type: 'warn'
}, pn);
return;
}
}
if (rev > page.lastrevid) {
notify(`Invalid rev for "${pn}" (rev: ${rev}, lastrevid: ${page.lastrevid})`, {
autoHideSeconds: 'long',
type: 'warn'
}, pn);
return;
}
return mw.util.getUrl(page.title, { diff: page.lastrevid, oldid: rev });
};
if (isBp) {
let pn = mw.config.get('wgTitle').match(/^[^/]+\/unseendiff\/(.+)$/)?.[1];
if (!pn) return;
notify('Loading...', null, pn);
let href = await getUrl(pn);
if (!href) return;
notify('Redirecting...', null, pn);
location.href = href;
return;
}
let handler = async function (e) {
if (e.which > 2) return;
e.preventDefault();
let pn = this.dataset.pn;
if (!pn) {
notify(`Couldn't get the page name.`, {
type: 'error'
});
return;
}
let notifPromise = notify('Loading...', {
autoHideSeconds: 'long'
});
let href = await getUrl(pn);
if (!href) return;
$(`.unseendiff-loader[data-pn="${$.escapeSelector(pn)}"]`).attr({
class: 'unseendiff',
href: href,
target: '_blank'
}).off('click auxclick', handler);
if (e.type === 'auxclick' || e.ctrlKey || e.metaKey || e.shiftKey) {
open(href);
} else {
this.click();
}
(await notifPromise).close();
};
mw.hook('wikipage.content').add($content => {
$content.find(
'.mw-changeslist-src-mw-edit.mw-changeslist-watchedunseen:not(.mw-changeslist-watchedseen) .mw-changeslist-line-inner'
).each(function () {
let pn = this.dataset.targetPage ||
this.closest('[data-target-page]')?.dataset.targetPage ||
this.closest('table.mw-enhanced-rc')?.querySelector('[data-target-page]')?.dataset.targetPage;
if (!pn) return;
$('<span>').append(
$('<a>').attr({
class: 'unseendiff-loader',
href: mw.util.getUrl(`Special:BlankPage/unseendiff/${pn}`),
'data-pn': pn
}).on('click auxclick', handler).text('unseen')
).appendTo(
[...this.querySelectorAll('.mw-pager-tools')].pop() ||
$('<span>').addClass('mw-changeslist-links mw-pager-tools').appendTo(this).before(' ')
);
});
});
})();
['Contributions', 'IPContributions', 'Blankpage'].includes(mw.config.get('wgCanonicalSpecialPageName')) &&
mw.loader.using('mediawiki.util', () => {
let watched = new Set();
let query = async lis => {
let titles = Object.keys(lis).slice(0, 50);
if (!titles.length) return;
await mw.loader.using('mediawiki.api');
let pages = (await new mw.Api().post({
action: 'query',
titles: titles,
prop: 'info',
inprop: 'notificationtimestamp|watched',
formatversion: 2
}, {
headers: { 'Promise-Non-Write-API-Action': 1 }
})).query.pages;
for (let page of pages) {
if (!Object.hasOwn(lis, page.title)) continue;
if (page.watched) {
watched.add(page);
$(lis[page.title]).addClass('watched');
}
if (!page.notificationtimestamp) continue;
let rev = (await new mw.Api().get({
action: 'query',
titles: page.title,
prop: 'revisions',
rvprop: 'ids',
rvlimit: 1,
rvstart: Date.parse(page.notificationtimestamp) / 1000 - 1,
formatversion: 2
})).query.pages[0].revisions?.[0].revid;
if (!rev || rev === page.lastrevid) continue;
if (rev > page.lastrevid) {
mw.notify($([
document.createTextNode('Invalid rev for "'),
$('<a>').attr({
href: mw.util.getUrl(page.title, { action: 'history' }),
target: '_blank'
}).text(page.title)[0],
document.createTextNode(`" (rev: ${rev}, lastrevid: ${page.lastrevid})`),
]), {
autoHideSeconds: 'long',
type: 'warn'
});
continue;
}
$('<span>').append(
$('<a>').attr({
class: 'unseendiff',
href: mw.util.getUrl(page.title, {
diff: page.lastrevid,
oldid: rev
})
}).text('unseen')
).appendTo(
lis[page.title].map(li => (
[...li.querySelectorAll(':scope > .mw-pager-tools')].pop() ||
$('<span>').addClass('mw-changeslist-links mw-pager-tools').appendTo(li).before(' ')
))
);
}
titles.forEach(title => {
delete lis[title];
});
query(lis);
};
mw.hook('wikipage.content').add($content => {
$content.find(
'.mw-contributions-list > li:not(.mw-contributions-current)[data-mw-revid]'
).each(function () {
let link = this.querySelector('a.mw-changeslist-date, a.mw-changeslist-history');
let pn = link ? new URLSearchParams(link.search).get('title') : '';
$('<span>').append(
$('<a>').attr({
class: 'mw-changeslist-diff',
href: mw.util.getUrl(pn, {
diff: 'cur',
oldid: this.dataset.mwRevid
})
}).text('cur')
).appendTo(
[...this.querySelectorAll(':scope > .mw-pager-tools')].pop() ||
$('<span>').addClass('mw-changeslist-links mw-pager-tools').appendTo(this).before(' ')
);
});
if (mw.config.get('wgWikiID') === 'wikidatawiki') return;
let lis = {};
$content.find('.mw-contributions-title').each(function () {
let title = this.textContent;
if (!Object.hasOwn(lis, title)) {
lis[title] = [];
}
lis[title].push(this.closest('li'));
});
Object.keys(lis).forEach(title => {
if (watched.has(title)) {
$(lis[title]).addClass('watched');
delete lis[title];
}
});
query(lis);
});
});
['edit', 'submit'].includes(mw.config.get('wgAction')) &&
mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Nardog/sandbox9.js&action=raw&ctype=text/javascript');
mw.config.get('wgWikiID') === 'metawiki' &&
(async () => {
let css = mw.loader.addStyleTag(`.wishtitle {
font-size: 90%;
font-style: italic;
word-break: break-word;
}
.wishtitle > a {
color: var(--color-warning, #886425);
}
.wishtitle > a:visited {
color: var(--border-color-warning--hover, #735421);
}
.wishtitle-declined > a {
text-decoration: line-through;
}
.wishtitle-declined > a:hover,
.wishtitle-declined > a:focus,
.mw-underline-always .wishtitle-declined > a {
text-decoration: line-through underline;
}
#watchlist-edit-form .wishtitle {
display: inline-block;
}
.mw-search-result-heading > .wishtitle,
.catchangesviewer-table .wishtitle {
display: block;
}
.catchangesviewer-table:has(.wishtitle) {
white-space: wrap;
}`);
let lang = mw.config.get('wgUserLanguage');
let titles;
let loadTitles = async () => {
await mw.loader.using('mediawiki.storage');
titles = titles || mw.storage.getObject('wishtitles');
if (titles?.lang !== lang) {
titles = { lang, w: [], fa: [] };
}
};
let updateTitles = async (crwstatuses, crwcontinue) => {
await mw.loader.using('mediawiki.api');
let params = {
action: 'query',
list: 'communityrequests-wishes',
crwlang: lang,
crwstatuses: crwstatuses,
crwprop: 'title|updated',
crwsort: 'updated',
crwdir: 'ascending',
crwlimit: 'max',
crwcontinue: crwcontinue,
formatversion: 2
};
if (!crwcontinue && !crwstatuses && titles._) {
params.crwcontinue = `|${titles._}|0`;
}
let response = await new mw.Api().get(params);
let wishes = response?.query?.['communityrequests-wishes'];
if (wishes?.length) {
let $span = $('<span>');
wishes.forEach(w => {
let id = w.crwtitle.match(/^Community Wishlist\/W(\d+)/)?.[1];
if (!id) return;
titles.w[id - 1] = $span.html(w.title).text();
if (crwstatuses === 'declined') {
(titles.wd = titles.wd || []).push(id - 1);
}
let faId = w.crfatitle?.match(/^Community Wishlist\/FA(\d+)/)?.[1];
if (!faId) return;
titles.fa[faId - 1] = w.focusareatitle;
});
if (!crwstatuses) {
titles._ = wishes.at(-1).updated.replace(/\D/g, '');
}
}
let expiry = 86400;
if (crwstatuses || crwcontinue) {
let prev = mw.storage.getObject('_EXPIRY_wishtitles');
if (prev) {
expiry = Math.round(Date.now() / 1000) + 86400 - prev;
}
}
mw.storage.setObject('wishtitles', titles, expiry);
crwcontinue = response?.continue?.crwcontinue;
if (crwcontinue) {
await updateTitles(crwstatuses, crwcontinue);
}
};
let getTitle = id => (
id[0] === 'W' ? titles.w[id.slice(1) - 1] : titles.fa[id.slice(2) - 1]
);
let renderTitle = (title, id, tag = 'span') => {
let classes = 'wishtitle';
if (id[0] === 'W' && titles.wd?.includes(id.slice(1) - 1)) {
classes += ' wishtitle-declined';
}
return $(`<${tag}>`).addClass(classes).append(
$('<a>').attr({
href: `/wiki/Community_Wishlist/${id}`,
title: `Community Wishlist/${id}`
}).text(title)
);
};
let callback = ([id, links]) => {
let title = getTitle(id);
if (!title) {
return true;
}
$(links).after(' ', renderTitle(title, id));
};
let selector = '.mw-changeslist-title, ' +
'.mw-changeslist-log-entry > a:not(.mw-userlink), ' +
'.mw-changeslist-line.mw-changeslist-src-mw-categorize :is(.mw-changeslist-line-inner, .mw-changeslist-line-inner-comment, .mw-enhanced-rc-nested) > .comment > a, ' +
'#watchlist-edit-form .cdx-table td > label > a, ' +
'.mw-search-result-heading > a:not(:has(> .ext-communityrequests-entity-link--label)), ' +
'.mw-contributions-title, ' +
'#mw-whatlinkshere-list li > bdi > a, ' +
'.mw-allpages-chunk > li > a, ' +
'.mw-prefixindex-list > li > a, ' +
'.mw-logevent-loglines > li > a, ' +
'#mw-pages li > a, ' +
'.catchangesviewer-table td:nth-child(3) > a';
mw.hook('wikipage.content').add(async $content => {
let links = {};
$content.find('a').each(function () {
if (!this.matches(selector)) return;
let id = this.textContent.match(
/^(?:Talk:|Translations:)?Community Wishlist\/((?:W|FA)\d+)/
)?.[1];
if (!id) return;
(links[id] = links[id] || []).push(this);
});
links = Object.entries(links);
if (!links.length) return;
await loadTitles();
links = links.filter(callback);
if (!links.length) return;
await updateTitles();
links = links.filter(callback);
if (!links.length) return;
await updateTitles('declined');
links.forEach(callback);
});
let pn = mw.config.get('wgRelevantPageName');
let id = pn.match(/^(?:Talk:|Translations:)?Community_Wishlist\/((?:W|FA)\d+)/)?.[1];
if (!id) return;
await $.ready;
let extTitle = document.querySelector('.ext-communityrequests-wish--title');
if (extTitle && $('.mw-pt-languages-selected').attr('lang') === lang) return;
await loadTitles();
let title = getTitle(id);
if (!title) {
await updateTitles();
title = getTitle(id);
if (!title) {
await updateTitles('declined');
title = getTitle(id);
if (!title) return;
}
}
let $title = renderTitle(title, id, 'div');
if (mw.config.get('skin') === 'vector-2022') {
$title.prependTo('.vector-page-toolbar');
} else {
$title.insertAfter('#firstHeading');
}
css.textContent += ' .ext-communityrequests-entity-talk-header{display:none}';
if (extTitle) return;
document.title = document.title.replace(
pn.replaceAll('_', ' '),
`${pn.replace(`Community_Wishlist/${id}`, title)} ($&)`
);
})();
mw.config.get('wgWikiID') === 'metawiki' &&
mw.hook('wikipage.watchlistChange').add(async (isWatched, expiry) => {
if (![0, 1].includes(mw.config.get('wgNamespaceNumber'))) return;
let title = mw.config.get('wgTitle');
if (!/^Community Wishlist\/(?:W|FA)\d+$/.test(title)) return;
if (isWatched) {
await new mw.Api().watch(title + '/Votes', expiry);
mw.notify('Watching /Votes too.');
} else {
await new mw.Api().unwatch(title + '/Votes');
mw.notify('Unwatched /Votes too.');
}
});
['edit', 'submit'].includes(mw.config.get('wgAction')) &&
$(async () => {
let $input = $('#wpTemplateSandboxTemplate');
if (!$input.length) return;
mw.loader.addStyleTag('#templatesandbox-editform .oo-ui-fieldLayout{max-width:50em} #templatesandbox-editform .oo-ui-fieldLayout-field{flex-grow:999}');
let makeTemplateField = () => new OO.ui.FieldLayout(
new mw.widgets.TitleInputWidget({
inputId: 'wpTemplateSandboxTemplate',
name: 'wpTemplateSandboxTemplate',
showMissing: false,
value: $input.val()
}),
{ label: 'Template name:' }
);
if (mw.loader.getState('ext.TemplateSandbox') !== 'registered') {
await mw.loader.using('mediawiki.widgets');
$input.parent().replaceWith(makeTemplateField().$element);
return;
}
let require = await mw.loader.using([
'ext.TemplateSandbox.TemplateSandboxTitleWidget',
'ext.TemplateSandbox.styles', 'jquery.makeCollapsible', 'user.options'
]);
let widget = new (require('ext.TemplateSandbox.TemplateSandboxTitleWidget'))({
$overlay: true,
id: 'wpTemplateSandboxPage',
maxLength: 255,
name: 'wpTemplateSandboxPage',
placeholder: 'Page title',
required: false,
tabIndex: 10,
templateTitleFunc: () => $('#wpTemplateSandboxTemplate').val()
});
widget.$element.attr('data-ooui', '{"_":"mw.widgets.TemplateSandboxTitleWidget"}')
.data('oouiInfused', widget);
let fieldset = new OO.ui.FieldsetLayout({
classes: ['mw-templatesandbox-fieldset', 'mw-collapsed'],
id: 'templatesandbox-editform',
items: [
makeTemplateField(),
new OO.ui.ActionFieldLayout(
widget,
new OO.ui.ButtonInputWidget({
id: 'wpTemplateSandboxPreview',
name: 'wpTemplateSandboxPreview',
label: 'Show preview',
tabIndex: 10,
type: 'submit',
useInputTag: true
}),
{ align: 'top' }
)
],
label: 'Preview page with this template'
});
fieldset.$label.append(' ', $('<span>').addClass('mw-collapsible-toggle-placeholder'));
fieldset.$group.addClass('mw-collapsible-content');
$('#templatesandbox-editform').replaceWith(fieldset.$element.makeCollapsible());
let modules = ['ext.TemplateSandbox'];
if (Number(mw.user.options.get('uselivepreview'))) {
modules.push('ext.TemplateSandbox.preview');
}
mw.loader.load(modules);
});
mw.config.get('wgWikiID') === 'enwiki' &&
mw.config.get('wgCanonicalSpecialPageName') === 'Watchlist' &&
(async () => {
mw.loader.addStyleTag('.xfdnotifier-sublinks::before{content:" ["} .xfdnotifier-sublinks::after{content:"]"} .xfdnotifier-sublinks > span:not(:first-child)::before{content:"\\2009·\\2009"} .mw-portlet.vector-menu[id^="p-xfdnotifier-"] a{display:inline}');
await mw.loader.using(['mediawiki.api', 'mediawiki.Title', 'mediawiki.storage']);
let xfds = [
{
id: 'rm',
label: 'RM',
full: 'Requested moves',
cat: 'Requested moves',
},
{
id: 'rmt',
label: 'RM/T',
full: 'Requested moves (technical)',
page: 'Wikipedia:Requested_moves/Technical_requests',
titleExtractor: $page => (
$page.find(`[data-mw*='"wt":"RMassist/core"']`).closest('li').map(function () {
return this.querySelector('a[rel="mw:WikiLink"]')?.title;
}).get()
)
},
{
id: 'afd',
label: 'AfD',
full: 'Articles for deletion',
cat: 'Articles for deletion'
},
{
id: 'mfd',
label: 'MfD',
full: 'Miscellaneous for deletion',
cat: 'Miscellaneous pages for deletion'
},
{
id: 'tfd',
label: 'TfD',
full: 'Templates for deletion',
cat: 'Templates for deletion'
},
{
id: 'tfm',
label: 'TfM',
full: 'Templates for merging',
cat: 'Templates for merging'
},
{
id: 'cfd',
label: 'CfD',
full: 'Categories for deletion',
cat: 'Categories for deletion'
},
{
id: 'cfr',
label: 'CfR',
full: 'Categories for renaming',
cat: 'Categories for renaming'
},
{
id: 'cfsr',
label: 'CfSR',
full: 'Categories for speedy renaming',
cat: 'Categories for speedy renaming'
},
{
id: 'cfm',
label: 'CfM',
full: 'Categories for merging',
cat: 'Categories for merging'
},
{
id: 'cfs',
label: 'CfS',
full: 'Categories for splitting',
cat: 'Categories for splitting'
},
{
id: 'cfl',
label: 'CfL',
full: 'Categories for listifying',
cat: 'Categories for listifying'
},
{
id: 'cfc',
label: 'CfC',
full: 'Categories for conversion',
cat: 'Categories for conversion'
},
{
id: 'cfgd',
label: 'CfGD',
full: 'Categories for general discussion',
cat: 'Categories for general discussion'
},
{
id: 'ffd',
label: 'FfD',
full: 'Files for discussion',
cat: 'Wikipedia files for discussion'
},
{
id: 'rfd',
label: 'RfD',
full: 'Redirects for discussion',
cat: 'All redirects for discussion'
},
{
id: 'prod',
label: 'PROD',
full: 'Articles proposed for deletion',
cat: 'All articles proposed for deletion'
}
];
window.xfd = xfds;
let queryTitles = async (xfd, titles) => {
if (!titles.length) return;
let response = await new mw.Api().get({
action: 'query',
titles: titles.slice(0, 50),
prop: 'info',
inprop: 'watched',
formatversion: 2
});
response?.query?.pages?.forEach(p => {
if (p.watched) {
xfd.pages.push(p.title);
}
});
await queryTitles(xfd, titles.slice(50));
};
let queryPage = async xfd => {
let $page = $($.parseHTML(await $.get(
`https://en.wikipedia.org/w/rest.php/v1/page/${encodeURIComponent(xfd.page)}/html`
)));
await queryTitles(xfd, xfd.titleExtractor($page));
};
let queryCat = async (xfd, gcmcontinue) => {
let response = await new mw.Api().get({
action: 'query',
prop: 'info|categories',
inprop: 'watched',
clprop: 'sortkey',
clcategories: `Category:${xfd.cat}`,
generator: 'categorymembers',
gcmtitle: `Category:${xfd.cat}`,
gcmlimit: 'max',
gcmsort: 'timestamp',
gcmdir: 'older',
gcmcontinue: gcmcontinue,
formatversion: 2
});
response?.query?.pages?.forEach(p => {
if (p.watched && p.categories?.[0]?.sortkeyprefix !== ' ') {
xfd.pages.push(p.title);
}
});
if (response?.continue?.gcmcontinue) {
await queryCat(xfd, response.continue.gcmcontinue);
}
};
let show = async (xfd, lastId, isCache) => {
if (xfd.portlet && isCache) return;
let portletId = 'p-xfdnotifier-' + xfd.id;
if (xfd.portlet) {
$(xfd.portlet).find('ul').empty();
if (!xfd.pages.length) return;
} else {
await $.ready;
xfd.portlet = mw.util.addPortlet(portletId, xfd.label, '#' + lastId);
}
let $label = $(`#${portletId}-label`).attr('title', xfd.full);
if (xfd.page) {
$label.wrapInner($('<a>').attr('href', mw.util.getUrl(xfd.page)));
}
xfd.pages.forEach(p => {
let t = mw.Title.newFromText(p);
let isTalk = t.isTalkPage();
let $other = $('<a>').attr({
href: t[isTalk ? 'getSubjectPage' : 'getTalkPage']().getUrl(),
title: isTalk ? 'subject' : 'talk'
}).text(isTalk ? 's' : 't');
let link = mw.util.addPortletLink(portletId, t.getUrl(), p).querySelector('a');
$('<span>').addClass('xfdnotifier-sublinks').append(
$('<span>').append($other),
$('<span>').append(
$('<a>').attr({
href: t.getUrl({ action: 'history' }),
title: 'history'
}).text('h')
)
).insertAfter(link);
});
};
mw.hook('wikipage.content').add(mw.util.throttle(async () => {
let cache = mw.storage.getObject('xfdnotifier') || {};
let lastId = 'p-tb';
for (let xfd of xfds) {
let portletId = 'p-xfdnotifier-' + xfd.id;
let now = Math.floor(Date.now() / 1000);
if (now - cache[xfd.id]?.[0] < 600) {
xfd.pages = cache[xfd.id].slice(1);
await show(xfd, lastId, true);
lastId = portletId;
continue;
}
xfd.pages = [];
if (xfd.cat) {
await queryCat(xfd);
} else if (xfd.page) {
await queryPage(xfd);
}
cache[xfd.id] = [now, ...xfd.pages];
mw.storage.setObject('xfdnotifier', cache, 604800);
await show(xfd, lastId);
lastId = portletId;
}
}, 1800000));
})();
0g0dwqux7dstuqxal57cjv44dwz8odf
Palladium
0
119439
754548
470404
2026-08-01T05:37:24Z
Shebaww
75105
/* growthexperiments-addlink-summary-summary:3|0|0 */
754548
wikitext
text/x-wiki
''Palladium'' is a [[chemical element]] with symbol Pd and [[atomic number]] Pd in period 5. It appears as a silvery white. It is a Solid
==Chemical properties==
Palladium has an atomic mass of 106.421, a boiling point of 3236, a density of 12.023, a [[melting point]] of 1828.05, a molar heat of 25.98, an electron configuration of 1s2 2s2 2p6 3s2 3p6 3d10 4s2 4p6 4d10, and an electron affinity of 54.24.
[[Category:Chemical elements]]
l1tokkpghq826r184br9fqzz5fb3562
Radium
0
119479
754549
738008
2026-08-01T05:41:52Z
Shebaww
75105
Changed the Announcement from "Safe to eat" to "Dangerous, do not eat"
754549
wikitext
text/x-wiki
{{Template:Real}}
📢ANNOUNCEMENT!📢
EATING RADIUM IS -EXTREMELY- DANGEROUS! IT CONTAINS DANGEROUS RADIATION!
edit
==Chemical properties==
Radium has an [[atomic mass]] of 226, a boiling point of 2010, a density of 5.5, a melting point of 1233, a molar heat of None, an [[electron configuration]] of 1s2 2s2 2p6 3s2 3p6 3d10 4s2 4p6 4d10 4f14 5s2 5p6 5d10 6s2 6p6 7s2, and an electron affinity of 9.6485.
= yum!! =
[[Category:Chemical elements]]
2wcz2ex0c7djzbpp1afvyqqzqck7uif
Mwbot-rs/Save
0
122864
754409
753350
2026-07-31T12:06:01Z
Mwbot-rs test
52001
Test suite edit
754409
wikitext
text/x-wiki
It has been 1785499560 seconds since the epoch.
i89r3tsfmy0gfc12ny1ifiiu12khih9
754410
754409
2026-07-31T12:06:33Z
Mwbot-rs test
52001
Test suite edit
754410
wikitext
text/x-wiki
It has been 1785499593 seconds since the epoch.
d99n5hajv9w3defrbuqhuhgpzdp86zi
754411
754410
2026-07-31T12:07:06Z
Mwbot-rs test
52001
Test suite edit
754411
wikitext
text/x-wiki
It has been 1785499625 seconds since the epoch.
ahcjbwhq0goo2rzeis3zocwby0hw2sb
Cat
0
125082
754505
748973
2026-07-31T22:22:39Z
~2026-42636-52
75103
CE here, just creating a TA to test the unblock wizard on TAs
754505
wikitext
text/x-wiki
<!-- Please do not remove or change this AfD message until the discussion has been closed. -->
{{Article for deletion/dated|page=Cat|timestamp=20260219233546|year=2026|month=February|day=19|substed=yes|help=off}}
<!-- Once discussion is closed, please place on talk page: {{Old AfD multi|page=Cat|date=19 February 2026|result='''keep'''}} -->
<!-- End of AfD message, feel free to edit beyond this point -->
{{AI-generated|date=May 2026}}
Cat is very cute. Really!
dym2laq7mt6to8jmrf10caiek5tggpu
Asicosilomu testing testing
0
146997
754470
734062
2026-07-31T19:22:50Z
Itsied
75098
/* */
754470
wikitext
text/x-wiki
''''''Bold ''text''''*
Italic text# <code>Numbered list item</code><nowi{|
class="wikitable"<math display="block">|+ Caption text
80eyqeta208mtllwt0asbfrm8fnycp1
Picture of the Year/2023/R2/votes/Alley behind Boat Quay, Singapore-L1003686.jpg
0
157753
754477
735089
2026-07-31T19:39:18Z
Itsied
75098
/* */
754477
wikitext
text/x-wiki
#REDIRECT [[Template:Short description]]
# Ingenuity
this is an edit
another edit
lsqmlxqmnoyaqm8ax098mow05jbngvz
754478
754477
2026-07-31T19:39:47Z
Itsied
75098
/* */
754478
wikitext
text/x-wiki
#REDIRECT [[Template:Short]]
# Ingenuity
this is an edit
another edit
77zv5ls80b2x74k7uvb5ct9lt537ca8
Example94949
0
163046
754446
735419
2026-07-31T18:57:56Z
~2026-42487-87
75100
754446
wikitext
text/x-wiki
test
this is an edit the other day
glzpz8k3hjfai0i7qk5qb4ead9lbv8e
NukeTestPage5Bytes
0
163447
754469
644016
2026-07-31T19:18:26Z
Itsied
75098
/* */
754469
wikitext
text/x-wiki
12345
<nowiki><noinclude></nowiki>/<nowiki><includeonly></nowiki>
2qcr2cdpqf9yie3moohz8jkqx5jihxp
German
0
165003
754443
649809
2026-07-31T18:48:43Z
Itsied
75098
/* */
754443
wikitext
text/x-wiki
[[it:English]][[es:Spanish]][[fr:French]][[de:German]][[it:Italian]][[ja:Japanese]]
[[id:Indonesian]][[ko:Korean]][[th:Thai]][[ru:Russian]][[vi:Vietnamese]][[pl:Polish]]
[[pt:Portuguese]][[zh:Chinese]]
qjjntjlxd0mdc2mmzq9dqlyrh8j005j
754444
754443
2026-07-31T18:49:09Z
Itsied
75098
/* */
754444
wikitext
text/x-wiki
[[en:English]][[es:Spanish]][[fr:French]][[de:German]][[it:Italian]][[ja:Japanese]]
[[id:Indonesian]][[ko:Korean]][[th:Thai]][[ru:Russian]][[vi:Vietnamese]][[pl:Polish]]
[[pt:Portuguese]][[zh:Chinese]]
ijc0akqnonanq3zuk5gcu7qhjk7evoj
User:DreamRimmer/test.js
2
167434
754412
750361
2026-07-31T12:56:22Z
DreamRimmer
57656
754412
javascript
text/javascript
!function(){"use strict";$.when(mw.loader.using("mediawiki.util"),$.ready).then(function(){mw.util.addPortletLink("p-tb",mw.util.getUrl("Special:BlankPage/MassDelete"),"MassDelete")}),"Blankpage"===mw.config.get("wgCanonicalSpecialPageName")&&"Massdelete"===mw.config.get("wgTitle").split("/",2)[1]&&$.when(mw.loader.using("mediawiki.util"),$.ready).then(function(){!function(){function t(t,e,s){var i={action:"delete",title:t,reason:e};return s&&(i.deletetalk=!0),new mw.Api({ajax:{headers:{"Api-User-Agent":"meta:User:DreamRimmer/MassDelete.js"}}}).postWithToken("csrf",i).then(function(e){return{status:"success",data:e,page:t}}).catch(function(e,s){return"delete-error-associated-doesnotexist"===e?{status:"skipped",data:s,page:t}:{status:"error",code:e,data:s,page:t}})}function e(t){return t.data&&t.data.error&&t.data.error.info||t.code||"Unknown error"}$("#mw-content-text > p").remove(),$("#firstHeading").text("MassDelete"),mw.loader.using(["@wikimedia/codex","vue"]).then(function(s){var i=s("vue"),a=s("@wikimedia/codex"),n={name:"MassDeleteApp",components:{CdxButton:a.CdxButton,CdxCheckbox:a.CdxCheckbox,CdxTextInput:a.CdxTextInput,CdxTextArea:a.CdxTextArea,CdxField:a.CdxField,CdxMessage:a.CdxMessage,CdxProgressBar:a.CdxProgressBar,CdxProgressIndicator:a.CdxProgressIndicator,CdxDialog:a.CdxDialog,CdxIcon:a.CdxIcon},template:'<div class="massdelete-app">\t<cdx-field class="massdelete-field">\t\t<template #label>Pages to delete</template>\t\t<template #help-text>Enter one page title per line.</template>\t\t<cdx-text-area\t\t\tv-model="pagesInput"\t\t\tplaceholder="Page 1 Page 2 Page 3"\t\t\t:rows="12"\t\t\t@input="onInputsChanged"\t\t></cdx-text-area>\t</cdx-field>\t<cdx-field class="massdelete-field">\t\t<template #label>Reason</template>\t\t<cdx-text-input\t\t\tv-model="reason"\t\t\tplaceholder="Reason for deletion"\t\t\t@input="onInputsChanged"\t\t></cdx-text-input>\t</cdx-field>\t<cdx-checkbox v-model="deleteTalk" class="massdelete-field">\t\tDelete associated talk pages (if any exist)\t</cdx-checkbox>\t<div class="massdelete-buttons">\t\t<cdx-button @click="previewDeletion" :disabled="!canPreview || isDeleting">\t\t\tPreview deletion\t\t</cdx-button>\t\t<cdx-button\t\t\taction="destructive"\t\t\tweight="primary"\t\t\t:disabled="!canStart || isDeleting"\t\t\t@click="askConfirmation"\t\t>\t\t\t<template v-if="isDeleting"><cdx-icon :icon="cdxIconTrash"></cdx-icon> Deleting… ({{ completedCount }}/{{ totalCount }})</template>\t\t\t<template v-else-if="isDone">Done ({{ completedCount }}/{{ totalCount }})</template>\t\t\t<template v-else><cdx-icon :icon="cdxIconTrash"></cdx-icon> Start deletion</template>\t\t</cdx-button>\t\t<cdx-button action="destructive" @click="cancel">Cancel</cdx-button>\t</div>\t<div v-if="previewList.length && !steps.length" class="massdelete-section">\t\t<h3 class="massdelete-heading">Deletion preview</h3>\t\t<ul class="massdelete-preview-list">\t\t\t<li v-for="page in previewList" :key="page">\t\t\t\t<a :href="pageUrl(page)" target="_blank" rel="noopener">{{ page }}</a>\t\t\t\twill be deleted for reason: <strong>{{ reason }}</strong>\t\t\t</li>\t\t</ul>\t\t<p v-if="deleteTalk" class="massdelete-note">Talk pages will also be deleted if they exist.</p>\t</div>\t<div v-if="steps.length" class="massdelete-section">\t\t<h3 class="massdelete-heading">Deletion log</h3>\t\t<div class="massdelete-progress">\t\t\t<cdx-progress-bar :value="completedCount" :max="totalCount" aria-label="Deletion progress"></cdx-progress-bar>\t\t</div>\t\t<div class="massdelete-steps">\t\t\t<div v-for="(step, idx) in steps" :key="idx" :class="[\'massdelete-step\', \'massdelete-step--\' + step.state]">\t\t\t\t<div class="massdelete-step-icon">\t\t\t\t\t<div class="massdelete-step-icon-inner">\t\t\t\t\t\t<span v-if="step.state === \'pending\'">{{ idx + 1 }}</span>\t\t\t\t\t\t<cdx-progress-indicator v-else-if="step.state === \'running\'"></cdx-progress-indicator>\t\t\t\t\t\t<cdx-icon v-else-if="step.state === \'success\'" :icon="cdxIconSuccess"></cdx-icon>\t\t\t\t\t\t<cdx-icon v-else-if="step.state === \'failure\'" :icon="cdxIconAlert"></cdx-icon>\t\t\t\t\t\t<cdx-icon v-else-if="step.state === \'skipped\'" :icon="cdxIconSuccess"></cdx-icon>\t\t\t\t\t</div>\t\t\t\t</div>\t\t\t\t<div class="massdelete-step-content">\t\t\t\t\t<div class="massdelete-step-title">\t\t\t\t\t\t<a :href="pageUrl(step.page)" target="_blank" rel="noopener">{{ step.page }}</a>\t\t\t\t\t</div>\t\t\t\t\t<div class="massdelete-step-subtitle">\t\t\t\t\t\t<template v-if="step.state === \'pending\'">Pending…</template>\t\t\t\t\t\t<template v-else-if="step.state === \'running\'">Deleting…</template>\t\t\t\t\t\t<template v-else-if="step.state === \'success\'">Deleted successfully</template>\t\t\t\t\t\t<template v-else-if="step.state === \'skipped\'">Skipped — talk page did not exist</template>\t\t\t\t\t\t<template v-else-if="step.state === \'failure\'">Failed: {{ step.message }}</template>\t\t\t\t\t</div>\t\t\t\t</div>\t\t\t\t<cdx-button v-if="step.state === \'failure\'" weight="quiet" aria-label="Retry" @click="retryStep(step)">\t\t\t\t\t<cdx-icon :icon="cdxIconRestart" icon-label="Retry"></cdx-icon>\t\t\t\t</cdx-button>\t\t\t</div>\t\t</div>\t\t<cdx-message v-if="failedSteps.length" type="error" class="massdelete-fail-summary">\t\t\t<strong>Failed deletions ({{ failedSteps.length }}):</strong>\t\t\t<ul class="massdelete-preview-list">\t\t\t\t<li v-for="step in failedSteps" :key="step.page">\t\t\t\t\t<a :href="pageUrl(step.page)" target="_blank" rel="noopener">{{ step.page }}</a>: {{ step.message }}\t\t\t\t</li>\t\t\t</ul>\t\t</cdx-message>\t</div>\t<cdx-dialog\t\tv-model:open="showConfirmDialog"\t\ttitle="Confirm deletion"\t\t:use-close-button="true"\t\t:primary-action="primaryAction"\t\t:default-action="defaultAction"\t\t@primary="confirmDeletion"\t\t@default="showConfirmDialog = false"\t>\t\t<p>\t\t\t<cdx-icon :icon="cdxIconAlert"></cdx-icon>\t\t\tAre you sure you want to delete <strong>{{ previewList.length }}</strong> page(s)?\t\t\tThis action cannot be undone.\t\t</p>\t</cdx-dialog></div>',data:function(){return{pagesInput:"",reason:"",deleteTalk:!0,previewList:[],steps:[],isDeleting:!1,isDone:!1,showConfirmDialog:!1,primaryAction:{label:"Delete",actionType:"destructive"},defaultAction:{label:"Cancel"},cdxIconTrash:'<path d="m16 8-1.087 12H5.087L4 8h2l.913 10h6.174L14 8zM13 4h5v2H2V4h5V0h6z"/>',cdxIconAlert:'<path d="M19 6.4v7.199L13.6 19H6.4L1 13.599v-7.2L6.4 1h7.2zM9 14v2h2v-2zm0-9v7h2V5z"/>',cdxIconSuccess:'<path d="M10 1a9 9 0 110 18 9 9 0 010-18M8.823 11.118 6.8 9.6l-1.2 1.6 2.8 2.1 1.381-.175 4.624-5.781-1.561-1.25z"/>',cdxIconRestart:'<path d="M10 1a8.98 8.98 0 016.999 3.343L17 2h2v5l-1 1h-5l-.001-2h2.746a7 7 0 101.184 5h2.016A9 9 0 1110 1"/>'}},computed:{canPreview:function(){return""!==this.pagesInput.trim()&&""!==this.reason.trim()},canStart:function(){return this.previewList.length>0&&!this.isDone},totalCount:function(){return this.steps.length},completedCount:function(){return this.steps.filter(function(t){return"success"===t.state||"skipped"===t.state}).length},failedSteps:function(){return this.steps.filter(function(t){return"failure"===t.state})}},methods:{pageUrl:function(t){return mw.util.getUrl(t)},parsePages:function(){return this.pagesInput.split("\n").map(function(t){return t.trim()}).filter(function(t){return""!==t})},onInputsChanged:function(){this.previewList=[],this.steps=[],this.isDone=!1},previewDeletion:function(){var t=this.parsePages();0!==t.length&&""!==this.reason.trim()?(this.steps=[],this.isDone=!1,this.previewList=t):mw.notify("Please fill in all fields.",{type:"error"})},askConfirmation:function(){0!==this.previewList.length?this.showConfirmDialog=!0:mw.notify("Please preview the deletion first.",{type:"error"})},buildReason:function(){var t=this.reason.trim(),e="";return mw.config.get("wgUserGroups").indexOf("sysop")>=0?e=" (sysop action)":mw.config.get("wgGlobalGroups")&&mw.config.get("wgGlobalGroups").indexOf("steward")>=0?e=" ([[m:stewards|steward]] action)":mw.config.get("wgGlobalGroups")&&mw.config.get("wgGlobalGroups").indexOf("global-sysop")>=0&&(e=" ([[m:GS|global sysop]] action)"),t+e+" (using [[m:User:DreamRimmer/MassDelete.js|MassDelete.js]])"},confirmDeletion:function(){var s=this;this.showConfirmDialog=!1;var i=this.buildReason(),a=this.deleteTalk;this.steps=this.previewList.map(function(t){return{page:t,state:"pending",message:void 0}}),this.isDeleting=!0,this.isDone=!1,function n(l){var o=Math.min(l+10,s.steps.length),r=s.steps.slice(l,o).map(function(s){return s.state="running",t(s.page,i,a).then(function(t){return"success"===t.status?s.state="success":"skipped"===t.status?s.state="skipped":(s.state="failure",s.message=e(t)),t})});$.when.apply($,r).then(function(){o<s.steps.length?setTimeout(function(){n(o)},100):(s.isDeleting=!1,s.isDone=!0)})}(0)},retryStep:function(s){var i=this.buildReason(),a=this.deleteTalk;s.state="running",s.message=void 0,t(s.page,i,a).then(function(t){"success"===t.status?s.state="success":"skipped"===t.status?s.state="skipped":(s.state="failure",s.message=e(t))})},cancel:function(){window.location.href=mw.config.get("wgServer")}}},l=document.createElement("div");document.getElementById("mw-content-text").appendChild(l),i.createMwApp(n).mount(l),mw.util.addCSS(".massdelete-app { max-width: 720px; }.massdelete-field { margin-bottom: 16px; }.massdelete-buttons { display: flex; gap: 8px; margin-bottom: 20px; flex-wrap: wrap; }.massdelete-buttons .cdx-icon { margin-right: 4px; }.massdelete-section { margin-top: 24px; }.massdelete-heading { font-size: 1.1em; font-weight: 700; margin-bottom: 8px; }.massdelete-preview-list { padding-left: 20px; }.massdelete-preview-list li { margin-bottom: 4px; }.massdelete-note { color: #54595d; font-style: italic; }.massdelete-progress { margin-bottom: 16px; max-width: 320px; }.massdelete-steps { display: grid; grid-auto-flow: row; gap: 12px; }.massdelete-step { display: flex; gap: 12px; align-items: flex-start; }.massdelete-step-icon { flex: 0 0 2.5rem; display: flex; justify-content: center; }.massdelete-step-icon-inner { aspect-ratio: 1; border-radius: 50%; display: grid; place-items: center; width: 70%; margin: 15%; background-color: var( --background-color-neutral, #eaecf0 ); color: var( --color-base, #202122 ); }.massdelete-step--running .massdelete-step-icon-inner .cdx-progress-indicator { width: 100%; height: 100%; }.massdelete-step--success .massdelete-step-icon-inner, .massdelete-step--skipped .massdelete-step-icon-inner { background-color: transparent; }.massdelete-step--success .massdelete-step-icon-inner .cdx-icon, .massdelete-step--skipped .massdelete-step-icon-inner .cdx-icon { color: var( --color-icon-success, #099979 ); width: 100%; height: 100%; }.massdelete-step--failure .massdelete-step-icon-inner { background-color: transparent; }.massdelete-step--failure .massdelete-step-icon-inner .cdx-icon { color: var( --color-icon-error, #f54739 ); width: 100%; height: 100%; }.massdelete-step-content { flex: 1; }.massdelete-step-title { font-weight: 700; font-size: var( --font-size-medium, 1rem ); color: var( --color-base, #202122 ); }.massdelete-step--failure .massdelete-step-title { color: var( --color-error, #bf3c2c ); }.massdelete-step--success .massdelete-step-title, .massdelete-step--skipped .massdelete-step-title { color: var( --color-success, #177860 ); }.massdelete-step-subtitle { font-size: var( --font-size-small, .875rem ); color: var( --color-subtle, #54595d ); }.massdelete-fail-summary { margin-top: 12px; }")})}()})}();
7xekgnejn6vau5wdl5vvrv1z02loku0
NonExistentPage123456789
0
168414
754445
676373
2026-07-31T18:51:37Z
Itsied
75098
/* */
754445
wikitext
text/x-wiki
Hi I'm a new page from Google
7h6fsidz5co43s9ap0oihb1qqf74y43
User:LuniXunie
2
168957
754546
726315
2026-08-01T00:56:50Z
LuniXunie
71393
{{test}} [[hello]]
754546
wikitext
text/x-wiki
test 5
1dmcxeewfihdw80vzftb6jj9g7vh0ed
Wp/sas/Kabupatén Kendal
0
171729
754442
725642
2026-07-31T18:47:09Z
Itsied
75098
/* */
754442
wikitext
text/x-wiki
'''Kabupatén Kendal''' niki [[Wp/en/Kabupatén|kabupatén]] saq araq léq [[Wp/sas/Propinsi Jawa Tengaq|Propinsi Jawa Tengaq]], [[Wp/sas/Indonésia|Indonésia]].<ref>{{Wp/sas/Cite document|author=[[Wp/sas/Kementerian Dalem Negeri Republik Indonésia|Kemendagri]] |title=Keputusan Menteri Dalam Negeri Nomor 300.2.2-2138 Tahun 2025 |publisher=Kemendagri |date=2025-04-25}}</ref> Mangkin araq {{FORMATNUM:951465}} dengan léq kabupatén niki. Ibu kotane kabupatén niki Pemalang. Luas wilayahne kabupatén niki {{FORMATNUM:1118.03}} km<sup>2</sup>.<ref>{{Wp/sas/Cite web|author=[[Wp/sas/Kementerian Dalem Negeri Republik Indonésia|Kemendagri]] |title=Lampiran Peraturan Menteri Dalam Negeri Nomor 72 Tahun 2019 |publisher=Kemendagri |date=2019-10-25 |url=https://www.kemendagri.go.id/files/2020/PMDN%2072%20TH%202019+lampiran.pdf}}</ref>
== Rujukan ==
{{Wp/sas/Reflist}}
[[Category:Wp/sas]]
[[Category:Wp/sas/Kabupatén léq Indonesia]]
{{INTERWIKI|Q10618}}
683fb2xkisul0z46f0qyfexbd64l58c
User:Whyiseverythingalreadyused/sandbox
2
172117
754414
754313
2026-07-31T13:11:34Z
Whyiseverythingalreadyused
70199
754414
wikitext
text/x-wiki
{{user sandbox}}
{{User:Whyiseverythingalreadyused/sandbox 1|-r}}
1y16fylg5wkw0lhpz345sktabpg7xsy
754415
754414
2026-07-31T13:11:50Z
Whyiseverythingalreadyused
70199
754415
wikitext
text/x-wiki
{{user sandbox}}
{{User:Whyiseverythingalreadyused/sandbox 1|Edit}}
02av981gy08ow60njjzsxz09b59i3q0
Ukraine
0
172177
754479
739689
2026-07-31T20:07:37Z
Itsied
75098
/* */
754479
wikitext
text/x-wiki
'''{{#invoke:WikidataIB|label}}''' is a appreciated😝{{#invoke:WikidataIB|getDescription|wikidata}}. It {{#invoke:WikidataIB|label|P89977}} {{Wdib|P89977|rank=best|fwd=ALL|osd=no|list=prose}}. {{Wdib|P89953|fwd=ALL|osd=no}} is the {{#invoke:WikidataIB|getAliases|{{Wdib|P89901|fwd=ALL|osd=no|maxvals=1}}|maxvals=1}}'s {{#invoke:WikidataIB|label|P89953}}. The {{#invoke:WikidataIB|label|P89950}} is {{Wdib|P89950|fwd=ALL|osd=no}}.
doz1its4k9jimz6s7cbo1r3ml9t1agh
User talk:Enbi
3
175451
754421
754295
2026-07-31T13:44:19Z
Enbi
72574
Warning [[Special:Contributions/Enbi|Enbi]]: {{[[Template:uw-vandalism1|uw-vandalism1]]}} (Fortress-Beta)
754421
wikitext
text/x-wiki
{{hi}}== July 2026 ==
{{subst:uw-engvar|Ustanak}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:55, 29 July 2026 (UTC)== July 2026 ==
{{subst:uw-engvar|Ustanak}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:57, 29 July 2026 (UTC)== July 2026 ==
{{subst:uw-engvar|Ustanak}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:59, 29 July 2026 (UTC)== July 2026 ==
[[File:Information.svg|25px|alt=Information icon]] Hello, I'm [[User:Enbi|Enbi]]. I wanted to let you know that one or more of [[Special:Contributions/Enbi|your recent contributions]] to [[:Hi]] have been undone because they did not appear constructive. If you would like to experiment, please use the [[WP:sandbox|sandbox]]. If you have any questions, you can ask for assistance at the [[Wikipedia:Help desk|help desk]]. Thanks.<!-- Template:uw-vandalism1 --> <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 13:44, 31 July 2026 (UTC)
hlgxuterm0prrpvc1pqojf9gun4l9b3
754424
754421
2026-07-31T13:44:53Z
Enbi
72574
Warning [[Special:Contributions/Enbi|Enbi]]: {{[[Template:uw-disruptive1|uw-disruptive1]]}} (Fortress-Beta)
754424
wikitext
text/x-wiki
{{hi}}== July 2026 ==
{{subst:uw-engvar|Ustanak}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:55, 29 July 2026 (UTC)== July 2026 ==
{{subst:uw-engvar|Ustanak}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:57, 29 July 2026 (UTC)== July 2026 ==
{{subst:uw-engvar|Ustanak}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:59, 29 July 2026 (UTC)== July 2026 ==
[[File:Information.svg|25px|alt=Information icon]] Hello, I'm [[User:Enbi|Enbi]]. I wanted to let you know that one or more of [[Special:Contributions/Enbi|your recent contributions]] to [[:Hi]] have been undone because they did not appear constructive. If you would like to experiment, please use the [[WP:sandbox|sandbox]]. If you have any questions, you can ask for assistance at the [[Wikipedia:Help desk|help desk]]. Thanks.<!-- Template:uw-vandalism1 --> <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 13:44, 31 July 2026 (UTC)== July 2026 ==
[[File:Information.svg|25px|alt=Information icon]] Hello. This is a message to let you know that one or more of [[Special:Contributions/Enbi|your recent contributions]], such as the edit(s) you made to [[:Hi]], did not appear to be constructive and have been [[Help:Reverting|reverted]]. Please take some time to familiarise yourself with our [[Wikipedia:Policies and guidelines|policies and guidelines]]. You can find information about these at our [[Help:Getting started|welcome page]] which also provides further information about [[Wikipedia:Contributing to Wikipedia|contributing constructively to this encyclopedia]]. If you only meant to make test edits, please use {{safesubst:If temporary account|the [[Wikipedia:Sandbox|sandbox]]|[[User:Enbi/sandbox|your sandbox]]}} for that. If you think I made a mistake, or if you have any questions, you may leave a message on [[User_talk:Enbi|my talk page]]. Thank you.<!-- Template:uw-disruptive1 --> <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 13:44, 31 July 2026 (UTC)
22oy3tu8zbat1qgh9ad2y9tykcleeqn
754425
754424
2026-07-31T13:46:09Z
Enbi
72574
Blanked the page
754425
wikitext
text/x-wiki
phoiac9h4m842xq45sp7s6u21eteeq1
754428
754425
2026-07-31T13:46:52Z
Enbi
72574
Warning [[Special:Contributions/Enbi|Enbi]]: {{[[Template:uw-disruptive1|uw-disruptive1]]}} (Fortress-Beta)
754428
wikitext
text/x-wiki
== July 2026 ==
[[File:Information.svg|25px|alt=Information icon]] Hello. This is a message to let you know that one or more of [[Special:Contributions/Enbi|your recent contributions]], such as the edit(s) you made to [[:Hi]], did not appear to be constructive and have been [[Help:Reverting|reverted]]. Please take some time to familiarise yourself with our [[Wikipedia:Policies and guidelines|policies and guidelines]]. You can find information about these at our [[Help:Getting started|welcome page]] which also provides further information about [[Wikipedia:Contributing to Wikipedia|contributing constructively to this encyclopedia]]. If you only meant to make test edits, please use {{safesubst:If temporary account|the [[Wikipedia:Sandbox|sandbox]]|[[User:Enbi/sandbox|your sandbox]]}} for that. If you think I made a mistake, or if you have any questions, you may leave a message on [[User_talk:Enbi|my talk page]]. Thank you.<!-- Template:uw-disruptive1 --> <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 13:46, 31 July 2026 (UTC)
boubkn9w9tjqvex9uqse39s5pnj9jrz
754489
754428
2026-07-31T21:28:39Z
Enbi
72574
Warning [[Special:Contributions/Enbi|Enbi]]: {{[[Template:uw-test2|uw-test2]]}} (Fortress-Beta)
754489
wikitext
text/x-wiki
== July 2026 ==
[[File:Information.svg|25px|alt=Information icon]] Hello. This is a message to let you know that one or more of [[Special:Contributions/Enbi|your recent contributions]], such as the edit(s) you made to [[:Hi]], did not appear to be constructive and have been [[Help:Reverting|reverted]]. Please take some time to familiarise yourself with our [[Wikipedia:Policies and guidelines|policies and guidelines]]. You can find information about these at our [[Help:Getting started|welcome page]] which also provides further information about [[Wikipedia:Contributing to Wikipedia|contributing constructively to this encyclopedia]]. If you only meant to make test edits, please use {{safesubst:If temporary account|the [[Wikipedia:Sandbox|sandbox]]|[[User:Enbi/sandbox|your sandbox]]}} for that. If you think I made a mistake, or if you have any questions, you may leave a message on [[User_talk:Enbi|my talk page]]. Thank you.<!-- Template:uw-disruptive1 --> <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 13:46, 31 July 2026 (UTC)
{{subst:uw-test2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 21:28, 31 July 2026 (UTC)
4xn3qlh4o3jiwc1agp8swmw1xiigib3
754510
754489
2026-07-31T22:34:42Z
Enbi
72574
Warning [[Special:Contributions/Enbi|Enbi]]: {{[[Template:uw-promo2|uw-promo2]]}} (Fortress-Beta)
754510
wikitext
text/x-wiki
== July 2026 ==
[[File:Information.svg|25px|alt=Information icon]] Hello. This is a message to let you know that one or more of [[Special:Contributions/Enbi|your recent contributions]], such as the edit(s) you made to [[:Hi]], did not appear to be constructive and have been [[Help:Reverting|reverted]]. Please take some time to familiarise yourself with our [[Wikipedia:Policies and guidelines|policies and guidelines]]. You can find information about these at our [[Help:Getting started|welcome page]] which also provides further information about [[Wikipedia:Contributing to Wikipedia|contributing constructively to this encyclopedia]]. If you only meant to make test edits, please use {{safesubst:If temporary account|the [[Wikipedia:Sandbox|sandbox]]|[[User:Enbi/sandbox|your sandbox]]}} for that. If you think I made a mistake, or if you have any questions, you may leave a message on [[User_talk:Enbi|my talk page]]. Thank you.<!-- Template:uw-disruptive1 --> <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 13:46, 31 July 2026 (UTC)
{{subst:uw-test2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 21:28, 31 July 2026 (UTC)
{{subst:uw-promo2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:34, 31 July 2026 (UTC)
i9szfr079vtl1cnbx0jy7tuxq40ykbp
754514
754510
2026-07-31T22:36:11Z
Enbi
72574
Warning [[Special:Contributions/Enbi|Enbi]]: {{[[Template:uw-promo2|uw-promo2]]}} (Fortress-Beta)
754514
wikitext
text/x-wiki
== July 2026 ==
[[File:Information.svg|25px|alt=Information icon]] Hello. This is a message to let you know that one or more of [[Special:Contributions/Enbi|your recent contributions]], such as the edit(s) you made to [[:Hi]], did not appear to be constructive and have been [[Help:Reverting|reverted]]. Please take some time to familiarise yourself with our [[Wikipedia:Policies and guidelines|policies and guidelines]]. You can find information about these at our [[Help:Getting started|welcome page]] which also provides further information about [[Wikipedia:Contributing to Wikipedia|contributing constructively to this encyclopedia]]. If you only meant to make test edits, please use {{safesubst:If temporary account|the [[Wikipedia:Sandbox|sandbox]]|[[User:Enbi/sandbox|your sandbox]]}} for that. If you think I made a mistake, or if you have any questions, you may leave a message on [[User_talk:Enbi|my talk page]]. Thank you.<!-- Template:uw-disruptive1 --> <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 13:46, 31 July 2026 (UTC)
{{subst:uw-test2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 21:28, 31 July 2026 (UTC)
{{subst:uw-promo2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:34, 31 July 2026 (UTC)
{{subst:uw-promo2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:36, 31 July 2026 (UTC)
oczbsxjwoiujkvdoumqlaoopudmw368
754517
754514
2026-07-31T22:37:42Z
Enbi
72574
Warning [[Special:Contributions/Enbi|Enbi]]: {{[[Template:uw-npov2|uw-npov2]]}} (Fortress-Beta)
754517
wikitext
text/x-wiki
== July 2026 ==
[[File:Information.svg|25px|alt=Information icon]] Hello. This is a message to let you know that one or more of [[Special:Contributions/Enbi|your recent contributions]], such as the edit(s) you made to [[:Hi]], did not appear to be constructive and have been [[Help:Reverting|reverted]]. Please take some time to familiarise yourself with our [[Wikipedia:Policies and guidelines|policies and guidelines]]. You can find information about these at our [[Help:Getting started|welcome page]] which also provides further information about [[Wikipedia:Contributing to Wikipedia|contributing constructively to this encyclopedia]]. If you only meant to make test edits, please use {{safesubst:If temporary account|the [[Wikipedia:Sandbox|sandbox]]|[[User:Enbi/sandbox|your sandbox]]}} for that. If you think I made a mistake, or if you have any questions, you may leave a message on [[User_talk:Enbi|my talk page]]. Thank you.<!-- Template:uw-disruptive1 --> <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 13:46, 31 July 2026 (UTC)
{{subst:uw-test2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 21:28, 31 July 2026 (UTC)
{{subst:uw-promo2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:34, 31 July 2026 (UTC)
{{subst:uw-promo2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:36, 31 July 2026 (UTC)
{{subst:uw-npov2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:37, 31 July 2026 (UTC)
2na85lpeqzwh06o4w42vjokqq750sl2
754520
754517
2026-07-31T22:41:02Z
Enbi
72574
Warning [[Special:Contributions/Enbi|Enbi]]: {{[[Template:uw-delete2|uw-delete2]]}} (Fortress-Beta)
754520
wikitext
text/x-wiki
== July 2026 ==
[[File:Information.svg|25px|alt=Information icon]] Hello. This is a message to let you know that one or more of [[Special:Contributions/Enbi|your recent contributions]], such as the edit(s) you made to [[:Hi]], did not appear to be constructive and have been [[Help:Reverting|reverted]]. Please take some time to familiarise yourself with our [[Wikipedia:Policies and guidelines|policies and guidelines]]. You can find information about these at our [[Help:Getting started|welcome page]] which also provides further information about [[Wikipedia:Contributing to Wikipedia|contributing constructively to this encyclopedia]]. If you only meant to make test edits, please use {{safesubst:If temporary account|the [[Wikipedia:Sandbox|sandbox]]|[[User:Enbi/sandbox|your sandbox]]}} for that. If you think I made a mistake, or if you have any questions, you may leave a message on [[User_talk:Enbi|my talk page]]. Thank you.<!-- Template:uw-disruptive1 --> <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 13:46, 31 July 2026 (UTC)
{{subst:uw-test2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 21:28, 31 July 2026 (UTC)
{{subst:uw-promo2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:34, 31 July 2026 (UTC)
{{subst:uw-promo2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:36, 31 July 2026 (UTC)
{{subst:uw-npov2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:37, 31 July 2026 (UTC)
<div style=clear: both></div>[[Image:Information.svg|25px|alt=|link=]] Please do not remove content or templates from pages on Wikipedia, as you did to [[:Test234]] with <span class="plainlinks">[{{{2}}} this edit]</span>, without giving a valid reason for the removal in the [[Help:Edit summary|edit summary]]. Your content removal does not appear constructive, and has been [[Help:Reverting|reverted]]. Please make use of the [[Wikipedia:Sandbox|sandbox]] if you'd like to experiment with test edits. Thank you. <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:41, 31 July 2026 (UTC)<!-- Template:Huggle/warn-delete-2 --><!-- Template:uw-delete2 --> <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:41, 31 July 2026 (UTC)
soh4iqf8i1yiewrr2fmuogq365gx64c
754523
754520
2026-07-31T22:41:38Z
Enbi
72574
Warning [[Special:Contributions/Enbi|Enbi]]: {{[[Template:uw-engvar|uw-engvar]]}} (Fortress-Beta)
754523
wikitext
text/x-wiki
== July 2026 ==
[[File:Information.svg|25px|alt=Information icon]] Hello. This is a message to let you know that one or more of [[Special:Contributions/Enbi|your recent contributions]], such as the edit(s) you made to [[:Hi]], did not appear to be constructive and have been [[Help:Reverting|reverted]]. Please take some time to familiarise yourself with our [[Wikipedia:Policies and guidelines|policies and guidelines]]. You can find information about these at our [[Help:Getting started|welcome page]] which also provides further information about [[Wikipedia:Contributing to Wikipedia|contributing constructively to this encyclopedia]]. If you only meant to make test edits, please use {{safesubst:If temporary account|the [[Wikipedia:Sandbox|sandbox]]|[[User:Enbi/sandbox|your sandbox]]}} for that. If you think I made a mistake, or if you have any questions, you may leave a message on [[User_talk:Enbi|my talk page]]. Thank you.<!-- Template:uw-disruptive1 --> <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 13:46, 31 July 2026 (UTC)
{{subst:uw-test2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 21:28, 31 July 2026 (UTC)
{{subst:uw-promo2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:34, 31 July 2026 (UTC)
{{subst:uw-promo2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:36, 31 July 2026 (UTC)
{{subst:uw-npov2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:37, 31 July 2026 (UTC)
<div style=clear: both></div>[[Image:Information.svg|25px|alt=|link=]] Please do not remove content or templates from pages on Wikipedia, as you did to [[:Test234]] with <span class="plainlinks">[{{{2}}} this edit]</span>, without giving a valid reason for the removal in the [[Help:Edit summary|edit summary]]. Your content removal does not appear constructive, and has been [[Help:Reverting|reverted]]. Please make use of the [[Wikipedia:Sandbox|sandbox]] if you'd like to experiment with test edits. Thank you. <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:41, 31 July 2026 (UTC)<!-- Template:Huggle/warn-delete-2 --><!-- Template:uw-delete2 --> <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:41, 31 July 2026 (UTC)
{{subst:uw-engvar|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:41, 31 July 2026 (UTC)
hixjduktq2ln0ovt7ml4353vpl2wija
754526
754523
2026-07-31T22:58:24Z
Enbi
72574
Warning [[Special:Contributions/Enbi|Enbi]]: {{[[Template:uw-error3|uw-error3]]}} (Fortress-Beta)
754526
wikitext
text/x-wiki
== July 2026 ==
[[File:Information.svg|25px|alt=Information icon]] Hello. This is a message to let you know that one or more of [[Special:Contributions/Enbi|your recent contributions]], such as the edit(s) you made to [[:Hi]], did not appear to be constructive and have been [[Help:Reverting|reverted]]. Please take some time to familiarise yourself with our [[Wikipedia:Policies and guidelines|policies and guidelines]]. You can find information about these at our [[Help:Getting started|welcome page]] which also provides further information about [[Wikipedia:Contributing to Wikipedia|contributing constructively to this encyclopedia]]. If you only meant to make test edits, please use {{safesubst:If temporary account|the [[Wikipedia:Sandbox|sandbox]]|[[User:Enbi/sandbox|your sandbox]]}} for that. If you think I made a mistake, or if you have any questions, you may leave a message on [[User_talk:Enbi|my talk page]]. Thank you.<!-- Template:uw-disruptive1 --> <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 13:46, 31 July 2026 (UTC)
{{subst:uw-test2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 21:28, 31 July 2026 (UTC)
{{subst:uw-promo2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:34, 31 July 2026 (UTC)
{{subst:uw-promo2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:36, 31 July 2026 (UTC)
{{subst:uw-npov2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:37, 31 July 2026 (UTC)
<div style=clear: both></div>[[Image:Information.svg|25px|alt=|link=]] Please do not remove content or templates from pages on Wikipedia, as you did to [[:Test234]] with <span class="plainlinks">[{{{2}}} this edit]</span>, without giving a valid reason for the removal in the [[Help:Edit summary|edit summary]]. Your content removal does not appear constructive, and has been [[Help:Reverting|reverted]]. Please make use of the [[Wikipedia:Sandbox|sandbox]] if you'd like to experiment with test edits. Thank you. <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:41, 31 July 2026 (UTC)<!-- Template:Huggle/warn-delete-2 --><!-- Template:uw-delete2 --> <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:41, 31 July 2026 (UTC)
{{subst:uw-engvar|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:41, 31 July 2026 (UTC)
{{subst:uw-error3|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:58, 31 July 2026 (UTC)
0i051x62fefk6k83pcg92ezwm6ek6rp
754530
754526
2026-07-31T22:59:13Z
Enbi
72574
Warning [[Special:Contributions/Enbi|Enbi]]: {{[[Template:uw-test3|uw-test3]]}} (Fortress-Beta)
754530
wikitext
text/x-wiki
== July 2026 ==
[[File:Information.svg|25px|alt=Information icon]] Hello. This is a message to let you know that one or more of [[Special:Contributions/Enbi|your recent contributions]], such as the edit(s) you made to [[:Hi]], did not appear to be constructive and have been [[Help:Reverting|reverted]]. Please take some time to familiarise yourself with our [[Wikipedia:Policies and guidelines|policies and guidelines]]. You can find information about these at our [[Help:Getting started|welcome page]] which also provides further information about [[Wikipedia:Contributing to Wikipedia|contributing constructively to this encyclopedia]]. If you only meant to make test edits, please use {{safesubst:If temporary account|the [[Wikipedia:Sandbox|sandbox]]|[[User:Enbi/sandbox|your sandbox]]}} for that. If you think I made a mistake, or if you have any questions, you may leave a message on [[User_talk:Enbi|my talk page]]. Thank you.<!-- Template:uw-disruptive1 --> <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 13:46, 31 July 2026 (UTC)
{{subst:uw-test2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 21:28, 31 July 2026 (UTC)
{{subst:uw-promo2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:34, 31 July 2026 (UTC)
{{subst:uw-promo2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:36, 31 July 2026 (UTC)
{{subst:uw-npov2|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:37, 31 July 2026 (UTC)
<div style=clear: both></div>[[Image:Information.svg|25px|alt=|link=]] Please do not remove content or templates from pages on Wikipedia, as you did to [[:Test234]] with <span class="plainlinks">[{{{2}}} this edit]</span>, without giving a valid reason for the removal in the [[Help:Edit summary|edit summary]]. Your content removal does not appear constructive, and has been [[Help:Reverting|reverted]]. Please make use of the [[Wikipedia:Sandbox|sandbox]] if you'd like to experiment with test edits. Thank you. <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:41, 31 July 2026 (UTC)<!-- Template:Huggle/warn-delete-2 --><!-- Template:uw-delete2 --> <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:41, 31 July 2026 (UTC)
{{subst:uw-engvar|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:41, 31 July 2026 (UTC)
{{subst:uw-error3|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:58, 31 July 2026 (UTC)
{{subst:uw-test3|Test234}} <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</b> 22:59, 31 July 2026 (UTC)
0js789wf9g9sslmszh99btat7hvi5pw
User:Namoroka/sandbox/1
2
177074
754551
754308
2026-08-01T06:56:57Z
Namoroka
19627
754551
wikitext
text/x-wiki
* [[MediaWiki:Gadget-hanja-reading.js]]
** [[MediaWiki:Gadget-hanja-base2.json]]
** [[MediaWiki:Gadget-hanja-variants.json]]
** [[MediaWiki:Gadget-hanja-variants-cjkvi.json]]
** [[MediaWiki:Gadget-hanja-history.json]]
** [[MediaWiki:Gadget-hanja-overrides.json]]
** [[MediaWiki:Gadget-hanja-word.json]]
*량(輛), 리(理, 里, 厘, 釐)
*량(輛), 列車 한 輛
**차량(車輛)
**차량세(車輛稅)
**차량용품(車輛用品)
*不+ㄷ/ㅈ = 부, 나머지는 전부 불
**불가(不可), 불량(不良), 불합리(不合理)
**부당(不當), 절대부등식(絶對不等式), 부적절(不適切)
**예외: 부실(不實), 3불정책(三不政策), 독불장군(獨不將軍)
(어미 ‘-을’ 뒤에 ‘있다’, ‘없다’ 따위와 함께 쓰여) 1. ‘까닭’, ‘이치’의 뜻을 나타내는 말.
*그럴 理가 없다.
*그럴理가 없다.
*그럴理가없다.
*雲養 大監이나 나나 이미 허리 부러진 虎狼인데, 저들이 危險을 무릅쓰면서까지 도와줄 理 있겠소?
*外部에서 侵入한 痕跡이 없고 門은 잠겨져 있었으므로 나갔을 理 萬無다.
*閔箕의 性格으로 그 祕密을 그의 妻에게 告白하지 않았을 理 또한 없을 터였다.
*자네가 모르는 일을 낸들 알 理 있나?
*그러나 조만춘이가 逃亡兵인 그를 찾아 이런 後方에까지 내려올 理가 萬無하다.
*벌써 데려왔을 理는 없고 마침 제풀에 왔나 하고 가만히 앉았으려니 門이 활짝 열리며 경애가 딱 섰다.
*신여성(新女性)
*新女性(신여성)
*新女性
*女性
*女
*省略
* 金: 김/금
** 김해 김씨(金海金氏, 金海 金氏), 金海, 金氏
**개금(改金), 과금(課金), 과징금(課懲金), 금강(金剛), 금속(金屬), 비금속(非金屬), 금요일(金曜日), 비자금(秘資金), 장학금(奬學金), 황금(黃金), 금전(金錢), 입금(入金)
**김구(金九), 김대중(金大中), 김부겸(金富謙), 김종필(金鍾泌), 김무성(金武星), 김상곤(金相坤)
**가서만금(家書萬金), 견금여석(見金如石), 금과옥조(金科玉條), 금란지교(金蘭之交), 금석뇌약(金石牢約), 금자탑(金字塔), 금지옥엽(金枝玉葉), 단금지계교(斷金之契交),일확천금(一攫千金)
**금강산(金剛山), 금련산(金連山), 금오산(金烏山), 금정산(金井山), 몽금포(夢金浦), 새만금(새萬金)
* 반복부호
**正々堂々(정정당당)
**明々白々(명명백백)
**各々(각각), 云々(운운), 繼々承々(계계승승), 一々히(일일이)
**續々(속속)
**着々(착착)
**歷々히(역력히)
**默々히(묵묵히)
**細々한(세세한)
**赫々한(혁혁한)
**紛々할(분분할)
**紛〻할
* 一二三四五六七八九十百千萬万億兆〇零
** 二〇二六年, 一九九九年, 二〇〇〇년대
** 六二〇〇円, 五〇〇원, 五〇〇원
** 〇二-一二三-四五六七
** 第一〇〇호, 三〇二호
** 二.〇
== 테스트 4 ==
*樂('''악''', 낙, 락, '''요''') → '''樂曲(악곡)''', 樂園(낙원), 娛樂(오락), '''樂山(요산)'''
*見(견, '''현''') → 見聞(견문), '''謁見(알현)'''
;제10항 첫음 '녀, 뇨, 뉴, 니' → '여, 요, 유, 이'
*여자(女子), 연세(年歲), 요소(尿素), 유대(紐帶), 이토(泥土), 익명(匿名), 여성(女性), 여아(女兒), 여선생(女先生), 여학생(女學生)
*예외 1: 냥(兩), 냥쭝('''兩쭝'''), 년(年) / '''十''' 年, 金 '''한 兩''', 銀 두 '''兩쭝''' / 年 降水量(연 강수량, 명사), '''十 年'''(십 년, 의존 명사), 生産 年度(생산 연도, 명사), '''2018 年度'''(2018 년도, 의존 명사), 2018年度(2018년도, 의존 명사)
*예외 2: 신여성('''新女性'''), 공염불('''空念佛'''), 남존여비('''男尊女卑''')
*예외 3: 한국여자대학('''韓國女子大學'''), 대한요소비료회사(大韓尿素肥料會社)
;제11항 첫음 '랴, 려, 례, 료, 류, 리' → '야, 여, 예, 요, 유, 이'
*양심(良心), 역사(歷史), 예의(禮義), 용궁(龍宮), 유행(流行), 이발(理髮)
*예외 1: 리(里): '''몇 理'''냐?, 리(理): '''그럴 理'''가 없다. / '''客車''' '''五十 輛'''(객차 오십 량), '''2分''' 5厘 7厘(2푼 5리 7리)
*예외 2: 나열('''羅列'''), 치열('''齒列'''), 비열('''卑劣'''), 규율('''規律'''), 비율('''比率'''), 실패율('''失敗率'''), 분열('''分裂'''), 선열('''先烈'''), 진열('''陳列'''), 선율('''旋律'''), 전율('''戰慄'''), 백분율('''百分率''')
*예외 3: 신립(申砬), 최린(崔麟), 채륜(蔡倫), 하륜('''河崙''')
*예외 4: 국제연합('''國際聯合''') → 국련(國聯), 한국시각장애인연합회('''韓國視覺障礙人聯合會''') → 한시련(韓視聯)
*예외 4: 역이용('''逆利用'''), 연이율('''年利率'''), 열역학('''熱力學'''), 해외여행('''海外旅行''')
*예외 5: 서울여관(서울旅館), 신흥이발관('''新興理髮館'''), 육천육백육십육('''六千六百六十六''')
;제12항 첫음 '라, 래, 로, 뢰, 루, 르' → '나, 내, 노, 뇌, 누, 느'
*낙원(樂園), 내일(來日), 노인(老人), 뇌성(雷聲), 누각(樓閣), 능묘(陵墓)
*예외 1: 낙원(樂園), 내일(來日), 노인(老人), 뇌성(雷聲), 누각(樓閣), 능묘(陵墓)
*예외 2: 내내월('''來來月'''), 상노인('''上老人'''), 중노동('''重勞動'''), 비논리적('''非論理的''')
;제13항 한 단어 안에서 같은 음절이나 비슷한 음절이 겹쳐 나는 부분
*연연불망('''戀戀不忘'''), 유유상종('''類類相從'''), 누누이('''屢屢이''')
*예외: 열렬히('''熱熱히'''), 늠름히('''凜凜히'''), 연년세세(年年歲歲), 낙락장송(落落長松), 냉랭하다(冷冷하다), 역력히(歷歷히), 염념불망(念念不忘)
* https://db.history.go.kr/unicode/
* https://kostma.aks.ac.kr/segment/segmentList.aspx
* https://www.heritage.go.kr/heri/mem/selectHanjUmka.do
* https://www.hanja.ne.kr/jupsu/jupsu07_01.asp
* https://oriental-dic.dankook.ac.kr/index
* http://www.e-hanja.kr/
* https://hc.jsecs.org/irg/ws2021/app/
* https://db.cyberseodang.or.kr/twochar/index.html#
== + ==
갈곶리(乫串里)
법곳동(法串洞)
대곶면(大串面)
월곶면(月串面)
보구곶(甫口串)
월곶동(月串洞)
장곳리(獐串里)
홍곳리(洪串里)
삼곶리(三串里)
갈곶동(葛串洞)
지곶동(紙串洞)
갑곶리(甲串里)
월곳리(月串里)
석곶리(石串里)
호미곶(虎尾串)
흥환리(興串里)
사곶리(仕串里)
간절곶(艮絶串)
대산곶(大山串)
모월곶(毛月串)
호미곶(虎尾串)
장기곶(艮絶串)
비파곶(比巴串)
송도곶(松島串)
장산곶(長山串)
등산곶(登山串)
전곶(箭串)
공단곶(功端串)
동외곶(冬外串)
장기곶(長鬐串)
장산곶(長山串)
갑곶(甲串)
본곶(本곶)
모래곶(모래串)
활음조 현상
거란(契丹)
동란국(東丹國)
모란(牧丹)
<pre>
"開寧民亂": "개령민란",
"敦寧": "돈령",
"靡寧": "미령",
"玉度靡寧": "옥도미령",
"會寧": "회령",
"武寧": "무령",
"孝寧": "효령",
"遼寧": "요령",
"居寧": "거령",
"巨寧": "거령",
"濟寧里": "제령리",
"宜寧": "의령",
"開寧面": "개령면",
"河寧里": "하령리",
"載寧": "재령",
"會寧里": "회령리",
"保寧": "보령",
"富寧": "부령",
"泰寧": "태령",
"古寧": "고령",
"鐵犂": "철려",
"鋤犁": "서려",
"踏犂": "답려",
"單牛犂": "단우려",
"兩牛犂": "양우려",
"蟉松": "규송",
"瘻癘": "누라",
"縶縲": "칩류",
"縲紲": "유설",
"鶆鳩": "내구",
"水剌": "수라",
"纍纍": "누누",
惹鬧 야료
起鬧 기뇨
熱鬧 열뇨
鬧擾 요요
息鬧 식뇨
息鬧 식뇨
濟州民鬧 제주민요
作鬧 작뇨
乖鬧 괴뇨
紛鬧 분뇨
喧鬧 훤뇨
煩鬧 번뇨
惹起鬧端-- 야기요단
</pre>
== Copyright ==
The Unicode database is released by Unicode Inc. under the following terms:
<blockquote>
Copyright © 1991-2022 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in https://www.unicode.org/copyright.html.
Permission is hereby granted, free of charge, to any person obtaining a copy of the Unicode data files and any associated documentation (the "Data Files") or Unicode software and any associated documentation (the "Software") to deal in the Data Files or Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Data Files or Software, and to permit persons to whom the Data Files or Software are furnished to do so, provided that either
(a) this copyright and permission notice appear with all copies of the Data Files or Software, or
(b) this copyright and permission notice appear in associated Documentation.
THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR SOFTWARE.
Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of the copyright holder.
</blockquote>
ip382b4bz888vnp3m685968hcsha13o
754561
754551
2026-08-01T10:25:25Z
Namoroka
19627
754561
wikitext
text/x-wiki
* [[MediaWiki:Gadget-hanja-reading.js]]
** [[MediaWiki:Gadget-hanja-base2.json]]
** [[MediaWiki:Gadget-hanja-variants.json]]
** [[MediaWiki:Gadget-hanja-variants-cjkvi.json]]
** [[MediaWiki:Gadget-hanja-history.json]]
** [[MediaWiki:Gadget-hanja-overrides.json]]
** [[MediaWiki:Gadget-hanja-word.json]]
*량(輛), 리(理, 里, 厘, 釐)
*량(輛), 列車 한 輛
**차량(車輛)
**차량세(車輛稅)
**차량용품(車輛用品)
*不+ㄷ/ㅈ = 부, 나머지는 전부 불
**불가(不可), 불량(不良), 불합리(不合理)
**부당(不當), 절대부등식(絶對不等式), 부적절(不適切)
**예외: 부실(不實), 3불정책(三不政策), 독불장군(獨不將軍)
(어미 ‘-을’ 뒤에 ‘있다’, ‘없다’ 따위와 함께 쓰여) 1. ‘까닭’, ‘이치’의 뜻을 나타내는 말.
*그럴 理가 없다.
*그럴理가 없다.
*그럴理가없다.
*雲養 大監이나 나나 이미 허리 부러진 虎狼인데, 저들이 危險을 무릅쓰면서까지 도와줄 理 있겠소?
*外部에서 侵入한 痕跡이 없고 門은 잠겨져 있었으므로 나갔을 理 萬無다.
*閔箕의 性格으로 그 祕密을 그의 妻에게 告白하지 않았을 理 또한 없을 터였다.
*자네가 모르는 일을 낸들 알 理 있나?
*그러나 조만춘이가 逃亡兵인 그를 찾아 이런 後方에까지 내려올 理가 萬無하다.
*벌써 데려왔을 理는 없고 마침 제풀에 왔나 하고 가만히 앉았으려니 門이 활짝 열리며 경애가 딱 섰다.
*신여성(新女性)
*新女性(신여성)
*新女性
*女性
*女
*省略
* 金: 김/금
** 김해 김씨(金海金氏, 金海 金氏), 金海, 金氏
**개금(改金), 과금(課金), 과징금(課懲金), 금강(金剛), 금속(金屬), 비금속(非金屬), 금요일(金曜日), 비자금(秘資金), 장학금(奬學金), 황금(黃金), 금전(金錢), 입금(入金)
**김구(金九), 김대중(金大中), 김부겸(金富謙), 김종필(金鍾泌), 김무성(金武星), 김상곤(金相坤)
**가서만금(家書萬金), 견금여석(見金如石), 금과옥조(金科玉條), 금란지교(金蘭之交), 금석뇌약(金石牢約), 금자탑(金字塔), 금지옥엽(金枝玉葉), 단금지계교(斷金之契交),일확천금(一攫千金)
**금강산(金剛山), 금련산(金連山), 금오산(金烏山), 금정산(金井山), 몽금포(夢金浦), 새만금(새萬金)
* 반복부호
**正々堂々(정정당당)
**明々白々(명명백백)
**各々(각각), 云々(운운), 繼々承々(계계승승), 一々히(일일이)
**續々(속속)
**着々(착착)
**歷々히(역력히)
**默々히(묵묵히)
**細々한(세세한)
**赫々한(혁혁한)
**紛々할(분분할)
**紛〻할
**분々할
* 一二三四五六七八九十百千萬万億兆〇零
** 二〇二六年, 一九九九年, 二〇〇〇년대
** 六二〇〇円, 五〇〇원, 五〇〇원
** 〇二-一二三-四五六七
** 第一〇〇호, 三〇二호
** 二.〇
== 테스트 4 ==
*樂('''악''', 낙, 락, '''요''') → '''樂曲(악곡)''', 樂園(낙원), 娛樂(오락), '''樂山(요산)'''
*見(견, '''현''') → 見聞(견문), '''謁見(알현)'''
;제10항 첫음 '녀, 뇨, 뉴, 니' → '여, 요, 유, 이'
*여자(女子), 연세(年歲), 요소(尿素), 유대(紐帶), 이토(泥土), 익명(匿名), 여성(女性), 여아(女兒), 여선생(女先生), 여학생(女學生)
*예외 1: 냥(兩), 냥쭝('''兩쭝'''), 년(年) / '''十''' 年, 金 '''한 兩''', 銀 두 '''兩쭝''' / 年 降水量(연 강수량, 명사), '''十 年'''(십 년, 의존 명사), 生産 年度(생산 연도, 명사), '''2018 年度'''(2018 년도, 의존 명사), 2018年度(2018년도, 의존 명사)
*예외 2: 신여성('''新女性'''), 공염불('''空念佛'''), 남존여비('''男尊女卑''')
*예외 3: 한국여자대학('''韓國女子大學'''), 대한요소비료회사(大韓尿素肥料會社)
;제11항 첫음 '랴, 려, 례, 료, 류, 리' → '야, 여, 예, 요, 유, 이'
*양심(良心), 역사(歷史), 예의(禮義), 용궁(龍宮), 유행(流行), 이발(理髮)
*예외 1: 리(里): '''몇 理'''냐?, 리(理): '''그럴 理'''가 없다. / '''客車''' '''五十 輛'''(객차 오십 량), '''2分''' 5厘 7厘(2푼 5리 7리)
*예외 2: 나열('''羅列'''), 치열('''齒列'''), 비열('''卑劣'''), 규율('''規律'''), 비율('''比率'''), 실패율('''失敗率'''), 분열('''分裂'''), 선열('''先烈'''), 진열('''陳列'''), 선율('''旋律'''), 전율('''戰慄'''), 백분율('''百分率''')
*예외 3: 신립(申砬), 최린(崔麟), 채륜(蔡倫), 하륜('''河崙''')
*예외 4: 국제연합('''國際聯合''') → 국련(國聯), 한국시각장애인연합회('''韓國視覺障礙人聯合會''') → 한시련(韓視聯)
*예외 4: 역이용('''逆利用'''), 연이율('''年利率'''), 열역학('''熱力學'''), 해외여행('''海外旅行''')
*예외 5: 서울여관(서울旅館), 신흥이발관('''新興理髮館'''), 육천육백육십육('''六千六百六十六''')
;제12항 첫음 '라, 래, 로, 뢰, 루, 르' → '나, 내, 노, 뇌, 누, 느'
*낙원(樂園), 내일(來日), 노인(老人), 뇌성(雷聲), 누각(樓閣), 능묘(陵墓)
*예외 1: 낙원(樂園), 내일(來日), 노인(老人), 뇌성(雷聲), 누각(樓閣), 능묘(陵墓)
*예외 2: 내내월('''來來月'''), 상노인('''上老人'''), 중노동('''重勞動'''), 비논리적('''非論理的''')
;제13항 한 단어 안에서 같은 음절이나 비슷한 음절이 겹쳐 나는 부분
*연연불망('''戀戀不忘'''), 유유상종('''類類相從'''), 누누이('''屢屢이''')
*예외: 열렬히('''熱熱히'''), 늠름히('''凜凜히'''), 연년세세(年年歲歲), 낙락장송(落落長松), 냉랭하다(冷冷하다), 역력히(歷歷히), 염념불망(念念不忘)
* https://db.history.go.kr/unicode/
* https://kostma.aks.ac.kr/segment/segmentList.aspx
* https://www.heritage.go.kr/heri/mem/selectHanjUmka.do
* https://www.hanja.ne.kr/jupsu/jupsu07_01.asp
* https://oriental-dic.dankook.ac.kr/index
* http://www.e-hanja.kr/
* https://hc.jsecs.org/irg/ws2021/app/
* https://db.cyberseodang.or.kr/twochar/index.html#
== + ==
갈곶리(乫串里)
법곳동(法串洞)
대곶면(大串面)
월곶면(月串面)
보구곶(甫口串)
월곶동(月串洞)
장곳리(獐串里)
홍곳리(洪串里)
삼곶리(三串里)
갈곶동(葛串洞)
지곶동(紙串洞)
갑곶리(甲串里)
월곳리(月串里)
석곶리(石串里)
호미곶(虎尾串)
흥환리(興串里)
사곶리(仕串里)
간절곶(艮絶串)
대산곶(大山串)
모월곶(毛月串)
호미곶(虎尾串)
장기곶(艮絶串)
비파곶(比巴串)
송도곶(松島串)
장산곶(長山串)
등산곶(登山串)
전곶(箭串)
공단곶(功端串)
동외곶(冬外串)
장기곶(長鬐串)
장산곶(長山串)
갑곶(甲串)
본곶(本곶)
모래곶(모래串)
활음조 현상
거란(契丹)
동란국(東丹國)
모란(牧丹)
<pre>
"開寧民亂": "개령민란",
"敦寧": "돈령",
"靡寧": "미령",
"玉度靡寧": "옥도미령",
"會寧": "회령",
"武寧": "무령",
"孝寧": "효령",
"遼寧": "요령",
"居寧": "거령",
"巨寧": "거령",
"濟寧里": "제령리",
"宜寧": "의령",
"開寧面": "개령면",
"河寧里": "하령리",
"載寧": "재령",
"會寧里": "회령리",
"保寧": "보령",
"富寧": "부령",
"泰寧": "태령",
"古寧": "고령",
"鐵犂": "철려",
"鋤犁": "서려",
"踏犂": "답려",
"單牛犂": "단우려",
"兩牛犂": "양우려",
"蟉松": "규송",
"瘻癘": "누라",
"縶縲": "칩류",
"縲紲": "유설",
"鶆鳩": "내구",
"水剌": "수라",
"纍纍": "누누",
惹鬧 야료
起鬧 기뇨
熱鬧 열뇨
鬧擾 요요
息鬧 식뇨
息鬧 식뇨
濟州民鬧 제주민요
作鬧 작뇨
乖鬧 괴뇨
紛鬧 분뇨
喧鬧 훤뇨
煩鬧 번뇨
惹起鬧端-- 야기요단
</pre>
== Copyright ==
The Unicode database is released by Unicode Inc. under the following terms:
<blockquote>
Copyright © 1991-2022 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in https://www.unicode.org/copyright.html.
Permission is hereby granted, free of charge, to any person obtaining a copy of the Unicode data files and any associated documentation (the "Data Files") or Unicode software and any associated documentation (the "Software") to deal in the Data Files or Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Data Files or Software, and to permit persons to whom the Data Files or Software are furnished to do so, provided that either
(a) this copyright and permission notice appear with all copies of the Data Files or Software, or
(b) this copyright and permission notice appear in associated Documentation.
THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR SOFTWARE.
Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of the copyright holder.
</blockquote>
c9mcvmdask3d5lq7i1tto87r9rxt9m8
MediaWiki:Gadget-hanja-overrides.json
8
177085
754550
754309
2026-08-01T06:55:25Z
Namoroka
19627
754550
json
application/json
{
"㓢": "락",
"㓪": "랑",
"㔀": "량",
"㔹": "륵",
"㖏": "녈",
"㘓": "란",
"㘕": "람",
"㘝": "닙",
"㚼": "뉴",
"妞": "뉴",
"㡂": "례",
"㦨": "란",
"㧕": "류",
"㩕": "령",
"㪝": "련",
"㬗": "년",
"㰀": "려",
"㲎": "루",
"㽟": "렬",
"㾗": "량",
"㿖": "로",
"㿛": "려",
"䀶": "량",
"䁁": "량",
"䄂": "류",
"䇣": "녑",
"䈷": "락",
"䉫": "려",
"䊍": "리",
"䋱": "래",
"䔆": "리",
"䔭": "녕",
"䚖": "령",
"䜌": "련",
"䜎": "로",
"䤣": "렬",
"䥢": "륭",
"䦊": "뇨",
"䫫": "루",
"䬟": "류",
"䮫": "루",
"䰱": "령",
"䱖": "류",
"傫": "뢰",
"僇": "륙",
"儽": "래",
"刕": "리",
"劆": "렴",
"哰": "로",
"唠": "로",
"喦": "녑",
"嘮": "로",
"囒": "란",
"囡": "닙",
"壨": "뢰",
"夨": "녈",
"妳": "니",
"嫐": "뇨",
"孄": "란",
"孋": "려",
"孏": "란",
"寽": "률",
"屮": "철",
"崚": "릉",
"恧": "뉵",
"惊": "량",
"愵": "닉",
"懢": "람",
"扐": "륵",
"拎": "령",
"捋": "랄",
"掕": "릉",
"摝": "록",
"攦": "려",
"朒": "뉵",
"栵": "렬",
"梩": "리",
"樏": "류",
"橣": "녕",
"檁": "름",
"檷": "니",
"檸": "녕",
"櫖": "려",
"欙": "류",
"欚": "례",
"沴": "려",
"沵": "려",
"泺": "락",
"浖": "렬",
"涊": "년",
"煷": "량",
"犛": "리",
"狫": "로",
"猡": "라",
"瓈": "려",
"甪": "록",
"畾": "뢰",
"疒": "녁",
"痆": "닐",
"砅": "례",
"硌": "락",
"硵": "로",
"碐": "릉",
"磖": "랍",
"磟": "륙",
"磠": "로",
"禰": "녜",
"稐": "륜",
"箖": "림",
"篞": "녈",
"纍": "루",
"耣": "륜",
"胒": "니",
"脼": "량",
"膔": "록",
"臈": "랍",
"菍": "녈",
"蔂": "류",
"蔍": "록",
"蕯": "륭",
"薴": "녕",
"藟": "류",
"藾": "뢰",
"蘞": "렴",
"蘲": "류",
"蘽": "류",
"誏": "랑",
"譋": "란",
"讕": "란",
"谰": "란",
"豅": "롱",
"迡": "니",
"迾": "렬",
"逯": "록",
"邋": "랍",
"鈮": "니",
"鉨": "녜",
"鋝": "렬",
"鋢": "렬",
"鏐": "류",
"鏧": "롱",
"铌": "니",
"闹": "뇨",
"靇": "롱",
"頪": "뢰",
"飀": "류",
"飅": "류",
"飗": "류",
"飹": "류",
"騹": "려",
"魿": "령",
"鯻": "랄",
"鰡": "류",
"鸓": "루",
"龣": "록",
"㓯": "려",
"㕝": "사",
"㖝": "끗",
"㘘": "비",
"㝗": "량",
"㤡": "례",
"㥕": "련",
"㧠": "미",
"㧰": "력",
"㨆": "름",
"㭩": "렬",
"㯩": "체",
"㯿": "렵",
"㰈": "련",
"㸎": "섭",
"㽝": "례",
"㾢": "라",
"㾷": "서",
"䂇": "뉴",
"䊪": "려",
"䔴": "측",
"䗍": "려",
"䘈": "려",
"䘦": "니",
"䝀": "류",
"䤙": "력",
"䦾": "우",
"䮑": "뢰",
"䰕": "려",
"䱨": "랄",
"䴎": "루",
"䵩": "리",
"勠": "륙",
"厽": "루",
"嫽": "료",
"孿": "산",
"峢": "리",
"嵶": "약",
"徚": "동",
"惗": "녑",
"捩": "렬",
"擽": "력",
"椚": "문",
"榒": "녘",
"湼": "녈",
"潦": "료",
"澰": "렴",
"灕": "리",
"犁": "리",
"犂": "리",
"獠": "료",
"玪": "감",
"皪": "력",
"矓": "롱",
"磥": "루",
"籕": "추",
"繺": "쇄",
"翏": "료",
"莹": "영",
"菻": "림",
"蓼": "료",
"蔾": "리",
"蕌": "류",
"虆": "류",
"蛠": "려",
"蠫": "리",
"袮": "치",
"踉": "량",
"踋": "각",
"輋": "요",
"轑": "료",
"酈": "력",
"醂": "림",
"鏫": "려",
"鑗": "려",
"隬": "니",
"霗": "령",
"鱳": "력",
"鱺": "리",
"鲡": "리",
"𪓟": "구",
"𡈽": "토",
"〇": "영",
"㭐": "말",
"㦒": "리",
"敼": "희",
"蚮": "대"
}
7bbg5n38a0qh9ms5uyf7ehrqeq7d1cf
754552
754550
2026-08-01T07:14:15Z
Namoroka
19627
754552
json
application/json
{
"㓢": "락",
"㓪": "랑",
"㔀": "량",
"㔹": "륵",
"㖏": "녈",
"㘓": "란",
"㘕": "람",
"㘝": "닙",
"㚼": "뉴",
"妞": "뉴",
"㡂": "례",
"㦨": "란",
"㧕": "류",
"㩕": "령",
"㪝": "련",
"㬗": "년",
"㰀": "려",
"㲎": "루",
"㽟": "렬",
"㾗": "량",
"㿖": "로",
"㿛": "려",
"䀶": "량",
"䁁": "량",
"䄂": "류",
"䇣": "녑",
"䈷": "락",
"䉫": "려",
"䊍": "리",
"䋱": "래",
"䔆": "리",
"䔭": "녕",
"䚖": "령",
"䜌": "련",
"䜎": "로",
"䤣": "렬",
"䥢": "륭",
"䦊": "뇨",
"䫫": "루",
"䬟": "류",
"䮫": "루",
"䰱": "령",
"䱖": "류",
"傫": "뢰",
"僇": "륙",
"儽": "래",
"刕": "리",
"劆": "렴",
"哰": "로",
"唠": "로",
"喦": "녑",
"嘮": "로",
"囒": "란",
"囡": "닙",
"壨": "뢰",
"夨": "녈",
"妳": "니",
"嫐": "뇨",
"孄": "란",
"孋": "려",
"孏": "란",
"寽": "률",
"屮": "철",
"崚": "릉",
"恧": "뉵",
"惊": "량",
"愵": "닉",
"懢": "람",
"扐": "륵",
"拎": "령",
"捋": "랄",
"掕": "릉",
"摝": "록",
"攦": "려",
"朒": "뉵",
"栵": "렬",
"梩": "리",
"樏": "류",
"橣": "녕",
"檁": "름",
"檷": "니",
"檸": "녕",
"櫖": "려",
"欙": "류",
"欚": "례",
"沴": "려",
"沵": "려",
"泺": "락",
"浖": "렬",
"涊": "년",
"煷": "량",
"犛": "리",
"狫": "로",
"猡": "라",
"瓈": "려",
"甪": "록",
"畾": "뢰",
"疒": "녁",
"痆": "닐",
"砅": "례",
"硌": "락",
"硵": "로",
"碐": "릉",
"磖": "랍",
"磟": "륙",
"磠": "로",
"禰": "녜",
"稐": "륜",
"箖": "림",
"篞": "녈",
"纍": "루",
"耣": "륜",
"胒": "니",
"脼": "량",
"膔": "록",
"臈": "랍",
"菍": "녈",
"蔂": "류",
"蔍": "록",
"蕯": "륭",
"薴": "녕",
"藟": "류",
"藾": "뢰",
"蘞": "렴",
"蘲": "류",
"蘽": "류",
"誏": "랑",
"譋": "란",
"讕": "란",
"谰": "란",
"豅": "롱",
"迡": "니",
"迾": "렬",
"逯": "록",
"邋": "랍",
"鈮": "니",
"鉨": "녜",
"鋝": "렬",
"鋢": "렬",
"鏐": "류",
"鏧": "롱",
"铌": "니",
"闹": "뇨",
"靇": "롱",
"頪": "뢰",
"飀": "류",
"飅": "류",
"飗": "류",
"飹": "류",
"騹": "려",
"魿": "령",
"鯻": "랄",
"鰡": "류",
"鸓": "루",
"龣": "록",
"㓯": "려",
"㕝": "사",
"㖝": "끗",
"㘘": "비",
"㝗": "량",
"㤡": "례",
"㥕": "련",
"㦒": "리",
"㧠": "미",
"㧰": "력",
"㨆": "름",
"㭐": "말",
"㭩": "렬",
"㯩": "체",
"㯿": "렵",
"㰈": "련",
"㸎": "섭",
"㽝": "례",
"㾢": "라",
"㾷": "서",
"䂇": "뉴",
"䊪": "려",
"䔴": "측",
"䗍": "려",
"䘈": "려",
"䘦": "니",
"䝀": "류",
"䤙": "력",
"䦾": "우",
"䮑": "뢰",
"䰕": "려",
"䱨": "랄",
"䴎": "루",
"䵩": "리",
"勠": "륙",
"厽": "루",
"嫽": "료",
"孿": "산",
"峢": "리",
"嵶": "약",
"徚": "동",
"惗": "녑",
"捩": "렬",
"擽": "력",
"敼": "희",
"椚": "문",
"榒": "녘",
"湼": "녈",
"潦": "료",
"澰": "렴",
"灕": "리",
"犁": "리",
"犂": "리",
"獠": "료",
"玪": "감",
"皪": "력",
"矓": "롱",
"磥": "루",
"籕": "추",
"繺": "쇄",
"翏": "료",
"莹": "영",
"菻": "림",
"蓼": "료",
"蔾": "리",
"蕌": "류",
"虆": "류",
"蚮": "대",
"蛠": "려",
"蠫": "리",
"袮": "치",
"踉": "량",
"踋": "각",
"輋": "요",
"轑": "료",
"酈": "력",
"醂": "림",
"鏫": "려",
"鑗": "려",
"隬": "니",
"霗": "령",
"鱳": "력",
"鱺": "리",
"鲡": "리",
"𪓟": "구",
"𡈽": "토",
"〇": "영"
}
5kirtpisq5d4rq5m0whayhsw4qe5nuh
Jugganauts (album)
0
177155
754432
752497
2026-07-31T16:29:27Z
Ealbizzati-test
75047
754432
wikitext
text/x-wiki
{{Use mdy dates|date=May 2025}}
{{Infobox album
| name = Jugganauts
| type = studio
| artist = [[Insane Clown Posse vs. Twiztid]]
| cover =
| alt =
| released = October 30, 2007
| recorded = 2006–2007
| studio =
| genre = {{flatlist|
* [[Hip hop music|Hip hop]]
* [[horrorcore]]
* [[rap rock]]
* [[comedy hip hop]]
* [[rap metal]]
}}
| length =
| label = {{flatlist|
* [[Island Def Jam Recordings|Island Def Jam]]
* [[Psychopathic Records|Psychopathic]]
}}
| producer = {{flatlist|
* [[Beastie Boys]]
* [[DJ Lethal]]
* [[DJ Muggs]]
* [[DJ Paul]]
* [[Eminem]]
* [[Fred Durst]]
* [[Insane Clown Posse]]
* [[Juicy J]]
* [[Kid Rock]]
* [[Kottonmouth Kings]]
* [[Luis Resto (musician)|Luis Resto]]
* [[Twisted Brown Trucker|Mike Bradford]]
* [[Mike E. Clark]]
* [[Zug Island|Mike P.]]
* [[Rick Rubin]]
* Scott Sumner
* [[Todd Ray|T-Ray]]
* [[Twiztid]]
* [[Uncle Kracker]]
}}
| prev_title = [[The Wraith (album)|The Wraith]]
| prev_year = 2006
| next_title = [[The Old Shit (Insane Clown Posse vs. Twiztid album)|The Old Shit]]
| next_year = 2010
| misc =
}}
'''''Jugganauts''''' is the second studio album by American hip hop group [[Insane Clown Posse vs. Twiztid]]. Released on October 30, 2007, by [[Island Def Jam Recordings]] and [[Psychopathic Records]].
test
==Track listing==
==Charts==
==References==
{{Reflist}}
{{Insane Clown Posse vs. Twiztid}}
{{Authority control}}
{{DEFAULTSORT:Jugganauts}}
[[Category:2007 albums]]
[[Category:Insane Clown Posse vs. Twiztid albums]]
[[Category:Island Def Jam Recordings albums]]
[[Category:Psychopathic Records albums]]
ha9jbp5x4sk5zbt6743bbeoaazdtkw6
User:Somepinkdude/sandbox.js
2
177355
754436
754350
2026-07-31T17:40:34Z
Somepinkdude
74123
add diff paragraphs, reduce DOM calls slightly. func loadDiff to follow + CSS
754436
javascript
text/javascript
//All the other variables should be listed here ideally.
var curURL="";
function download(url, inFunc){
var x=new XMLHttpRequest();
x.open("GET", url);
x.onreadystatechange=function(){
if (x.readyState==4) {
inFunc(x.responseText);
}
}
x.send();
}
var tmpFunc;
function wikiSearch(query, limit, inFunc){
var en_search="https://en.wikipedia.org/w/rest.php/v1/search/page?q="+query+"&limit="+limit;
download(en_search, function(a){
var TMP=a;
});
infunc(TMP)
}
var revHist=[], cur_rev="", rev_year=2030, max_year=2022;
function wikiHistory(page, year, histFunc){
// Get all revisions late than a given year
var en_history="https://en.wikipedia.org/w/rest.php/v1/page/"+page+"/history?older_than=";
var h=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
revHist=[]; cur_rev=""; rev_year=2030; max_year=year; tmpFunc=histFunc;
download(en_history, histCall);
}
function histCall(hist_in, histFunc){
h=JSON.parse(hist_in)["revisions"];
revHist=revHist.concat(h);
cur_rev=h[19]["id"].toString();
rev_year=Number(h[19]["timestamp"].slice(0, 3));
if (!rev_year<max_year && h.length==19){
download(en_history+cur_rev, histCall);
} else {
tmpFunc(revHist);
}
}
function getDiff(rev, inFunc, diffOnly, rev_b){
var en_diff="https://en.wikipedia.org/w/rest.php/v1/revision/"+rev;
if (diffOnly && rev_b){
en_diff+="/compare/"+rev_b;
}
download(en_diff, inFunc);
}
var search_lower, search_higher, revs_global;
function searchRevs(page, phrase, revs_search, inFunc){
//revs_search is only the "revisions" attribute of a history object, not the whole thing.
revs_global=revs_search;
search_lower=0;
search_higher=revs_search.length;
curURL=url;
getDiff(revs_global[search_lower]["id"], searchCall);
tmpFunc=inFunc;
}
function searchCall(rev_in){
if (search_lower!=search_higher){
if (rev_in.search("/"+phrase+"/")==-1){
search_lower=Math.ceil((search_lower+search_higher)/2);
getDiff(revs_global[search_lower]["id"], searchCall);
} else {
search_higher=Math.ceil((search_lower+search_higher)/2);
getDiff(revs_global[search_higher]["id"], searchCall);
}
//This is not recursion, since the next instance runs seperately on an event.
} else {
tmpFunc(search_lower);
}
}
function userDiff(user_in, revHist_in, inFunc){
//collect all added text from user_in at the correct positions. Replace the rest of the article with repeated non-text symbols (e. g. carets). In future edits, apply all removals and additions as long as they are not between carets.
//Thsi function is unfinished and doesn't work.
for (var h=0; revHist_in[h]["user"]["name"]!=user_in; h++){} //find the first edit by the indicated user
var firstdiff=1;
var revHist_tmp=revHist_in; tmpFunc=inFunc;
getDiff(revHist_in[h]["id"],userDiffCallback);
}
var prevDiffObj={}, i=0;
function userDiffCallback(diffTMP){
if (i==revHist_tmp.length){
tmpFunc(page_temp);
}
if (revHist_tmp[i]["user"]["name"]==user_in){
//If this is the first user edit, create a mockup of the previous version using one character ("^") repeated.
if (firstdiff==1){
var page_temp="";
for (var j=0; j<revHist_tmp[i-1]["size"]; j++){
page_temp+="^";
}
}
//Collect all additions by the AI user from one diff. AI removals are also included for consistancy, although too many can indicate AI copyediting instead of generation.
for (var k=0; k<diffTMP["diff"].length; k++){
switch (diffTMP["diff"]["type"]){
case 1:
page_temp=insert(page_temp, diffTMP["diff"][k]["text"], diffTMP["diff"][k]["offset"]["to"]);
break;
case 3:
break;
}
}
}
i++;
}
function insert(text_in, addition, pos){
//Add a string in the middle of text_in, with the first byte at location pos.
return text_in.substring(0, pos-2)+addition+text_in.substring(pos-2+addition.length,text_in.length-1)
}
var elComplete={};
function createEls(docList, docConnect, parentEl){
//docList is a set of 4-arrays: type, class, id, and content. (this function is also untested)
//Docconnect lists connections, e. g. [[1, 2], 3, 4, [5, [6, 7]]].
//In this case, 2 is nested in 1, and 7 is nested in 6.
var idTMP=new Array(doclist.length);
var elList=new Array(doclist.length);
for(var c=0; c<doclist.length; c++){
idTMP[c]=docList[c][2];
elList[c]=document.createElement(doclist[c][0]);
elList[c].className=docList[c][1];
elList[c].id=docList[c][2];
elList.textContent=docList[c][3];
elComplete[docList[c][2]]=elList[c];
}
var objLevels=new Array(doclist.length);
var curObj={-1:parentEl};
elList[-1]=parentEl;
var nestIndex=0;
var refLevels=new Array(doclist.length);
for(c=0; c<curObj.length; c++){
//nest all subsequent elements of an array in the first
elList[curObj[0]].appendChild(elList[curObj[c-1]]);
if ((typeof curObj[c])==object){
nestIndex+=1;
objLevels[nestIndex]=curObj;
curObj=curObj[c];
refLevels[nestIndex-1]=c
}
if (c==curObj.length){
if (!nestIndex==0){
nestIndex-=1;
curObj=objLevels[nestIndex][refLevels[nestIndex]+1];
//Get the next element from the array in which curObj is contained
}
}
}
}
body=document.getElementsByTagName("body")[1]
//Creating the html document:
function initHTML{
createEls([["div", "aicatch-main", "aicatch-main"], ["div", "aicatch-editbar", "aicatch-editbar"], ["div", "aicatch-diffs", "aicatch-diffs"]], [[1, 2, 3]], body);
}
var editNum=0,editlist=[];
function createEditDiv(user, article){
createEls([["div", "aicatch-edit", "aicatch-edit-"+editNum], ["div", "aicatch-articlename", "aicatch-articlename-"+editNum], ["div", "aicatch-username", "aicatch-username-"+editNum]],[[1, 2, 3]],elComplete["aicatch-editbar"]);
createEls([["div", "aicatch-diff", "aicatch-diff-"+editNum]], [1], elComplete["aicatch-diffs"]);
setAttrs("aicatch-edit-"+editNum,[["onclick", "loadDiff("+editNum+")"]]);
editlist.push(editNum);
editNum+=1;
}
function setAttrs(elIn, attrList){
for (var e=1; e<attrList.length; e++){
elComplete[elIn].setAttribute(attrList[e][1], attrList[e][2]);
}
}
var blamePage;
function blame(page, blamePhrase){
blamePage=page;
wikiHistory(page, 2022, blameCall);
}
function blameCall(histBlame){
}
02u3lkwrm971grz0quuosg0or4icrys
754440
754436
2026-07-31T18:05:42Z
Somepinkdude
74123
754440
javascript
text/javascript
//All the other variables should be listed here ideally.
var curURL="";
function download(url, inFunc, post){
var x=new XMLHttpRequest();
if (!post){
x.open("GET", url);
} else {
x.open("POST", url);
}
x.onreadystatechange=function(){
if (x.readyState==4) {
inFunc(x.responseText);
}
}
x.send();
}
var tmpFunc;
function wikiSearch(query, limit, inFunc){
var en_search="https://en.wikipedia.org/w/rest.php/v1/search/page?q="+query+"&limit="+limit;
download(en_search, function(a){
var TMP=a;
});
infunc(TMP)
}
var revHist=[], cur_rev="", rev_year=2030, max_year=2022;
function wikiHistory(page, year, histFunc){
// Get all revisions late than a given year
var en_history="https://en.wikipedia.org/w/rest.php/v1/page/"+page+"/history?older_than=";
var h=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
revHist=[]; cur_rev=""; rev_year=2030; max_year=year; tmpFunc=histFunc;
download(en_history, histCall);
}
function histCall(hist_in, histFunc){
h=JSON.parse(hist_in)["revisions"];
revHist=revHist.concat(h);
cur_rev=h[19]["id"].toString();
rev_year=Number(h[19]["timestamp"].slice(0, 3));
if (!rev_year<max_year && h.length==19){
download(en_history+cur_rev, histCall);
} else {
tmpFunc(revHist);
}
}
function getDiff(rev, inFunc, diffOnly, rev_b){
var en_diff="https://en.wikipedia.org/w/rest.php/v1/revision/"+rev;
if (diffOnly && rev_b){
en_diff+="/compare/"+rev_b;
}
download(en_diff, inFunc);
}
var search_lower, search_higher, revs_global;
function searchRevs(page, phrase, revs_search, inFunc){
//revs_search is only the "revisions" attribute of a history object, not the whole thing.
revs_global=revs_search;
search_lower=0;
search_higher=revs_search.length;
curURL=url;
getDiff(revs_global[search_lower]["id"], searchCall);
tmpFunc=inFunc;
}
function searchCall(rev_in){
if (search_lower!=search_higher){
if (rev_in.search("/"+phrase+"/")==-1){
search_lower=Math.ceil((search_lower+search_higher)/2);
getDiff(revs_global[search_lower]["id"], searchCall);
} else {
search_higher=Math.ceil((search_lower+search_higher)/2);
getDiff(revs_global[search_higher]["id"], searchCall);
}
//This is not recursion, since the next instance runs seperately on an event.
} else {
tmpFunc(search_lower);
}
}
function userDiff(user_in, revHist_in, inFunc){
//collect all added text from user_in at the correct positions. Replace the rest of the article with repeated non-text symbols (e. g. carets). In future edits, apply all removals and additions as long as they are not between carets.
//Thsi function is unfinished and doesn't work.
for (var h=0; revHist_in[h]["user"]["name"]!=user_in; h++){} //find the first edit by the indicated user
var firstdiff=1;
var revHist_tmp=revHist_in; tmpFunc=inFunc;
getDiff(revHist_in[h]["id"],userDiffCallback);
}
var prevDiffObj={}, i=0;
function userDiffCallback(diffTMP){
if (i==revHist_tmp.length){
tmpFunc(page_temp);
}
if (revHist_tmp[i]["user"]["name"]==user_in){
//If this is the first user edit, create a mockup of the previous version using one character ("^") repeated.
if (firstdiff==1){
var page_temp="";
for (var j=0; j<revHist_tmp[i-1]["size"]; j++){
page_temp+="^";
}
}
//Collect all additions by the AI user from one diff. AI removals are also included for consistancy, although too many can indicate AI copyediting instead of generation.
for (var k=0; k<diffTMP["diff"].length; k++){
switch (diffTMP["diff"]["type"]){
case 1:
page_temp=insert(page_temp, diffTMP["diff"][k]["text"], diffTMP["diff"][k]["offset"]["to"]);
break;
case 3:
break;
}
}
}
i++;
}
function insert(text_in, addition, pos){
//Add a string in the middle of text_in, with the first byte at location pos.
return text_in.substring(0, pos-2)+addition+text_in.substring(pos-2+addition.length,text_in.length-1)
}
var elComplete={};
function createEls(docList, docConnect, parentEl){
//docList is a set of 4-arrays: type, class, id, and content. (this function is also untested)
//Docconnect lists connections, e. g. [[1, 2], 3, 4, [5, [6, 7]]].
//In this case, 2 is nested in 1, and 7 is nested in 6.
var idTMP=new Array(doclist.length);
var elList=new Array(doclist.length);
for(var c=0; c<doclist.length; c++){
idTMP[c]=docList[c][2];
elList[c]=document.createElement(doclist[c][0]);
elList[c].className=docList[c][1];
elList[c].id=docList[c][2];
elList.textContent=docList[c][3];
elComplete[docList[c][2]]=elList[c];
}
var objLevels=new Array(doclist.length);
var curObj={-1:parentEl};
elList[-1]=parentEl;
var nestIndex=0;
var refLevels=new Array(doclist.length);
for(c=0; c<curObj.length; c++){
//nest all subsequent elements of an array in the first
elList[curObj[0]].appendChild(elList[curObj[c-1]]);
if ((typeof curObj[c])==object){
nestIndex+=1;
objLevels[nestIndex]=curObj;
curObj=curObj[c];
refLevels[nestIndex-1]=c
}
if (c==curObj.length){
if (!nestIndex==0){
nestIndex-=1;
curObj=objLevels[nestIndex][refLevels[nestIndex]+1];
//Get the next element from the array in which curObj is contained
}
}
}
}
body=document.getElementsByTagName("body")[1]
//Creating the html document:
function initHTML{
createEls([["div", "aicatch-main", "aicatch-main"], ["div", "aicatch-editbar", "aicatch-editbar"], ["div", "aicatch-diffs", "aicatch-diffs"]], [[1, 2, 3]], body);
}
var editNum=0,editlist=[];
function createEditDiv(user, article){
createEls([["div", "aicatch-edit", "aicatch-edit-"+editNum], ["div", "aicatch-articlename", "aicatch-articlename-"+editNum], ["div", "aicatch-username", "aicatch-username-"+editNum]],[[1, 2, 3]],elComplete["aicatch-editbar"]);
createEls([["div", "aicatch-diff", "aicatch-diff-"+editNum]], [1], elComplete["aicatch-diffs"]);
setAttrs("aicatch-edit-"+editNum,[["onclick", "loadDiff("+editNum+")"]]);
editlist.push(editNum);
editNum+=1;
}
function setAttrs(elIn, attrList){
for (var e=1; e<attrList.length; e++){
elComplete[elIn].setAttribute(attrList[e][1], attrList[e][2]);
}
}
var blamePage;
function blame(page, blamePhrase){
blamePage=page;
wikiHistory(page, 2022, blameCall);
}
function blameCall(histBlame){
}
var lang="test", editTitle, editText, editSum;
function getToken(title, pageText, summary){ editSum=summary; editText=pageText; editTitle=title;
download(lang+".wikipedia.org/w/api.php?action=query&format=json&meta=tokens",publishPage); }
function publishPage(tokenObj){
var token=tokenObj["query"]["tokens"]["csrftoken"];
download(lang+".wikipedia.org/w/api.php?action=edit&format=json&title="+editTitle+"&text="+editText+"&token="+token+"&summary="+editSum,function(a){return;} ,true)
//POST the request with summary, title, and text. No callback is needed, since the output information is not useful.
}
p6iz7og2iagnsfehgg28eg00rnmi1ge
754441
754440
2026-07-31T18:22:42Z
Somepinkdude
74123
pesky capitals
754441
javascript
text/javascript
//All the other variables should be listed here ideally.
var curURL="";
function download(url, inFunc, post){
var x=new XMLHttpRequest();
if (!post){
x.open("GET", url);
} else {
x.open("POST", url);
}
x.onreadystatechange=function(){
if (x.readyState==4) {
inFunc(x.responseText);
}
}
x.send();
}
var tmpFunc;
function wikiSearch(query, limit, inFunc){
var en_search="https://en.wikipedia.org/w/rest.php/v1/search/page?q="+query+"&limit="+limit;
download(en_search, function(a){
var TMP=a;
});
infunc(TMP)
}
var revHist=[], cur_rev="", rev_year=2030, max_year=2022;
function wikiHistory(page, year, histFunc){
// Get all revisions late than a given year
var en_history="https://en.wikipedia.org/w/rest.php/v1/page/"+page+"/history?older_than=";
var h=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
revHist=[]; cur_rev=""; rev_year=2030; max_year=year; tmpFunc=histFunc;
download(en_history, histCall);
}
function histCall(hist_in, histFunc){
h=JSON.parse(hist_in)["revisions"];
revHist=revHist.concat(h);
cur_rev=h[19]["id"].toString();
rev_year=Number(h[19]["timestamp"].slice(0, 3));
if (!rev_year<max_year && h.length==19){
download(en_history+cur_rev, histCall);
} else {
tmpFunc(revHist);
}
}
function getDiff(rev, inFunc, diffOnly, rev_b){
var en_diff="https://en.wikipedia.org/w/rest.php/v1/revision/"+rev;
if (diffOnly && rev_b){
en_diff+="/compare/"+rev_b;
}
download(en_diff, inFunc);
}
var search_lower, search_higher, revs_global;
function searchRevs(page, phrase, revs_search, inFunc){
//revs_search is only the "revisions" attribute of a history object, not the whole thing.
revs_global=revs_search;
search_lower=0;
search_higher=revs_search.length;
curURL=url;
getDiff(revs_global[search_lower]["id"], searchCall);
tmpFunc=inFunc;
}
function searchCall(rev_in){
if (search_lower!=search_higher){
if (rev_in.search("/"+phrase+"/")==-1){
search_lower=Math.ceil((search_lower+search_higher)/2);
getDiff(revs_global[search_lower]["id"], searchCall);
} else {
search_higher=Math.ceil((search_lower+search_higher)/2);
getDiff(revs_global[search_higher]["id"], searchCall);
}
//This is not recursion, since the next instance runs seperately on an event.
} else {
tmpFunc(search_lower);
}
}
function userDiff(user_in, revHist_in, inFunc){
//collect all added text from user_in at the correct positions. Replace the rest of the article with repeated non-text symbols (e. g. carets). In future edits, apply all removals and additions as long as they are not between carets.
//Thsi function is unfinished and doesn't work.
for (var h=0; revHist_in[h]["user"]["name"]!=user_in; h++){} //find the first edit by the indicated user
var firstdiff=1;
var revHist_tmp=revHist_in; tmpFunc=inFunc;
getDiff(revHist_in[h]["id"],userDiffCallback);
}
var prevDiffObj={}, i=0;
function userDiffCallback(diffTMP){
if (i==revHist_tmp.length){
tmpFunc(page_temp);
}
if (revHist_tmp[i]["user"]["name"]==user_in){
//If this is the first user edit, create a mockup of the previous version using one character ("^") repeated.
if (firstdiff==1){
var page_temp="";
for (var j=0; j<revHist_tmp[i-1]["size"]; j++){
page_temp+="^";
}
}
//Collect all additions by the AI user from one diff. AI removals are also included for consistancy, although too many can indicate AI copyediting instead of generation.
for (var k=0; k<diffTMP["diff"].length; k++){
switch (diffTMP["diff"]["type"]){
case 1:
page_temp=insert(page_temp, diffTMP["diff"][k]["text"], diffTMP["diff"][k]["offset"]["to"]);
break;
case 3:
break;
}
}
}
i++;
}
function insert(text_in, addition, pos){
//Add a string in the middle of text_in, with the first byte at location pos.
return text_in.substring(0, pos-2)+addition+text_in.substring(pos-2+addition.length,text_in.length-1)
}
var elComplete={};
function createEls(docList, docConnect, parentEl){
//docList is a set of 4-arrays: type, class, id, and content. (this function is also untested)
//Docconnect lists connections, e. g. [[1, 2], 3, 4, [5, [6, 7]]].
//In this case, 2 is nested in 1, and 7 is nested in 6.
var idTMP=new Array(docList.length);
var elList=new Array(docList.length);
for(var c=0; c<docList.length; c++){
idTMP[c]=docList[c][2];
elList[c]=document.createElement(doclist[c][0]);
elList[c].className=docList[c][1];
elList[c].id=docList[c][2];
elList.textContent=docList[c][3];
elComplete[docList[c][2]]=elList[c];
}
var objLevels=new Array(docList.length);
var curObj={}; curObj[-1]=parentEl;
elList[-1]=parentEl;
var nestIndex=0;
var refLevels=new Array(docList.length);
for(c=0; c<curObj.length; c++){
//nest all subsequent elements of an array in the first
elList[curObj[0]].appendChild(elList[curObj[c-1]]);
if ((typeof curObj[c])==object){
nestIndex+=1;
objLevels[nestIndex]=curObj;
curObj=curObj[c];
refLevels[nestIndex-1]=c
}
if (c==curObj.length){
if (!nestIndex==0){
nestIndex-=1;
curObj=objLevels[nestIndex][refLevels[nestIndex]+1];
//Get the next element from the array in which curObj is contained
}
}
}
}
body=document.getElementsByTagName("body")[1]
//Creating the html document:
function initHTML{
createEls([["div", "aicatch-main", "aicatch-main"], ["div", "aicatch-editbar", "aicatch-editbar"], ["div", "aicatch-diffs", "aicatch-diffs"]], [[1, 2, 3]], body);
}
var editNum=0,editlist=[];
function createEditDiv(user, article){
createEls([["div", "aicatch-edit", "aicatch-edit-"+editNum], ["div", "aicatch-articlename", "aicatch-articlename-"+editNum], ["div", "aicatch-username", "aicatch-username-"+editNum]],[[1, 2, 3]],elComplete["aicatch-editbar"]);
createEls([["div", "aicatch-diff", "aicatch-diff-"+editNum]], [1], elComplete["aicatch-diffs"]);
setAttrs("aicatch-edit-"+editNum,[["onclick", "loadDiff("+editNum+")"]]);
editlist.push(editNum);
editNum+=1;
}
function setAttrs(elIn, attrList){
for (var e=1; e<attrList.length; e++){
elComplete[elIn].setAttribute(attrList[e][1], attrList[e][2]);
}
}
var blamePage;
function blame(page, blamePhrase){
blamePage=page;
wikiHistory(page, 2022, blameCall);
}
function blameCall(histBlame){
}
var lang="test", editTitle, editText, editSum;
function getToken(title, pageText, summary){ editSum=summary; editText=pageText; editTitle=title;
download(lang+".wikipedia.org/w/api.php?action=query&format=json&meta=tokens",publishPage); }
function publishPage(tokenObj){
var token=tokenObj["query"]["tokens"]["csrftoken"];
download(lang+".wikipedia.org/w/api.php?action=edit&format=json&title="+editTitle+"&text="+editText+"&token="+token+"&summary="+editSum,function(a){return;} ,true)
//POST the request with summary, title, and text. No callback is needed, since the output information is not useful.
}
aneb41euok3imn053l8chtr5wankzlj
754480
754441
2026-07-31T20:12:00Z
Somepinkdude
74123
754480
javascript
text/javascript
//All the other variables should be listed here ideally.
var curURL="";
function download(url, inFunc, post){
var x=new XMLHttpRequest();
if (!post){
x.open("GET", url);
} else {
x.open("POST", url);
}
x.onreadystatechange=function(){
if (x.readyState==4) {
inFunc(x.responseText);
}
}
x.send();
}
var tmpFunc;
function wikiSearch(query, limit, inFunc){
var en_search="https://en.wikipedia.org/w/rest.php/v1/search/page?q="+query+"&limit="+limit;
download(en_search, function(a){
var TMP=a;
});
infunc(TMP)
}
var revHist=[], cur_rev="", rev_year=2030, max_year=2022;
function wikiHistory(page, year, histFunc){
// Get all revisions late than a given year
var en_history="https://en.wikipedia.org/w/rest.php/v1/page/"+page+"/history?older_than=";
var h=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
revHist=[]; cur_rev=""; rev_year=2030; max_year=year; tmpFunc=histFunc;
download(en_history, histCall);
}
function histCall(hist_in, histFunc){
h=JSON.parse(hist_in)["revisions"];
revHist=revHist.concat(h);
cur_rev=h[19]["id"].toString();
rev_year=Number(h[19]["timestamp"].slice(0, 3));
if (!rev_year<max_year && h.length==19){
download(en_history+cur_rev, histCall);
} else {
tmpFunc(revHist);
}
}
function getDiff(rev, inFunc, diffOnly, rev_b){
var en_diff="https://en.wikipedia.org/w/rest.php/v1/revision/"+rev;
if (diffOnly && rev_b){
en_diff+="/compare/"+rev_b;
}
download(en_diff, inFunc);
}
var search_lower, search_higher, revs_global;
function searchRevs(page, phrase, revs_search, inFunc){
//revs_search is only the "revisions" attribute of a history object, not the whole thing.
revs_global=revs_search;
search_lower=0;
search_higher=revs_search.length;
curURL=url;
getDiff(revs_global[search_lower]["id"], searchCall);
tmpFunc=inFunc;
}
function searchCall(rev_in){
if (search_lower!=search_higher){
if (rev_in.search("/"+phrase+"/")==-1){
search_lower=Math.ceil((search_lower+search_higher)/2);
getDiff(revs_global[search_lower]["id"], searchCall);
} else {
search_higher=Math.ceil((search_lower+search_higher)/2);
getDiff(revs_global[search_higher]["id"], searchCall);
}
//This is not recursion, since the next instance runs seperately on an event.
} else {
tmpFunc(search_lower);
}
}
function userDiff(user_in, revHist_in, inFunc){
//collect all added text from user_in at the correct positions. Replace the rest of the article with repeated non-text symbols (e. g. carets). In future edits, apply all removals and additions as long as they are not between carets.
//Thsi function is unfinished and doesn't work.
for (var h=0; revHist_in[h]["user"]["name"]!=user_in; h++){} //find the first edit by the indicated user
var firstdiff=1;
var revHist_tmp=revHist_in; tmpFunc=inFunc;
getDiff(revHist_in[h]["id"],userDiffCallback);
}
var prevDiffObj={}, i=0;
function userDiffCallback(diffTMP){
if (i==revHist_tmp.length){
tmpFunc(page_temp);
}
if (revHist_tmp[i]["user"]["name"]==user_in){
//If this is the first user edit, create a mockup of the previous version using one character ("^") repeated.
if (firstdiff==1){
var page_temp="";
for (var j=0; j<revHist_tmp[i-1]["size"]; j++){
page_temp+="^";
}
}
//Collect all additions by the AI user from one diff. AI removals are also included for consistancy, although too many can indicate AI copyediting instead of generation.
for (var k=0; k<diffTMP["diff"].length; k++){
switch (diffTMP["diff"]["type"]){
case 1:
page_temp=insert(page_temp, diffTMP["diff"][k]["text"], diffTMP["diff"][k]["offset"]["to"]);
break;
case 3:
break;
}
}
}
i++;
}
function insert(text_in, addition, pos){
//Add a string in the middle of text_in, with the first byte at location pos.
return text_in.substring(0, pos-2)+addition+text_in.substring(pos-2+addition.length,text_in.length-1)
}
var elComplete={};
function createEls(docList, docConnect, parentEl){
//docList is a set of 4-arrays: type, class, id, and content. (this function is also untested)
//Docconnect lists connections, e. g. [[1, 2], 3, 4, [5, [6, 7]]].
//In this case, 2 is nested in 1, and 7 is nested in 6.
var idTMP=new Array(docList.length);
var elList=new Array(docList.length);
for(var c=0; c<docList.length; c++){
idTMP[c]=docList[c][2];
elList[c]=document.createElement(docList[c][0]);
elList[c].className=docList[c][1];
elList[c].id=docList[c][2];
elList.textContent=docList[c][3];
elComplete[docList[c][2]]=elList[c];
}
var objLevels=new Array(docList.length);
var curObj={}; curObj[-1]=parentEl;
elList[-1]=parentEl;
var nestIndex=0;
var refLevels=new Array(docList.length);
for(c=0; c<curObj.length; c++){
//nest all subsequent elements of an array in the first
elList[curObj[0]].appendChild(elList[curObj[c-1]]);
if ((typeof curObj[c])==object){
nestIndex+=1;
objLevels[nestIndex]=curObj;
curObj=curObj[c];
refLevels[nestIndex-1]=c
}
if (c==curObj.length){
if (!nestIndex==0){
nestIndex-=1;
curObj=objLevels[nestIndex][refLevels[nestIndex]+1];
//Get the next element from the array in which curObj is contained
}
}
}
}
body=document.getElementsByTagName("body")[1]
//Creating the html document:
function initHTML{
createEls([["div", "aicatch-main", "aicatch-main"], ["div", "aicatch-editbar", "aicatch-editbar"], ["div", "aicatch-diffs", "aicatch-diffs"]], [[1, 2, 3]], body);
}
var editNum=0,editlist=[];
function createEditDiv(user, article){
createEls([["div", "aicatch-edit", "aicatch-edit-"+editNum], ["div", "aicatch-articlename", "aicatch-articlename-"+editNum], ["div", "aicatch-username", "aicatch-username-"+editNum]],[[1, 2, 3]],elComplete["aicatch-editbar"]);
createEls([["div", "aicatch-diff", "aicatch-diff-"+editNum]], [1], elComplete["aicatch-diffs"]);
setAttrs("aicatch-edit-"+editNum,[["onclick", "loadDiff("+editNum+")"]]);
editlist.push(editNum);
editNum+=1;
}
function setAttrs(elIn, attrList){
for (var e=1; e<attrList.length; e++){
elComplete[elIn].setAttribute(attrList[e][1], attrList[e][2]);
}
}
var blamePage;
function blame(page, blamePhrase){
blamePage=page;
wikiHistory(page, 2022, blameCall);
}
function blameCall(histBlame){
}
var lang="test", editTitle, editText, editSum;
function getToken(title, pageText, summary){ editSum=summary; editText=pageText; editTitle=title;
download(lang+".wikipedia.org/w/api.php?action=query&format=json&meta=tokens",publishPage); }
function publishPage(tokenObj){
var token=tokenObj["query"]["tokens"]["csrftoken"];
download(lang+".wikipedia.org/w/api.php?action=edit&format=json&title="+editTitle+"&text="+editText+"&token="+token+"&summary="+editSum,function(a){return;} ,true)
//POST the request with summary, title, and text. No callback is needed, since the output information is not useful.
}
ihc489hdtevjqmf4sfjmg719r3bo74c
User:Enbi/Fortress/config.yaml.js
2
177456
754416
754276
2026-07-31T13:42:11Z
Enbi
72574
754416
javascript
text/javascript
enwiki:
warnSummary: "Warning user: {{[[Template:$1|$1]]}}"
rollbackOuterSummary: "Reverting $1 by [[Special:Contributions/$2|$2]] (Fortress-Beta)"
keymaps:
# Keymaps that revert and optionally warn. Schema:
# key: JavaScript keyboard event key, can either be a single key or an array of keys to map multiple keys to one action
# summary: summary you want fortress to use when reverting
# template: (optional) warning to leave, without the level number or uw- prefix
# single: (defaults to false if omitted) whether or not the warning is a single issue (no level) warning.
# Do not use left or right arrow, `[`, ` ` (space), `w`, `p` or `g`; these are reserved.
- key: q
summary: non-constructive edits
template: vandalism
- key: d
summary: potentially disruptive edits
template: disruptive
- key: t
summary: test edits by
template: test
- key: r
overrideOuter: true
summary: Reverting edits (Fortress-Beta)
menuCategories:
- name: Vandalism
entries:
- name: Vandalism
template: vandalism
summary: non-constructive edits
- name: Subtle vandalism
template: subtle
summary: non-constructive edits
- name: Image vandalism
template: image
summary: inappropriate image additions
details: Inappropriate images added to articles
- name: Joke edits
template: joke
summary: non-constructive edits
- name: Conduct/content
entries:
- name: Personal attacks
template: npa
summary: non-constructive edits
- name: Unsourced
template: unsourced
summary: unsourced additions
- name: Unexplained removal
template: delete
summary: unexplained content removal
- name: MOS
template: mos
summary: potentially disruptive
details: Manual of style violations
- name: Disruption
entries:
- name: Disruptive editing
template: disruptive
summary: potentially disruptive edits
- name: Factual errors
template: error
summary: factual errors
- name: Test edits
template: test
summary: Editing tests
- name: NPOV
entries:
- name: Non-neutral
template: npov
summary: non-neutral-edits
- name: Promotional
template: promo
summary: Promotional contend added
- name: Single issue
entries:
- name: English variant
template: engvar
summary: incorrect English variants
single: true
testwiki:
warnSummary: "Warning user: {{[[Template:$1|$1]]}}"
rollbackOuterSummary: "Reverting $1 by [[Special:Contributions/$2|$2]] (Fortress-Beta)"
keymaps:
# Keymaps that revert and optionally warn. Schema:
# key: JavaScript keyboard event key, can either be a single key or an array of keys to map multiple keys to one action
# summary: summary you want fortress to use when reverting
# template: (optional) warning to leave, without the level number or uw- prefix
# single: (defaults to false if omitted) whether or not the warning is a single issue (no level) warning.
# Do not use left or right arrow, `[`, ` ` (space), `w`, `p` or `g`; these are reserved.
- key: q
summary: non-constructive edits
template: vandalism
- key: d
summary: potentially disruptive edits
template: disruptive
- key: t
summary: test edits by
template: test
- key: r
overrideOuter: true
summary: Reverting edits (Fortress-Beta)
menuCategories:
- name: Vandalism
entries:
- name: Vandalism
template: vandalism
summary: non-constructive edits
- name: Subtle vandalism
template: subtle
summary: non-constructive edits
- name: Image vandalism
template: image
summary: inappropriate image additions
details: Inappropriate images added to articles
- name: Joke edits
template: joke
summary: non-constructive edits
- name: Conduct/content
entries:
- name: Personal attacks
template: npa
summary: non-constructive edits
- name: Unsourced
template: unsourced
summary: unsourced additions
- name: Unexplained removal
template: delete
summary: unexplained content removal
- name: MOS
template: mos
summary: potentially disruptive
details: Manual of style violations
- name: Disruption
entries:
- name: Disruptive editing
template: disruptive
summary: potentially disruptive edits
- name: Factual errors
template: error
summary: factual errors
- name: Test edits
template: test
summary: Editing tests
- name: NPOV
entries:
- name: Non-neutral
template: npov
summary: non-neutral-edits
- name: Promotional
template: promo
summary: Promotional contend added
- name: Single issue
entries:
- name: English variant
template: engvar
summary: incorrect English variants
single: true
7kdd1lhu4tmi7b67ovfgw9jhi3ych1w
754491
754416
2026-07-31T21:38:43Z
Enbi
72574
754491
javascript
text/javascript
enwiki:
warnSummary: "Warning user: {{[[Template:$1|$1]]}}"
rollbackOuterSummary: "Reverting $1 by [[Special:Contributions/$2|$2]] (Fortress-Beta)"
keymaps:
# Keymaps that revert and optionally warn. Schema:
# key: JavaScript keyboard event key, can either be a single key or an array of keys to map multiple keys to one action
# summary: summary you want fortress to use when reverting
# template: (optional) warning to leave, without the level number or uw- prefix
# single: (defaults to false if omitted) whether or not the warning is a single issue (no level) warning.
# Do not use left or right arrow, `[`, ` ` (space), `w`, `p` or `g`; these are reserved.
- key: q
summary: non-constructive edits
template: vandalism
- key: d
summary: potentially disruptive edits
template: disruptive
- key: t
summary: test edits by
template: test
- key: r
overrideOuter: true
summary: Reverting edits (Fortress-Beta)
menuCategories:
- name: Vandalism
warnings:
- name: Vandalism
template: vandalism
summary: non-constructive edits
- name: Subtle vandalism
template: subtle
summary: non-constructive edits
- name: Image vandalism
template: image
summary: inappropriate image additions
details: Inappropriate images added to articles
- name: Joke edits
template: joke
summary: non-constructive edits
- name: Conduct/content
warnings:
- name: Personal attacks
template: npa
summary: non-constructive edits
- name: Unsourced
template: unsourced
summary: unsourced additions
- name: Unexplained removal
template: delete
summary: unexplained content removal
- name: MOS
template: mos
summary: potentially disruptive
details: Manual of style violations
- name: Disruption
warnings:
- name: Disruptive editing
template: disruptive
summary: potentially disruptive edits
- name: Factual errors
template: error
summary: factual errors
- name: Test edits
template: test
summary: Editing tests
- name: NPOV
warnings:
- name: Non-neutral
template: npov
summary: non-neutral-edits
- name: Promotional
template: promo
summary: Promotional contend added
- name: Single issue
warnings:
- name: English variant
template: engvar
summary: incorrect English variants
single: true
testwiki:
warnSummary: "Warning user: {{[[Template:$1|$1]]}}"
rollbackOuterSummary: "Reverting $1 by [[Special:Contributions/$2|$2]] (Fortress-Beta)"
keymaps:
# Keymaps that revert and optionally warn. Schema:
# key: JavaScript keyboard event key, can either be a single key or an array of keys to map multiple keys to one action
# summary: summary you want fortress to use when reverting
# template: (optional) warning to leave, without the level number or uw- prefix
# single: (defaults to false if omitted) whether or not the warning is a single issue (no level) warning.
# Do not use left or right arrow, `[`, ` ` (space), `w`, `p` or `g`; these are reserved.
- key: q
summary: non-constructive edits
template: vandalism
- key: d
summary: potentially disruptive edits
template: disruptive
- key: t
summary: test edits by
template: test
- key: r
overrideOuter: true
summary: Reverting edits (Fortress-Beta)
menuCategories:
- name: Vandalism
warnings:
- name: Vandalism
template: vandalism
summary: non-constructive edits
- name: Subtle vandalism
template: subtle
summary: non-constructive edits
- name: Image vandalism
template: image
summary: inappropriate image additions
details: Inappropriate images added to articles
- name: Joke edits
template: joke
summary: non-constructive edits
- name: Conduct/content
warnings:
- name: Personal attacks
template: npa
summary: non-constructive edits
- name: Unsourced
template: unsourced
summary: unsourced additions
- name: Unexplained removal
template: delete
summary: unexplained content removal
- name: MOS
template: mos
summary: potentially disruptive
details: Manual of style violations
- name: Disruption
warnings:
- name: Disruptive editing
template: disruptive
summary: potentially disruptive edits
- name: Factual errors
template: error
summary: factual errors
- name: Test edits
template: test
summary: Editing tests
- name: NPOV
warnings:
- name: Non-neutral
template: npov
summary: non-neutral-edits
- name: Promotional
template: promo
summary: Promotional contend added
- name: Single issue
warnings:
- name: English variant
template: engvar
summary: incorrect English variants
single: true
b1wbsmlfevjxtuh58eoblj48wuw9elz
754511
754491
2026-07-31T22:35:52Z
Enbi
72574
754511
javascript
text/javascript
enwiki:
warnSummary: "Warning user: {{[[Template:$1|$1]]}}"
rollbackOuterSummary: "Reverting $1 by [[Special:Contributions/$2|$2]] (Fortress-Beta)"
keymaps:
# Keymaps that revert and optionally warn. Schema:
# key: JavaScript keyboard event key, can either be a single key or an array of keys to map multiple keys to one action
# summary: summary you want fortress to use when reverting
# template: (optional) warning to leave, without the level number or uw- prefix
# single: (defaults to false if omitted) whether or not the warning is a single issue (no level) warning.
# Do not use left or right arrow, `[`, ` ` (space), `w`, `p` or `g`; these are reserved.
- key: q
summary: non-constructive edits
template: vandalism
- key: d
summary: potentially disruptive edits
template: disruptive
- key: t
summary: test edits by
template: test
- key: r
overrideOuter: true
summary: Reverting edits (Fortress-Beta)
menuCategories:
- name: Vandalism
warnings:
- name: Vandalism
template: vandalism
summary: non-constructive edits
- name: Subtle vandalism
template: subtle
summary: non-constructive edits
- name: Image vandalism
template: image
summary: inappropriate image additions
details: Inappropriate images added to articles
- name: Joke edits
template: joke
summary: non-constructive edits
- name: Conduct/content
warnings:
- name: Personal attacks
template: npa
summary: non-constructive edits
- name: Unsourced
template: unsourced
summary: unsourced additions
- name: Unexplained removal
template: delete
summary: unexplained content removal
- name: MOS
template: mos
summary: potentially disruptive
details: Manual of style violations
- name: Disruption
warnings:
- name: Disruptive editing
template: disruptive
summary: potentially disruptive edits
- name: Factual errors
template: error
summary: factual errors
- name: Test edits
template: test
summary: Editing tests
- name: NPOV
warnings:
- name: Non-neutral
template: npov
summary: non-neutral-edits
- name: Promotional
template: promo
summary: potentially promotional content added
- name: Single issue
warnings:
- name: English variant
template: engvar
summary: incorrect English variants
single: true
testwiki:
warnSummary: "Warning user: {{[[Template:$1|$1]]}}"
rollbackOuterSummary: "Reverting $1 by [[Special:Contributions/$2|$2]] (Fortress-Beta)"
keymaps:
# Keymaps that revert and optionally warn. Schema:
# key: JavaScript keyboard event key, can either be a single key or an array of keys to map multiple keys to one action
# summary: summary you want fortress to use when reverting
# template: (optional) warning to leave, without the level number or uw- prefix
# single: (defaults to false if omitted) whether or not the warning is a single issue (no level) warning.
# Do not use left or right arrow, `[`, ` ` (space), `w`, `p` or `g`; these are reserved.
- key: q
summary: non-constructive edits
template: vandalism
- key: d
summary: potentially disruptive edits
template: disruptive
- key: t
summary: test edits by
template: test
- key: r
overrideOuter: true
summary: Reverting edits (Fortress-Beta)
menuCategories:
- name: Vandalism
warnings:
- name: Vandalism
template: vandalism
summary: non-constructive edits
- name: Subtle vandalism
template: subtle
summary: non-constructive edits
- name: Image vandalism
template: image
summary: inappropriate image additions
details: Inappropriate images added to articles
- name: Joke edits
template: joke
summary: non-constructive edits
- name: Conduct/content
warnings:
- name: Personal attacks
template: npa
summary: non-constructive edits
- name: Unsourced
template: unsourced
summary: unsourced additions
- name: Unexplained removal
template: delete
summary: unexplained content removal
- name: MOS
template: mos
summary: potentially disruptive
details: Manual of style violations
- name: Disruption
warnings:
- name: Disruptive editing
template: disruptive
summary: potentially disruptive edits
- name: Factual errors
template: error
summary: factual errors
- name: Test edits
template: test
summary: Editing tests
- name: NPOV
warnings:
- name: Non-neutral
template: npov
summary: non-neutral-edits
- name: Promotional
template: promo
summary: potentially promotional content added
- name: Single issue
warnings:
- name: English variant
template: engvar
summary: incorrect English variants
single: true
kabgydx0twfsihsuhav9nj279bl2ic5
754527
754511
2026-07-31T22:58:54Z
Enbi
72574
754527
javascript
text/javascript
enwiki:
warnSummary: "Warning user: {{[[Template:$1|$1]]}}"
rollbackOuterSummary: "Reverting $1 by [[Special:Contributions/$2|$2]] (Fortress-Beta)"
keymaps:
# Keymaps that revert and optionally warn. Schema:
# key: JavaScript keyboard event key, can either be a single key or an array of keys to map multiple keys to one action
# summary: summary you want fortress to use when reverting
# template: (optional) warning to leave, without the level number or uw- prefix
# single: (defaults to false if omitted) whether or not the warning is a single issue (no level) warning.
# Do not use left or right arrow, `[`, ` ` (space), `w`, `p` or `g`; these are reserved.
- key: q
summary: non-constructive edits
template: vandalism
- key: d
summary: potentially disruptive edits
template: disruptive
- key: t
summary: test edits by
template: test
- key: r
overrideOuter: true
summary: Reverting edits (Fortress-Beta)
menuCategories:
- name: Vandalism
warnings:
- name: Vandalism
template: vandalism
summary: non-constructive edits
- name: Subtle vandalism
template: subtle
summary: non-constructive edits
- name: Image vandalism
template: image
summary: inappropriate image additions
details: Inappropriate images added to articles
- name: Joke edits
template: joke
summary: non-constructive edits
- name: Conduct/content
warnings:
- name: Personal attacks
template: npa
summary: non-constructive edits
- name: Unsourced
template: unsourced
summary: unsourced additions
- name: Unexplained removal
template: delete
summary: unexplained content removal
- name: MOS
template: mos
summary: potentially disruptive
details: Manual of style violations
- name: Disruption
warnings:
- name: Disruptive editing
template: disruptive
summary: potentially disruptive edits
- name: Factual errors
template: error
summary: factual errors
- name: Test edits
template: test
summary: Editing tests
- name: NPOV
warnings:
- name: Non-neutral
template: npov
summary: non-neutral-edits
- name: Promotional
template: promo
summary: potentially promotional content added
- name: Single issue
warnings:
- name: English variant
template: engvar
summary: incorrect English variants
single: true
testwiki:
warnSummary: "Warning user: {{[[Template:$1|$1]]}}"
rollbackOuterSummary: "Reverting $1 by [[Special:Contributions/$2|$2]] (Fortress-Test)"
keymaps:
# Keymaps that revert and optionally warn. Schema:
# key: JavaScript keyboard event key, can either be a single key or an array of keys to map multiple keys to one action
# summary: summary you want fortress to use when reverting
# template: (optional) warning to leave, without the level number or uw- prefix
# single: (defaults to false if omitted) whether or not the warning is a single issue (no level) warning.
# Do not use left or right arrow, `[`, ` ` (space), `w`, `p` or `g`; these are reserved.
- key: q
summary: non-constructive edits
template: vandalism
- key: d
summary: potentially disruptive edits
template: disruptive
- key: t
summary: test edits by
template: test
- key: r
overrideOuter: true
summary: Reverting edits (Fortress-Beta)
menuCategories:
- name: Vandalism
warnings:
- name: Vandalism
template: vandalism
summary: non-constructive edits
- name: Subtle vandalism
template: subtle
summary: non-constructive edits
- name: Image vandalism
template: image
summary: inappropriate image additions
details: Inappropriate images added to articles
- name: Joke edits
template: joke
summary: non-constructive edits
- name: Conduct/content
warnings:
- name: Personal attacks
template: npa
summary: non-constructive edits
- name: Unsourced
template: unsourced
summary: unsourced additions
- name: Unexplained removal
template: delete
summary: unexplained content removal
- name: MOS
template: mos
summary: potentially disruptive
details: Manual of style violations
- name: Disruption
warnings:
- name: Disruptive editing
template: disruptive
summary: potentially disruptive edits
- name: Factual errors
template: error
summary: factual errors
- name: Test edits
template: test
summary: Editing tests
- name: NPOV
warnings:
- name: Non-neutral
template: npov
summary: non-neutral-edits
- name: Promotional
template: promo
summary: potentially promotional content added
- name: Single issue
warnings:
- name: English variant
template: engvar
summary: incorrect English variants
single: true
cl6yqx1cqaiupcyt3nm8uiqr6q56i2j
User:Whyiseverythingalreadyused/sandbox 1
2
177457
754413
754312
2026-07-31T13:10:59Z
Whyiseverythingalreadyused
70199
754413
wikitext
text/x-wiki
{{{{{1}}}|1=WP:NOT}}
5kz1bfgqkmuvzowhh0zw7bjh5i5cupt
User:Enbi/test
2
177465
754407
754406
2026-07-31T11:59:38Z
Enbi
72574
754407
wikitext
text/x-wiki
<syntaxhighlight lang="yaml">{{user:Enbi/Fortress/config.yaml.js}}</syntaxhighlight>
9pr60zu39gy9238gppdvnkwryltq68z
User:Enbi/test.yaml
2
177466
754408
2026-07-31T12:00:49Z
Enbi
72574
Created page with "test: test"
754408
wikitext
text/x-wiki
test: test
r24sdhisunkbtv2xsi71ilgb3keiu3m
Talk:Current event
1
177467
754447
2026-07-31T18:59:25Z
Itsied
75098
/* Event created on March 31, 2026 */ new section
754447
wikitext
text/x-wiki
== Event created on March 31, 2026 ==
Today [[User:Itsied|Itsied]] ([[User talk:Itsied|talk]]) 18:59, 31 July 2026 (UTC)
99th4o7mxsouf3kkp51zwewei5isqbg
754473
754447
2026-07-31T19:31:01Z
Itsied
75098
/* Event created on March 31, 2026 */ Reply
754473
wikitext
text/x-wiki
== Event created on March 31, 2026 ==
Today [[User:Itsied|Itsied]] ([[User talk:Itsied|talk]]) 18:59, 31 July 2026 (UTC)
:Tomorrow [[User:Itsied|Itsied]] ([[User talk:Itsied|talk]]) 19:31, 31 July 2026 (UTC)
r53b4lhziykgxoyu38gl4m9xg1ctgq9
Translations:Wikipedia:Requests/Tools/Page display title/pt
1198
177468
754453
2026-07-31T19:16:22Z
Itsied
75098
Created page with "Portu"
754453
wikitext
text/x-wiki
Portu
5raytv11z2p1zj7wxbjvp6t490samtz
Wikipedia:Requests/Tools/pt
4
177469
754454
2026-07-31T19:16:23Z
Itsied
75098
Created page with "Portu"
754454
wikitext
text/x-wiki
<languages/>
{{requests}}
<span lang="en" dir="ltr" class="mw-content-ltr">This page lists sites for users to test administrative tools and the [[mw:|MediaWiki]] software in general. However, each site will have its own rules for testing admin-ship.</span>
<hr width="86%"/>
{|class="plainlinks wikitable" style="text-align: center;"
!<span lang="en" dir="ltr" class="mw-content-ltr">Name</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">MediaWiki version</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">IRC channel/Discord server</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">CheckUser</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">Privacy policy</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">Bug Tracker/Requests site</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">VisualEditor</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">Account requirements for sysop</span>
|-
| [https://publictestwiki.com/ <span lang="en" dir="ltr" class="mw-content-ltr">'''Public Test Wiki''' (Miraheze)</span>]
| bgcolor="yellow" | 1.45.3<ref name="mhTestWiki">[https://publictestwiki.com/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">Public Test Wiki's version page</span>]</ref><br>(legacy)
|bgcolor="#3E7" | [ircs://chat.freenode.net/miraheze-testwiki #miraheze-testwiki] <span lang="en" dir="ltr" class="mw-content-ltr">on Libera</span>
| bgcolor="yellow" | <span lang="en" dir="ltr" class="mw-content-ltr">Restricted</span>
| bgcolor="#3E7" | [https://publictestwiki.com/wiki/TestWiki:Privacy_policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>]
| bgcolor="#3E7" | [https://issue-tracker.miraheze.org/ Miraheze Phorge]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>
|| 10 days old
|-
| [https://testwiki.wiki/ '''<span lang="en" dir="ltr" class="mw-content-ltr">Test Wiki</span>''']
| bgcolor="#3E7" |1.46.0<ref>[https://testwiki.wiki/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">Test Wiki's version page</span>]</ref><br>(latest)
| bgcolor="#3E7" | [irc://chat.freenode.net/testadminwiki #testadminwiki] <span lang="en" dir="ltr" class="mw-content-ltr">on Libera<br>[https://discord.gg/yBUvasVmt4 Test Wiki] on Discord</span>
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes (only for self)</span>
| bgcolor="#3E7" | [https://testwiki.wiki/wiki/Test_Wiki:Privacy_policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>]
| bgcolor="#3E7" | [https://phabricator.testwiki.wiki/ Test Wiki Phabricator]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>
||
|-
| [https://www.thetestwiki.org/ '''<span lang="en" dir="ltr" class="mw-content-ltr">The Test Wiki</span>''']
| bgcolor="red" | 1.44.0<ref name="ttw-version">[https://www.thetestwiki.org/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">The Test Wiki's version page</span>]</ref><br>(obselete)
| bgcolor="#3E7" | [irc://chat.freenode.net/thetestwiki #thetestwiki] <span lang="en" dir="ltr" class="mw-content-ltr">on freenode</span>
| bgcolor="yellow" | <span lang="en" dir="ltr" class="mw-content-ltr">Restricted</span>
| bgcolor="#3E7" | [https://www.thetestwiki.org/wiki/The_Test_Wiki:Privacy_policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes, for non-vandals</span>]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">[[mw:User talk:Skizzerz|'''Skizzerz’s talk page'''<br>(MediaWiki)]]</span>
| bgcolor="red" | <span lang="en" dir="ltr" class="mw-content-ltr">No</span>
|| Identity verification from other major wikis (such as Wikipedia, Miraheze or Fandom)
|-
| [http://testmw.fandom.com/ '''<span lang="en" dir="ltr" class="mw-content-ltr">Fandom Test Wiki</span>''']
| bgcolor="yellow" | 1.43.8<ref name="Wikia">[http://testmw.fandom.com/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">Fandom Test Wiki's version page</span>]</ref><br>(legacy)
| bgcolor="#3E7" | [https://discord.com/invite/fandom Fandom] on Discord
| bgcolor="yellow" | <span lang="en" dir="ltr" class="mw-content-ltr">Restricted</span>
| bgcolor="#3E7" | [http://www.fandom.com/privacy-policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>]
| bgcolor="#3E7" | [[centralwikia:Special:Contact/bug|<span lang="en" dir="ltr" class="mw-content-ltr">Fandom Support - Bug Report</span>]]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>
|| 4 days old and 10 edits
|}
<div lang="en" dir="ltr" class="mw-content-ltr">
==Notes==
</div>
<references />
8gyhw8ycvko8c8htqxikok5lugx7vmq
754456
754454
2026-07-31T19:16:25Z
Itsied
75098
Created page with "Rr"
754456
wikitext
text/x-wiki
<languages/>
{{requests}}
Rr
<hr width="86%"/>
{|class="plainlinks wikitable" style="text-align: center;"
!<span lang="en" dir="ltr" class="mw-content-ltr">Name</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">MediaWiki version</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">IRC channel/Discord server</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">CheckUser</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">Privacy policy</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">Bug Tracker/Requests site</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">VisualEditor</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">Account requirements for sysop</span>
|-
| [https://publictestwiki.com/ <span lang="en" dir="ltr" class="mw-content-ltr">'''Public Test Wiki''' (Miraheze)</span>]
| bgcolor="yellow" | 1.45.3<ref name="mhTestWiki">[https://publictestwiki.com/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">Public Test Wiki's version page</span>]</ref><br>(legacy)
|bgcolor="#3E7" | [ircs://chat.freenode.net/miraheze-testwiki #miraheze-testwiki] <span lang="en" dir="ltr" class="mw-content-ltr">on Libera</span>
| bgcolor="yellow" | <span lang="en" dir="ltr" class="mw-content-ltr">Restricted</span>
| bgcolor="#3E7" | [https://publictestwiki.com/wiki/TestWiki:Privacy_policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>]
| bgcolor="#3E7" | [https://issue-tracker.miraheze.org/ Miraheze Phorge]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>
|| 10 days old
|-
| [https://testwiki.wiki/ '''<span lang="en" dir="ltr" class="mw-content-ltr">Test Wiki</span>''']
| bgcolor="#3E7" |1.46.0<ref>[https://testwiki.wiki/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">Test Wiki's version page</span>]</ref><br>(latest)
| bgcolor="#3E7" | [irc://chat.freenode.net/testadminwiki #testadminwiki] <span lang="en" dir="ltr" class="mw-content-ltr">on Libera<br>[https://discord.gg/yBUvasVmt4 Test Wiki] on Discord</span>
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes (only for self)</span>
| bgcolor="#3E7" | [https://testwiki.wiki/wiki/Test_Wiki:Privacy_policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>]
| bgcolor="#3E7" | [https://phabricator.testwiki.wiki/ Test Wiki Phabricator]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>
||
|-
| [https://www.thetestwiki.org/ '''<span lang="en" dir="ltr" class="mw-content-ltr">The Test Wiki</span>''']
| bgcolor="red" | 1.44.0<ref name="ttw-version">[https://www.thetestwiki.org/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">The Test Wiki's version page</span>]</ref><br>(obselete)
| bgcolor="#3E7" | [irc://chat.freenode.net/thetestwiki #thetestwiki] <span lang="en" dir="ltr" class="mw-content-ltr">on freenode</span>
| bgcolor="yellow" | <span lang="en" dir="ltr" class="mw-content-ltr">Restricted</span>
| bgcolor="#3E7" | [https://www.thetestwiki.org/wiki/The_Test_Wiki:Privacy_policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes, for non-vandals</span>]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">[[mw:User talk:Skizzerz|'''Skizzerz’s talk page'''<br>(MediaWiki)]]</span>
| bgcolor="red" | <span lang="en" dir="ltr" class="mw-content-ltr">No</span>
|| Identity verification from other major wikis (such as Wikipedia, Miraheze or Fandom)
|-
| [http://testmw.fandom.com/ '''<span lang="en" dir="ltr" class="mw-content-ltr">Fandom Test Wiki</span>''']
| bgcolor="yellow" | 1.43.8<ref name="Wikia">[http://testmw.fandom.com/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">Fandom Test Wiki's version page</span>]</ref><br>(legacy)
| bgcolor="#3E7" | [https://discord.com/invite/fandom Fandom] on Discord
| bgcolor="yellow" | <span lang="en" dir="ltr" class="mw-content-ltr">Restricted</span>
| bgcolor="#3E7" | [http://www.fandom.com/privacy-policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>]
| bgcolor="#3E7" | [[centralwikia:Special:Contact/bug|<span lang="en" dir="ltr" class="mw-content-ltr">Fandom Support - Bug Report</span>]]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>
|| 4 days old and 10 edits
|}
<div lang="en" dir="ltr" class="mw-content-ltr">
==Notes==
</div>
<references />
9fsk7q9395kcum04dd0twk51it2vfri
754458
754456
2026-07-31T19:16:27Z
Itsied
75098
Created page with "AP"
754458
wikitext
text/x-wiki
<languages/>
{{requests}}
Rr
<hr width="86%"/>
{|class="plainlinks wikitable" style="text-align: center;"
!AP
!<span lang="en" dir="ltr" class="mw-content-ltr">MediaWiki version</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">IRC channel/Discord server</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">CheckUser</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">Privacy policy</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">Bug Tracker/Requests site</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">VisualEditor</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">Account requirements for sysop</span>
|-
| [https://publictestwiki.com/ <span lang="en" dir="ltr" class="mw-content-ltr">'''Public Test Wiki''' (Miraheze)</span>]
| bgcolor="yellow" | 1.45.3<ref name="mhTestWiki">[https://publictestwiki.com/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">Public Test Wiki's version page</span>]</ref><br>(legacy)
|bgcolor="#3E7" | [ircs://chat.freenode.net/miraheze-testwiki #miraheze-testwiki] <span lang="en" dir="ltr" class="mw-content-ltr">on Libera</span>
| bgcolor="yellow" | <span lang="en" dir="ltr" class="mw-content-ltr">Restricted</span>
| bgcolor="#3E7" | [https://publictestwiki.com/wiki/TestWiki:Privacy_policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>]
| bgcolor="#3E7" | [https://issue-tracker.miraheze.org/ Miraheze Phorge]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>
|| 10 days old
|-
| [https://testwiki.wiki/ '''<span lang="en" dir="ltr" class="mw-content-ltr">Test Wiki</span>''']
| bgcolor="#3E7" |1.46.0<ref>[https://testwiki.wiki/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">Test Wiki's version page</span>]</ref><br>(latest)
| bgcolor="#3E7" | [irc://chat.freenode.net/testadminwiki #testadminwiki] <span lang="en" dir="ltr" class="mw-content-ltr">on Libera<br>[https://discord.gg/yBUvasVmt4 Test Wiki] on Discord</span>
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes (only for self)</span>
| bgcolor="#3E7" | [https://testwiki.wiki/wiki/Test_Wiki:Privacy_policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>]
| bgcolor="#3E7" | [https://phabricator.testwiki.wiki/ Test Wiki Phabricator]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>
||
|-
| [https://www.thetestwiki.org/ '''<span lang="en" dir="ltr" class="mw-content-ltr">The Test Wiki</span>''']
| bgcolor="red" | 1.44.0<ref name="ttw-version">[https://www.thetestwiki.org/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">The Test Wiki's version page</span>]</ref><br>(obselete)
| bgcolor="#3E7" | [irc://chat.freenode.net/thetestwiki #thetestwiki] <span lang="en" dir="ltr" class="mw-content-ltr">on freenode</span>
| bgcolor="yellow" | <span lang="en" dir="ltr" class="mw-content-ltr">Restricted</span>
| bgcolor="#3E7" | [https://www.thetestwiki.org/wiki/The_Test_Wiki:Privacy_policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes, for non-vandals</span>]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">[[mw:User talk:Skizzerz|'''Skizzerz’s talk page'''<br>(MediaWiki)]]</span>
| bgcolor="red" | <span lang="en" dir="ltr" class="mw-content-ltr">No</span>
|| Identity verification from other major wikis (such as Wikipedia, Miraheze or Fandom)
|-
| [http://testmw.fandom.com/ '''<span lang="en" dir="ltr" class="mw-content-ltr">Fandom Test Wiki</span>''']
| bgcolor="yellow" | 1.43.8<ref name="Wikia">[http://testmw.fandom.com/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">Fandom Test Wiki's version page</span>]</ref><br>(legacy)
| bgcolor="#3E7" | [https://discord.com/invite/fandom Fandom] on Discord
| bgcolor="yellow" | <span lang="en" dir="ltr" class="mw-content-ltr">Restricted</span>
| bgcolor="#3E7" | [http://www.fandom.com/privacy-policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>]
| bgcolor="#3E7" | [[centralwikia:Special:Contact/bug|<span lang="en" dir="ltr" class="mw-content-ltr">Fandom Support - Bug Report</span>]]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>
|| 4 days old and 10 edits
|}
<div lang="en" dir="ltr" class="mw-content-ltr">
==Notes==
</div>
<references />
gxf4qc4x5dfd9qmdtsxqtsqje7cq2h2
754460
754458
2026-07-31T19:16:29Z
Itsied
75098
Created page with "Api"
754460
wikitext
text/x-wiki
<languages/>
{{requests}}
Rr
<hr width="86%"/>
{|class="plainlinks wikitable" style="text-align: center;"
!AP
!Api
!<span lang="en" dir="ltr" class="mw-content-ltr">IRC channel/Discord server</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">CheckUser</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">Privacy policy</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">Bug Tracker/Requests site</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">VisualEditor</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">Account requirements for sysop</span>
|-
| [https://publictestwiki.com/ <span lang="en" dir="ltr" class="mw-content-ltr">'''Public Test Wiki''' (Miraheze)</span>]
| bgcolor="yellow" | 1.45.3<ref name="mhTestWiki">[https://publictestwiki.com/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">Public Test Wiki's version page</span>]</ref><br>(legacy)
|bgcolor="#3E7" | [ircs://chat.freenode.net/miraheze-testwiki #miraheze-testwiki] <span lang="en" dir="ltr" class="mw-content-ltr">on Libera</span>
| bgcolor="yellow" | <span lang="en" dir="ltr" class="mw-content-ltr">Restricted</span>
| bgcolor="#3E7" | [https://publictestwiki.com/wiki/TestWiki:Privacy_policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>]
| bgcolor="#3E7" | [https://issue-tracker.miraheze.org/ Miraheze Phorge]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>
|| 10 days old
|-
| [https://testwiki.wiki/ '''<span lang="en" dir="ltr" class="mw-content-ltr">Test Wiki</span>''']
| bgcolor="#3E7" |1.46.0<ref>[https://testwiki.wiki/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">Test Wiki's version page</span>]</ref><br>(latest)
| bgcolor="#3E7" | [irc://chat.freenode.net/testadminwiki #testadminwiki] <span lang="en" dir="ltr" class="mw-content-ltr">on Libera<br>[https://discord.gg/yBUvasVmt4 Test Wiki] on Discord</span>
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes (only for self)</span>
| bgcolor="#3E7" | [https://testwiki.wiki/wiki/Test_Wiki:Privacy_policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>]
| bgcolor="#3E7" | [https://phabricator.testwiki.wiki/ Test Wiki Phabricator]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>
||
|-
| [https://www.thetestwiki.org/ '''<span lang="en" dir="ltr" class="mw-content-ltr">The Test Wiki</span>''']
| bgcolor="red" | 1.44.0<ref name="ttw-version">[https://www.thetestwiki.org/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">The Test Wiki's version page</span>]</ref><br>(obselete)
| bgcolor="#3E7" | [irc://chat.freenode.net/thetestwiki #thetestwiki] <span lang="en" dir="ltr" class="mw-content-ltr">on freenode</span>
| bgcolor="yellow" | <span lang="en" dir="ltr" class="mw-content-ltr">Restricted</span>
| bgcolor="#3E7" | [https://www.thetestwiki.org/wiki/The_Test_Wiki:Privacy_policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes, for non-vandals</span>]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">[[mw:User talk:Skizzerz|'''Skizzerz’s talk page'''<br>(MediaWiki)]]</span>
| bgcolor="red" | <span lang="en" dir="ltr" class="mw-content-ltr">No</span>
|| Identity verification from other major wikis (such as Wikipedia, Miraheze or Fandom)
|-
| [http://testmw.fandom.com/ '''<span lang="en" dir="ltr" class="mw-content-ltr">Fandom Test Wiki</span>''']
| bgcolor="yellow" | 1.43.8<ref name="Wikia">[http://testmw.fandom.com/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">Fandom Test Wiki's version page</span>]</ref><br>(legacy)
| bgcolor="#3E7" | [https://discord.com/invite/fandom Fandom] on Discord
| bgcolor="yellow" | <span lang="en" dir="ltr" class="mw-content-ltr">Restricted</span>
| bgcolor="#3E7" | [http://www.fandom.com/privacy-policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>]
| bgcolor="#3E7" | [[centralwikia:Special:Contact/bug|<span lang="en" dir="ltr" class="mw-content-ltr">Fandom Support - Bug Report</span>]]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>
|| 4 days old and 10 edits
|}
<div lang="en" dir="ltr" class="mw-content-ltr">
==Notes==
</div>
<references />
alab0w3wi96z8kqpy9ho8st1cpi2wmn
754463
754460
2026-07-31T19:16:32Z
Itsied
75098
Created page with "Sisc"
754463
wikitext
text/x-wiki
<languages/>
{{requests}}
Rr
<hr width="86%"/>
{|class="plainlinks wikitable" style="text-align: center;"
!AP
!Api
!Sisc
!<span lang="en" dir="ltr" class="mw-content-ltr">CheckUser</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">Privacy policy</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">Bug Tracker/Requests site</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">VisualEditor</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">Account requirements for sysop</span>
|-
| [https://publictestwiki.com/ <span lang="en" dir="ltr" class="mw-content-ltr">'''Public Test Wiki''' (Miraheze)</span>]
| bgcolor="yellow" | 1.45.3<ref name="mhTestWiki">[https://publictestwiki.com/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">Public Test Wiki's version page</span>]</ref><br>(legacy)
|bgcolor="#3E7" | [ircs://chat.freenode.net/miraheze-testwiki #miraheze-testwiki] <span lang="en" dir="ltr" class="mw-content-ltr">on Libera</span>
| bgcolor="yellow" | <span lang="en" dir="ltr" class="mw-content-ltr">Restricted</span>
| bgcolor="#3E7" | [https://publictestwiki.com/wiki/TestWiki:Privacy_policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>]
| bgcolor="#3E7" | [https://issue-tracker.miraheze.org/ Miraheze Phorge]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>
|| 10 days old
|-
| [https://testwiki.wiki/ '''<span lang="en" dir="ltr" class="mw-content-ltr">Test Wiki</span>''']
| bgcolor="#3E7" |1.46.0<ref>[https://testwiki.wiki/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">Test Wiki's version page</span>]</ref><br>(latest)
| bgcolor="#3E7" | [irc://chat.freenode.net/testadminwiki #testadminwiki] <span lang="en" dir="ltr" class="mw-content-ltr">on Libera<br>[https://discord.gg/yBUvasVmt4 Test Wiki] on Discord</span>
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes (only for self)</span>
| bgcolor="#3E7" | [https://testwiki.wiki/wiki/Test_Wiki:Privacy_policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>]
| bgcolor="#3E7" | [https://phabricator.testwiki.wiki/ Test Wiki Phabricator]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>
||
|-
| [https://www.thetestwiki.org/ '''<span lang="en" dir="ltr" class="mw-content-ltr">The Test Wiki</span>''']
| bgcolor="red" | 1.44.0<ref name="ttw-version">[https://www.thetestwiki.org/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">The Test Wiki's version page</span>]</ref><br>(obselete)
| bgcolor="#3E7" | [irc://chat.freenode.net/thetestwiki #thetestwiki] <span lang="en" dir="ltr" class="mw-content-ltr">on freenode</span>
| bgcolor="yellow" | <span lang="en" dir="ltr" class="mw-content-ltr">Restricted</span>
| bgcolor="#3E7" | [https://www.thetestwiki.org/wiki/The_Test_Wiki:Privacy_policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes, for non-vandals</span>]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">[[mw:User talk:Skizzerz|'''Skizzerz’s talk page'''<br>(MediaWiki)]]</span>
| bgcolor="red" | <span lang="en" dir="ltr" class="mw-content-ltr">No</span>
|| Identity verification from other major wikis (such as Wikipedia, Miraheze or Fandom)
|-
| [http://testmw.fandom.com/ '''<span lang="en" dir="ltr" class="mw-content-ltr">Fandom Test Wiki</span>''']
| bgcolor="yellow" | 1.43.8<ref name="Wikia">[http://testmw.fandom.com/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">Fandom Test Wiki's version page</span>]</ref><br>(legacy)
| bgcolor="#3E7" | [https://discord.com/invite/fandom Fandom] on Discord
| bgcolor="yellow" | <span lang="en" dir="ltr" class="mw-content-ltr">Restricted</span>
| bgcolor="#3E7" | [http://www.fandom.com/privacy-policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>]
| bgcolor="#3E7" | [[centralwikia:Special:Contact/bug|<span lang="en" dir="ltr" class="mw-content-ltr">Fandom Support - Bug Report</span>]]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>
|| 4 days old and 10 edits
|}
<div lang="en" dir="ltr" class="mw-content-ltr">
==Notes==
</div>
<references />
84lb3h20y1izfbgef9xsiebynrl2kb2
754464
754463
2026-07-31T19:16:33Z
Itsied
75098
Created page with "D"
754464
wikitext
text/x-wiki
<languages/>
{{requests}}
Rr
<hr width="86%"/>
{|class="plainlinks wikitable" style="text-align: center;"
!AP
!Api
!Sisc
!D
!<span lang="en" dir="ltr" class="mw-content-ltr">Privacy policy</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">Bug Tracker/Requests site</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">VisualEditor</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">Account requirements for sysop</span>
|-
| [https://publictestwiki.com/ <span lang="en" dir="ltr" class="mw-content-ltr">'''Public Test Wiki''' (Miraheze)</span>]
| bgcolor="yellow" | 1.45.3<ref name="mhTestWiki">[https://publictestwiki.com/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">Public Test Wiki's version page</span>]</ref><br>(legacy)
|bgcolor="#3E7" | [ircs://chat.freenode.net/miraheze-testwiki #miraheze-testwiki] <span lang="en" dir="ltr" class="mw-content-ltr">on Libera</span>
| bgcolor="yellow" | <span lang="en" dir="ltr" class="mw-content-ltr">Restricted</span>
| bgcolor="#3E7" | [https://publictestwiki.com/wiki/TestWiki:Privacy_policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>]
| bgcolor="#3E7" | [https://issue-tracker.miraheze.org/ Miraheze Phorge]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>
|| 10 days old
|-
| [https://testwiki.wiki/ '''<span lang="en" dir="ltr" class="mw-content-ltr">Test Wiki</span>''']
| bgcolor="#3E7" |1.46.0<ref>[https://testwiki.wiki/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">Test Wiki's version page</span>]</ref><br>(latest)
| bgcolor="#3E7" | [irc://chat.freenode.net/testadminwiki #testadminwiki] <span lang="en" dir="ltr" class="mw-content-ltr">on Libera<br>[https://discord.gg/yBUvasVmt4 Test Wiki] on Discord</span>
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes (only for self)</span>
| bgcolor="#3E7" | [https://testwiki.wiki/wiki/Test_Wiki:Privacy_policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>]
| bgcolor="#3E7" | [https://phabricator.testwiki.wiki/ Test Wiki Phabricator]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>
||
|-
| [https://www.thetestwiki.org/ '''<span lang="en" dir="ltr" class="mw-content-ltr">The Test Wiki</span>''']
| bgcolor="red" | 1.44.0<ref name="ttw-version">[https://www.thetestwiki.org/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">The Test Wiki's version page</span>]</ref><br>(obselete)
| bgcolor="#3E7" | [irc://chat.freenode.net/thetestwiki #thetestwiki] <span lang="en" dir="ltr" class="mw-content-ltr">on freenode</span>
| bgcolor="yellow" | <span lang="en" dir="ltr" class="mw-content-ltr">Restricted</span>
| bgcolor="#3E7" | [https://www.thetestwiki.org/wiki/The_Test_Wiki:Privacy_policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes, for non-vandals</span>]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">[[mw:User talk:Skizzerz|'''Skizzerz’s talk page'''<br>(MediaWiki)]]</span>
| bgcolor="red" | <span lang="en" dir="ltr" class="mw-content-ltr">No</span>
|| Identity verification from other major wikis (such as Wikipedia, Miraheze or Fandom)
|-
| [http://testmw.fandom.com/ '''<span lang="en" dir="ltr" class="mw-content-ltr">Fandom Test Wiki</span>''']
| bgcolor="yellow" | 1.43.8<ref name="Wikia">[http://testmw.fandom.com/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">Fandom Test Wiki's version page</span>]</ref><br>(legacy)
| bgcolor="#3E7" | [https://discord.com/invite/fandom Fandom] on Discord
| bgcolor="yellow" | <span lang="en" dir="ltr" class="mw-content-ltr">Restricted</span>
| bgcolor="#3E7" | [http://www.fandom.com/privacy-policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>]
| bgcolor="#3E7" | [[centralwikia:Special:Contact/bug|<span lang="en" dir="ltr" class="mw-content-ltr">Fandom Support - Bug Report</span>]]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>
|| 4 days old and 10 edits
|}
<div lang="en" dir="ltr" class="mw-content-ltr">
==Notes==
</div>
<references />
eker5u1k9opwogjsovz17y2yaivpkc6
754466
754464
2026-07-31T19:16:35Z
Itsied
75098
Created page with "Am"
754466
wikitext
text/x-wiki
<languages/>
{{requests}}
Rr
<hr width="86%"/>
{|class="plainlinks wikitable" style="text-align: center;"
!AP
!Api
!Sisc
!D
!Am
!<span lang="en" dir="ltr" class="mw-content-ltr">Bug Tracker/Requests site</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">VisualEditor</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">Account requirements for sysop</span>
|-
| [https://publictestwiki.com/ <span lang="en" dir="ltr" class="mw-content-ltr">'''Public Test Wiki''' (Miraheze)</span>]
| bgcolor="yellow" | 1.45.3<ref name="mhTestWiki">[https://publictestwiki.com/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">Public Test Wiki's version page</span>]</ref><br>(legacy)
|bgcolor="#3E7" | [ircs://chat.freenode.net/miraheze-testwiki #miraheze-testwiki] <span lang="en" dir="ltr" class="mw-content-ltr">on Libera</span>
| bgcolor="yellow" | <span lang="en" dir="ltr" class="mw-content-ltr">Restricted</span>
| bgcolor="#3E7" | [https://publictestwiki.com/wiki/TestWiki:Privacy_policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>]
| bgcolor="#3E7" | [https://issue-tracker.miraheze.org/ Miraheze Phorge]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>
|| 10 days old
|-
| [https://testwiki.wiki/ '''<span lang="en" dir="ltr" class="mw-content-ltr">Test Wiki</span>''']
| bgcolor="#3E7" |1.46.0<ref>[https://testwiki.wiki/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">Test Wiki's version page</span>]</ref><br>(latest)
| bgcolor="#3E7" | [irc://chat.freenode.net/testadminwiki #testadminwiki] <span lang="en" dir="ltr" class="mw-content-ltr">on Libera<br>[https://discord.gg/yBUvasVmt4 Test Wiki] on Discord</span>
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes (only for self)</span>
| bgcolor="#3E7" | [https://testwiki.wiki/wiki/Test_Wiki:Privacy_policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>]
| bgcolor="#3E7" | [https://phabricator.testwiki.wiki/ Test Wiki Phabricator]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>
||
|-
| [https://www.thetestwiki.org/ '''<span lang="en" dir="ltr" class="mw-content-ltr">The Test Wiki</span>''']
| bgcolor="red" | 1.44.0<ref name="ttw-version">[https://www.thetestwiki.org/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">The Test Wiki's version page</span>]</ref><br>(obselete)
| bgcolor="#3E7" | [irc://chat.freenode.net/thetestwiki #thetestwiki] <span lang="en" dir="ltr" class="mw-content-ltr">on freenode</span>
| bgcolor="yellow" | <span lang="en" dir="ltr" class="mw-content-ltr">Restricted</span>
| bgcolor="#3E7" | [https://www.thetestwiki.org/wiki/The_Test_Wiki:Privacy_policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes, for non-vandals</span>]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">[[mw:User talk:Skizzerz|'''Skizzerz’s talk page'''<br>(MediaWiki)]]</span>
| bgcolor="red" | <span lang="en" dir="ltr" class="mw-content-ltr">No</span>
|| Identity verification from other major wikis (such as Wikipedia, Miraheze or Fandom)
|-
| [http://testmw.fandom.com/ '''<span lang="en" dir="ltr" class="mw-content-ltr">Fandom Test Wiki</span>''']
| bgcolor="yellow" | 1.43.8<ref name="Wikia">[http://testmw.fandom.com/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">Fandom Test Wiki's version page</span>]</ref><br>(legacy)
| bgcolor="#3E7" | [https://discord.com/invite/fandom Fandom] on Discord
| bgcolor="yellow" | <span lang="en" dir="ltr" class="mw-content-ltr">Restricted</span>
| bgcolor="#3E7" | [http://www.fandom.com/privacy-policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>]
| bgcolor="#3E7" | [[centralwikia:Special:Contact/bug|<span lang="en" dir="ltr" class="mw-content-ltr">Fandom Support - Bug Report</span>]]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>
|| 4 days old and 10 edits
|}
<div lang="en" dir="ltr" class="mw-content-ltr">
==Notes==
</div>
<references />
tex4vm26ju12ygtbh6gzye3ahzg34m6
754468
754466
2026-07-31T19:16:37Z
Itsied
75098
Created page with "Aw"
754468
wikitext
text/x-wiki
<languages/>
{{requests}}
Rr
<hr width="86%"/>
{|class="plainlinks wikitable" style="text-align: center;"
!AP
!Api
!Sisc
!D
!Am
!Aw
!<span lang="en" dir="ltr" class="mw-content-ltr">VisualEditor</span>
!<span lang="en" dir="ltr" class="mw-content-ltr">Account requirements for sysop</span>
|-
| [https://publictestwiki.com/ <span lang="en" dir="ltr" class="mw-content-ltr">'''Public Test Wiki''' (Miraheze)</span>]
| bgcolor="yellow" | 1.45.3<ref name="mhTestWiki">[https://publictestwiki.com/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">Public Test Wiki's version page</span>]</ref><br>(legacy)
|bgcolor="#3E7" | [ircs://chat.freenode.net/miraheze-testwiki #miraheze-testwiki] <span lang="en" dir="ltr" class="mw-content-ltr">on Libera</span>
| bgcolor="yellow" | <span lang="en" dir="ltr" class="mw-content-ltr">Restricted</span>
| bgcolor="#3E7" | [https://publictestwiki.com/wiki/TestWiki:Privacy_policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>]
| bgcolor="#3E7" | [https://issue-tracker.miraheze.org/ Miraheze Phorge]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>
|| 10 days old
|-
| [https://testwiki.wiki/ '''<span lang="en" dir="ltr" class="mw-content-ltr">Test Wiki</span>''']
| bgcolor="#3E7" |1.46.0<ref>[https://testwiki.wiki/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">Test Wiki's version page</span>]</ref><br>(latest)
| bgcolor="#3E7" | [irc://chat.freenode.net/testadminwiki #testadminwiki] <span lang="en" dir="ltr" class="mw-content-ltr">on Libera<br>[https://discord.gg/yBUvasVmt4 Test Wiki] on Discord</span>
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes (only for self)</span>
| bgcolor="#3E7" | [https://testwiki.wiki/wiki/Test_Wiki:Privacy_policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>]
| bgcolor="#3E7" | [https://phabricator.testwiki.wiki/ Test Wiki Phabricator]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>
||
|-
| [https://www.thetestwiki.org/ '''<span lang="en" dir="ltr" class="mw-content-ltr">The Test Wiki</span>''']
| bgcolor="red" | 1.44.0<ref name="ttw-version">[https://www.thetestwiki.org/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">The Test Wiki's version page</span>]</ref><br>(obselete)
| bgcolor="#3E7" | [irc://chat.freenode.net/thetestwiki #thetestwiki] <span lang="en" dir="ltr" class="mw-content-ltr">on freenode</span>
| bgcolor="yellow" | <span lang="en" dir="ltr" class="mw-content-ltr">Restricted</span>
| bgcolor="#3E7" | [https://www.thetestwiki.org/wiki/The_Test_Wiki:Privacy_policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes, for non-vandals</span>]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">[[mw:User talk:Skizzerz|'''Skizzerz’s talk page'''<br>(MediaWiki)]]</span>
| bgcolor="red" | <span lang="en" dir="ltr" class="mw-content-ltr">No</span>
|| Identity verification from other major wikis (such as Wikipedia, Miraheze or Fandom)
|-
| [http://testmw.fandom.com/ '''<span lang="en" dir="ltr" class="mw-content-ltr">Fandom Test Wiki</span>''']
| bgcolor="yellow" | 1.43.8<ref name="Wikia">[http://testmw.fandom.com/wiki/Special:Version <span lang="en" dir="ltr" class="mw-content-ltr">Fandom Test Wiki's version page</span>]</ref><br>(legacy)
| bgcolor="#3E7" | [https://discord.com/invite/fandom Fandom] on Discord
| bgcolor="yellow" | <span lang="en" dir="ltr" class="mw-content-ltr">Restricted</span>
| bgcolor="#3E7" | [http://www.fandom.com/privacy-policy <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>]
| bgcolor="#3E7" | [[centralwikia:Special:Contact/bug|<span lang="en" dir="ltr" class="mw-content-ltr">Fandom Support - Bug Report</span>]]
| bgcolor="#3E7" | <span lang="en" dir="ltr" class="mw-content-ltr">Yes</span>
|| 4 days old and 10 edits
|}
<div lang="en" dir="ltr" class="mw-content-ltr">
==Notes==
</div>
<references />
ggjezurxmem725dueg47bxvi0hsfihk
Translations:Wikipedia:Requests/Tools/1/pt
1198
177470
754455
2026-07-31T19:16:24Z
Itsied
75098
Created page with "Rr"
754455
wikitext
text/x-wiki
Rr
3546epvfo1kr0r35ultqu0p84slbuhw
Translations:Wikipedia:Requests/Tools/2/pt
1198
177471
754457
2026-07-31T19:16:26Z
Itsied
75098
Created page with "AP"
754457
wikitext
text/x-wiki
AP
m02lizdbgc06agnn1cvghgkdjq4kl22
Translations:Wikipedia:Requests/Tools/3/pt
1198
177472
754459
2026-07-31T19:16:29Z
Itsied
75098
Created page with "Api"
754459
wikitext
text/x-wiki
Api
poix4rfthna0gw5jkf3v1kflkn1uxjl
Translations:Wikipedia:Requests/Tools/4/pt
1198
177473
754461
2026-07-31T19:16:31Z
Itsied
75098
Created page with "Sisc"
754461
wikitext
text/x-wiki
Sisc
bdb2qxzat5hj1246683wt15n0kbaif7
Translations:Wikipedia:Requests/Tools/6/pt
1198
177474
754462
2026-07-31T19:16:32Z
Itsied
75098
Created page with "D"
754462
wikitext
text/x-wiki
D
9fqdptwhdd0qphuzob6mpewzq534vnz
Translations:Wikipedia:Requests/Tools/8/pt
1198
177475
754465
2026-07-31T19:16:35Z
Itsied
75098
Created page with "Am"
754465
wikitext
text/x-wiki
Am
j7icttc8w56w0p9jdgl4y8z0nie8cvx
Translations:Wikipedia:Requests/Tools/9/pt
1198
177476
754467
2026-07-31T19:16:36Z
Itsied
75098
Created page with "Aw"
754467
wikitext
text/x-wiki
Aw
awjg2v3molhcnzta0x9l2dop1q53e0f
Wap
0
177477
754472
2026-07-31T19:29:53Z
Itsied
75098
/* */
754472
wikitext
text/x-wiki
* Italic text
fbd5hjcwbqv249kab2x6xdvvvnxetnu
TEST
0
177478
754474
2026-07-31T19:31:56Z
Itsied
75098
Created page with "Si"
754474
wikitext
text/x-wiki
Si
e7no0w3mnus6ad86oesw2goeweng0xl
Talk:T329968
1
177479
754481
2026-07-31T20:16:42Z
~2026-42487-87
75100
/* 43 */ new section
754481
wikitext
text/x-wiki
== 43 ==
10 [[Special:Contributions/~2026-42487-87|~2026-42487-87]] ([[User talk:~2026-42487-87|talk]]) 20:16, 31 July 2026 (UTC)
3r9eavwx2krseqe9rxpm6ofz0nd20is
754482
754481
2026-07-31T20:20:46Z
~2026-42487-87
75100
/* 43 */ Reply
754482
wikitext
text/x-wiki
== 43 ==
10 [[Special:Contributions/~2026-42487-87|~2026-42487-87]] ([[User talk:~2026-42487-87|talk]]) 20:16, 31 July 2026 (UTC)
:ai [[Special:Contributions/~2026-42487-87|~2026-42487-87]] ([[User talk:~2026-42487-87|talk]]) 20:20, 31 July 2026 (UTC)
tvzm69q29rmj7v6uix6tvqtqeepvb0u
754484
754482
2026-07-31T20:50:21Z
~2026-42487-87
75100
754484
wikitext
text/x-wiki
== 43 ==
10 [[Special:Contributions/~2026-42487-87|~2026-42487-87]] ([[User talk:~2026-42487-87|talk]]) 20:16, 31 July 2020 (UTC)
:ai [[Special:Contributions/~2026-42487-87|~2026-42487-87]] ([[User talk:~2026-42487-87|talk]]) 20:20, 31 July 2026 (UTC)
e2ptkx9mz5t7juan88v5uc00bn4hpky
She
0
177480
754486
2026-07-31T21:07:32Z
Itsied
75098
/* */
754486
wikitext
text/x-wiki
She does a thing.
rg8cvqk7b3awn1n1ytbaeq2bv6utr29
User talk:~2026-42636-52
3
177481
754506
2026-07-31T22:30:45Z
Chaotic Enby
58843
/* Block */ new topic ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]])
754506
wikitext
text/x-wiki
== Block ==
You've been blocked! [[User:Chaotic Enby|Chaotic Enby]] ([[User talk:Chaotic Enby|talk]]) 22:30, 31 July 2026 (UTC)
hnzgkfs998azp4af4yfvueoi8f340n4
754507
754506
2026-07-31T22:31:51Z
~2026-42636-52
75103
Submitting using [[Wikipedia:Unblock wizard]]
754507
wikitext
text/x-wiki
== Block ==
You've been blocked! [[User:Chaotic Enby|Chaotic Enby]] ([[User talk:Chaotic Enby|talk]]) 22:30, 31 July 2026 (UTC)
{{unblock|reason=<small>The following request was written through the [[Wikipedia:Unblock wizard|unblock wizard]].</small>{{pb}}
'''''Can you explain, in your own words, what you were blocked for?'''''{{pb}}
By myself, to test the unblock wizard{{pb}}
'''''If unblocked, what edits would you make and what (if applicable) would you do differently?'''''{{pb}}
None, since it means the unblock wizard presumably works. I'll probably stop procrastinating (ahem!) and work on the report wizard{{pb}}
'''''Is there anything else that may be helpful to your unblock request?'''''{{pb}}
Chaotic Enby here, testing if the wizard works on TAs, cf. [[Special:Diff/1367085563]]{{pb}}
[[Special:Contributions/~2026-42636-52|~2026-42636-52]] ([[User talk:~2026-42636-52|talk]]) 22:31, 31 July 2026 (UTC)}}
dmu0g9zn8lid57dslp9qax5o0exzaow
XV (EP)
0
177482
754531
2026-07-31T23:35:48Z
Jaheim2021
75033
Created page with "{{Infobox album | name = XV | type = [[studio EP]] | artist = [[Jonas Brothers]] | cover = | alt = | released = October 26, 2020 | recorded = 2019–2020 | genre = {{hlist|[[Pop music|Pop]]|[[pop rock]]}} | studio = | length = | label = [[Republic Records|Republic]] | producer = {{hlist|[[Ryan Tedder]] ({{abbr|exec.|Executive producer}})|[[Andrew Watt (record producer)|Andrew Watt]]|[[Benny Blanco]]|[[Cashmere Cat]]|D..."
754531
wikitext
text/x-wiki
{{Infobox album
| name = XV
| type = [[studio EP]]
| artist = [[Jonas Brothers]]
| cover =
| alt =
| released = October 26, 2020
| recorded = 2019–2020
| genre = {{hlist|[[Pop music|Pop]]|[[pop rock]]}}
| studio =
| length =
| label = [[Republic Records|Republic]]
| producer = {{hlist|[[Ryan Tedder]] ({{abbr|exec.|Executive producer}})|[[Andrew Watt (record producer)|Andrew Watt]]|[[Benny Blanco]]|[[Cashmere Cat]]|[[David Stewart (songwriter and producer)|David Stewart]]|[[Happy Perez]]|[[Ian Kirkpatrick (record producer)|Ian Kirkpatrick]]|[[Ilya Salmanzadeh|Ilya]]|[[Ludwig Göransson]]|[[Max Martin]]|Mr. Franks|[[Louis Bell]]|[[Shellback (record producer)|Shellback]]|Zach Skelton}}
| prev_title = [[Happiness Begins]]
| prev_year = 2019
| next_title = [[The Family Business (album)|The Family Business]]
| next_year = 2023
}}
'''''XV''''' is the second [[studio EP]] by American [[Pop rock|pop rock]] band [[Jonas Brothers]].
[[Category:2020 EPs]]
[[Category:Jonas Brothers EPs]]
[[Category:Republic Records EPs]]
jvyk5cva3e7lvegtm2ru7odvmzjiye4
754532
754531
2026-07-31T23:35:58Z
Jaheim2021
75033
754532
wikitext
text/x-wiki
{{Infobox album
| name = XV
| type = Studio EP
| artist = [[Jonas Brothers]]
| cover =
| alt =
| released = October 26, 2020
| recorded = 2019–2020
| genre = {{hlist|[[Pop music|Pop]]|[[pop rock]]}}
| studio =
| length =
| label = [[Republic Records|Republic]]
| producer = {{hlist|[[Ryan Tedder]] ({{abbr|exec.|Executive producer}})|[[Andrew Watt (record producer)|Andrew Watt]]|[[Benny Blanco]]|[[Cashmere Cat]]|[[David Stewart (songwriter and producer)|David Stewart]]|[[Happy Perez]]|[[Ian Kirkpatrick (record producer)|Ian Kirkpatrick]]|[[Ilya Salmanzadeh|Ilya]]|[[Ludwig Göransson]]|[[Max Martin]]|Mr. Franks|[[Louis Bell]]|[[Shellback (record producer)|Shellback]]|Zach Skelton}}
| prev_title = [[Happiness Begins]]
| prev_year = 2019
| next_title = [[The Family Business (album)|The Family Business]]
| next_year = 2023
}}
'''''XV''''' is the second [[studio EP]] by American [[Pop rock|pop rock]] band [[Jonas Brothers]].
[[Category:2020 EPs]]
[[Category:Jonas Brothers EPs]]
[[Category:Republic Records EPs]]
60p7jcdq9d4anpqfj2zcggkyejfu41x
754533
754532
2026-07-31T23:36:07Z
Jaheim2021
75033
754533
wikitext
text/x-wiki
{{Infobox album
| name = XV
| type = [[Studio EP]]
| artist = [[Jonas Brothers]]
| cover =
| alt =
| released = October 26, 2020
| recorded = 2019–2020
| genre = {{hlist|[[Pop music|Pop]]|[[pop rock]]}}
| studio =
| length =
| label = [[Republic Records|Republic]]
| producer = {{hlist|[[Ryan Tedder]] ({{abbr|exec.|Executive producer}})|[[Andrew Watt (record producer)|Andrew Watt]]|[[Benny Blanco]]|[[Cashmere Cat]]|[[David Stewart (songwriter and producer)|David Stewart]]|[[Happy Perez]]|[[Ian Kirkpatrick (record producer)|Ian Kirkpatrick]]|[[Ilya Salmanzadeh|Ilya]]|[[Ludwig Göransson]]|[[Max Martin]]|Mr. Franks|[[Louis Bell]]|[[Shellback (record producer)|Shellback]]|Zach Skelton}}
| prev_title = [[Happiness Begins]]
| prev_year = 2019
| next_title = [[The Family Business (album)|The Family Business]]
| next_year = 2023
}}
'''''XV''''' is the second [[studio EP]] by American [[Pop rock|pop rock]] band [[Jonas Brothers]].
[[Category:2020 EPs]]
[[Category:Jonas Brothers EPs]]
[[Category:Republic Records EPs]]
a31p3g55nnxnbtj540abwdasuk5ovnj
File:Example .jpg
6
177483
754534
2026-07-31T23:57:58Z
Anirudh23090
74777
754534
wikitext
text/x-wiki
{{Pp-move}}
{{Pp-upload}}
{{Example files}}
{{Keep local high-risk}}
== Summary ==
{{Information
| description = An example image. This image should not be used in article namespace.
| source = Derived from [[:File:Gutza Wikipedia logo.png]]
| date =
| author = Original by [[User:Gutza|Gutza]], modifications by [[User:Centrx|Centrx]]
| permission =
| other_versions =
| additional_information =
}}
==Licensing==
{{GFDL-with-disclaimers|migration=relicense}}
[[Category:Wikipedia image placeholders]]
846ys5oicjrofb7eppltkdx4btgxii7
Stripped & Justified
0
177484
754536
2026-08-01T00:11:32Z
Jaheim2021
75033
Created page with "{{Use mdy dates|date=December 2022}} {{Infobox album | name = Stripped & Justified | type = studio | artist = [[Thicke Levine Timberlake]] | cover = | alt = | released = {{Start date|2022|11|11}} | genre = {{hlist|[[Pop-rap]]|[[dance-pop]]|[[nu-disco]]|[[electropop]]|[[synth-pop]]}} | studio = | length = | recorded = 2021–2022 | label = {{hlist|[[I Am Other]]|[[222 Records|222]]|Interscope Re..."
754536
wikitext
text/x-wiki
{{Use mdy dates|date=December 2022}}
{{Infobox album
| name = Stripped & Justified
| type = studio
| artist = [[Thicke Levine Timberlake]]
| cover =
| alt =
| released = {{Start date|2022|11|11}}
| genre = {{hlist|[[Pop-rap]]|[[dance-pop]]|[[nu-disco]]|[[electropop]]|[[synth-pop]]}}
| studio =
| length =
| recorded = 2021–2022
| label = {{hlist|[[I Am Other]]|[[222 Records|222]]|[[Interscope Records|Interscope]]}}
| producer = {{hlist|Ammo|[[Anderson .Paak]]|[[Ash Howes]]|[[Calvin Harris]]|[[Charlie Puth]]|Duck Blackwell|[[James Ford (musician)|James Ford]]|[[Justin Timberlake]]|Kiris Houston|Linslee Campbell|[[Ludwig Göransson]]|[[Madonna]]|[[Mattman & Robin]]||Nico Stadi|PhD|[[Biffco|Richard "Biff" Stannard]]|Sky Adams|[[Teemu Brunila]]}}
| prev_title = [[JT Session]]
| prev_year = 2020
| next_title =
| next_year =
| misc = {{Singles
| name = Stripped & Justified
| type = studio
| single1 = [[Miss a Thing (song)|Miss a Thing]]
| single1date = June 17, 2022
| single2 = [[A Second to Midnight (song)|A Second to Midnight]]
| single2date = October 28, 2022
| single3 = Can't Stop Writing Songs About You
| single3date = November 14, 2022
| single4 = Cake by the Ocean
| single4date = March 10, 2023
| single5 = Supernova
| single5date = July 21, 2023
}}
}}
'''''Stripped & Justified''''' is the tenth studio album by American [[Pop-R&B]] group [[Thicke Levine Timberlake]]. It was released on November 11, 2022, via [[I Am Other|I Am Other Entertainment]], [[222 Records]] and [[Interscope Records]]. It features [[guest appearance]]s from [[Halsey (singer)|Halsey]], [[Charlie Puth]], [[Jonas Brothers]], [[Calvin Harris]], [[Anderson .Paak]], [[Meghan Trainor]], [[The Lonely Island]], [[Christina Aguilera]], [[Pharrell Williams|Pharrell]] and [[Kylie Minogue]].
It peaked at number 13 on the [[Top Dance/Electronic Albums]] chart in the United States. It reached number 44 in Italy and number 89 in France.
In early November 2022, the group announced their new album entitled ''Stripped & Justified'' on Instagram. Like their previous album, ''Stripped & Justified'' contains fifteen songs.
==Track listing==
==Personnel==
==Charts==
===Weekly charts===
===Year-end charts===
==Certifications==
==References==
{{Reflist}}
{{Thicke Levine Timberlake}}
{{Authority control}}
[[Category:2022 albums]]
[[Category:Thicke Levine Timberlake albums]]
[[Category:I Am Other Entertainment albums]]
[[Category:222 Records albums]]
[[Category:Interscope Records albums]]
[[Category:Albums produced by Calvin Harris]]
[[Category:Albums produced by Justin Timberlake]]
0ecnve3du7odgvbufj6051reggpm0bo
Category:Puff Daddy Records albums
14
177485
754537
2026-08-01T00:12:23Z
Jaheim2021
75033
Created page with "{{album label category}} [[Category:Puff Daddy Records|albums]]"
754537
wikitext
text/x-wiki
{{album label category}}
[[Category:Puff Daddy Records|albums]]
idjm4e3s9gl9vq21dq8hoac9k3cuak7
Category:Puff Daddy Records
14
177486
754538
2026-08-01T00:13:43Z
Jaheim2021
75033
Created page with "{{hatgrp|{{catmain}}{{catseealso|Bad Boy Records}}}} [[Category:Wikipedia categories named after record labels]]"
754538
wikitext
text/x-wiki
{{hatgrp|{{catmain}}{{catseealso|Bad Boy Records}}}}
[[Category:Wikipedia categories named after record labels]]
hk9zotoefs087jxhvi939prmw2vajmr
Template:Hatnote group
10
177487
754539
2026-08-01T00:14:30Z
Jaheim2021
75033
Created page with "<includeonly>{{#invoke:hatnote group|group}}</includeonly><noinclude>{{documentation}}</noinclude>"
754539
wikitext
text/x-wiki
<includeonly>{{#invoke:hatnote group|group}}</includeonly><noinclude>{{documentation}}</noinclude>
gvtqtrflk7vvv8xmoohe2ppctp23e4p
Module:Hatnote group
828
177488
754540
2026-08-01T00:15:20Z
Jaheim2021
75033
Created page with "local mHatnote = require('Module:Hatnote') local p = {} --Collates key-based table of classes into usable class list function collateClassList (listTable) local list = {} for k, v in pairs(listTable) do if v and type(k) == "string" then table.insert(list, k) end end return table.concat(list, " ") end --Passes through single argument from parent frame function p.group (frame) return p._group(frame:getParent().args[1], frame:getParent().args.category) end functi..."
754540
Scribunto
text/plain
local mHatnote = require('Module:Hatnote')
local p = {}
--Collates key-based table of classes into usable class list
function collateClassList (listTable)
local list = {}
for k, v in pairs(listTable) do
if v and type(k) == "string" then table.insert(list, k) end
end
return table.concat(list, " ")
end
--Passes through single argument from parent frame
function p.group (frame)
return p._group(frame:getParent().args[1], frame:getParent().args.category)
end
function p._group (inputText, category)
--If there's an error element, pass everything through unchanged for easier
--error resolution
if string.find(inputText, '<%a- class="error"', 1, true) then return inputText end
--Heavily reused hatnote data capture pattern
local hatnotePattern =
'(<div role="note" class="' ..
string.gsub(mHatnote.defaultClasses(false), "%-", "%%-") ..
'%s?(.-)">(.-)</div>)'
--Capture hatnote divs and "loose" categories; we'll ignore everything else
local rawDivs = {}
local looseCategories = ''
for x in string.gmatch(inputText, hatnotePattern) do
table.insert(rawDivs, x)
end
for x in string.gmatch(inputText, '%[%[Category:.-%]%]') do
looseCategories = looseCategories .. x
end
--if no inner hatnotes, return an error
if not rawDivs[1] then
return mHatnote.makeWikitextError(
'no inner hatnotes detected',
'Template:Hatnote group',
category
)
end
--Preprocess divs into strings and classes
local innerHatnotes = {}
for k, v in pairs(rawDivs) do
row = {}
row.text = string.gsub(v, hatnotePattern, '%3')
--Here we set class names as keys for easier intersection later
row.classes = {}
for m, w in ipairs(
mw.text.split(
string.gsub(v, hatnotePattern, '%2'),
' ',
true
)
) do
row.classes[mw.text.trim(w)] = true
end
table.insert(innerHatnotes, row)
end
--Identify any universal classes ("hatnote" ignored by omission earlier)
local universalClasses = {}
--clone first classes table to force passing by value rather than reference
for k, v in pairs(innerHatnotes[1].classes) do universalClasses[k] = v end
for k, v in ipairs(innerHatnotes) do
for m, w in pairs(universalClasses) do
universalClasses[m] = (universalClasses[m] and v.classes[m])
end
end
--Remove universal classes from div items, then create class strings per row
for k, v in ipairs(innerHatnotes) do
for m, w in pairs(v.classes) do
if universalClasses[m] then v.classes[m] = nil end
end
v.classString = collateClassList(v.classes)
end
--Process div items into classed span items
local innerSpans = {}
for k, v in ipairs(innerHatnotes) do
table.insert(
innerSpans,
tostring(
mw.html.create("span")
:addClass(v.classString ~= '' and v.classString or nil)
:wikitext(v.text)
)
)
end
--Concatenate spans and categories, and return wrapped as a single hatnote
local outputText = table.concat(innerSpans, " ") .. looseCategories
local hnOptions = {extraclasses = collateClassList(universalClasses)}
return mHatnote._hatnote(outputText, hnOptions)
end
return p
1nriugvnszgx33x7jmjtakrax7vs0jb
Template:Hatnote group/doc
10
177489
754541
2026-08-01T00:15:47Z
Jaheim2021
75033
Created page with "<!-- Please place categories where indicated at the bottom of this page and interwikis at Wikidata (see [[Wikipedia:Wikidata]]) --> Implements {{tl|hatnote group}}, for merging multiple hatnotes into a grouped hatnote. ==Technical details== The module attempts to find each hatnote-looking <code>div</code> element, and parse them into space-separated <code>span</code> elements wrapped in a larger, generic hatnote. First, it matches every pattern that "looks like a hatno..."
754541
wikitext
text/x-wiki
<!-- Please place categories where indicated at the bottom of this page and interwikis at Wikidata (see [[Wikipedia:Wikidata]]) -->
Implements {{tl|hatnote group}}, for merging multiple hatnotes into a grouped hatnote.
==Technical details==
The module attempts to find each hatnote-looking <code>div</code> element, and parse them into space-separated <code>span</code> elements wrapped in a larger, generic hatnote.
First, it matches every pattern that "looks like a hatnote" in its input text; this is where most problems are likely to originate as the pattern is fairly sensitive to any difference in the form of a hatnote.
From each of the pattern matches, it constructs a table. Each element ("row") of the table corresponds to one original hatnote, and is a table that contains a string with the rendered inner content of the hatnote, and an inner table containing any "extra" classes associated with that hatnote (e.g. <code>selfreference</code> from a {{tl|self reference}} hatnote, or any classes from the <code>extraclasses</code> parameter of {{tl|hatnote}}).
It also separately looks for all categories in case they're present ''outside'' the hatnote <code>div</code> element, and adds them to a concatenated string of all "loose categories" to make sure they're not accidentally removed by the hatnote grouping process.
Once all rows are available, it looks at the tables of classes. It adds every class from every row into a table of "universal" classes, then filters out the ones that aren't universal by looking at each row's list and eliminating an item if it isn't present in any one row. Then, "universal" classes are removed from each row's classes table, so that they're not duplicated later.
This processing having been done, each row is formatted with a <code>span</code> element that includes the extra classes associated with that row, the <code>spans</code> for each row are joined as a space-separated list, the "loose categories" are tacked on in turn, and then the resulting string is fed into the main hatnote module, with extra classes on the main hatnote being supplied by collating the "universal classes" table into a space-separated list of its keys.
<includeonly>{{sandbox other||
<!-- Categories below this line, please; interwikis at Wikidata -->
[[Category:Hatnote modules| ]]
}}</includeonly><noinclude>
[[Category:Module documentation pages]]
</noinclude>
pj3t521rz4zg6mje1fiut4b5jzii9fs
Template:Hatgrp
10
177490
754542
2026-08-01T00:16:39Z
Jaheim2021
75033
Redirected page to [[Template:Hatnote group]]
754542
wikitext
text/x-wiki
#REDIRECT [[Template:Hatnote group]]
o9x8rd5cw4en8h0ulqkj80z9migd6nf
Category:Albums produced by Justin Timberlake
14
177491
754543
2026-08-01T00:18:58Z
Jaheim2021
75033
Created page with "{{Portal|Record production}} Albums produced by [[Justin Timberlake]]. {{catseealso|Song recordings produced by Justin Timberlake}} [[Category:Albums by producer|Timberlake, Justin]] [[Category:Justin Timberlake]]"
754543
wikitext
text/x-wiki
{{Portal|Record production}}
Albums produced by [[Justin Timberlake]].
{{catseealso|Song recordings produced by Justin Timberlake}}
[[Category:Albums by producer|Timberlake, Justin]]
[[Category:Justin Timberlake]]
aufbc3ud1psfpiau0peozosgye24smv
Soundtrack of the Streets
0
177492
754544
2026-08-01T00:45:47Z
Jaheim2021
75033
Created page with "{{Use mdy dates|date=May 2025}} {{Infobox album | name = Soundtrack of the Streets | type = [[Studio mixtape]] | artist = [[Gene Simmons]] | cover = | alt = | released = {{Start date|2003|11|3}} | recorded = 2002–2003 | studio = {{hlist|Soundtrack <small>([[New York City|New York]], [[New York (state)|NY]])</small>|[[The Hit Factory]] <small>([[New York City|New York]], [[New York (state)|NY]])</small>|Westlake Re..."
754544
wikitext
text/x-wiki
{{Use mdy dates|date=May 2025}}
{{Infobox album
| name = Soundtrack of the Streets
| type = [[Studio mixtape]]
| artist = [[Gene Simmons]]
| cover =
| alt =
| released = {{Start date|2003|11|3}}
| recorded = 2002–2003
| studio = {{hlist|Soundtrack <small>([[New York City|New York]], [[New York (state)|NY]])</small>|[[The Hit Factory]] <small>([[New York City|New York]], [[New York (state)|NY]])</small>|[[Westlake Recording Studios|Westlake]] <small>([[Los Angeles]], [[California|CA]])</small>|Luke <small>([[Miami]], [[Florida|FL]])</small>|Right Track <small>([[New York City|New York]], [[New York (state)|NY]])</small>|So So Def|Avatar}}
| genre = [[Hip hop music|Hip hop]]
| length = {{Duration|h=1|m=5|s=5}}
| label = {{hlist|Simmons|[[RCA Records|RCA]]|[[Bertelsmann Music Group|BMG]]}}
| producer = {{hlist|[[Jimmy Iovine]] <small>(also exec.)</small>|Gene Simmons <small>(also exec.)</small>|[[Jimmy and Tone]] <small>(also exec.)</small>}}
| prev_title = [[Gene Simmons (album)|Gene Simmons]]
| prev_year = 1978
| next_title = [[Ashole (album)|Asshole]]
| next_year = 2004
| misc = {{Singles
| name = Soundtrack of the Streets
| type = [[Studio mixtape]]
| single1 = [[Always on the Run (Gene Simmons song)|Always on the Run]]
| single1date = August 18, 2003
| single2 = [[Always on the Run (Gene Simmons song)|Soundtrack of the Streets (On the Run Remix)]]
| single2date = September 16, 2003
| single3 = [[Hole in the Head (Gene Simmons song)|Hole in the Head]]
| single3date = October 10, 2003
| single4 = [[Give It Away (Gene Simmons song)|Give It Away]]
| single4date = November 25, 2003
}}
}}
'''''Soundtrack of the Streets''''' is a studio mixtape by Israeli-American singer and musician [[Gene Simmons]]. It was released on November 3, 2003, on Simmons Records/[[RCA Records|RCA]]/[[Bertelsmann Music Group|BMG Records]].
==Track listing==
==Charts==
==References==
{{Reflist}}
{{Gene Simmons}}
{{Authority control}}
[[Category:2003 mixtapes]]
[[Category:Gene Simmons mixtapes]]
[[Category:RCA Records mixtapes]]
[[Category:Albums produced by Jimmy Jam and Terry Lewis]]
l2gyh2wr2q7ty3hn1dlv3d3cmbyeoxl
754545
754544
2026-08-01T00:47:29Z
Jaheim2021
75033
754545
wikitext
text/x-wiki
{{Use mdy dates|date=May 2025}}
{{Infobox album
| name = Soundtrack of the Streets
| type = [[Studio mixtape]]
| artist = [[Gene Simmons]]
| cover =
| alt =
| released = {{Start date|2003|11|3}}
| recorded = 2002–2003
| studio =
| genre = {{hlist|[[Pop rap]]|[[pop metal]]|[[rap rock]]|[[pop rock]]|[[rap metal]]}}
| length =
| label = {{hlist|Simmons|[[RCA Records|RCA]]|[[Bertelsmann Music Group|BMG]]}}
| producer = {{hlist|[[Jimmy Iovine]] <small>(also exec.)</small>|Gene Simmons <small>(also exec.)</small>|[[Jimmy Jam and Terry Lewis]] <small>(also exec.)</small>}}
| prev_title = [[Gene Simmons (album)|Gene Simmons]]
| prev_year = 1978
| next_title = [[Ashole (album)|Asshole]]
| next_year = 2004
| misc = {{Singles
| name = Soundtrack of the Streets
| type = [[Studio mixtape]]
| single1 = [[Always on the Run (Gene Simmons song)|Always on the Run]]
| single1date = August 18, 2003
| single2 = [[Always on the Run (Gene Simmons song)|Soundtrack of the Streets (On the Run Remix)]]
| single2date = September 16, 2003
| single3 = [[Hole in the Head (Gene Simmons song)|Hole in the Head]]
| single3date = October 10, 2003
| single4 = [[Give It Away (Gene Simmons song)|Give It Away]]
| single4date = November 25, 2003
}}
}}
'''''Soundtrack of the Streets''''' is a studio mixtape by Israeli-American singer and musician [[Gene Simmons]]. It was released on November 3, 2003, on Simmons Records/[[RCA Records]]/[[Bertelsmann Music Group|BMG Records]].
==Track listing==
==Charts==
==References==
{{Reflist}}
{{Gene Simmons}}
{{Authority control}}
[[Category:2003 mixtapes]]
[[Category:Gene Simmons mixtapes]]
[[Category:RCA Records mixtapes]]
[[Category:Albums produced by Jimmy Jam and Terry Lewis]]
a6ek2zawoc5ifn0smd4faruqips996y
The Preacher's Man
0
177493
754547
2026-08-01T01:05:29Z
Jaheim2021
75033
Created page with "{{Use mdy dates|date=May 2025}} {{Infobox album | name = The Preacher's Son | type = studio | artist = [[Chris Martin]] and [[Bono]] | cover = | alt = | released = 4 November 2003 | recorded = 2002–03 | studio = | genre = {{hlist|[[Synth-rap]]|[[synth-pop]]|[[electropop]]}} | length = | label = [[Island Records|Island]] | producer = {{hlist|[[Rik Simpson]]|[[Chris Martin]]|[[Linda Perry]]|[[George Michael]]|Daft P..."
754547
wikitext
text/x-wiki
{{Use mdy dates|date=May 2025}}
{{Infobox album
| name = The Preacher's Son
| type = studio
| artist = [[Chris Martin]] and [[Bono]]
| cover =
| alt =
| released = 4 November 2003
| recorded = 2002–03
| studio =
| genre = {{hlist|[[Synth-rap]]|[[synth-pop]]|[[electropop]]}}
| length =
| label = [[Island Records|Island]]
| producer = {{hlist|[[Rik Simpson]]|[[Chris Martin]]|[[Linda Perry]]|[[George Michael]]|[[Daft Punk]]|[[Bono]]|[[Joakim Åhlund]]|[[Rob Dougan]]|[[Rick Nowels]]|[[The Edge]]}}
| prev_title =
| prev_year =
| next_title =
| next_year =
| misc = {{Extra chronology
| artist = [[Chris Martin]]
| type = studio
| prev_title = [[Welcome to the Carnival]]
| prev_year = 2002
| title = The Preacher's Man
| year = 2003
| next_title = [[Welcome to London: Creole 101]]
| next_year = 2004
}}
{{Singles
| name = The Preacher's Man
| type = studio
| single1 = [[I Wanna Be Bad (song)|I Wanna Be Bad]]
| single1date = 30 September 2003
| single2 = Shape
| single2date = 17 November 2003
| single3 = Rise & Fall
| single3date = 18 March 2004
}}
}}
'''''The Preacher's Man''''' is a collaborative album by English singer [[Chris Martin]] and Irish singer [[Bono]], released on 4 November 2003. The album, which was co-produced by Chris Martin, [[Rik Simpson]], Bono and long-time collaborator [[The Edge]], combines elements of [[Synth-rap]], [[synth-pop]] and [[electropop]]. It uses a number of samples, including the [[A&M Records|A&M]]-inspired "Shape", which samples "[[Shape of My Heart (Sting song)|Shape of My Heart]]". The album contains guest appearances by [[Steven Tyler]], [[Annie Lennox]], [[Mis-Teeq]] and [[Kid Rock]], as well as a vocals feature by [[George Michael]] on the song "City Ain't Big Enough".
== Track listing ==
==Charts==
== References ==
{{reflist}}
{{Chris Martin}}
{{Bono}}
{{Authority control}}
{{DEFAULTSORT:Preacher's Man, The}}
[[Category:2003 collaborative albums]]
[[Category:Albums produced by Chris Martin]]
[[Category:Albums produced by Rik Simpson]]
[[Category:Chris Martin albums]]
[[Category:Bono albums]]
[[Category:Island Records albums]]
[[Category:Albums produced by Bono]]
[[Category:Albums produced by the Edge]]
dxjrr0ui9wnuuc8vxx3y9297k8bojjf
User:Namoroka/sandbox/5
2
177494
754553
2026-08-01T07:14:18Z
Namoroka
19627
Created page with "== [[MediaWiki:Gadget-hanja-overrides.json]] == 1. 다른 파일에 정의되어 있으나 음이 잘못된 경우. [https://db.history.go.kr/unicode/ 유니코드한자 검색시스템]의 음을 따름. 다국어 기본 평면(BMP)의 확장 A까지만 포함. <pre> "㓢": "락", // "격". 자를 락 "㓪": "랑", // "라". 밝을 랑 "㔀": "량", // "략". 취할 량 "㔹": "륵", // "력". 나머지 륵 "㖏": "녈", // "훼". 노할 녈 "㘓": "란", // "간..."
754553
wikitext
text/x-wiki
== [[MediaWiki:Gadget-hanja-overrides.json]] ==
1. 다른 파일에 정의되어 있으나 음이 잘못된 경우. [https://db.history.go.kr/unicode/ 유니코드한자 검색시스템]의 음을 따름. 다국어 기본 평면(BMP)의 확장 A까지만 포함.
<pre>
"㓢": "락", // "격". 자를 락
"㓪": "랑", // "라". 밝을 랑
"㔀": "량", // "략". 취할 량
"㔹": "륵", // "력". 나머지 륵
"㖏": "녈", // "훼". 노할 녈
"㘓": "란", // "간". 말 못 알아듣을 란
"㘕": "람", // "함". 탐할 람
"㘝": "닙", // "수". 사사로이 가질 닙
"㚼": "뉴", // "호", 성씨 호. 인명용 妞(아가씨 뉴)의 속자
"妞": "뉴", // "호", 아가씨 뉴. 인명용
"㡂": "례", // "렬", 비단 자투리 례
"㦨": "란", // "나", 게으를 란
"㧕": "류", // "억", 어루만질 류
"㩕": "령", // "습", 걸 령
"㪝": "련", // "간", 칠 련
"㬗": "년", // "햔", 햇살 년
"㰀": "려", // "리", 나무 이름 려
"㲎": "루", // "수". 털로 짠 베 루
"㽟": "렬", // "랄", 밭 갈 렬
"㾗": "량", // "낭", 눈 병 량
"㿖": "로", // "려", 종기 로
"㿛": "려", // "력", 종기 려
"䀶": "량", // "낭", 눈 병 량
"䁁": "량", // "낭", 눈 병 량
"䄂": "류", // "수", 주술 부릴 류
"䇣": "녑", // "섭", 대나무 녑
"䈷": "락", // "격", 울타리 락
"䉫": "려", // "리", 대나무 이름 려
"䊍": "리", // "려", 죽 리
"䋱": "래", // "리", 뻣뻣한 털 래
"䔆": "리", // "매", 콩 이름 리
"䔭": "녕", // "저", 들깨 녕
"䚖": "령", // "성", 산신 령
"䜌": "련", // "란", 어지러울 련, 인명용
"䜎": "로", // "호", 소리 로
"䤣": "렬", // "하", 여섯냥쭝 렬
"䥢": "륭", // "동". 북소리 륭/롱/첩
"䦊": "뇨", // "로", 가죽신 뇨
"䫫": "루", // "류", 새길 루
"䬟": "류", // "료", 바람 소리 류
"䮫": "루", // "려", 큰 노새 루. 거루(駏䮫)
"䰱": "령", // "룡", 귀신 이름 령
"䱖": "류", // "복", 물고기 이름 류
"傫": "뢰", // "나". 게으를 뢰/래, 지칠 루. 뇌연(傫然), 구뢰(俱傫)
"僇": "륙", // "료", 욕보일 륙, 책륙(矺僇)
"儽": "래", // "나", 게으를 래
"刕": "리", // "주", 벨 리. 이씨(刕氏), 목리(木刕)
"劆": "렴", // "겸", 살짝 찌를 렴
"哰": "로", // "호", 말 알아듣지 못할 로
"唠": "로", // "호", 지껄일 로
"喦": "녑", // "암", 말 많을 녑
"嘮": "로", // "호", 지껄일 로
"囒": "란", // "간", 말 모알아들을 란
"囡": "닙", // "수", 사사로이 가질 닙
"壨": "뢰", // "누", 우레 뢰
"夨": "녈", // "측", 머리 기울 녈
"妳": "니", // "내". 嬭의 속자
"嫐": "뇨", // "남", 희롱할 뇨
"孄": "란", // "나", 게으를 란
"孋": "려", // "여", 짝 려. 인명용
"孏": "란", // "나", 게으를 란
"寽": "률", // "장", 취할 률
"屮": "철", // "산", 싹 날 철
"崚": "릉", // "준", 험준 릉
"恧": "뉵", // "이", 부끄러울 뉵
"惊": "량", // "경". 悢의 이체자, 驚의 간체자
"愵": "닉", // "녁", 근심할 닉
"懢": "람", // "함", 즐길 람
"扐": "륵", // "재", 손가락 사이 륵
"拎": "령", // "습", 걸 령
"捋": "랄", // "장", 집어 딸 랄
"掕": "릉", // "륙", 그칠 릉
"摝": "록", // "오", 흔들 록. 인명용
"攦": "려", // "렬", 꺾을 려. 여공수지지(攦工倕之指)
"朒": "뉵", // "눌", 초하루 달 뉵. 조뉵(朓朒)
"栵": "렬", // "례". 산밤나무 렬/례. 둘 다 인명용. 有柹有栵(유시유렬), 권열(權栵, 인명), 김열(金栵, 인명), 예(栵, 석목의 종류), 그栵례며(시경언해 제5책 161쪽)
"梩": "리", // "기". 삼태기 리. 나리(虆梩), 유리(虆梩)
"樏": "류", // "누". 찬합 류. 산류등(山樏燈)
"橣": "녕", // "저". 영몽 녕
"檁": "름", // "표". 도리 름
"檷": "니", // "새". 실패 니
"檸": "녕", // "저". 레몬 녕. 영몽(檸檬)
"櫖": "려", // "저". 풀 이름 려
"欙": "류", // "누". 찬합 류
"欚": "례", // "려". 큰 배 례
"沴": "려", // "니". 해칠 려, 흐트러질 전. 둘 다 인명용. 여기(沴氣), 백려(百沴)
"沵": "려", // "시". 沴의 동자. 濔의 간체자
"泺": "락", // "박". 강 이름 락
"浖": "렬", // "랄". 경계 렬
"涊": "년", // "인". 때 묻을 년. 연인치협(涊人齒頰), 전인(淟涊▽)
"煷": "량", // "화". 불꽃 량
"犛": "리", // "모". 검은 소 리/모
"狫": "로", // "모". 오랑캐 이름 로
"猡": "라", // "과". 오랑캐 이름 라
"瓈": "려", // "리". 유리 려
"甪": "록", // "각". 사람 이륵 록
"畾": "뢰", // "루". 밭 갈피 뢰/루
"疒": "녁", // "정". 병들어 기댈 녁
"痆": "닐", // "저". 가려울 닐, 헌데 쑤실 날
"砅": "례", // "려". 징검다리 례/려
"硌": "락", // "력". 큰 바위 락/력. 인명용 락
"硵": "로", // "뇨". 노사
"碐": "릉", // "준". 돌 울퉁불퉁한 모양 릉
"磖": "랍", // "립". 깨지는 소리 랍. 대랍자(大磖子), 이랍자(二磖子), 삼랍자(三磖子), 부걸라재[鵓鴿磖子], 옹성랍자(甕聲磖子)
"磟": "륙", // "녹". 고무래 륙/록. 육독(磟碡)
"磠": "로", // "뇨". 노사
"禰": "녜", // "니". 인명용일때 니
"稐": "륜", // "곤". 볏단 륜
"箖": "림", // "람". 대나무 림
"篞": "녈", // "단". 중간 피리 녈
"纍": "루", // "류". 누누이 등 "루"가 압도적. 인명용
"耣": "륜", // "곤". 볏단 륜
"胒": "니", // "고". 살찔 니
"脼": "량", // "낭". 포 량
"膔": "록", // "표". 배 끓을 록
"臈": "랍", // "석". 납향 랍
"菍": "녈", // "총". 풀 이름 녈, 나무 이름 임
"蔂": "류", // "누". 삼태기 류/라, 덩굴 뢰
"蔍": "록", // "조". 원추리 록, 거칠 추
"蕯": "륭", // "살". 사람 이름 륭. 융마(蕯摩), 살바신야제바(蕯婆愼若提婆), 살주 녹아도(蕯州 鹿兒島)
"薴": "녕", // "저". 간체자 苧(모시 저)의 본자
"藟": "류", // "뢰". 덩굴풀 류
"藾": "뢰", // "자". 맑은대쑥 뢰/루
"蘞": "렴", // "겸". 덩굴 렴
"蘲": "류", // "누". 삼태기 류
"蘽": "류", // "누". 덩굴 류
"誏": "랑", // "양". 농담할 랑. 인명용
"譋": "란", // "간". 헐뜯을 란
"讕": "란", // "간". 헐뜯을 란
"谰": "란", // "간". 헐뜯을 란
"豅": "롱", // "식". 크고 긴 골 롱
"迡": "니", // "지". 가까울 니
"迾": "렬", // "례". 막을 렬/례
"逯": "록", // "쳬". 갈 록
"邋": "랍", // "렵". 가는 모양 랍, 펄럭이는 모양 렵
"鈮": "니", // "새". 실패 니/녜
"鉨": "녜", // "새". 실패 녜, 옥새 새
"鋝": "렬", // "률". 여섯냥쭝 렬
"鋢": "렬", // "률". 여섯냥쭝 렬
"鏐": "류", // "등". 금 류. 인명용
"鏧": "롱", // "동". 북소리 롱
"铌": "니", // "새". 실패 니/녜
"闹": "뇨", // "료". 지컬일, 시끄러울 뇨(요)
"靇": "롱", // "륭". 우렛소리 롱
"頪": "뢰", // "류". 엇비슷할 뢰
"飀": "류", // "로". 바람 소리 류
"飅": "류", // "료". 바람 소리 류
"飗": "류", // "료". 바람 소리 류
"飹": "류", // "퓨". 미끼 류
"騹": "려", // "기". 가라말 려, 준마 기. 여산릉(騹山陵). 발여봉/발기봉(盋騹峰), 여기(騹驥)
"魿": "령", // "린". 물고기 이름 령
"鯻": "랄", // "동". 전어 랄
"鰡": "류", // "복". 물고기 이름 류
"鸓": "루", // "유". 날다람쥐 루
"龣": "록", // "각". 오음의 하나 록
</pre>
2. [https://db.history.go.kr/unicode/ 유니코드한자 검색시스템]에 존재하나 그 음을 따르지 않고 [https://hanja.dict.naver.com/#/main 네이버 한자사전]([http://www.e-hanja.kr/ e-hanja 사전]), [http://www.zonmal.com/ 존 한자사전] 등 다른 문헌을 개별적으로 참고한 경우.
<pre>
"㓯": "려",
"㕝": "사",
"㖝": "끗",
"㘘": "비",
"㝗": "량",
"㤡": "례",
"㥕": "련",
"㦒": "리",
"㧠": "미",
"㧰": "력",
"㨆": "름",
"㭐": "말",
"㭩": "렬",
"㯩": "체",
"㯿": "렵",
"㰈": "련",
"㸎": "섭",
"㽝": "례",
"㾢": "라",
"㾷": "서",
"䂇": "뉴",
"䊪": "려",
"䔴": "측",
"䗍": "려",
"䘈": "려",
"䘦": "니",
"䝀": "류",
"䤙": "력",
"䦾": "우",
"䮑": "뢰",
"䰕": "려",
"䱨": "랄",
"䴎": "루",
"䵩": "리",
"勠": "륙",
"厽": "루",
"嫽": "료",
"孿": "산",
"峢": "리",
"嵶": "약",
"徚": "동",
"惗": "녑",
"捩": "렬",
"擽": "력",
"敼": "희",
"椚": "문",
"榒": "녘",
"湼": "녈",
"潦": "료",
"澰": "렴",
"灕": "리",
"犁": "리",
"犂": "리",
"獠": "료",
"玪": "감",
"皪": "력",
"矓": "롱",
"磥": "루",
"籕": "추",
"繺": "쇄",
"翏": "료",
"莹": "영",
"菻": "림",
"蓼": "료",
"蔾": "리",
"蕌": "류",
"虆": "류",
"蚮": "대",
"蛠": "려",
"蠫": "리",
"袮": "치",
"踉": "량",
"踋": "각",
"輋": "요",
"轑": "료",
"酈": "력",
"醂": "림",
"鏫": "려",
"鑗": "려",
"隬": "니",
"霗": "령",
"鱳": "력",
"鱺": "리",
"鲡": "리",
</pre>
3. 수동으로 추가한 값.
<pre>
"𪓟": "구",
"𡈽": "토",
"〇": "영"
</pre>
p8f8mqri2d9u68ymdq4mkljfk6x1l9p
R.
0
177495
754555
2026-08-01T08:23:12Z
FinnElGhifari-78e
74755
FinnElGhifari-78e moved page [[R.]] to [[Template:R]] over redirect
754555
wikitext
text/x-wiki
#REDIRECT [[Template:R]]
{{Redirect category shell|
{{R from move}}
}}
8tk6wysqvx67etfz8als50a2ylnsth6
Wikipedia:Sandbox/MoveIt e2e 2026-08-01T08-33-07-531Z
4
177496
754557
2026-08-01T08:33:09Z
~2026-42482-04
75108
MoveIt end-to-end test (2026-08-01T08-33-07-531Z), safe to delete
754557
wikitext
text/x-wiki
== Requested move: MoveIt e2e 2026-08-01T08-33-07-531Z ==
MoveIt end-to-end test, safe to delete (2026-08-01T08-33-07-531Z)
<nowiki>{{subst:RMassist | 1 = Example page | 2 = Example page (renamed) | reason = MoveIt end-to-end test, safe to delete}}</nowiki>
== Tail sentinel 2026-08-01T08-33-07-531Z ==
Sentinel: a section-targeted append must land above this heading.
rr3cukyp4oxb4vvkb3axx7gmsciif3y
754558
754557
2026-08-01T08:33:11Z
~2026-42482-04
75108
MoveIt end-to-end section append (2026-08-01T08-33-07-531Z), safe to delete
754558
wikitext
text/x-wiki
== Requested move: MoveIt e2e 2026-08-01T08-33-07-531Z ==
MoveIt end-to-end test, safe to delete (2026-08-01T08-33-07-531Z)
<nowiki>{{subst:RMassist | 1 = Example page | 2 = Example page (renamed) | reason = MoveIt end-to-end test, safe to delete}}</nowiki>
MoveIt section-targeted append, safe to delete (2026-08-01T08-33-07-531Z)
== Tail sentinel 2026-08-01T08-33-07-531Z ==
Sentinel: a section-targeted append must land above this heading.
pjkoxgfgawd9iw60brshn23qpilp98k
Special talk:BookSources
0
177497
754559
2026-08-01T09:16:15Z
FinnElGhifari-78e
74755
/* */
754559
wikitext
text/x-wiki
This is a talk page. Put {{tl|Comment}} on the special talk.
84iaew89hbhadnej9c7z5kc2n7vpupi