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('&nbsp;', $('<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('&nbsp;', $('<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('&nbsp;', $('<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&#10;Page 2&#10;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}}&nbsp;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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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]]&nbsp;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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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]]&nbsp;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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</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/&#126;2026-42487-87|&#126;2026-42487-87]] ([[User talk:&#126;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/&#126;2026-42487-87|&#126;2026-42487-87]] ([[User talk:&#126;2026-42487-87|talk]]) 20:16, 31 July 2026 (UTC) :ai [[Special:Contributions/&#126;2026-42487-87|&#126;2026-42487-87]] ([[User talk:&#126;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/&#126;2026-42487-87|&#126;2026-42487-87]] ([[User talk:&#126;2026-42487-87|talk]]) 20:16, 31 July 2020 (UTC) :ai [[Special:Contributions/&#126;2026-42487-87|&#126;2026-42487-87]] ([[User talk:&#126;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/&#126;2026-42636-52|&#126;2026-42636-52]] ([[User talk:&#126;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