Wikipedia testwiki https://test.wikipedia.org/wiki/Main_Page MediaWiki 1.47.0-wmf.14 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 Wikipedia:Requests/Permissions 4 32559 754888 754797 2026-08-04T12:05:00Z Nuvola Gatti 75152 added my request 754888 wikitext text/x-wiki <noinclude>{{Shortcut|WP:R/P|WP:RfP|WP:RfA|WP:PERM|WP:RFR|WP:RFPERM}}</noinclude> {{Wikipedia:Requests/Top}} == Requests for user rights == * Subpages: [[Wikipedia:Requests/Permissions/All|All (current and archived)]] * Request: <inputbox> type=create prefix=Wikipedia:Requests/Permissions/ preload=Template:PA2 buttonlabel=Requests for user rights placeholder=Enter your username </inputbox> After creating the subpage, come back here and transclude the page below (<code><nowiki>{{Wikipedia:Requests/Permissions/Example}}</nowiki></code>). <!-- Please transclude your requests below this line, LATEST AT THE TOP, in the form {{Wikipedia:Requests/Permissions/USERNAME}} --> {{Wikipedia:Requests/Permissions/Nuvola Gatti}} {{Wikipedia:Requests/Permissions/Namoroka 2}} <!-- NEW ENTRIES AT THE TOP, NOT HERE --> lmf08arfpss5o1ii3ilv5cm6ufnht87 Wikipedia:Test 4 71460 754918 754855 2026-08-04T22:50:32Z ~2026-43023-94 75158 /* Test */ ZRR 804 754918 wikitext text/x-wiki = Test = 804 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 (?) *8:1 (8:2) ''8:3'' *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'' po3a0pif6ehajbizqooxt1u8qli5svj 754919 754918 2026-08-04T23:00:39Z ~2026-43023-94 75158 /* Test */ Start 754919 wikitext text/x-wiki = Test = 804 - Mobile 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 (?) *8:1 (8:2) ''8:3'' *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'' p7riuk5rh8ab5rcevl4617oxudyerik 754920 754919 2026-08-04T23:01:17Z ~2026-43023-94 75158 754920 wikitext text/x-wiki = Test = 804 - Old Mobile Phones 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 (?) *8:1 (8:2) ''8:3'' *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'' t4bc1e8guvux73vub1jr3md0vm1cs9a 754921 754920 2026-08-04T23:01:50Z ~2026-43023-94 75158 754921 wikitext text/x-wiki = Test = 804 - Old Mobile Phones 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 (?) *8:1 (?) *8:2 (8:3) ''8:4'' *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'' ol76j81st3lhhkmacwgtd6i50peexbe 754922 754921 2026-08-04T23:02:40Z ~2026-43023-94 75158 754922 wikitext text/x-wiki = Test = 804 - Old Mobile Phones 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 (?) *8:1 (?) *8:2 (8:3) ''8:4'' *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. *202 6711, Current, 202 6711. ($#!+). *202 6712. (ALDI Stores, Australia, Worldwide). ''2026713'' k7dlx1lr4z3pmtoex1m5bqr20k3ded8 754923 754922 2026-08-04T23:03:28Z ~2026-43023-94 75158 /* Test */ 13 start 754923 wikitext text/x-wiki = Test = 804 - Old Mobile Phones 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 (?) *8:1 (?) *8:2 (8:3) ''8:4'' *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. *202 6711, Shoes like Novo, Vacuum or Carlton Draught Current, 202 6711. ($#!+). *202 6712. (ALDI Stores, Australia, Worldwide). ''2026713'' 2q62dpnz5qu8072x5ldmphs8o5qtcci 754924 754923 2026-08-04T23:04:15Z ~2026-43023-94 75158 /* Test */ 13 done 754924 wikitext text/x-wiki = Test = 804 - Old Mobile Phones 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 (?) *8:1 (?) *8:2 (8:3) ''8:4'' *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. *202 6711, Shoes like Novo, Vacuum or Carlton Draught Current, 202 6712. ($#!+). *202 6713. (Funeral Notices). ''2026714'' 37rmxcj3swb57ujq7ilbt9wl99bpgrx 754925 754924 2026-08-04T23:04:58Z ~2026-43023-94 75158 /* Test */ 14 754925 wikitext text/x-wiki = Test = 804 - Old Mobile Phones 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 (?) *8:1 (?) *8:2 (8:3) ''8:4'' *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. *202 6711, Shoes like Novo, Vacuum or Carlton Draught. *202 6712, Aldi Stuff like Mints, Airfryer or Towel Current, 202 6712. ($#!+). *202 6713. (Funeral Notices). ''2026714'' 75l96mo46o0iewe8wgxmkpguzz5e2b2 754926 754925 2026-08-04T23:05:39Z ~2026-43023-94 75158 /* Test */ 14 754926 wikitext text/x-wiki = Test = 804 - Old Mobile Phones 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 (?) *8:1 (?) *8:2 (8:3) ''8:4'' *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. *202 6711, Shoes like Novo, Vacuum or Carlton Draught. *202 6712, Aldi Stuff like Mints, Airfryer or Towel Current, 202 6713. ($#!+). *202 6714. (Super Freak Songs, Replica). ''2026715'' 9kis1obqhc8kel42f1cx60pi7vyfk45 754927 754926 2026-08-04T23:06:35Z ~2026-43023-94 75158 /* Test */ 15 754927 wikitext text/x-wiki = Test = 804 - Old Mobile Phones 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 (?) *8:1 (?) *8:2 (8:3) ''8:4'' *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. *202 6711, Shoes like Novo, Vacuum or Carlton Draught. *202 6712, Aldi Stuff like Mints, Airfryer or Towel. *202 6713, Food Shopping like Cola Bottles, Cheese, Milk or Paddle Pops. Current, 202 6714. ($#!+). *202 6715. (Super Freak Songs,). ''2026716'' 7nm24ksh4yp0hiwg9vm0h7t94zh7we8 754928 754927 2026-08-04T23:07:07Z ~2026-43023-94 75158 /* Test */ 15 754928 wikitext text/x-wiki = Test = 804 - Old Mobile Phones 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 (?) *8:1 (?) *8:2 (8:3) ''8:4'' *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. *202 6711, Shoes like Novo, Vacuum or Carlton Draught. *202 6712, Aldi Stuff like Mints, Airfryer or Towel. *202 6713, Food Shopping like Cola Bottles, Cheese, Milk or Paddle Pops. Current, 202 6714. ($#!+). *202 6715. (Tattslotto Numbers). ''2026716'' jd5aj4vxuvsxm6rn67mln8b7fyyzbor 754929 754928 2026-08-04T23:10:24Z ~2026-43023-94 75158 /* Test */ 16 start 754929 wikitext text/x-wiki = Test = 804 - Old Mobile Phones 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 (?) *8:1 (?) *8:2 (8:3) ''8:4'' *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. *202 6711, Shoes like Novo, Vacuum or Carlton Draught. *202 6712, Aldi Stuff like Mints, Airfryer or Towel. *202 6713, Food Shopping like Cola Bottles, Cheese, Milk or Paddle Pops. *202 6714, Baskets, Mask Fresheners or Coat. Current, 202 6714. ($#!+). *202 6715. (Tattslotto Numbers). ''2026716'' m182rvpl9jalt86baj8pbbj4nch3by3 754930 754929 2026-08-04T23:11:11Z ~2026-43023-94 75158 /* Test */ Q6 754930 wikitext text/x-wiki = Test = 804 - Old Mobile Phones 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 (?) *8:1 (?) *8:2 (8:3) ''8:4'' *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. *202 6711, Shoes like Novo, Vacuum or Carlton Draught. *202 6712, Aldi Stuff like Mints, Airfryer or Towel. *202 6713, Food Shopping like Cola Bottles, Cheese, Milk or Paddle Pops. *202 6714, Baskets, Mask Fresheners or Coat. Current, 202 6715. ($#!+). *202 6716. (Street Machine, Magazines or For Sale). ''2026717'' enrobecyiluc2mfb75nfhciqgw33fl6 754931 754930 2026-08-04T23:11:43Z ~2026-43023-94 75158 /* Test */ 17 754931 wikitext text/x-wiki = Test = 804 - Old Mobile Phones 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 (?) *8:1 (?) *8:2 (8:3) ''8:4'' *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. *202 6711, Shoes like Novo, Vacuum or Carlton Draught. *202 6712, Aldi Stuff like Mints, Airfryer or Towel. *202 6713, Food Shopping like Cola Bottles, Cheese, Milk or Paddle Pops. *202 6714, Baskets, Mask Fresheners or Coat. *202 6715, Towels, Cloths or Lasagna?. Current, 202 6715. ($#!+). *202 6716. (Street Machine, Magazines or For Sale). ''2026717'' hkn7s5ef7u0j67vomd4k0yt7d1dep2p 754932 754931 2026-08-04T23:12:19Z ~2026-43023-94 75158 /* Test */ 17 done, Stan Zawadzki! 754932 wikitext text/x-wiki = Test = 804 - Old Mobile Phones 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 (?) *8:1 (?) *8:2 (8:3) ''8:4'' *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. *202 6711, Shoes like Novo, Vacuum or Carlton Draught. *202 6712, Aldi Stuff like Mints, Airfryer or Towel. *202 6713, Food Shopping like Cola Bottles, Cheese, Milk or Paddle Pops. *202 6714, Baskets, Mask Fresheners or Coat. *202 6715, Towels, Cloths or Lasagna?. Current, 202 6716. ($#!+). *202 6717. (Stan Channel or Streaming). ''2026718'' sic3f3zemskfwuojkd43ybw595gz42j 754933 754932 2026-08-04T23:12:44Z ~2026-43023-94 75158 754933 wikitext text/x-wiki = Test = 804 - Old Mobile Phones 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:17, 162 days, (7:18+ to fill out). *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 (?) *8:1 (?) *8:2 (8:3) ''8:4'' *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. *202 6711, Shoes like Novo, Vacuum or Carlton Draught. *202 6712, Aldi Stuff like Mints, Airfryer or Towel. *202 6713, Food Shopping like Cola Bottles, Cheese, Milk or Paddle Pops. *202 6714, Baskets, Mask Fresheners or Coat. *202 6715, Towels, Cloths or Lasagna?. Current, 202 6716. ($#!+). *202 6717. (Stan Channel or Streaming). ''2026718'' p1po0jko8jnb2xxaoyns6qm1izosl94 754934 754933 2026-08-04T23:16:41Z ~2026-43023-94 75158 754934 wikitext text/x-wiki = Test = 804 - Old Mobile Phones 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:17, 162 days, (7:18+ to fill out). *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 (?) *8:1 (?) *8:2 (8:3) ''8:4'' *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. *202 6711, Shoes like Novo, Vacuum or Carlton Draught. *202 6712, Aldi Stuff like Mints, Airfryer or Towel. *202 6713, Food Shopping like Cola Bottles, Cheese, Milk or Paddle Pops. *202 6714, Baskets, Mask Fresheners or Coat. *202 6715, Towels, Cloths or Lasagna?. Current, 202 6716. ($#!+). *202 6717. (Stan Channel or Streaming). ''2026718'' bfyu1kyn1v42ls0o8c20qrbfnt7eo8m 754935 754934 2026-08-04T23:20:50Z ~2026-43023-94 75158 754935 wikitext text/x-wiki = Test = 804 - Old Mobile Phones 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:17, 162 days, (7:18+ to fill out). *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 (?) *8:1 (?) *8:2 (8:3) ''8:4'' *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. *202 6711, Shoes like Novo, Vacuum or Carlton Draught. *202 6712, Aldi Stuff like Mints, Airfryer or Towel. *202 6713, Food Shopping like Cola Bottles, Cheese, Milk or Paddle Pops. *202 6714, Baskets, Mask Fresheners or Coat. *202 6715, Towels, Cloths or Lasagna?. Current, 202 6716. ($#!+). *202 6717. (Stan Channel or Streaming). ''2026718'' hns7qdm5ivai7a0ur8u52d3z71qxjp9 IOS 0 97325 754898 754777 2026-08-04T14:01:24Z Ealbizzati-test 75047 /* */ 754898 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 Test2 Testing Testing 212 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] e218epsnjwomnohpfd8mf7mh5122n1y 754900 754898 2026-08-04T16:28:01Z Ealbizzati-test 75047 /* */ 754900 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 1 [[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 Test2 Testing Testing 212 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] ci3fb15je0wz8540ray9pfl7fqywt37 754901 754900 2026-08-04T16:30:08Z Ealbizzati-test 75047 /* */ 754901 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 2 [[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 Test2 Testing Testing 212 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] lbrhz8h42u4y5g9zcbjg05s644kxkbs 754904 754901 2026-08-04T17:30:24Z Ealbizzati-test 75047 /* */ 754904 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 2 [[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 Test2 Testing Testing 212 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 0 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] k0z2etomf3wld3bttrry2ohs2brh3xp 754917 754904 2026-08-04T21:24:37Z Ealbizzati-test 75047 /* */ 754917 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 22 [[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 Test2 Testing Testing 212 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 0 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] 5lrgjfwsp5ljwxbowzhc26g7raixjh6 Delete 0 102320 754906 380173 2026-08-04T19:11:29Z Enbi 72574 Requesting deletion ([[:m:Special:MyLanguage/User:TenWhile6/XReport|XReport]] v3.1c) 754906 wikitext text/x-wiki <noinclude>{{delete|1=Vandalism. Test CSD <small>[[:m:Special:MyLanguage/User:TenWhile6/XReport|XReport]]</small>}}</noinclude> '''Delete''' if command key [[category:command keys]] [[file:wiki.png]] [[file:altermago.png]] 77p3r6xail196jb8ecw3ewz43tefwgu User:Nardog/sandbox.js 2 115814 754909 747596 2026-08-04T20:11:07Z Nardog 40946 754909 javascript text/javascript /* globals ve */ // window.dn?.disable?.(); window.diffnowExtraSelector = '.catchangesviewer-table td:nth-child(2) > .mw-changeslist-links > span:first-child > a, .listtools-last > a, .mw-special-AbuseLog form li > a[href^="/wiki/Special:AbuseLog/"], .unseendiff'; (mw.config.get('wgNamespaceNumber') || mw.config.get('wgAction') !== 'view') && mw.loader.using(['mediawiki.util', 'user.options'], function diffNow() { let isHist = mw.config.get('wgAction') === 'history'; let selector = `:where(.mw-changeslist-diff, .mw-changeslist-diff-cur, .mw-changeslist-groupdiff, .mw-fr-reviewlink > a, .mw-fr-hist-difflink a, .mw-history-histlinks a, .mw-logevent-loglines a[href*="&diff="], .mw-fr-pending-changes-table .cdx-docs-link, .mw-special-AbuseLog #mw-content-text > form > ul > li > a:last-of-type[href*="&diff="], .mw-deletedcontribs-tools > a:first-child, .mw-undelete-revlist > li > a:first-of-type[href*="&diff="], #merge li > a:first-of-type[href*="&diff="], .mw-history-compareselectedversions-button, .consecudiff > a${window.diffnowExtraSelector ? ', ' + window.diffnowExtraSelector : ''}):not(.external${window.diffnowNegativeSelector ? ', ' + window.diffnowNegativeSelector : ''})`; let switchSelector = '.diffnow-differences-prevlink, .diffnow-differences-nextlink, .diffnow-switch'; let diffs = [], count = 0, expanded = new WeakSet(); window.dn = diffs; let sanitize = href => { let url = new URL(href, location.href); let newParams = new URLSearchParams(), hasId; ['diff', 'direction', 'oldid', 'target', 'timestamp'].forEach(k => { if (url.searchParams.has(k)) { let v = url.searchParams.get(k); newParams.set(k, v); hasId = hasId || v > 0; } }); if (!hasId && url.searchParams.has('title')) { return `${url.search.match(/[&?](title=[^&]*)/)[1]}&${newParams}`; } return String(newParams); }; let getDiff = comp => { if (typeof comp === 'string') { let sanitized = sanitize(comp); return diffs.find(diff => ( diff.queries.has(comp) || diff.queries.has(sanitized) )); } return diffs.find(diff => diff.$diff.is(comp)); }; let containers = []; window.dn._c = containers; class Diff { constructor(href, $link) { this.aborter = new AbortController(); this.queries = new Set(); this.setLink(href, $link); diffs.push(this); } setLink(href, $link) { if (this.href) { if ($link.is(this.$link)) { if (this.aborter) { this.aborter.abort(); } else if (this.isVisible()) { this.close(); } else { this.$anchor = this.getAnchor(); this.append(); } return; } if ($link.is(this.$outerLink) && this.isVisible()) { this.close(); return; } if (this.getAnchor($link).is(this.$anchor)) { this.markLink(false); } else { this.close(); } } this.href = href; this.queries.add(href); let sanitized = sanitize(href); if (sanitized) { this.queries.add(sanitized); } this.$link = $link; this.isSwitch = $link.is(switchSelector); if (!this.isSwitch) { this.$outerLink = $link; } this.$anchor = this.getAnchor(); if (this.aborter) { this.markLink(); } else { this.append(); } } append(response) { if (response) { delete this.aborter; this.findDiff(response); this.setQueries(); this.polishDiff(); } let $container = this.getContainer(true); if (!$container[0].isConnected) { if (this.$anchor.is('tr')) { let cols = this.$anchor.children().get() .reduce((acc, cell) => acc + cell.colSpan, 0); $('<tr>').addClass('diffnow-row').append( $('<td>').attr('colspan', cols).append($container) ).insertAfter(this.$anchor); } else if (this.$anchor.is('div')) { this.$anchor.after($container); } else { this.$anchor.append($container); } } this.attached = true; filterContexts(this.$diff); window.addEventListener('resize', onResize); if (!this.$link.hasClass('diffnow-link-loaded')) { mw.requestIdleCallback(() => { this.markLinks(); this.markSeen(); }); } if ($container[0].getBoundingClientRect().top < 0) { $container[0].scrollIntoView(); } this.markLink(true); if (response) { mw.hook('wikipage.content').fire($container); } } findDiff(response) { if (typeof response !== 'string') throw ''; let $diff = $($.parseHTML(response)) .filter('.diff[data-mw-interface]'); if (!$diff.length) { $diff = $diff.end().find('.diff[data-mw-interface]'); if (!$diff.length) throw ''; } this.$diff = $($diff[0]); } setQueries() { let newPerma = this.$diff[0].querySelector( '#mw-diff-ntitle1 > strong > a, #differences-nextlink' ); if (newPerma) { this.newId = parseInt(mw.util.getParamValue('oldid', newPerma.search)); this.newTitle = newPerma.title; } let oldPerma = this.$diff[0].querySelector( '#mw-diff-otitle1 > strong > a, #differences-prevlink' ); if (oldPerma) { this.oldId = parseInt(mw.util.getParamValue('oldid', oldPerma.search)); this.oldTitle = oldPerma.title; } let isSamePage = !oldPerma || this.newTitle === this.oldTitle; this.isSingle = isSamePage && !this.$diff[0].querySelector('.diff-multi'); if (this.newId) { if (this.newId === this.oldId) { throw 'nonfatal'; } if (this.oldId) { this.queries.add(`diff=${this.newId}&oldid=${this.oldId}`); } this.isLast = !this.$diff[0].querySelector('#differences-nextlink'); if (this.isSingle) { this.queries.add(`diff=prev&oldid=${this.newId}`); if (this.isLast && this.oldId) { this.queries.add(`diff=0&oldid=${this.oldId}`); this.queries.add(`diff=cur&oldid=${this.oldId}`); } } } if (this.oldId && this.isSingle) { this.queries.add(`diff=next&oldid=${this.oldId}`); } this.queries.forEach(q => { let other = getDiff(q); if (other && other !== this) { other.setLink(this.href, this.$link); throw 'nonfatal'; } }); if (this.oldId) { diffs.forEach(diff => { if (diff.isLast && diff.newId === this.oldId) { diff.markNotLast(this); } }); } } async polishDiff() { mw.hook('wikipage.diff').fire(this.$diff); let prevLink = this.$diff[0].querySelector('#differences-prevlink'); let nextLink = this.$diff[0].querySelector('#differences-nextlink'); $([prevLink, nextLink].filter(Boolean)).attr('href', (_, href) => ( href.replace('&diffonly=1', '').replace('&expand-url=1', '') )); [['previousdiff', prevLink], ['nextdiff', nextLink]].forEach(([key, link]) => { if (link && !mw.messages.exists(key)) { mw.messages.set(key, link.textContent); } }); if (!nextLink && this.isLast) { this.$diff.find('#mw-diff-ntitle4').empty().append( $('<a>').attr({ class: 'diffnow-checknext diffnow-switch', href: mw.util.getUrl(this.newTitle, { diff: 'next', oldid: this.newId }), title: this.newTitle }).text('Check for newer edit') ); } this.$diff.find('.mw-diff-movedpara-left, .mw-diff-movedpara-right') .attr('href', (_, href) => `#diffnow-${count}-${href.slice(1)}`); this.$diff.find('a[name^="movedpara"]') .attr('name', (_, name) => `diffnow-${count}-${name}`); count++; this.$diff.find('[id]').addClass(function () { return 'diffnow-' + this.id; }).removeAttr('id'); if (this.$diff[0].querySelector('.mw-thanks-thank-link')) { mw.loader.load('ext.thanks.corethank'); mw.config.set('thanks-confirmation-required', true); } if (!this.isSingle) { let keys = ['nextdiff', 'previousdiff'] .filter(s => !mw.messages.exists(s)); if (keys.length) { await mw.loader.using('mediawiki.api'); await new mw.Api().loadMessagesIfMissing(keys); } this.$diff.find('.diff-multi').append( $('<div>').append( $('<div>').append( $('<a>').attr({ class: 'diffnow-multinext diffnow-switch', href: mw.util.getUrl(this.oldTitle, { diff: 'next', oldid: this.oldId }), title: this.oldTitle }).text(mw.msg('nextdiff')) ), $('<div>').append( $('<a>').attr({ class: 'diffnow-multiprev diffnow-switch', href: mw.util.getUrl(this.newTitle, { diff: 'prev', oldid: this.newId }), title: this.newTitle }).text(mw.msg('previousdiff')) ) ) ); } } getAnchor($link) { let isSwitch; if ($link) { isSwitch = $link.is(switchSelector); } else { $link = this.$link; isSwitch = this.isSwitch; } if (isSwitch) { return getDiff($link.closest('.diff')).$anchor; } return $link.closest('li, tr, .mw-history-compareselectedversions'); } getContainer(create) { let $container = this.$anchor.is('tr') ? this.$anchor.next('.diffnow-row').find('> td > .diffnow') : this.$anchor.is('div') ? this.$anchor.next('.diffnow') : this.$anchor.children('.diffnow'); if (create) { if ($container.length) { this.attachDiff($container); } else { $container = this.createContainter(); } } return $container; } attachDiff($container) { let $oldDiff = $container.children('.diff'); if (!$oldDiff.is(this.$diff)) { if ($oldDiff.length) { getDiff($oldDiff).detachDiff(); } $container.children('.diffnow-tools-top').after(this.$diff); } $container.find('.diffnow-difflink').attr('href', this.href); } createContainter() { let $container = containers.pop(); if ($container) { this.attachDiff($container); return $container; } return $('<div>').addClass('diffnow').append( $('<div>').addClass('diffnow-tools diffnow-tools-top').append( $('<button>').attr({ class: 'diffnow-button diffnow-close oo-ui-icon-collapse', title: 'Hide this diff' }) ), this.$diff, $('<div>').addClass('diffnow-tools diffnow-tools-bottom').append( $('<button>').attr({ class: 'diffnow-button diffnow-scrollup oo-ui-icon-collapse', title: 'Scroll to top' }), $('<button>').attr({ class: 'diffnow-button diffnow-scrolldown oo-ui-icon-expand', title: 'Scroll to bottom' }), $('<button>').attr({ class: 'diffnow-button diffnow-close oo-ui-icon-close', title: 'Hide this diff' }), $('<a>').attr({ class: 'diffnow-button diffnow-difflink oo-ui-icon-newWindow oo-ui-image-progressive', href: this.href, target: '_blank', title: 'Open diff page' }) ) ) .on('click', '.diffnow-close', this.collapse) .on('click', '.diffnow-scrollup', this.scrollUp) .on('click', '.diffnow-scrolldown', this.scrollDown) .on( 'click keydown', '.diffnow-context-collapsed > td, .diffnow-context-expanded > .diff-marker', this.toggleContext ); } isVisible() { return !!this.$diff?.[0].offsetParent; } markLink(visible = this.isVisible()) { if (this.isSwitch) { this.getContainer().toggleClass('diffnow-switching', !!this.aborter); if (!this.$outerLink) return; } this.$outerLink .toggleClass('diffnow-link-loading', !!this.aborter) .toggleClass('diffnow-link-loaded', !this.aborter) .toggleClass('diffnow-link-open', !this.isSwitch && visible); } markLinks() { $(selector).filter((_, link) => { let href = link.getAttribute('href'); return this.queries.has(href) || this.queries.has(sanitize(href)); }).addClass('diffnow-link-loaded'); if (!isHist) return; $('.mw-history-compareselectedversions-button').toggleClass( 'diffnow-link-loaded', !!getDiff(getHistHref()) ); } markSeen() { if (this.$link.is('.mw-rcfilters-ui-highlights-enhanced-nested:nth-child(n+2) .mw-changeslist-diff')) { this.$anchor.nextAll().addBack() .removeClass('mw-changeslist-watchedunseen mw-changeslist-line-watched mw-enhanced-watched') .addClass('mw-changeslist-watchedseen mw-changeslist-line-not-watched'); return; } let $li = this.$anchor.closest('li, table'); let $unseen = $li.filter('.mw-changeslist-watchedunseen') .add($li.find('.mw-changeslist-watchedunseen')); if (!$unseen.length) return; $unseen.removeClass('mw-changeslist-watchedunseen') .addClass('mw-changeslist-watchedseen'); $li.filter('.mw-changeslist-line-watched') .add($li.find('.mw-changeslist-line-watched')) .removeClass('mw-changeslist-line-watched mw-enhanced-watched') .addClass('mw-changeslist-line-not-watched'); } async markNotLast(newDiff) { this.isLast = false; this.queries = new Set([...this.queries].filter(q => ( !/^title=|(?:^|[&?])(?:diff|oldid)=(?:0|cur)(?:&|$)/.test(q) ))); this.$diff.find( '.diffnow-mw-diff-ntitle1 a, .diffnow-mw-diff-ntitle1 .history-deleted' ).first().text( newDiff.$diff.find( '#mw-diff-otitle1 a, #mw-diff-otitle1 .history-deleted' ).first().text() ); this.$diff.find('.diff-ntitle .mw-diff-edit a') .attr('href', (_, href) => href + '&oldid=' + this.newId); if (!mw.messages.exists('nextdiff')) { await mw.loader.using('mediawiki.api'); await new mw.Api().loadMessagesIfMissing(['nextdiff']); } this.$diff.find('.diffnow-checknext') .attr('class', 'diffnow-differences-nextlink') .text(mw.msg('nextdiff')); } detachDiff() { this.$diff?.detach(); this.markLink(false); } close(adjustFocus) { this.detachDiff(); let $container = this.getContainer(); if ($container.length) { let $row = $container.closest('.diffnow-row'); containers.push($container.detach()); $row.remove(); } if (!adjustFocus) return; setTimeout(() => { this.$anchor.find('a[href]').last().each(function () { this.focus(); this.blur(); }); }); } collapse(e) { e.preventDefault(); let $container = $(e.delegateTarget); let diff = getDiff($container.children('.diff')); if (diff.$link[0].getBoundingClientRect().top < 0) { diff.$anchor[0].scrollIntoView(); $container.fadeOut('fast', () => { diff.close(true); setTimeout(() => { diff.$anchor[0].scrollIntoView(); $container.removeAttr('style'); }); }); } else { diff.close(true); } } scrollUp(e) { e.preventDefault(); let y = e.delegateTarget.getBoundingClientRect().top; let ch = document.documentElement.clientHeight, buffer = ch / 2; y -= y + 5 > buffer ? ch : buffer; window.scrollBy({ top: y, behavior: 'smooth' }); } scrollDown(e) { e.preventDefault(); let y = e.delegateTarget.getBoundingClientRect().bottom; let buffer = document.documentElement.clientHeight / 2; if (y - 5 > buffer) { y -= buffer; } window.scrollBy({ top: y, behavior: 'smooth' }); } toggleContext(e) { if (e.type === 'keydown' && ( e.which !== 13 && e.which !== 32 || e.ctrlKey || e.shiftKey || e.metaKey || e.altKey )) { return; } e.preventDefault(); let $row = $(e.target.closest('tr')); if ($row.hasClass('diffnow-context-expanded')) { $row.removeClass('diffnow-context-expanded') .addClass('diffnow-context-collapsed') .children().attr({ tabindex: 0, role: 'button', title: 'Expand' }); expanded.delete($row[0]); } else { $row.removeClass('diffnow-context-collapsed') .addClass('diffnow-context-expanded') .children('.diff-context').removeAttr('tabindex role title') .siblings('.diff-marker').attr('title', 'Collapse'); expanded.add($row[0]); } } destroy() { diffs.splice(diffs.indexOf(this), 1); this.$link.removeClass('diffnow-link-loading diffnow-link-loaded diffnow-link-open'); this.getContainer().removeClass('diffnow-switching'); } } let filterContexts = $diff => { $diff.find('.diff-context.diff-side-deleted > div').each(function () { let $row = $(this.closest('tr')) .removeClass('diffnow-context-expanded'); if (this.scrollHeight > this.clientHeight) { if (expanded.has($row[0])) { $row.addClass('diffnow-context-expanded') .children('.diff-marker').attr({ tabindex: 0, role: 'button', title: 'Collapse' }); } else { $row.addClass('diffnow-context-collapsed').children().attr({ tabindex: 0, role: 'button', title: 'Expand' }); } } else { $row.removeClass('diffnow-context-collapsed') .children().removeAttr('tabindex role title'); } }); }; let onResize = mw.util.debounce(() => { filterContexts($('.diffnow > .diff')); }, 250); let notif; let showError = async (href, msg) => { notif = await mw.notify([ document.createTextNode(msg || `Couldn't load the diff`), $('<p>').append( $('<a>').attr({ href: href, target: '_blank' }).text('Open it in a new tab') )[0] ], { autoHideSeconds: 'long', tag: 'diffnow', type: 'error' }); }; let getHistHref = () => { let formData = new FormData(document.getElementById('mw-history-compare')); return mw.util.getUrl(null, { diff: formData.get('diff'), oldid: formData.get('oldid') }); }; $(document.body).on('click.diffnow', 'a, .mw-history-compareselectedversions-button', async function (e) { if (e.ctrlKey || e.shiftKey || e.metaKey || e.altKey || !this.matches(selector) && !this.matches(switchSelector) ) { return; } e.preventDefault(); let $link = $(this); let isCompare = $link.hasClass('mw-history-compareselectedversions-button'); let href = isCompare ? getHistHref() : this.pathname + this.search; let diff = getDiff(href); try { if (diff) { diff.setLink(href, $link); return; } if (!isCompare && this.origin !== location.origin) { throw ''; } diff = new Diff(href, $link); let url = new URL(href, location.href); url.searchParams.set('diffonly', 1); url.searchParams.set('action', 'render'); let promise = fetch(url, { signal: diff.aborter.signal }); mw.loader.using(['mediawiki.diff', 'mediawiki.diff.styles']); if (notif) { notif.close(); notif = null; } diff.append(await (await promise).text()); } catch (error) { if (diff && !diff.attached) { diff.destroy(); } if (error.name === 'AbortError') { notif = await mw.notify('Diff loading canceled', { tag: 'diffnow' }); } else if (error !== 'nonfatal') { showError(href, error); console.error(error); } } }); let css = mw.loader.addStyleTag(`${selector} { background-image: url(/w/resources/lib/ooui/themes/wikimediaui/images/icons/expand.svg); background-position: right; background-repeat: no-repeat; background-size: 10px 10px; padding-right: 12px; } .mw-history-compareselectedversions-button { background-position: right 6px center; background-size: 14px 14px; padding-right: 24px !important; } .skin-timeless .mw-history-compareselectedversions-button { background-image: url(/w/resources/lib/ooui/themes/wikimediaui/images/icons/expand-invert.svg); } .skin-timeless .mw-history-compareselectedversions-button.diffnow-link-loaded { background-image: url(/w/resources/lib/ooui/themes/wikimediaui/images/icons/reload-invert.svg) !important; } .skin-timeless .mw-history-compareselectedversions-button.diffnow-link-open { background-image: url(/w/resources/lib/ooui/themes/wikimediaui/images/icons/collapse-invert.svg) !important; } .diffnow-link-loading { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20'%3E%3Cstyle type='text/css'%3Ecircle%7Banimation:bounce-delay 600ms infinite ease-in-out both;animation-delay:-80ms;transform-origin:center;transform-box:fill-box%7Dcircle:first-of-type%7Banimation-delay:-160ms%7Dcircle:last-of-type%7Banimation-delay:0ms%7D@keyframes bounce-delay%7B0%25,50%25,100%25%7Btransform:scale(0)%7D20%25%7Bopacity:0.87;transform:scale(1)%7D%7D%3C/style%3E%3Ccircle cx='2.5' cy='10' r='2.5'/%3E%3Ccircle cx='10' cy='10' r='2.5'/%3E%3Ccircle cx='17.5' cy='10' r='2.5'/%3E%3C/svg%3E") !important; } .diffnow-link-loaded { background-image: url(/w/resources/lib/ooui/themes/wikimediaui/images/icons/reload.svg) !important; } .diffnow-link-open, .diffnow-context-expanded > .diff-marker { background-image: url(/w/resources/lib/ooui/themes/wikimediaui/images/icons/collapse.svg) !important; } .diffnow { background: var(--background-color-base, #fff); border: var(--border-base, 1px solid #a2a9b1); border-radius: 4px; position: relative; } .mw-history-compareselectedversions + .diffnow { margin-top: 0.3em; } .diffnow-tools { display: flex; position: sticky; background-color: var(--background-color-backdrop-light, rgba(255,255,255,0.65)); z-index: 1; } .diffnow-tools-top { top: 0; border-radius: 4px; } .diffnow-tools-bottom { bottom: 0; } .diffnow-tools > .diffnow-button { cursor: pointer; height: 24px; padding: 0; box-sizing: content-box; background-position: center; background-repeat: no-repeat; background-size: 16px 16px; background-color: var(--background-color-transparent, transparent); flex-grow: 1; } .diffnow-tools > .diffnow-button:hover { background-color: var(--background-color-button-quiet--hover, rgba(0,24,73,0.027)); } .diffnow-tools > .diffnow-button:active { background-color: var(--background-color-button-quiet--active, rgba(0,24,73,0.082)); } .diffnow-tools-top > .diffnow-button { border: none; border-radius: 3px 3px 0 0; } .diffnow-tools-bottom > .diffnow-button { border: var(--border-base, 1px solid #a2a9b1); border-radius: 99px; margin: 4px; height: 20px; } .diffnow-switching > .diff { transition: opacity 200ms; opacity: 0.4; } .diffnow-checknext, .diffnow-checknext:visited { color: var(--color-subtle, #54595d); } .diffnow :not(.diffnow-context-expanded) > .diff-context > div { overflow: hidden; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; } .diffnow-context-collapsed > td, .diffnow-context-expanded > .diff-marker { cursor: pointer !important; background-position: center; background-repeat: no-repeat; background-size: 12px 12px; } .diffnow-context-collapsed > .diff-marker { background-image: url(/w/resources/lib/ooui/themes/wikimediaui/images/icons/expand.svg); } .diffnow-context-collapsed > .diff-context a { pointer-events: none; } .diffnow .diff-multi > div { display: flex; justify-content: space-around; } .diffnow > .diff td div { word-break: break-word; } .diffnow .mw-diff-inline-changed ins, .diffnow .mw-diff-inline-changed del { white-space: pre-wrap; } .diffnow-row .diffnow { border: none; } .diffnow-row > td { padding: 0 !important; } td.mw-changeslist-line-inner { width: 100%; } .mw-enhanced-rc .diffnow > .diff td { padding: 0.33em 0.5em; } .cdx-table__table-wrapper:has(.diffnow-row) { overflow-x: visible; } span.mw-history-histlinks-current, span.mw-history-histlinks-previous { padding-right: 12px; } .client-js .diffnow .mw-anonuserlink { padding-right: 0; }`); mw.loader.using(['oojs-ui.styles.icons-movement', 'oojs-ui.styles.icons-interactions']); diffs._disable = () => { $(document.body).off('.diffnow'); css.remove(); }; if (isHist) { $(document.body).on('change.diffnow', '#mw-history-compare', function () { let $buttons = $('.mw-history-compareselectedversions-button'); let diff = getDiff(getHistHref()); if (diff) { $buttons.addClass('diffnow-link-loaded'); if ($buttons.is(diff.$link) && diff.isVisible()) { diff.$link.addClass('diffnow-link-open'); } else { $buttons.removeClass('diffnow-link-open'); } } else { $buttons.removeClass('diffnow-link-loaded diffnow-link-open'); } }); } let added, tempLoaded, ipInfoLoaded; mw.hook('wikipage.content').add(async () => { await new Promise(mw.requestIdleCallback); if (!document.querySelector(selector)) return; let modules = ['mediawiki.diff', 'mediawiki.diff.styles']; let cspn = mw.config.get('wgCanonicalSpecialPageName'); let loadTemp = !tempLoaded && Number(mw.user.options.get('checkuser-temporary-account-enable')) && !['Recentchanges', 'Recentchangeslinked', 'Watchlist'].includes(cspn); if (loadTemp) { modules.push('ext.checkUser.tempAccounts', 'ext.checkUser.styles'); } if (Number(mw.user.options.get('checkuser-userinfocard-enable'))) { modules.push('ext.checkUser.userInfoCard'); } let loadIpInfo; if (Number(mw.user.options.get('ipinfo-beta-feature-enable'))) { modules.push('ext.ipInfo', 'ext.ipInfo.styles'); loadIpInfo = !ipInfoLoaded && ['Contributions', 'DeletedContributions', 'IPContributions'].includes(cspn); } let promise = mw.loader.using(modules); if (loadTemp || loadIpInfo) { tempLoaded = loadTemp; ipInfoLoaded = loadIpInfo; await promise; // https://gerrit.wikimedia.org/g/mediawiki/core/+/master/resources/src/startup/mediawiki.loader.js let makeRequire = (moduleObj, basePath) => moduleName => { let relParts = moduleName.match(/^((?:\.\.?\/)+)(.*)$/); if (!relParts) { return mw.loader.require(moduleName); } let baseDirParts = basePath.split('/'); baseDirParts.pop(); let prefixes = relParts[1].split('/'); prefixes.pop(); let prefix; while ((prefix = prefixes.pop())) { if (prefix === '..') { baseDirParts.pop(); } } let fileName = baseDirParts.join('/'); if (fileName) { fileName += '/'; } fileName += relParts[2]; if (Object.hasOwn(moduleObj.packageExports, fileName)) { return moduleObj.packageExports[fileName]; } let scriptFiles = moduleObj.script.files; if (!Object.hasOwn(scriptFiles, fileName)) { throw Error('Cannot require undefined file ' + fileName); } let result; let fileContent = scriptFiles[fileName]; if (typeof fileContent === 'function') { let moduleParam = { exports: {} }; fileContent(makeRequire(moduleObj, fileName), moduleParam, moduleParam.exports); result = moduleParam.exports; } else { result = fileContent; } moduleObj.packageExports[fileName] = result; return result; }; if (loadTemp) { try { let pack = mw.loader.moduleRegistry['ext.checkUser.tempAccounts']; makeRequire(pack, pack.script.main)('./initOnHook.js')(); } catch {} } if (loadIpInfo) { try { let pack = mw.loader.moduleRegistry['ext.ipInfo']; makeRequire(pack, pack.script.main)('./popup/init.js')(); } catch {} } } if (added || !document.getElementById('p-cactions')) return; added = true; let callback = (records, observer) => { if (records[0].target.classList.contains('diffnow-link-loaded')) { observer.takeRecords(); observer.disconnect(); clickFirst(); } }; let clickFirst = () => { let link = document.querySelector(selector); if (!link || link.matches('.diffnow-link-loaded, [href*="&diff=cur&"], .consecudiff > a')) { return; } new MutationObserver(callback).observe(link, { attributeFilter: ['class'] }); link.click(); }; mw.util.addPortletLink('p-cactions', '#', 'Expand all diffs').firstElementChild.addEventListener('click', e => { e.preventDefault(); clickFirst(); }); }); }); // window.smpg?._disable?.(); mw.loader.using('mediawiki.util', async function smoothPager() { let action = mw.config.get('wgAction'); let isHist = action === 'history'; let isPerma = action === 'view' && ['oldid', 'diff'].some(s => mw.util.getParamValue(s)); let ns = !isHist && !isPerma && mw.config.get('wgNamespaceNumber'); let isFile = ns === 6; let isCat = ns === 14; let cspn = ns === -1 && mw.config.get('wgCanonicalSpecialPageName'); if (!(isHist || isPerma || isFile || isCat || cspn)) return; let isSearch = cspn === 'Search'; let isWl = cspn === 'Watchlist'; let isRc = cspn === 'Recentchanges' || cspn === 'Recentchangeslinked'; if ((isWl || isRc) && document.body.classList.contains('mw-rcfilters-enabled')) { return; } let isContribs = cspn === 'Contributions' || cspn === 'IPContributions'; let o = { useRender: isCat || isWl || isRc, selector: isPerma ? '#bodyContent' : isFile ? '#mw-imagepage-section-filehistory' : isCat ? '.mw-category-generated' : '#mw-content-text', outerSelectors: [], linkSelector: isPerma ? '#differences-prevlink, #differences-nextlink, #mw-diff-ntitle1 > strong > a, #mw-diff-otitle1 > strong > a, #mw-revision-nav > a, .fr-diff-to-stable > a' : isCat ? '#mw-subcategories > a, #mw-pages > a, #mw-category-media > a' : isWl ? '#ca-nstab-special > a, .mw-watchlist-toollink-active > a, #p-associated-pages .selected > a' : isRc ? '#ca-nstab-special > a, .rclinks > a, .rcshowhideoption > a, .rclistfrom > a' : `#ca-nstab-special > a, .mw-pager-navigation-bar > a, .TablePager_nav > .oo-ui-widget-enabled > a, .mw-datatable th > a, .cdx-table-pager .cdx-button--fake-button--enabled, .cdx-table__table__cell--has-sort > a, .mw-prefixindex-nav > a, .mw-allpages-nav > a, .CategoryTreeParents .CategoryTreeLabel, .mw-special-Newpages form div > a, .mw-abusefilter-history-buttons a${isHist ? ', #ca-history > a' : isSearch ? ', .search-types a, .searchdidyoumean a' : ''}`, canPost: isSearch || [ 'AbuseFilter', 'ExpandTemplates', 'TemplateSandbox' ].includes(cspn), paramRe: isPerma && /^(?:diff|diffonly|direction|oldid)$/ || isSearch && /^(?:advancedSearch-current|limit|offset|profile|runsuggestion|search|sort|ns\d+)$/, reruns: [ 'mediawiki.action.history', 'mediawiki.special.search', 'ext.advancedSearch.init', 'mediawiki.special.watchlist', 'mediawiki.special.watchlistedit', 'mediawiki.pager.codex', 'mediawiki.misc-authed-curate', 'mediawiki.misc-authed-ooui', 'mediawiki.misc-authed-pref', 'mediawiki.special.unwatchedPages', 'ext.thanks.corethank', 'ext.flaggedRevs.review', 'ext.gadget.watchlist-notice-core' ], pages: [] }; if (isContribs) { o.reruns.push('ext.ipInfo'); } if (!o.useRender) { o.outerSelectors.push('#firstHeading', '.mw-indicators'); if (!isPerma && !isFile) { o.outerSelectors.push('#mw-content-subtitle'); } } o.formSelector = isHist && '#mw-history-searchform' || isSearch && '#search, #powersearch, #searchform' || cspn && `#mw-content-text form${o.canPost ? '': ':not([method="post"])'}`; if (o.formSelector) { o.formSelector += ', .cdx-table-pager__limit-form'; } window.smpg = o; let getHref = () => location.pathname + location.search; let getKey = (href, isPost) => { if (o.paramRe) { let params = new URLSearchParams(); new URL(href, location.href).searchParams.forEach((v, k) => { if (o.paramRe.test(k)) { params.set(k, v); } }); params.sort(); return String(params); } if (isPost) { return href + '??' + Date.now(); } return href; }; class Page { constructor(href, key) { this.href = href || getHref(); this.key = key || getKey(this.href); this.keys = new Set().add(this.key); o.pages.push(this); } init($response) { if ($response) { if (isWl || isRc) { this.$cont = $(document.querySelector(o.selector).cloneNode()) .removeClass('smoothpager-switching') .append($response); } else { let $cont = $response.filter(o.selector).not('script'); if (!$cont.length) { $cont = $response.find(o.selector).not('script'); if (!$cont.length) { throw 'Content not found'; } } $cont.find('script').remove(); this.$cont = $($cont[0]); } this.attached = 0; } else { if (this.$cont) return; this.$cont = $(document.querySelector(o.selector)); this.attached = 1; } this.getConfigAndModules($response); this.getOuterEls($response); this.getDocTitle($response); this.getRev($response); } getConfigAndModules($response) { if (o.useRender) return; if (!$response) { this.config = Object.assign({}, window.RLCONF); } let $scripts = $response ? $response.filter('script').remove() : $('head > script, body > script'); $scripts.map(function () { return this.textContent.match(/\bmw\.config\.set\({.+}\);/g); }).each((_, s) => { let obj; do { try { obj = JSON.parse(s.slice(14, -2)); } catch { let i = s.slice(0, -3).lastIndexOf('});'); if (i === -1) return; s = s.slice(0, i + 3); } } while (!obj); this.config = Object.assign(this.config || {}, obj); }); if (!$response) return; let match = $scripts.first().text().replaceAll('\n', '') .match(/;RLCONF=({.+});RLSTATE=({.+});RLPAGEMODULES=(\[.+\]);$/); if (match) { try { this.config = Object.assign(this.config || {}, JSON.parse(match[1])); } catch {} this.modules = []; try { this.modules.push(...Object.keys(JSON.parse(match[2]))); } catch {} try { this.modules.push(...JSON.parse(match[3])); } catch {} } this.redirect(); } setConfig() { if (!this.config) return; mw.config.set(this.config); if (!o.cur.config) return; Object.entries(o.cur.config).forEach(([k, v]) => { if (!Object.hasOwn(this.config, k) && JSON.stringify(mw.config.get(k)) === JSON.stringify(v) ) { delete mw.config.values[k]; } }); } getOuterEls($response) { this.outerEls = o.outerSelectors.map(selector => ( $response ? $response.find(selector)[0] : document.querySelector(selector) )).map(el => el && !this.$cont[0].contains(el) && el); } setOuterEls() { o.outerSelectors.forEach((selector, i) => { let outer = document.querySelector(selector); if (!outer) return; $(outer).before(this.outerEls[i] || outer.cloneNode()).detach(); }); } getDocTitle($response) { if (o.useRender) return; if ($response) { let $title = $response.filter('title'); if ($title.length) { this.docTitle = $title.text(); } } else { this.docTitle = document.title; } } setDocTitle() { if (this.docTitle) { document.title = this.docTitle; } else if (this.outerEls[0] && o.cur.outerEls?.[0]) { document.title = document.title.replace( o.cur.outerEls[0].textContent.trim(), this.outerEls[0].textContent.trim() ); } } getRev($response) { if (!isPerma) return; let params = new URLSearchParams(this.key); if (params.has('diff')) { if ($response) { let dir = params.get('diff') === 'next' ? 'prev' : 'next'; let id = this.config?.[ dir === 'prev' ? 'wgDiffNewId' : 'wgDiffOldId' ]; if (!id) { id = this.findParam( 'oldid', dir === 'prev' ? '#mw-diff-ntitle1 > strong > a, #differences-prevlink' : '#mw-diff-otitle1 > strong > a, #differences-nextlink' ); } if (id) { this.rev = dir === 'prev' ? id : params.get('oldid'); params.set('diff', dir); params.set('oldid', id); this.keys.add(String(params)); } } else { this.rev = mw.config.get('wgDiffNewId'); let pn = this.findParam( 'title', '#mw-diff-ntitle1 > strong > a, #differences-nextlink' ); if (pn === mw.config.get('wgPageName') && !this.$cont[0].querySelector('.diff[data-mw-interface] .diff-multi') ) { params.set('diff', 'prev'); params.set('oldid', this.rev); this.keys.add(String(params)); let oldId = mw.config.get('wgDiffOldId'); if (oldId) { params.set('diff', 'next'); params.set('oldid', oldId); this.keys.add(String(params)); } } } } else { if ($response) { if (params.has('direction')) { let id = this.config?.wgRevisionId; if (!id) { id = this.findParam( 'oldid', '#t-permalink > a, #p-tb .menu__item--page-actions-overflow-permalink', $response ); } if (id) { this.rev = id; this.keys.add('oldid=' + id); o.cur.keys.add(`direction=${ params.get('direction') === 'next' ? 'prev' : 'next' }&oldid=${id}`); } } else { this.rev = params.get('oldid'); } } else { this.rev = mw.config.get('wgRevisionId'); if (params.has('direction')) { this.keys.add('oldid=' + this.rev); } } } } findParam(param, query, $range = this.$cont) { let search = $range.find(query).prop('search'); return search && mw.util.getParamValue(param, search); } updateLinks() { if (this.rev) { $('#ca-edit > a').attr('href', mw.util.getUrl(null, { action: 'edit', oldid: this.rev })); $('#t-permalink > a, #p-tb .menu__item--page-actions-overflow-permalink') .attr('href', mw.util.getUrl(null, { oldid: this.rev })); } $('#ca-nstab-special > a').attr('href', this.href); $('.printfooter > a').attr('href', location.href).text(location.href); $('#footer-places-mobileview > a, #mw-mf-display-toggle').attr('href', function () { let url = new URL(location.href); url.searchParams.set( 'mobileaction', mw.util.getParamValue('mobileaction', this.search) ); return '//' + this.host + url.pathname + url.search; }); $('#t-urlshortener > a').attr('href', function () { let params = new URLSearchParams(this.search); params.set('url', location.href); return this.pathname + '?' + params; }); } redirect() { if (this.config.wgAction !== mw.config.get('wgAction') || this.config.wgPageName?.replace(/\/.*/, '') !== mw.config.get('wgPageName').replace(/\/.*/, '') ) { location.href = this.href; throw 'redirect'; } } replaceContent(isPopState, isRefresh) { let oldCont = document.querySelector(o.selector); if (this.$cont.is(oldCont)) { throw 'Attempt to replace content with itself'; } if (!isPopState && !isRefresh) { this.pushState(); } $(oldCont).before(this.$cont).detach(); console.log(this.key, o); this.setOuterEls(); this.setDocTitle(); this.setConfig(); if (isSearch && this.attached) { let input = this.$cont[0].querySelector('#searchText > input'); if (input) { input.value = input.defaultValue; } } o.cur = this; this.loadModules(isPopState); this.updateLinks(); } pushState() { history.pushState({ _smpg: this.key }, '', this.href); history.replaceState({ _smpg: this.key }, '', this.href); } async loadModules(isPopState) { o.pending = true; try { await mw.loader.using(this.modules || []); } catch {} finally { o.pending = false; if (!this.attached) { this.fireHooks(); this.rerunModules(); } if (!isPopState) { this.scroll(); } this.attached++; } } fireHooks() { mw.hook('wikipage.content').fire(this.$cont); this.$cont.find('.diff[data-mw-interface]').each(function () { mw.hook('wikipage.diff').fire($(this)); }); this.$cont.find('.catlinks[data-mw-interface]').each(function () { mw.hook('wikipage.categories').fire($(this)); }); mw.hook('htmlform.enhance').fire(this.$cont); } rerunModules() { o.reruns.forEach(m => { let pack = mw.loader.moduleRegistry[m]; if (!pack || pack.state !== 'ready') return; if (typeof pack.script === 'function') { pack.script($, $, mw.loader.require, pack.module); return; } delete mw.loader.moduleRegistry[m]; mw.loader.implement( m + '@' + pack.version, pack.script, pack.style, pack.messages, pack.templates, pack.deprecationWarning ); }); if ((isHist || isContribs || isRc) && window.Twinkle) { window.Twinkle.rollback(); } } scroll() { let form = o.formSelector && this.$cont[0].querySelector(o.formSelector); if (form) { let y = form.getBoundingClientRect().bottom; if (y < 0) { window.scrollBy(0, y); } } else if (this.$cont[0].getBoundingClientRect().top < 0) { this.$cont[0].scrollIntoView(); } } } o.cur = new Page(); let getContent = async (href, state, options) => { if (o.pending) return; o.aborter?.abort(); let key = state?._smpg || getKey(href, !!options); let isRefresh = key === o.cur.key; if (state && isRefresh) return; let oldCont = document.querySelector(o.selector); if (!oldCont) { notify(href, 'No element to replace', 'error'); return; } let page = o.pages.find(p => p.keys.has(key)); if ((state || !isRefresh) && page) { page.href = href; page.replaceContent(!!state, isRefresh); return; } oldCont.classList.add('smoothpager-switching'); let $throbber = $('<div>').addClass('smoothpager-throbber') .appendTo(document.body); if (!isRefresh && o.pages.length === 1) { o.cur.init(); } o.aborter = new AbortController(); let url = href; if (o.useRender) { url = new URL(href, location.href); url.searchParams.set('action', 'render'); } let promise = fetch(url, Object.assign({ signal: o.aborter.signal }, options)); if (notif) { notif.close(); notif = null; } try { let response = await (await promise).text(); if (page) { page.href = href; } else { page = new Page(href, key); } page.init($($.parseHTML(response, !o.useRender))); page.replaceContent(!!state, isRefresh); } catch (e) { if (e.name === 'AbortError') { if (state && o.cur) { o.cur.pushState(); } } else if (e === 'redirect') { notify(href, 'Redirecting...'); } else { notify(href, e || `Couldn't load the page`, 'error'); console.error(e); } } finally { o.aborter = null; oldCont.classList.remove('smoothpager-switching'); $throbber.remove(); } }; let notif; let notify = async (href, msg, type) => { notif = await mw.notify([ document.createTextNode(msg), $('<p>').append( $('<a>').attr({ href: href, target: '_blank' }).text('Open it in a new tab') )[0] ], { autoHideSeconds: 'long', tag: 'smoothpager', type: type }); }; let onClick = function (e) { if (e.ctrlKey || e.shiftKey || e.metaKey || e.altKey || !this.matches(o.linkSelector) || this.origin !== location.origin ) { return; } e.preventDefault(); getContent(this.pathname + this.search); }; let onKeyDown = e => { if (e.ctrlKey || e.shiftKey || e.metaKey || e.altKey || e.target.closest(':read-write') ) { return; } switch (e.which) { case 27: o.aborter?.abort(); break; case 110: case 190: e.preventDefault(); getContent(getHref()); } }; let onPopState = e => { let state = e.originalEvent.state; if (state && !state._smpg) return; history.replaceState(state, '', location.href); getContent(getHref(), state || {}); }; let onSubmit = e => { if (e.originalEvent && ( e.originalEvent.defaultPrevented || !e.originalEvent.isTrusted ) || !o.canPost && e.target.method !== 'get' || !e.target.matches(o.formSelector) ) { return; } let path = e.target.getAttribute('action'); let isScript = path === mw.config.get('wgScript'); let comps = [mw.config.get('wgPageName')]; if (mw.config.get('wgNamespaceNumber') === -1 && comps[0].includes('/')) { comps.push(comps[0].replace(/\/.*/, '')); } comps.push((comps[1] || comps[0]) + '/'); if (!isScript && !comps.some(c => mw.util.getUrl(c) === path)) return; let formData = new FormData(e.target); if (isScript && !comps.includes(formData.get('title')?.replaceAll(' ', '_'))) { return; } e.preventDefault(); e.stopPropagation(); if (isSearch && e.target.id !== 'searchform') { formData.set('search', OO.ui.infuse($('#searchText')).getValue()); } else if (e.target.method === 'post') { let submitter = e.originalEvent?.submitter; if (submitter?.name) { formData.append(submitter.name, submitter.value); } getContent(path, null, { method: 'POST', headers: { 'Content-Type': e.target.enctype }, body: e.target.enctype === 'multipart/form-data' ? formData : new URLSearchParams(formData) }); return; } getContent(path + '?' + new URLSearchParams(formData)); }; let setPortlet = text => { if (!o.portletLink) return; $(o.portletLink).find('*').addBack().contents().each(function () { if (this.nodeType === 3 && this.textContent.trim()) { this.textContent = text; return false; } }); }; o._enable = () => { o.enabled = true; let $body = $(document.body).on('click', 'a', onClick); if (o.formSelector) { $body.on('submit', onSubmit); } $body.parent().on('keydown', onKeyDown); $(window).on('popstate', onPopState); if (o.css) { o.css.disabled = false; } if (isPerma) { mw.trackSubscribe('counter.MediaWiki.RevisionSlider.event.init', o._disable); } setPortlet('Disable SmoothPager'); }; o._disable = () => { o.enabled = false; $(document.body).off('click', onClick).off('submit', onSubmit) .parent().off('keydown', onKeyDown); $(window).off('popstate', onPopState); o.css.disabled = true; mw.trackUnsubscribe(o._disable); setPortlet('Enable SmoothPager'); }; o._enable(); o.css = mw.loader.addStyleTag(`${o.linkSelector}, .cdx-table__table__sort-button { color: #008064 !important; } :is(${o.linkSelector}, .cdx-table__table__sort-button):visited { color: #006400 !important; } :is(${o.linkSelector}, .cdx-table__table__sort-button):active { color: #faa700 !important; } .cdx-table-pager .cdx-button--fake-button--enabled > .cdx-button__icon { background-color: #14866d; } .smoothpager-switching { opacity: 0.75; } .smoothpager-throbber { width: 20%; height: 0.5vh; position: fixed; top: 0; left: 0; background-color: var(--background-color-progressive, #36c); transform: translate(-100%); animation: smoothpager-throbber 1s infinite linear; } @keyframes smoothpager-throbber { to { transform: translate(700%); } } @media (prefers-reduced-motion: reduce) { .smoothpager-throbber { animation: smoothpager-throbber 1s infinite steps(10,end) !important; width: 40%; } }${o.formSelector ? ` :is(${o.formSelector}) input[type="submit"], :is(${o.formSelector}) .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button { color: var(--color-inverted, #fff); background-color: #14866d; border-color: #14866d; } :is(${o.formSelector}) input[type="submit"]:hover, :is(${o.formSelector}) .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover { background-color: #00af89; border-color: #00af89; } :is(${o.formSelector}) input[type="submit"]:focus, :is(${o.formSelector}) .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus { border-color: #14866d; } :is(${o.formSelector}) .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus { box-shadow: inset 0 0 0 1px #14866d, inset 0 0 0 2px #fff; } :is(${o.formSelector}) input[type="submit"]:active, :is(${o.formSelector}) .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:active { background-color: #0e725a; border-color: #0e725a; box-shadow: none; }` : ''}`); await $.ready; if (!document.getElementById('p-cactions')) return; o.portletLink = mw.util.addPortletLink('p-cactions', '#', 'Disable SmoothPager').firstElementChild; o.portletLink.addEventListener('click', e => { e.preventDefault(); o[o.enabled ? '_disable' : '_enable'](); }); }); window.smartdiffTemplates = [ { names: ['T', 'Tl'], namespace: 10, forceNs: true, end: 1 }, { names: ['Tlx'], namespace: 10, end: 1 }, { names: ['U'], prefix: 'Special:Contributions/', end: 1 }, { names: ['Re', 'Reply to', 'Ping'], prefix: 'Special:Contributions/' }, { names: ['About'], start: 3, skipEven: true }, { names: ['For'], start: 2 }, { names: ['Other uses', 'Otheruses'], end: 1 }, { names: ['Section link', 'Slink'], end: 1 }, { names: ['Redirect'], skipEven: true, noRedirectEnd: 1 }, { names: ['Shortcut'], noRedirectStart: 1 }, { names: ['Tracked', 'Phab'], prefix: 'phab:', end: 1 }, { names: [ 'Distinguish', 'Main', 'Main article', 'Further', 'See also', 'Seealso' ] }, { names: ['Ll'], end: 1 } ]; mw.loader.using([ 'mediawiki.util', 'mediawiki.Title', 'mediawiki.api' ], function smartDiff() { mw.loader.addStyleTag('.smartdiff-link.extiw, .smartdiff-link.external{color:var(--color-progressive,#36c)} .smartdiff-link.extiw:visited, .smartdiff-link.external:visited{color:#795cb2} .smartdiff-link.extiw:active, .smartdiff-link.external:active{color:#faa700}'); class SmartDiff { constructor($diff) { this.$diff = $diff; this.isSpecial = mw.config.get('wgNamespaceNumber') === -1; this.isView = mw.config.get('wgAction') === 'view' && new URLSearchParams(location.search).get('diffonly') !== '1'; this.magicWords = [ '!', 'BASEPAGENAME', 'BASEPAGENAME:', 'BASEPAGENAMEE', 'BASEPAGENAMEE:', 'canonicalurl:', 'CURRENTDAY', 'CURRENTDAY2', 'CURRENTDAYNAME', 'CURRENTDOW', 'CURRENTHOUR', 'CURRENTMONTH', 'CURRENTMONTH1', 'CURRENTMONTHABBREV', 'CURRENTMONTHNAME', 'CURRENTMONTHNAMEGEN', 'CURRENTTIME', 'CURRENTTIMESTAMP', 'CURRENTVERSION', 'CURRENTWEEK', 'CURRENTYEAR', 'DEFAULTCATEGORYSORT:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DISPLAYTITLE:', 'filepath:', 'formatnum:', 'FULLPAGENAME', 'FULLPAGENAME:', 'FULLPAGENAMEE', 'FULLPAGENAMEE:', 'fullurl:', 'gender:', 'int:', 'lc:', 'lcfirst:', 'LOCALDAY', 'LOCALDAY2', 'LOCALDAYNAME', 'LOCALDOW', 'LOCALHOUR', 'LOCALMONTH', 'LOCALMONTH1', 'LOCALMONTHABBREV', 'LOCALMONTHNAME', 'LOCALMONTHNAMEGEN', 'LOCALTIME', 'LOCALTIMESTAMP', 'LOCALWEEK', 'LOCALYEAR', 'msg:', 'msgnw:', 'NAMESPACE', 'NAMESPACE:', 'NAMESPACEE', 'NAMESPACEE:', 'NAMESPACENUMBER', 'NAMESPACENUMBER:', 'ns:', 'NUMBEROFACTIVEUSERS', 'NUMBEROFARTICLES', 'NUMBEROFEDITS', 'NUMBEROFFILES', 'NUMBEROFPAGES', 'NUMBEROFUSERS', 'padleft:', 'PAGENAME', 'PAGENAMEE', 'PAGESINCAT:', 'PAGESINCATEGORY:', 'plural:', 'REVISIONDAY', 'REVISIONDAY:', 'REVISIONDAY2', 'REVISIONDAY2:', 'REVISIONID', 'REVISIONID:', 'REVISIONMONTH', 'REVISIONMONTH:', 'REVISIONMONTH1', 'REVISIONMONTH1:', 'REVISIONSIZE', 'REVISIONTIMESTAMP', 'REVISIONTIMESTAMP:', 'REVISIONUSER', 'REVISIONUSER:', 'REVISIONYEAR', 'REVISIONYEAR:', 'ROOTPAGENAME', 'ROOTPAGENAME:', 'ROOTPAGENAMEE', 'ROOTPAGENAMEE:', 'SHORTDESC:', 'SUBJECTPAGENAME', 'SUBJECTPAGENAME:', 'SUBJECTPAGENAMEE', 'SUBJECTPAGENAMEE:', 'SUBJECTSPACE', 'SUBJECTSPACE:', 'SUBJECTSPACEE', 'SUBJECTSPACEE:', 'SUBPAGENAME', 'SUBPAGENAME:', 'SUBPAGENAMEE', 'SUBPAGENAMEE:', 'TALKPAGENAME', 'TALKPAGENAME:', 'TALKPAGENAMEE', 'TALKPAGENAMEE:', 'TALKSPACE', 'TALKSPACE:', 'TALKSPACEE', 'TALKSPACEE:', 'uc:', 'ucfirst:', 'urlencode:' ]; if (window.smartdiffMagicWords) { this.magicWords.push(...window.smartdiffMagicWords); } try { this.subNs = mw.config.get('wgVisualEditorConfig').namespacesWithSubpages; } catch (e) {} if (!this.subNs) { this.subNs = Object.keys(mw.config.get('wgFormattedNamespaces')) .map(k => Number(k)).filter(ns => ![0, 6, 8].includes(ns)); } this.re = /((?:\[(?:<[^>]*>)?\[|(?<!{(?:<[^>]*>)?){(?:<[^>]*>)?{(?:<[^>]*>)?(?:(?:#(?:<[^>]*>)?invoke|(?:safe)?subst|msg(?:nw)?|raw|int)(?:<[^>]*>)?:)?)(?:\s*(?:<[^>]*>)?&lt;(?:<[^>]*>)?tvar(?:<[^>]*>)?\s(?!&gt;).*?&gt;)?\s*)((?:(?!&[gl]t;)[^\[\]{|}])+?)(?=\s*(?:(?:<[^>]*>)?&lt;(?:<[^>]*>)?\/(?:<[^>]*>)?tvar(?:<[^>]*>)?&gt;(?:<[^>]*>)?\s*)?(?:\||\](?:<[^>]*>)?\]|}(?:<[^>]*>)?}|$))/g; this.headRe = /^((?:(?:<[^>]*>)*=){1,6}(?:<[^>]*>)?\s*)((?:(?!&[gl]t;).)+?)(?=\s*(?:(?:<[^>]*>)?=){1,6}(?:<[^>]*>|\s)*(?:&lt;|$))/g; // https://commons.wikimedia.org/wiki/Special:MediaStatistics this.galleryRe = /^(\s*)((?:(?!&[gl]t;)[^\[\]{|}])+\.(?:<[^>]*>)?(?:apng|djv|djvu|flac|gif|jpe|jpeg|jpg|jps|kar|m4a|m4b|m4p|m4r|m4v|mid|midi|mp2|mp3|mp4|mpa|mpe|mpeg|mpg|mpga|oga|ogg|ogm|ogv|ogx|opus|pdf|png|spx|stl|svg|tif|tiff|wav|webm|webp|xcf))(?=\s*(?:(?:<[^>]*>)?(?:<[^>]*>)?\s*)?(?:\||$))/gi; this.urlRe = /(\[(?:<[^>]*>)?(?=.+\]))?((\bhttps?(?:<[^>]*>)?:)?(?:<[^>]*>)?\/(?:<[^>]*>)?\/(?:<[^>]*>|(?!&[gl]t;)[^\s"<>\[\]{|}])+)/g; if (window.smartdiffTemplates) { this.tempRe = /( data-smartdiff-temp="(\d+)">[^{|}]+)(\|(?:(?!&[gl]t;)[^\[\]{}]|{(?:<[^>]*>)?{(?:<[^>]*>)?!(?:<[^>]*>)?}(?:<[^>]*>)?})+)(?=}(?:<[^>]*>)?}|$)/g; this.tempSubRe = /((?:\s|{(?:<[^>]*>)?{(?:<[^>]*>)?!(?:<[^>]*>)?}(?:<[^>]*>)?}[^<>|]*|<[^>]*>)*(?:\|(?:\s|(?:<[^>]*>)|\d+(?:\s|<[^>]*>)*=|[^\d<=>|](?:[^<=>|]|<[^>]*>)*=(?:[^<=>|]|<[^>]*>)*\|?)*|$))/; this.templates = window.smartdiffTemplates; } this.side = 'old'; $diff.find('.diff-deletedline > div').get().forEach(this.processDiv); this.side = 'new'; $diff.find('.diff-addedline > div').get().forEach(this.processDiv); let $contexts = $diff.find('.diff-context > div'); $contexts.each((i, div) => { if (i % 2) { this.side = 'new'; if (this.propUsed && this.getProp() !== this.getProp('pn', 'old')) { this.processDiv(div); } else { $contexts.eq(i).replaceWith($contexts.eq(i - 1).clone()); } } else { this.side = 'old'; this.propUsed = false; this.processDiv(div); } }); this.links = {}; $diff.find('.smartdiff-link:not(.external)').each((i, link) => { let title = link.title; if (!title) return; if (!this.links.hasOwnProperty(title)) { this.links[title] = []; } this.links[title].push(link); }); this.query(Object.keys(this.links).slice(0, 500)); if (this.hasError) { mw.notify('SmartDiff error', { type: 'warn' }); } } processDiv = div => { if (div.querySelector('a[href]')) return; let origHtml = div.innerHTML; let newHtml = origHtml.replace(this.urlRe, this.urlRep) .replace(this.galleryRe, this.galleryRep) .replace(this.re, this.rep).replace(this.headRe, this.headRep); if (this.tempRe) { newHtml = newHtml.replace(this.tempRe, this.tempRep); } if (newHtml === origHtml) return; newHtml = newHtml.replace(/<(ins|del)(?: [^>]+)?><\/\1>/g, ''); let $newDiv = $('<div>').html(newHtml); if (this.detectErrors($newDiv, newHtml, origHtml, div)) return; div.textContent = ''; $newDiv.contents().appendTo(div); }; rep = ($0, $1, $2) => { if ($0.includes('<a class="smartdiff-link')) { return $0; } let [s, pre, mid, post] = this.stripTags($2, true, $1); let t = mw.Title.newFromText(s), isTemp; if (t) { if ($1.includes('invoke')) { t = mw.Title.makeTitle(828, s); } else if (s[0] === '/') { if (this.subNs.includes(this.getProp('ns'))) { t = mw.Title.newFromText( this.getProp() + s.replace(/\/+$/, '') ); } else if ($1[0] === '{') { t.namespace = 10; } } else if ($1[0] === '{') { if (s[0] === '#') { return $0; } if ($1.includes('int')) { t = mw.Title.makeTitle(8, s); } else if (!t.namespace && s[0] !== ':') { if (!$1.includes('msg') && !$1.includes('raw')) { let match = s.match(/^[^:]+(?::(?=.)|$)/); if (match && this.magicWords.includes(match[0])) { return $0; } } t.namespace = 10; isTemp = true; } } else if ((this.isSpecial || !this.isView) && s[0] === '#') { t.title = this.getProp(); } } else if (s.startsWith('../') && this.subNs.includes(this.getProp('ns'))) { let chunks = s.split('/'); let levelCount = chunks.findIndex(v => v !== '..'); let sup = this.getProp().split('/').slice(0, -levelCount).join('/'); if (sup) { let sub = chunks.slice(levelCount).join('/').replace(/\/+$/, ''); t = mw.Title.newFromText(sub ? sup + '/' + sub : sup); } } if (!t) { return $0; } let attrs = { class: 'smartdiff-link', href: t.getUrl() }; if (this.isSpecial || !this.isView || s[0] !== '#') { attrs.title = t.toText(); } if (isTemp && this.tempRe) { let name = t.getMainText(); let idx = this.templates.findIndex(temp => temp.names.includes(name)); if (idx !== -1) { attrs['data-smartdiff-temp'] = idx; } } return pre + $('<a>').attr(attrs).html(mid)[0].outerHTML + post; }; stripTags(s, decode, pre = '', post = '') { let mid = s, tags = s.match(/<\/?(?:ins|del)(?: [^>]+)?>/g); s = $($.parseHTML(s.replace(/&amp;/g, '&'))).text(); if (decode) { try { s = decodeURIComponent(s); } catch (e) {} } if (tags) { if (tags[0][1] === '/') { pre += tags[0]; mid = `<${tags[0].slice(2, 5)} class="diffchange diffchange-inline">` + mid; } let lastTag = tags.pop(); if (lastTag[1] !== '/') { mid += `</${lastTag.slice(1, 4)}>`; post = lastTag + post; } } return [s, pre, mid, post]; } headRep = ($0, $1, $2) => { if ($0.includes('<a class="smartdiff-link')) { return $0; } let [s, pre, mid, post] = this.stripTags($2, true, $1); s = s.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[^>]*)?>/gi, '$1') .replace(/''(.+?)''/g, '$1') .replace(/^_+|_+$/g, ''); let t = mw.Title.newFromText( `${this.isSpecial || !this.isView ? this.getProp() : ''}#${s}` ); if (!t) { return $0; } let attrs = { class: 'smartdiff-link', href: t.getUrl() }; if (this.isSpecial || !this.isView) { attrs.title = t.toText(); } return pre + $('<a>').attr(attrs).html(mid)[0].outerHTML + post; }; galleryRep = ($0, $1, $2) => { if ($0.includes('<a class="smartdiff-link')) { return $0; } let [s, pre, mid, post] = this.stripTags($2, true, $1); let t = mw.Title.newFromText(s, 6); if (t && t.namespace !== 6) { t = mw.Title.makeTitle(6, s); } if (!t) { return $0; } return pre + $('<a>').attr({ class: 'smartdiff-link', href: t.getUrl(), title: t.toText() }).html(mid)[0].outerHTML + post; }; urlRep = ($0, $1, $2, $3) => { let main = $2, trail; if (!$1) { if (!$3) { return $0; } let re = main.includes('(') ? /[!,.:;?](?:<[^>]*>)?$/ : /[!),.:;?](?:<[^>]*>)?$/; let match = main.match(re); if (match && !/&amp(?:;(?:<[^>]*>)?(?:[a-z]+|(?:#(?:<[^>]*>)?(?:x[\da-f]|\d+)))(?:<[^>]*>)?)?;$/i.test(main) ) { trail = match[0]; main = main.slice(0, -trail.length); } } let [url, pre, mid, post] = this.stripTags(main); if ($1) { pre = $1 + pre; } else if (trail) { post += trail; } return pre + $('<a>').attr({ class: 'smartdiff-link external', href: url, rel: 'nofollow' }).html(mid)[0].outerHTML + post; }; tempRep = ($0, $1, $2, $3) => { if ($3.includes('<a class="smartdiff-link')) { return $0; } let temp = this.templates[$2]; return $1 + $3.split(this.tempSubRe).map((os, i) => { if (!os || i % 2) { return os; } let j = i / 2; if (j < temp.start || j > temp.end || temp.skipOdd && j % 2 || temp.skipEven && j % 2 === 0 ) { return os; } let [s, pre, mid, post] = this.stripTags(os, true); if (temp.prefix) { s = temp.prefix + s; } if (temp.suffix) { s += temp.suffix; } let t = temp.forceNs ? mw.Title.makeTitle(temp.namespace, s) : mw.Title.newFromText(s, temp.namespace); if (!t) { return os; } let params = (j >= temp.noRedirectStart || j <= temp.noRedirectEnd) && { redirect: 'no' }; return pre + $('<a>').attr({ class: 'smartdiff-link', href: t.getUrl(params), title: t.toText() }).html(mid)[0].outerHTML + post; }).join(''); }; getProp(n = 'pn', side = this.side) { this.propUsed = true; if (this[side]) { if (this[side][n]) { return this[side][n]; } } else { this[side] = {}; let link = this.$diff[0].querySelector( side === 'old' ? '#mw-diff-otitle1 a, #differences-prevlink' : '#mw-diff-ntitle1 a, #differences-nextlink' ); if (link) { let pn = mw.util.getParamValue('title', link.search); this[side].pn = pn; this[side].ns = mw.Title.newFromText(pn).namespace; return this[side][n]; } } if (this[n]) { return this[n]; } if (this.isSpecial) { this.pn = ''; this.ns = 0; } else { this.pn = mw.config.get('wgPageName'); this.ns = mw.config.get('wgNamespaceNumber'); } return this[n]; } query(titles) { if (!titles.length) return; new mw.Api().post({ action: 'query', titles: titles.slice(0, 50), iwurl: 1, prop: 'info', inprop: 'linkclasses', inlinkcontext: this.getProp(), formatversion: 2 }, { headers: { 'Promise-Non-Write-API-Action': 1 } }).then(response => { let query = response && response.query; if (!query) return; let data = {}; (query.pages || []).forEach(page => { let obj = { classes: page.linkclasses || [] }; if (page.missing && !page.known) { obj.classes.push('new'); obj.params = { action: 'edit', redlink: 1 }; } data[page.title] = obj; }); (query.interwiki || []).forEach(interwiki => { data[interwiki.title] = { classes: ['extiw'], url: interwiki.url }; }); (query.normalized || []).forEach(entry => { if (!data.hasOwnProperty(entry.to)) return; let obj = data[entry.to]; obj.canonical = entry.to; if (!obj.url) { obj.url = mw.util.getUrl(entry.to, obj.params); } data[entry.from] = obj; }); Object.entries(data).forEach(([title, obj]) => { if (!this.links.hasOwnProperty(title)) return; let $links = $(this.links[title]).addClass(obj.classes) .attr('title', obj.canonical); if (obj.url) { $links.attr('href', function () { return obj.url + this.hash; }); } }); this.query(titles.slice(50)); }); } detectErrors($newDiv, newHtml, origHtml, div) { let comp = $newDiv.html(); if (comp !== newHtml) { console.warn( 'SmartDiff syntax error at:\n', div, `\nNew HTML:\n${newHtml}\nCompared against:\n${comp}` ); this.hasError = true; return true; } let $comp = $newDiv.clone(); $comp.find('.smartdiff-link').contents().unwrap(); comp = $comp.html().replace(/<\/(ins|del)><\1(?: [^>]+)?>/g, ''); if (comp !== origHtml) { console.warn( 'SmartDiff mutation error at:\n', div, `\nOriginal HTML:\n${origHtml}\nCompared against:\n${comp}` ); this.hasError = true; return true; } } } mw.hook('wikipage.diff').add($diff => { new SmartDiff($diff); }); }); mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/CopySectLink.js&action=raw&ctype=text/javascript', 's'); mw.loader.using([ 'ext.visualEditor.desktopArticleTarget.init', 'mediawiki.storage' ], function ipaInput() { if (!mw.libs.ve.isVisualAvailable && !['edit', 'submit'].includes(mw.config.get('wgAction')) ) { return; } mw.loader.addStyleTag(`.oo-ui-icon-schwa{background-image:url("data:image/svg+xml,%3Csvg width='20' height='20' version='1.1' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='m0 3v14h4v-2h-2v-10h2v-2zm16 0v2h2v10h-2v2h4v-14zm-6 2c-2.41 0-4.43 1.73-4.9 4h2.08c0.41-1.17 1.5-2 2.82-2 1.67 0 3 1.33 3 3h-8c0 2.75 2.25 5 5 5 2.75 0 5-2.25 5-5 0-2.75-2.25-5-5-5zm-2.59 6.5h5.18c-0.516 0.895-1.47 1.5-2.59 1.5-1.12 0-2.07-0.605-2.59-1.5z'/%3E%3C/svg%3E")}`); let clicked; let openDialog = () => { if (clicked) { if (window.ipaInputDialog) { window.ipaInputDialog.open(); } return; } clicked = true; mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Nardog/sandbox4.js&action=raw&ctype=text/javascript'); mw.loader.using([ 'jquery.textSelection', 'oojs-ui-windows', 'oojs-ui-widgets', 'oojs-ui.styles.icons-interactions', 'oojs-ui.styles.icons-editing-core', 'oojs-ui.styles.icons-editing-advanced' ]); }; mw.hook('wikiEditor.toolbarReady').add($textarea => { $textarea.wikiEditor('addToToolbar', { section: 'main', group: 'insert', tools: { ipainput: { label: 'IPAInput', type: 'button', oouiIcon: 'schwa', action: { type: 'callback', execute: openDialog } } } }); }); mw.hook('ve.loadModules').add(addPlugin => { addPlugin(() => { ve.ui.IpaInputCommand = function VeUiIpaInputCommand() { ve.ui.IpaInputCommand.super.call(this, 'ipaInput'); }; OO.inheritClass(ve.ui.IpaInputCommand, ve.ui.Command); ve.ui.IpaInputCommand.prototype.execute = () => { openDialog(); return true; }; ve.ui.commandRegistry.register(new ve.ui.IpaInputCommand()); ve.ui.IpaInputTool = function VeUiIpaInputTool() { ve.ui.IpaInputTool.super.apply(this, arguments); }; OO.inheritClass(ve.ui.IpaInputTool, ve.ui.Tool); ve.ui.IpaInputTool.static.name = 'ipaInput'; ve.ui.IpaInputTool.static.group = 'insert'; ve.ui.IpaInputTool.static.icon = 'schwa'; ve.ui.IpaInputTool.static.title = 'IPA'; ve.ui.IpaInputTool.static.commandName = 'ipaInput'; ve.ui.toolFactory.register(ve.ui.IpaInputTool); }); }); mw.requestIdleCallback(() => { let expiry = mw.storage.get('_EXPIRY_ipainput-cache'); if (!expiry) return; $.get( '//en.wikipedia.org/api/rest_v1/page/title/Module%3AIPA%2Fdata' ).then(response => { if (Date.parse(response.items[0].timestamp) / 1000 > expiry - 604800) { mw.storage.remove('ipainput-cache'); } }); }); }); ['edit', 'submit'].includes(mw.config.get('wgAction')) && (function wiktIpa() { mw.loader.addStyleTag(`.oo-ui-icon-wiktionary{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20'%3E%3Cpath d='M14.95 1c-.15 0-.3 0-.45.03L2.9 2.9a2.26 2.26 0 0 0-1.87 2.6L2.9 17.1a2.26 2.26 0 0 0 2.6 1.86l11.6-1.88a2.26 2.26 0 0 0 1.86-2.6L17.1 2.9A2.27 2.27 0 0 0 14.95 1zm-.03.9c.63.03 1.17.49 1.28 1.14l1.88 11.6c.12.75-.37 1.43-1.12 1.56l-11.6 1.88a1.34 1.34 0 0 1-1.56-1.12L1.92 5.36A1.34 1.34 0 0 1 3.04 3.8l11.6-1.88.28-.02zm.7 2.61-2.83.46.07.39c.6-.09.95-.14 1.08.36.1.6-.91 6.53-.91 6.53s-2.87-5.16-2.98-5.87c-.02-.34.02-.64.86-.7l-.06-.4-3.64.6.07.38c.5-.15 1.01.02 1.43.82l.7 1.33-.72 4.54s-2.93-5.3-3.03-5.9c-.07-.5.45-.64.8-.66l-.06-.38-3.46.56.06.39c.24-.1.84-.07 1.07.32.07.09 4.54 8.44 4.54 8.44l.33-.05 1.02-6.24 2.98 5.59.36-.06s1.42-9.14 1.48-9.3c.05-.26.28-.71.9-.76l-.07-.39z'/%3E%3C/svg%3E")}`); let clicked, dialog, input, $result; let openDialog = async context => { if (clicked) { if (dialog) { let selection = context.$textarea.textSelection('getSelection'); if (selection) { input.setValue(selection); } if ($result) { $result.prev().addBack().remove(); $result = null; } dialog.open({ actions: [{ label: 'Close', flags: ['safe', 'close'] }] }); } return; } clicked = true; await mw.loader.using([ 'oojs-ui-windows', 'oojs-ui-widgets', 'mediawiki.ForeignApi', 'mediawiki.util' ]); let response = await new mw.ForeignApi('//en.wiktionary.org/w/api.php').get({ action: 'query', generator: 'search', gsrsearch: 'deepcat:Pronunciation_templates_by_language', gsrnamespace: 10, gsrlimit: 'max', gsrsort: 'none', formatversion: 2 }); let winMan = new OO.ui.WindowManager(); dialog = new OO.ui.MessageDialog(); winMan.addWindows([dialog]); let items = response.query.pages .map(p => p.title.slice(9)) .sort(Intl.Collator('en-u-kn-true').compare) .map(s => new OO.ui.MenuOptionWidget({ label: s })); let dropdown = new OO.ui.DropdownWidget({ $overlay: dialog.$overlay, menu: { items } }); let $doc = $('<p>'); dropdown.getMenu().on('choose', mw.util.debounce(async item => { let title = 'Template:' + item.getLabel(); let $link = $('<a>').attr({ href: '//en.wiktionary.org/wiki/' + title, target: '_blank', title: title }).text('documentation'); $doc.empty().append('Loading ', $link, '...'); try { let data = await $.get( '//en.wiktionary.org/api/rest_v1/page/html/' + encodeURIComponent(title + '/documentation') ); let text = $($.parseHTML(data)).find('p').first().text() .replace(/\. .*/, '.'); $doc.text(text + ' (').append($link.text('read more'), ')'); dialog.updateSize(); } catch { $doc.empty().append('Failed to load ', $link); } }, 100)).selectItem(items[0]); input = new OO.ui.TextInputWidget({ autocomplete: false, value: context.$textarea.textSelection('getSelection') || mw.config.get('wgTitle') }); let button = new OO.ui.ButtonWidget({ disabled: !input.getValue(), label: 'Get', flags: ['primary', 'progressive'] }).on('click', async () => { button.setDisabled(true); let template = dropdown.getMenu().findSelectedItem().getLabel(); let text = input.getValue(); try { let data = await $.post('//en.wiktionary.org/api/rest_v1/transform/wikitext/to/html', { wikitext: `{{${template}|1=${text}}}`, body_only: true }); if ($result) { $result.children().remove(); } else { $result = $('<div>').text('Result:') .insertAfter(fieldset.$element) .before('<hr>'); } $result.append($.parseHTML(data)) .find('.mw-collapsible').makeCollapsible().end() .find('[id], [about]').removeAttr('id about').end() .find('a').attr('target', '_blank') .filter('[href^="./"]').attr('href', (_, href) => ( '//en.wiktionary.org/wiki' + href.slice(1) )); dialog.updateSize(); } catch {} finally { button.setDisabled(); } }); input.on('change', value => { button.setDisabled(!value); }).connect(button, { enter: ['emit', 'click'] }); let fieldset = new OO.ui.FieldsetLayout({ items: [ new OO.ui.FieldLayout(dropdown, { label: 'Template:', align: 'top' }), new OO.ui.FieldLayout(input, { label: 'Input:', align: 'top' }), new OO.ui.FieldLayout(button) ] }); dropdown.$element.after($doc); dialog.text.$element.append(fieldset.$element/*.on('keydown', e => { e.stopPropagation(); })*/); winMan.$element.appendTo(OO.ui.getTeleportTarget()); dialog.open({ actions: [{ label: 'Close', flags: ['safe', 'close'] }] }); }; mw.hook('wikiEditor.toolbarReady').add($textarea => { $textarea.wikiEditor('addToToolbar', { section: 'main', group: 'insert', tools: { wiktipa: { label: 'WiktIPA', type: 'button', oouiIcon: 'wiktionary', action: { type: 'callback', execute: openDialog } } } }); }); }()); window.scripttesterSkipWarning = true; mw.loader.using(['mediawiki.util', 'mediawiki.storage'], async function scriptTester() { let get = () => new Set(mw.storage.getObject('scripttester')); if (mw.storage.get('scripttester')) { let unloading; window.addEventListener('beforeunload', () => { unloading = true; }); get().forEach(async s => { let isCss = /\.css$/i.test(s); let url = /^(https?:)?\/\/./.test(s) ? s : mw.util.getUrl(s, { action: 'raw', ctype: isCss ? 'text/css' : 'text/javascript' }); if (isCss) { mw.loader.load(url, 'text/css'); return; } try { await mw.loader.getScript(url); } catch (e) { if (unloading) { console.warn(e); return; } mw.notify('Failed to load temporarily installed ' + s, { type: 'error' }); } }); } else if (!window.scripttesterSkipWarning) { await mw.loader.using('oojs-ui-windows'); if (await OO.ui.confirm( 'You take full responsibility for any consequences arising from using ScriptTester.' )) { mw.storage.setObject('scripttester', []); } } await $.ready; if (!document.getElementById('p-tb')) return; let css = mw.loader.addStyleTag('.scripttester-dialog .oo-ui-checkboxMultiselectWidget{margin:0.5em 0;word-break:break-all} .scripttester-dialog .oo-ui-flaggedElement-destructive{float:right}'); let linksShown = mw.config.get('wgNamespaceNumber') > 0 && mw.config.get('wgAction') === 'view'; let updateLinks = (s, unins) => { if (!linksShown) return; $(`.scripttester-link[data-scripttester="${s}"]`) .toggleClass('scripttester-installed', !unins); }; let dialog, multiselect, addButton, removeButton, clearButton; let openDialog = () => { if (!dialog) { dialog = new OO.ui.MessageDialog({ classes: ['scripttester-dialog'] }); let winMan = new OO.ui.WindowManager(); winMan.addWindows([dialog]); multiselect = new OO.ui.CheckboxMultiselectWidget().on('select', () => { removeButton.setDisabled(!multiselect.findSelectedItems().length); }); addButton = new OO.ui.ButtonWidget({ label: 'Add' }).on('click', async () => { dialog.toggle(false); let s = (await OO.ui.prompt('Add a script', { textInput: { placeholder: 'Script page name or URL' } })).trim(); if (!s) return; if (!/^(https?:)?\/\/./.test(s) && !mw.Title.newFromText(s)) { await OO.ui.alert(`"${s}" does not appear to be a valid page name or URL.`); dialog.toggle(true); updateDialog(); return; } mw.storage.setObject('scripttester', [...get().add(s)]); updateLinks(s); }); removeButton = new OO.ui.ButtonWidget({ label: 'Remove' }).on('click', () => { let set = get(); multiselect.findSelectedItems().forEach(item => { let s = item.getLabel(); set.delete(s); updateLinks(s, true); }); mw.storage.setObject('scripttester', [...set]); updateDialog(); }); clearButton = new OO.ui.ButtonWidget({ label: 'Clear', flags: 'destructive' }).on('click', async () => { dialog.toggle(false); if (!(await OO.ui.confirm('Uninstall all scripts?'))) { dialog.toggle(true); return; } mw.storage.setObject('scripttester', []); if (linksShown) { $('.scripttester-installed').removeClass('scripttester-installed'); } dialog.toggle(true); updateDialog(); }); dialog.text.$element.append( multiselect.$element, new OO.ui.ButtonGroupWidget({ items: [addButton, removeButton] }).$element, clearButton.$element ); winMan.$element.appendTo(OO.ui.getTeleportTarget()); } updateDialog(); dialog.open({ message: 'Temporarily installed scripts:', actions: [{ label: 'Done', flags: ['safe', 'close'] }] }); }; let updateDialog = () => { let set = get(); multiselect.clearItems().addItems( [...set].map(s => new OO.ui.CheckboxMultioptionWidget({ label: s })) ); removeButton.setDisabled(true); clearButton.toggle(set.size); dialog.updateSize(); updatePortlet(set.size); }; let updatePortlet = count => { $(portletLink).find('*').addBack().contents().each(function () { if (this.nodeType === 3 && this.textContent.trim()) { this.textContent = `Temporarily installed scripts (${count})`; return false; } }); }; let portletLink = mw.util.addPortletLink('p-tb', '#', `Temporarily installed scripts (${get().size})`) .firstElementChild; portletLink.addEventListener('click', e => { e.preventDefault(); mw.loader.using(['oojs-ui-windows', 'mediawiki.Title'], openDialog); }); window.addEventListener('storage', e => { if (e.key === 'scripttester') { updatePortlet(get().size); } }); if (!linksShown) return; css.textContent += ' .scripttester{font-size:85%;user-select:none} .scripttester::before{content:" "} .scripttester-link::after{content:"[+]"} .scripttester-installed::after{content:"[−]"} #firstHeading > .scripttester{font-size:47%}'; let linkHandler = function () { let s = this.dataset.scripttester; let unins = this.classList.contains('scripttester-installed'); let set = get(); set[unins ? 'delete' : 'add'](s); let success = mw.storage.setObject('scripttester', [...set]); if (success) { mw.notify((unins ? 'Uninstalled ' : 'Installed ') + s, { tag: 'scripttester' }); updateLinks(s, unins); updatePortlet(set.size); } else { mw.notify(`Couldn't ${unins ? 'un' : ''}install ${s}`, { tag: 'scripttester', type: 'error' }); } }; if ([2, 4, 8].includes(mw.config.get('wgNamespaceNumber')) && ['javascript', 'css'].includes(mw.config.get('wgPageContentModel')) ) { let s = mw.config.get('wgPageName').replaceAll('_', ' '); $('<span>').addClass('scripttester').append( $('<a>').attr({ class: 'scripttester-link' + (get().has(s) ? ' scripttester-installed' : ''), tabindex: 0, role: 'button', 'data-scripttester': s }).text('\u200e').on('click', linkHandler) ).appendTo(document.getElementById('firstHeading')); return; } mw.hook('wikipage.content').add($content => { let set = get(); let ns = mw.config.get('wgFormattedNamespaces'); let re = new RegExp(`^(${ns[2]}|${ns[4]}|${ns[8]}):.+\\.([Cc][Ss]|[Jj])[Ss]$`); $content.find('a:not(.external, .new)').after(function () { let s = this.title; if (!s || !re.test(s)) return; return $('<span>').addClass('scripttester').append( $('<a>').attr({ class: 'scripttester-link' + (set.has(s) ? ' scripttester-installed' : ''), tabindex: 0, role: 'button', 'data-scripttester': s }).text('\u200e').on('click', linkHandler) ); }); }); }); ['edit', 'submit'].includes(mw.config.get('wgAction')) && mw.hook('wikiEditor.toolbarReady').add($textarea => { $textarea.on('keydown', async e => { if (e.which !== 72 || e.shiftKey || e.altKey || [e.ctrlKey, e.metaKey].filter(Boolean).length !== 1) return; e.preventDefault(); let context = $textarea.data('wikiEditorContext'); context.api.openDialog(context, 'search-and-replace'); await mw.loader.using('jquery.textSelection'); let tb = document.getElementById('wikieditor-toolbar-replace-search'); let sel = $textarea.textSelection('getSelection'); if (sel) { tb.value = sel; } tb.focus(); }); $(document.body).on('dialogclose', '#wikieditor-toolbar-replace-dialog', () => { $textarea[0].focus(); }); }); mw.config.get('wgNamespaceNumber') && mw.config.get('wgAction') !== 'history' && (function catChangeHighlighter() { let run; mw.hook('wikipage.content').add($content => { $content.find('.mw-changeslist-line.mw-changeslist-src-mw-categorize').each(function () { let text = this.querySelector('.comment').textContent; if (text.includes(' added ')) { this.classList.add('catchangehighlighter-addition'); } else if (text.includes(' removed ')) { this.classList.add('catchangehighlighter-removal'); } if (run) return; run = true; mw.loader.addStyleTag('.catchangehighlighter-addition :is(span, td) > .comment{background:#f5fff5} .catchangehighlighter-removal :is(span, td) > .comment{background:#fff5f5}'); }); }); }()); (mw.config.exists('wgDiffNewId') || mw.config.get('wgAction') !== 'view' || [-1, 14].includes(mw.config.get('wgNamespaceNumber'))) && (function diffFontSwitcher() { mw.loader.addStyleTag('.diff-lineno{cursor:pointer}'); $(document.body).on('click keydown', '.diff-lineno', function (e) { if (e.type === 'keydown' && ( e.which !== 13 && e.which !== 32 || e.ctrlKey || e.shiftKey || e.metaKey || e.altKey )) { return; } e.preventDefault(); this.closest('.diff').classList.toggle('difffontswitcher-enabled'); }); mw.hook('wikipage.diff').add($diff => { $diff.find('.diff-lineno').attr({ tabindex: 0, role: 'button' }); }); }()); mw.trackSubscribe('resourceloader.exception', (topic, data) => { mw.notify(data.exception, { autoHide: false, title: `Exception in ${data.source} in module ${data.module}`, type: 'warn' }); }); mw.config.get('skin') === 'vector-2022' && $(document).one('click', '.mw-interlanguage-selector', async () => { await mw.loader.using('ext.uls.mediawiki'); $.fn.uls.Constructor.prototype.getMenuWidth = () => 'narrow'; mw.uls.getFrequentLanguageList = () => []; }); ['edit', 'submit'].includes(mw.config.get('wgAction')) && mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/DiffUndo.js&action=raw&ctype=text/javascript', 's'); m3pjcozsgqholn4yd1vbzpwiuqug7jz 754911 754909 2026-08-04T20:12:54Z Nardog 40946 754911 javascript text/javascript /* globals ve */ // window.dn?.disable?.(); window.diffnowExtraSelector = '.catchangesviewer-table td:nth-child(2) > .mw-changeslist-links > span:first-child > a, .listtools-last > a, .mw-special-AbuseLog form li > a[href^="/wiki/Special:AbuseLog/"], .unseendiff'; (mw.config.get('wgNamespaceNumber') || mw.config.get('wgAction') !== 'view') && mw.loader.using(['mediawiki.util', 'user.options'], function diffNow() { let isHist = mw.config.get('wgAction') === 'history'; let selector = `:where(.mw-changeslist-diff, .mw-changeslist-diff-cur, .mw-changeslist-groupdiff, .mw-fr-reviewlink > a, .mw-fr-hist-difflink a, .mw-history-histlinks a, .mw-logevent-loglines a[href*="&diff="], .mw-fr-pending-changes-table .cdx-docs-link, .mw-special-AbuseLog #mw-content-text > form > ul > li > a:last-of-type[href*="&diff="], .mw-deletedcontribs-tools > a:first-child, .mw-undelete-revlist > li > a:first-of-type[href*="&diff="], #merge li > a:first-of-type[href*="&diff="], .mw-history-compareselectedversions-button, .consecudiff > a${window.diffnowExtraSelector ? ', ' + window.diffnowExtraSelector : ''}):not(.external${window.diffnowNegativeSelector ? ', ' + window.diffnowNegativeSelector : ''})`; let switchSelector = '.diffnow-differences-prevlink, .diffnow-differences-nextlink, .diffnow-switch'; let diffs = [], count = 0, expanded = new WeakSet(); window.dn = diffs; let sanitize = href => { let url = new URL(href, location.href); let newParams = new URLSearchParams(), hasId; ['diff', 'direction', 'oldid', 'target', 'timestamp'].forEach(k => { if (url.searchParams.has(k)) { let v = url.searchParams.get(k); newParams.set(k, v); hasId = hasId || v > 0; } }); if (!hasId && url.searchParams.has('title')) { return `${url.search.match(/[&?](title=[^&]*)/)[1]}&${newParams}`; } return String(newParams); }; let getDiff = comp => { if (typeof comp === 'string') { let sanitized = sanitize(comp); return diffs.find(diff => ( diff.queries.has(comp) || diff.queries.has(sanitized) )); } return diffs.find(diff => diff.$diff.is(comp)); }; let containers = []; window.dn._c = containers; class Diff { constructor(href, $link) { this.aborter = new AbortController(); this.queries = new Set(); this.setLink(href, $link); diffs.push(this); } setLink(href, $link) { if (this.href) { if ($link.is(this.$link)) { if (this.aborter) { this.aborter.abort(); } else if (this.isVisible()) { this.close(); } else { this.$anchor = this.getAnchor(); this.append(); } return; } if ($link.is(this.$outerLink) && this.isVisible()) { this.close(); return; } if (this.getAnchor($link).is(this.$anchor)) { this.markLink(false); } else { this.close(); } } this.href = href; this.queries.add(href); let sanitized = sanitize(href); if (sanitized) { this.queries.add(sanitized); } this.$link = $link; this.isSwitch = $link.is(switchSelector); if (!this.isSwitch) { this.$outerLink = $link; } this.$anchor = this.getAnchor(); if (this.aborter) { this.markLink(); } else { this.append(); } } append(response) { if (response) { delete this.aborter; this.findDiff(response); this.setQueries(); this.polishDiff(); } let $container = this.getContainer(true); if (!$container[0].isConnected) { if (this.$anchor.is('tr')) { let cols = this.$anchor.children().get() .reduce((acc, cell) => acc + cell.colSpan, 0); $('<tr>').addClass('diffnow-row').append( $('<td>').attr('colspan', cols).append($container) ).insertAfter(this.$anchor); } else if (this.$anchor.is('div')) { this.$anchor.after($container); } else { this.$anchor.append($container); } } this.attached = true; filterContexts(this.$diff); window.addEventListener('resize', onResize); if (!this.$link.hasClass('diffnow-link-loaded')) { mw.requestIdleCallback(() => { this.markLinks(); this.markSeen(); }); } if ($container[0].getBoundingClientRect().top < 0) { $container[0].scrollIntoView(); } this.markLink(true); if (response) { mw.hook('wikipage.content').fire($container); } } findDiff(response) { if (typeof response !== 'string') throw ''; let $diff = $($.parseHTML(response)) .filter('.diff[data-mw-interface]'); if (!$diff.length) { $diff = $diff.end().find('.diff[data-mw-interface]'); if (!$diff.length) throw ''; } this.$diff = $($diff[0]); } setQueries() { let newPerma = this.$diff[0].querySelector( '#mw-diff-ntitle1 > strong > a, #differences-nextlink' ); if (newPerma) { this.newId = parseInt(mw.util.getParamValue('oldid', newPerma.search)); this.newTitle = newPerma.title; } let oldPerma = this.$diff[0].querySelector( '#mw-diff-otitle1 > strong > a, #differences-prevlink' ); if (oldPerma) { this.oldId = parseInt(mw.util.getParamValue('oldid', oldPerma.search)); this.oldTitle = oldPerma.title; } let isSamePage = !oldPerma || this.newTitle === this.oldTitle; this.isSingle = isSamePage && !this.$diff[0].querySelector('.diff-multi'); if (this.newId) { if (this.newId === this.oldId) { throw 'nonfatal'; } if (this.oldId) { this.queries.add(`diff=${this.newId}&oldid=${this.oldId}`); } this.isLast = !this.$diff[0].querySelector('#differences-nextlink'); if (this.isSingle) { this.queries.add(`diff=prev&oldid=${this.newId}`); if (this.isLast && this.oldId) { this.queries.add(`diff=0&oldid=${this.oldId}`); this.queries.add(`diff=cur&oldid=${this.oldId}`); } } } if (this.oldId && this.isSingle) { this.queries.add(`diff=next&oldid=${this.oldId}`); } this.queries.forEach(q => { let other = getDiff(q); if (other && other !== this) { other.setLink(this.href, this.$link); throw 'nonfatal'; } }); if (this.oldId) { diffs.forEach(diff => { if (diff.isLast && diff.newId === this.oldId) { diff.markNotLast(this); } }); } } async polishDiff() { mw.hook('wikipage.diff').fire(this.$diff); let prevLink = this.$diff[0].querySelector('#differences-prevlink'); let nextLink = this.$diff[0].querySelector('#differences-nextlink'); $([prevLink, nextLink].filter(Boolean)).attr('href', (_, href) => ( href.replace('&diffonly=1', '').replace('&expand-url=1', '') )); [['previousdiff', prevLink], ['nextdiff', nextLink]].forEach(([key, link]) => { if (link && !mw.messages.exists(key)) { mw.messages.set(key, link.textContent); } }); if (!nextLink && this.isLast) { this.$diff.find('#mw-diff-ntitle4').empty().append( $('<a>').attr({ class: 'diffnow-checknext diffnow-switch', href: mw.util.getUrl(this.newTitle, { diff: 'next', oldid: this.newId }), title: this.newTitle }).text('Check for newer edit') ); } this.$diff.find('.mw-diff-movedpara-left, .mw-diff-movedpara-right') .attr('href', (_, href) => `#diffnow-${count}-${href.slice(1)}`); this.$diff.find('a[name^="movedpara"]') .attr('name', (_, name) => `diffnow-${count}-${name}`); count++; this.$diff.find('[id]').addClass(function () { return 'diffnow-' + this.id; }).removeAttr('id'); if (this.$diff[0].querySelector('.mw-thanks-thank-link')) { mw.loader.load('ext.thanks.corethank'); mw.config.set('thanks-confirmation-required', true); } if (!this.isSingle) { let keys = ['nextdiff', 'previousdiff'] .filter(s => !mw.messages.exists(s)); if (keys.length) { await mw.loader.using('mediawiki.api'); await new mw.Api().loadMessagesIfMissing(keys); } this.$diff.find('.diff-multi').append( $('<div>').append( $('<div>').append( $('<a>').attr({ class: 'diffnow-multinext diffnow-switch', href: mw.util.getUrl(this.oldTitle, { diff: 'next', oldid: this.oldId }), title: this.oldTitle }).text(mw.msg('nextdiff')) ), $('<div>').append( $('<a>').attr({ class: 'diffnow-multiprev diffnow-switch', href: mw.util.getUrl(this.newTitle, { diff: 'prev', oldid: this.newId }), title: this.newTitle }).text(mw.msg('previousdiff')) ) ) ); } } getAnchor($link) { let isSwitch; if ($link) { isSwitch = $link.is(switchSelector); } else { $link = this.$link; isSwitch = this.isSwitch; } if (isSwitch) { return getDiff($link.closest('.diff')).$anchor; } return $link.closest('li, tr, .mw-history-compareselectedversions'); } getContainer(create) { let $container = this.$anchor.is('tr') ? this.$anchor.next('.diffnow-row').find('> td > .diffnow') : this.$anchor.is('div') ? this.$anchor.next('.diffnow') : this.$anchor.children('.diffnow'); if (create) { if ($container.length) { this.attachDiff($container); } else { $container = this.createContainter(); } } return $container; } attachDiff($container) { let $oldDiff = $container.children('.diff'); if (!$oldDiff.is(this.$diff)) { if ($oldDiff.length) { getDiff($oldDiff).detachDiff(); } $container.children('.diffnow-tools-top').after(this.$diff); } $container.find('.diffnow-difflink').attr('href', this.href); } createContainter() { let $container = containers.pop(); if ($container) { this.attachDiff($container); return $container; } return $('<div>').addClass('diffnow').append( $('<div>').addClass('diffnow-tools diffnow-tools-top').append( $('<button>').attr({ class: 'diffnow-button diffnow-close oo-ui-icon-collapse', title: 'Hide this diff' }) ), this.$diff, $('<div>').addClass('diffnow-tools diffnow-tools-bottom').append( $('<button>').attr({ class: 'diffnow-button diffnow-scrollup oo-ui-icon-collapse', title: 'Scroll to top' }), $('<button>').attr({ class: 'diffnow-button diffnow-scrolldown oo-ui-icon-expand', title: 'Scroll to bottom' }), $('<button>').attr({ class: 'diffnow-button diffnow-close oo-ui-icon-close', title: 'Hide this diff' }), $('<a>').attr({ class: 'diffnow-button diffnow-difflink oo-ui-icon-newWindow oo-ui-image-progressive', href: this.href, target: '_blank', title: 'Open diff page' }) ) ) .on('click', '.diffnow-close', this.collapse) .on('click', '.diffnow-scrollup', this.scrollUp) .on('click', '.diffnow-scrolldown', this.scrollDown) .on( 'click keydown', '.diffnow-context-collapsed > td, .diffnow-context-expanded > .diff-marker', this.toggleContext ); } isVisible() { return !!this.$diff?.[0].offsetParent; } markLink(visible = this.isVisible()) { if (this.isSwitch) { this.getContainer().toggleClass('diffnow-switching', !!this.aborter); if (!this.$outerLink) return; } this.$outerLink .toggleClass('diffnow-link-loading', !!this.aborter) .toggleClass('diffnow-link-loaded', !this.aborter) .toggleClass('diffnow-link-open', !this.isSwitch && visible); } markLinks() { $(selector).filter((_, link) => { let href = link.getAttribute('href'); return this.queries.has(href) || this.queries.has(sanitize(href)); }).addClass('diffnow-link-loaded'); if (!isHist) return; $('.mw-history-compareselectedversions-button').toggleClass( 'diffnow-link-loaded', !!getDiff(getHistHref()) ); } markSeen() { if (this.$link.is('.mw-rcfilters-ui-highlights-enhanced-nested:nth-child(n+2) .mw-changeslist-diff')) { this.$anchor.nextAll().addBack() .removeClass('mw-changeslist-watchedunseen mw-changeslist-line-watched mw-enhanced-watched') .addClass('mw-changeslist-watchedseen mw-changeslist-line-not-watched'); return; } let $li = this.$anchor.closest('li, table'); let $unseen = $li.filter('.mw-changeslist-watchedunseen') .add($li.find('.mw-changeslist-watchedunseen')); if (!$unseen.length) return; $unseen.removeClass('mw-changeslist-watchedunseen') .addClass('mw-changeslist-watchedseen'); $li.filter('.mw-changeslist-line-watched') .add($li.find('.mw-changeslist-line-watched')) .removeClass('mw-changeslist-line-watched mw-enhanced-watched') .addClass('mw-changeslist-line-not-watched'); } async markNotLast(newDiff) { this.isLast = false; this.queries = new Set([...this.queries].filter(q => ( !/^title=|(?:^|[&?])(?:diff|oldid)=(?:0|cur)(?:&|$)/.test(q) ))); this.$diff.find( '.diffnow-mw-diff-ntitle1 a, .diffnow-mw-diff-ntitle1 .history-deleted' ).first().text( newDiff.$diff.find( '#mw-diff-otitle1 a, #mw-diff-otitle1 .history-deleted' ).first().text() ); this.$diff.find('.diff-ntitle .mw-diff-edit a') .attr('href', (_, href) => href + '&oldid=' + this.newId); if (!mw.messages.exists('nextdiff')) { await mw.loader.using('mediawiki.api'); await new mw.Api().loadMessagesIfMissing(['nextdiff']); } this.$diff.find('.diffnow-checknext') .attr('class', 'diffnow-differences-nextlink') .text(mw.msg('nextdiff')); } detachDiff() { this.$diff?.detach(); this.markLink(false); } close(adjustFocus) { this.detachDiff(); let $container = this.getContainer(); if ($container.length) { let $row = $container.closest('.diffnow-row'); containers.push($container.detach()); $row.remove(); } if (!adjustFocus) return; setTimeout(() => { this.$anchor.find('a[href]').last().each(function () { this.focus(); this.blur(); }); }); } collapse(e) { e.preventDefault(); let $container = $(e.delegateTarget); let diff = getDiff($container.children('.diff')); if (diff.$link[0].getBoundingClientRect().top < 0) { diff.$anchor[0].scrollIntoView(); $container.fadeOut('fast', () => { diff.close(true); setTimeout(() => { diff.$anchor[0].scrollIntoView(); $container.removeAttr('style'); }); }); } else { diff.close(true); } } scrollUp(e) { e.preventDefault(); let y = e.delegateTarget.getBoundingClientRect().top; let ch = document.documentElement.clientHeight, buffer = ch / 2; y -= y + 5 > buffer ? ch : buffer; window.scrollBy({ top: y, behavior: 'smooth' }); } scrollDown(e) { e.preventDefault(); let y = e.delegateTarget.getBoundingClientRect().bottom; let buffer = document.documentElement.clientHeight / 2; if (y - 5 > buffer) { y -= buffer; } window.scrollBy({ top: y, behavior: 'smooth' }); } toggleContext(e) { if (e.type === 'keydown' && ( e.which !== 13 && e.which !== 32 || e.ctrlKey || e.shiftKey || e.metaKey || e.altKey )) { return; } e.preventDefault(); let $row = $(e.target.closest('tr')); if ($row.hasClass('diffnow-context-expanded')) { $row.removeClass('diffnow-context-expanded') .addClass('diffnow-context-collapsed') .children().attr({ tabindex: 0, role: 'button', title: 'Expand' }); expanded.delete($row[0]); } else { $row.removeClass('diffnow-context-collapsed') .addClass('diffnow-context-expanded') .children('.diff-context').removeAttr('tabindex role title') .siblings('.diff-marker').attr('title', 'Collapse'); expanded.add($row[0]); } } destroy() { diffs.splice(diffs.indexOf(this), 1); this.$link.removeClass('diffnow-link-loading diffnow-link-loaded diffnow-link-open'); this.getContainer().removeClass('diffnow-switching'); } } let filterContexts = $diff => { $diff.find('.diff-context.diff-side-deleted > div').each(function () { let $row = $(this.closest('tr')) .removeClass('diffnow-context-expanded'); if (this.scrollHeight > this.clientHeight) { if (expanded.has($row[0])) { $row.addClass('diffnow-context-expanded') .children('.diff-marker').attr({ tabindex: 0, role: 'button', title: 'Collapse' }); } else { $row.addClass('diffnow-context-collapsed').children().attr({ tabindex: 0, role: 'button', title: 'Expand' }); } } else { $row.removeClass('diffnow-context-collapsed') .children().removeAttr('tabindex role title'); } }); }; let onResize = mw.util.debounce(() => { filterContexts($('.diffnow > .diff')); }, 250); let notif; let showError = async (href, msg) => { notif = await mw.notify([ document.createTextNode(msg || `Couldn't load the diff`), $('<p>').append( $('<a>').attr({ href: href, target: '_blank' }).text('Open it in a new tab') )[0] ], { autoHideSeconds: 'long', tag: 'diffnow', type: 'error' }); }; let getHistHref = () => { let formData = new FormData(document.getElementById('mw-history-compare')); return mw.util.getUrl(null, { diff: formData.get('diff'), oldid: formData.get('oldid') }); }; $(document.body).on('click.diffnow', 'a, .mw-history-compareselectedversions-button', async function (e) { if (e.ctrlKey || e.shiftKey || e.metaKey || e.altKey || !this.matches(selector) && !this.matches(switchSelector) ) { return; } e.preventDefault(); let $link = $(this); let isCompare = $link.hasClass('mw-history-compareselectedversions-button'); let href = isCompare ? getHistHref() : this.pathname + this.search; let diff = getDiff(href); try { if (diff) { diff.setLink(href, $link); return; } if (!isCompare && this.origin !== location.origin) { throw ''; } diff = new Diff(href, $link); let url = new URL(href, location.href); url.searchParams.set('diffonly', 1); url.searchParams.set('action', 'render'); let promise = fetch(url, { signal: diff.aborter.signal }); mw.loader.using(['mediawiki.diff', 'mediawiki.diff.styles']); if (notif) { notif.close(); notif = null; } diff.append(await (await promise).text()); } catch (error) { if (diff && !diff.attached) { diff.destroy(); } if (error.name === 'AbortError') { notif = await mw.notify('Diff loading canceled', { tag: 'diffnow' }); } else if (error !== 'nonfatal') { showError(href, error); console.error(error); } } }); let css = mw.loader.addStyleTag(`${selector} { background-image: url(/w/resources/lib/ooui/themes/wikimediaui/images/icons/expand.svg); background-position: right; background-repeat: no-repeat; background-size: 10px 10px; padding-right: 12px; } .mw-history-compareselectedversions-button { background-position: right 6px center; background-size: 14px 14px; padding-right: 24px !important; } .skin-timeless .mw-history-compareselectedversions-button { background-image: url(/w/resources/lib/ooui/themes/wikimediaui/images/icons/expand-invert.svg); } .skin-timeless .mw-history-compareselectedversions-button.diffnow-link-loaded { background-image: url(/w/resources/lib/ooui/themes/wikimediaui/images/icons/reload-invert.svg) !important; } .skin-timeless .mw-history-compareselectedversions-button.diffnow-link-open { background-image: url(/w/resources/lib/ooui/themes/wikimediaui/images/icons/collapse-invert.svg) !important; } .diffnow-link-loading { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20'%3E%3Cstyle type='text/css'%3Ecircle%7Banimation:bounce-delay 600ms infinite ease-in-out both;animation-delay:-80ms;transform-origin:center;transform-box:fill-box%7Dcircle:first-of-type%7Banimation-delay:-160ms%7Dcircle:last-of-type%7Banimation-delay:0ms%7D@keyframes bounce-delay%7B0%25,50%25,100%25%7Btransform:scale(0)%7D20%25%7Bopacity:0.87;transform:scale(1)%7D%7D%3C/style%3E%3Ccircle cx='2.5' cy='10' r='2.5'/%3E%3Ccircle cx='10' cy='10' r='2.5'/%3E%3Ccircle cx='17.5' cy='10' r='2.5'/%3E%3C/svg%3E") !important; } .diffnow-link-loaded { background-image: url(/w/resources/lib/ooui/themes/wikimediaui/images/icons/reload.svg) !important; } .diffnow-link-open, .diffnow-context-expanded > .diff-marker { background-image: url(/w/resources/lib/ooui/themes/wikimediaui/images/icons/collapse.svg) !important; } .diffnow { background: var(--background-color-base, #fff); border: var(--border-base, 1px solid #a2a9b1); border-radius: 4px; position: relative; } .mw-history-compareselectedversions + .diffnow { margin-top: 0.3em; } .diffnow-tools { display: flex; position: sticky; background-color: var(--background-color-backdrop-light, rgba(255,255,255,0.65)); z-index: 1; } .diffnow-tools-top { top: 0; border-radius: 4px; } .diffnow-tools-bottom { bottom: 0; } .diffnow-tools > .diffnow-button { cursor: pointer; height: 24px; padding: 0; box-sizing: content-box; background-position: center; background-repeat: no-repeat; background-size: 16px 16px; background-color: var(--background-color-transparent, transparent); flex-grow: 1; } .diffnow-tools > .diffnow-button:hover { background-color: var(--background-color-button-quiet--hover, rgba(0,24,73,0.027)); } .diffnow-tools > .diffnow-button:active { background-color: var(--background-color-button-quiet--active, rgba(0,24,73,0.082)); } .diffnow-tools-top > .diffnow-button { border: none; border-radius: 3px 3px 0 0; } .diffnow-tools-bottom > .diffnow-button { border: var(--border-base, 1px solid #a2a9b1); border-radius: 99px; margin: 4px; height: 20px; } .diffnow-switching > .diff { transition: opacity 200ms; opacity: 0.4; } .diffnow-checknext, .diffnow-checknext:visited { color: var(--color-subtle, #54595d); } .diffnow :not(.diffnow-context-expanded) > .diff-context > div { overflow: hidden; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; } .diffnow-context-collapsed > td, .diffnow-context-expanded > .diff-marker { cursor: pointer !important; background-position: center; background-repeat: no-repeat; background-size: 12px 12px; } .diffnow-context-collapsed > .diff-marker { background-image: url(/w/resources/lib/ooui/themes/wikimediaui/images/icons/expand.svg); } .diffnow-context-collapsed > .diff-context a { pointer-events: none; } .diffnow .diff-multi > div { display: flex; justify-content: space-around; } .diffnow > .diff td div { word-break: break-word; } .diffnow .mw-diff-inline-changed ins, .diffnow .mw-diff-inline-changed del { white-space: pre-wrap; } .diffnow-row .diffnow { border: none; } .diffnow-row > td { padding: 0 !important; } td.mw-changeslist-line-inner { width: 100%; } .mw-enhanced-rc .diffnow > .diff td { padding: 0.33em 0.5em; } .cdx-table__table-wrapper:has(.diffnow-row) { overflow-x: visible; } span.mw-history-histlinks-current, span.mw-history-histlinks-previous { padding-right: 12px; } .client-js .diffnow .mw-anonuserlink { padding-right: 0; }`); mw.loader.using(['oojs-ui.styles.icons-movement', 'oojs-ui.styles.icons-interactions']); diffs._disable = () => { $(document.body).off('.diffnow'); css.remove(); }; if (isHist) { $(document.body).on('change.diffnow', '#mw-history-compare', function () { let $buttons = $('.mw-history-compareselectedversions-button'); let diff = getDiff(getHistHref()); if (diff) { $buttons.addClass('diffnow-link-loaded'); if ($buttons.is(diff.$link) && diff.isVisible()) { diff.$link.addClass('diffnow-link-open'); } else { $buttons.removeClass('diffnow-link-open'); } } else { $buttons.removeClass('diffnow-link-loaded diffnow-link-open'); } }); } let added, tempLoaded, ipInfoLoaded; mw.hook('wikipage.content').add(async () => { await new Promise(mw.requestIdleCallback); if (!document.querySelector(selector)) return; let modules = ['mediawiki.diff', 'mediawiki.diff.styles']; let cspn = mw.config.get('wgCanonicalSpecialPageName'); let loadTemp = !tempLoaded && Number(mw.user.options.get('checkuser-temporary-account-enable')) && !['Recentchanges', 'Recentchangeslinked', 'Watchlist'].includes(cspn); if (loadTemp) { modules.push('ext.checkUser.tempAccounts', 'ext.checkUser.styles'); } if (Number(mw.user.options.get('checkuser-userinfocard-enable'))) { modules.push('ext.checkUser.userInfoCard'); } let loadIpInfo; if (Number(mw.user.options.get('ipinfo-beta-feature-enable'))) { modules.push('ext.ipInfo', 'ext.ipInfo.styles'); loadIpInfo = !ipInfoLoaded && ['Contributions', 'DeletedContributions', 'IPContributions'].includes(cspn); } let promise = mw.loader.using(modules); if (loadTemp || loadIpInfo) { tempLoaded = loadTemp; ipInfoLoaded = loadIpInfo; await promise; // https://gerrit.wikimedia.org/g/mediawiki/core/+/master/resources/src/startup/mediawiki.loader.js let makeRequire = (moduleObj, basePath) => moduleName => { let relParts = moduleName.match(/^((?:\.\.?\/)+)(.*)$/); if (!relParts) { return mw.loader.require(moduleName); } let baseDirParts = basePath.split('/'); baseDirParts.pop(); let prefixes = relParts[1].split('/'); prefixes.pop(); let prefix; while ((prefix = prefixes.pop())) { if (prefix === '..') { baseDirParts.pop(); } } let fileName = baseDirParts.join('/'); if (fileName) { fileName += '/'; } fileName += relParts[2]; if (Object.hasOwn(moduleObj.packageExports, fileName)) { return moduleObj.packageExports[fileName]; } let scriptFiles = moduleObj.script.files; if (!Object.hasOwn(scriptFiles, fileName)) { throw Error('Cannot require undefined file ' + fileName); } let result; let fileContent = scriptFiles[fileName]; if (typeof fileContent === 'function') { let moduleParam = { exports: {} }; fileContent(makeRequire(moduleObj, fileName), moduleParam, moduleParam.exports); result = moduleParam.exports; } else { result = fileContent; } moduleObj.packageExports[fileName] = result; return result; }; if (loadTemp) { try { let pack = mw.loader.moduleRegistry['ext.checkUser.tempAccounts']; makeRequire(pack, pack.script.main)('./initOnHook.js')(); } catch {} } if (loadIpInfo) { try { let pack = mw.loader.moduleRegistry['ext.ipInfo']; makeRequire(pack, pack.script.main)('./popup/init.js')(); } catch {} } } if (added || !document.getElementById('p-cactions')) return; added = true; let callback = (records, observer) => { if (records[0].target.classList.contains('diffnow-link-loaded')) { observer.takeRecords(); observer.disconnect(); clickFirst(); } }; let clickFirst = () => { let link = document.querySelector(selector); if (!link || link.matches('.diffnow-link-loaded, [href*="&diff=cur&"], .consecudiff > a')) { return; } new MutationObserver(callback).observe(link, { attributeFilter: ['class'] }); link.click(); }; mw.util.addPortletLink('p-cactions', '#', 'Expand all diffs').firstElementChild.addEventListener('click', e => { e.preventDefault(); clickFirst(); }); }); }); // window.smpg?._disable?.(); mw.loader.using('mediawiki.util', async function smoothPager() { let action = mw.config.get('wgAction'); let isHist = action === 'history'; let isPerma = action === 'view' && ['oldid', 'diff'].some(s => mw.util.getParamValue(s)); let ns = !isHist && !isPerma && mw.config.get('wgNamespaceNumber'); let isFile = ns === 6; let isCat = ns === 14; let cspn = ns === -1 && mw.config.get('wgCanonicalSpecialPageName'); if (!(isHist || isPerma || isFile || isCat || cspn)) return; let isSearch = cspn === 'Search'; let isWl = cspn === 'Watchlist'; let isRc = cspn === 'Recentchanges' || cspn === 'Recentchangeslinked'; if ((isWl || isRc) && document.body.classList.contains('mw-rcfilters-enabled')) { return; } let isContribs = cspn === 'Contributions' || cspn === 'IPContributions'; let o = { useRender: isCat || isWl || isRc, selector: isPerma ? '#bodyContent' : isFile ? '#mw-imagepage-section-filehistory' : isCat ? '.mw-category-generated' : '#mw-content-text', outerSelectors: [], linkSelector: isPerma ? '#differences-prevlink, #differences-nextlink, #mw-diff-ntitle1 > strong > a, #mw-diff-otitle1 > strong > a, #mw-revision-nav > a, .fr-diff-to-stable > a' : isCat ? '#mw-subcategories > a, #mw-pages > a, #mw-category-media > a' : isWl ? '#ca-nstab-special > a, .mw-watchlist-toollink-active > a, #p-associated-pages .selected > a' : isRc ? '#ca-nstab-special > a, .rclinks > a, .rcshowhideoption > a, .rclistfrom > a' : `#ca-nstab-special > a, .mw-pager-navigation-bar > a, .TablePager_nav > .oo-ui-widget-enabled > a, .mw-datatable th > a, .cdx-table-pager .cdx-button--fake-button--enabled, .cdx-table__table__cell--has-sort > a, .mw-prefixindex-nav > a, .mw-allpages-nav > a, .CategoryTreeParents .CategoryTreeLabel, .mw-special-Newpages form div > a, .mw-abusefilter-history-buttons a${isHist ? ', #ca-history > a' : isSearch ? ', .search-types a, .searchdidyoumean a' : ''}`, canPost: isSearch || [ 'AbuseFilter', 'ExpandTemplates', 'TemplateSandbox' ].includes(cspn), paramRe: isPerma && /^(?:diff|diffonly|direction|oldid)$/ || isSearch && /^(?:advancedSearch-current|limit|offset|profile|runsuggestion|search|sort|ns\d+)$/, reruns: [ 'mediawiki.action.history', 'mediawiki.special.search', 'ext.advancedSearch.init', 'mediawiki.special.watchlist', 'mediawiki.special.watchlistedit', 'mediawiki.pager.codex', 'mediawiki.misc-authed-curate', 'mediawiki.misc-authed-ooui', 'mediawiki.misc-authed-pref', 'mediawiki.special.unwatchedPages', 'ext.thanks.corethank', 'ext.flaggedRevs.review', 'ext.gadget.watchlist-notice-core' ], pages: [] }; if (isContribs) { o.reruns.push('ext.ipInfo'); } if (!o.useRender) { o.outerSelectors.push('#firstHeading', '.mw-indicators'); if (!isPerma && !isFile) { o.outerSelectors.push('#mw-content-subtitle'); } } o.formSelector = isHist && '#mw-history-searchform' || isSearch && '#search, #powersearch, #searchform' || cspn && `#mw-content-text form${o.canPost ? '': ':not([method="post"])'}`; if (o.formSelector) { o.formSelector += ', .cdx-table-pager__limit-form'; } window.smpg = o; let getHref = () => location.pathname + location.search; let getKey = (href, isPost) => { if (o.paramRe) { let params = new URLSearchParams(); new URL(href, location.href).searchParams.forEach((v, k) => { if (o.paramRe.test(k)) { params.set(k, v); } }); params.sort(); return String(params); } if (isPost) { return href + '??' + Date.now(); } return href; }; class Page { constructor(href, key) { this.href = href || getHref(); this.key = key || getKey(this.href); this.keys = new Set().add(this.key); o.pages.push(this); } init($response) { if ($response) { if (isWl || isRc) { this.$cont = $(document.querySelector(o.selector).cloneNode()) .removeClass('smoothpager-switching') .append($response); } else { let $cont = $response.filter(o.selector).not('script'); if (!$cont.length) { $cont = $response.find(o.selector).not('script'); if (!$cont.length) { throw 'Content not found'; } } $cont.find('script').remove(); this.$cont = $($cont[0]); } this.attached = 0; } else { if (this.$cont) return; this.$cont = $(document.querySelector(o.selector)); this.attached = 1; } this.getConfigAndModules($response); this.getOuterEls($response); this.getDocTitle($response); this.getRev($response); } getConfigAndModules($response) { if (o.useRender) return; if (!$response) { this.config = Object.assign({}, window.RLCONF); } let $scripts = $response ? $response.filter('script').remove() : $('head > script, body > script'); $scripts.map(function () { return this.textContent.match(/\bmw\.config\.set\({.+}\);/g); }).each((_, s) => { let obj; do { try { obj = JSON.parse(s.slice(14, -2)); } catch { let i = s.slice(0, -3).lastIndexOf('});'); if (i === -1) return; s = s.slice(0, i + 3); } } while (!obj); this.config = Object.assign(this.config || {}, obj); }); if (!$response) return; let match = $scripts.first().text().replaceAll('\n', '') .match(/;RLCONF=({.+});RLSTATE=({.+});RLPAGEMODULES=(\[.+\]);$/); if (match) { try { this.config = Object.assign(this.config || {}, JSON.parse(match[1])); } catch {} this.modules = []; try { this.modules.push(...Object.keys(JSON.parse(match[2]))); } catch {} try { this.modules.push(...JSON.parse(match[3])); } catch {} } this.redirect(); } setConfig() { if (!this.config) return; mw.config.set(this.config); if (!o.cur.config) return; Object.entries(o.cur.config).forEach(([k, v]) => { if (!Object.hasOwn(this.config, k) && JSON.stringify(mw.config.get(k)) === JSON.stringify(v) ) { delete mw.config.values[k]; } }); } getOuterEls($response) { this.outerEls = o.outerSelectors.map(selector => ( $response ? $response.find(selector)[0] : document.querySelector(selector) )).map(el => el && !this.$cont[0].contains(el) && el); } setOuterEls() { o.outerSelectors.forEach((selector, i) => { let outer = document.querySelector(selector); if (!outer) return; $(outer).before(this.outerEls[i] || outer.cloneNode()).detach(); }); } getDocTitle($response) { if (o.useRender) return; if ($response) { let $title = $response.filter('title'); if ($title.length) { this.docTitle = $title.text(); } } else { this.docTitle = document.title; } } setDocTitle() { if (this.docTitle) { document.title = this.docTitle; } else if (this.outerEls[0] && o.cur.outerEls?.[0]) { document.title = document.title.replace( o.cur.outerEls[0].textContent.trim(), this.outerEls[0].textContent.trim() ); } } getRev($response) { if (!isPerma) return; let params = new URLSearchParams(this.key); if (params.has('diff')) { if ($response) { let dir = params.get('diff') === 'next' ? 'prev' : 'next'; let id = this.config?.[ dir === 'prev' ? 'wgDiffNewId' : 'wgDiffOldId' ]; if (!id) { id = this.findParam( 'oldid', dir === 'prev' ? '#mw-diff-ntitle1 > strong > a, #differences-prevlink' : '#mw-diff-otitle1 > strong > a, #differences-nextlink' ); } if (id) { this.rev = dir === 'prev' ? id : params.get('oldid'); params.set('diff', dir); params.set('oldid', id); this.keys.add(String(params)); } } else { this.rev = mw.config.get('wgDiffNewId'); let pn = this.findParam( 'title', '#mw-diff-ntitle1 > strong > a, #differences-nextlink' ); if (pn === mw.config.get('wgPageName') && !this.$cont[0].querySelector('.diff[data-mw-interface] .diff-multi') ) { params.set('diff', 'prev'); params.set('oldid', this.rev); this.keys.add(String(params)); let oldId = mw.config.get('wgDiffOldId'); if (oldId) { params.set('diff', 'next'); params.set('oldid', oldId); this.keys.add(String(params)); } } } } else { if ($response) { if (params.has('direction')) { let id = this.config?.wgRevisionId; if (!id) { id = this.findParam( 'oldid', '#t-permalink > a, #p-tb .menu__item--page-actions-overflow-permalink', $response ); } if (id) { this.rev = id; this.keys.add('oldid=' + id); o.cur.keys.add(`direction=${ params.get('direction') === 'next' ? 'prev' : 'next' }&oldid=${id}`); } } else { this.rev = params.get('oldid'); } } else { this.rev = mw.config.get('wgRevisionId'); if (params.has('direction')) { this.keys.add('oldid=' + this.rev); } } } } findParam(param, query, $range = this.$cont) { let search = $range.find(query).prop('search'); return search && mw.util.getParamValue(param, search); } updateLinks() { if (this.rev) { $('#ca-edit > a').attr('href', mw.util.getUrl(null, { action: 'edit', oldid: this.rev })); $('#t-permalink > a, #p-tb .menu__item--page-actions-overflow-permalink') .attr('href', mw.util.getUrl(null, { oldid: this.rev })); } $('#ca-nstab-special > a').attr('href', this.href); $('.printfooter > a').attr('href', location.href).text(location.href); $('#footer-places-mobileview > a, #mw-mf-display-toggle').attr('href', function () { let url = new URL(location.href); url.searchParams.set( 'mobileaction', mw.util.getParamValue('mobileaction', this.search) ); return '//' + this.host + url.pathname + url.search; }); $('#t-urlshortener > a').attr('href', function () { let params = new URLSearchParams(this.search); params.set('url', location.href); return this.pathname + '?' + params; }); } redirect() { if (this.config.wgAction !== mw.config.get('wgAction') || this.config.wgPageName?.replace(/\/.*/, '') !== mw.config.get('wgPageName').replace(/\/.*/, '') ) { location.href = this.href; throw 'redirect'; } } replaceContent(isPopState, isRefresh) { let oldCont = document.querySelector(o.selector); if (this.$cont.is(oldCont)) { throw 'Attempt to replace content with itself'; } if (!isPopState && !isRefresh) { this.pushState(); } $(oldCont).before(this.$cont).detach(); console.log(this.key, o); this.setOuterEls(); this.setDocTitle(); this.setConfig(); if (isSearch && this.attached) { let input = this.$cont[0].querySelector('#searchText > input'); if (input) { input.value = input.defaultValue; } } o.cur = this; this.loadModules(isPopState); this.updateLinks(); } pushState() { history.pushState({ _smpg: this.key }, '', this.href); history.replaceState({ _smpg: this.key }, '', this.href); } async loadModules(isPopState) { o.pending = true; try { await mw.loader.using(this.modules || []); } catch {} finally { o.pending = false; if (!this.attached) { this.fireHooks(); this.rerunModules(); } if (!isPopState) { this.scroll(); } this.attached++; } } fireHooks() { mw.hook('wikipage.content').fire(this.$cont); this.$cont.find('.diff[data-mw-interface]').each(function () { mw.hook('wikipage.diff').fire($(this)); }); this.$cont.find('.catlinks[data-mw-interface]').each(function () { mw.hook('wikipage.categories').fire($(this)); }); mw.hook('htmlform.enhance').fire(this.$cont); } rerunModules() { o.reruns.forEach(m => { let pack = mw.loader.moduleRegistry[m]; if (!pack || pack.state !== 'ready') return; if (typeof pack.script === 'function') { pack.script($, $, mw.loader.require, pack.module); return; } delete mw.loader.moduleRegistry[m]; mw.loader.implement( m + '@' + pack.version, pack.script, pack.style, pack.messages, pack.templates, pack.deprecationWarning ); }); if ((isHist || isContribs || isRc) && window.Twinkle) { window.Twinkle.rollback(); } } scroll() { let form = o.formSelector && this.$cont[0].querySelector(o.formSelector); if (form) { let y = form.getBoundingClientRect().bottom; if (y < 0) { window.scrollBy(0, y); } } else if (this.$cont[0].getBoundingClientRect().top < 0) { this.$cont[0].scrollIntoView(); } } } o.cur = new Page(); let getContent = async (href, state, options) => { if (o.pending) return; o.aborter?.abort(); let key = state?._smpg || getKey(href, !!options); let isRefresh = key === o.cur.key; if (state && isRefresh) return; let oldCont = document.querySelector(o.selector); if (!oldCont) { notify(href, 'No element to replace', 'error'); return; } let page = o.pages.find(p => p.keys.has(key)); if ((state || !isRefresh) && page) { page.href = href; page.replaceContent(!!state, isRefresh); return; } oldCont.classList.add('smoothpager-switching'); let $throbber = $('<div>').addClass('smoothpager-throbber') .appendTo(document.body); if (!isRefresh && o.pages.length === 1) { o.cur.init(); } o.aborter = new AbortController(); let url = href; if (o.useRender) { url = new URL(href, location.href); url.searchParams.set('action', 'render'); } let promise = fetch(url, Object.assign({ signal: o.aborter.signal }, options)); if (notif) { notif.close(); notif = null; } try { let response = await (await promise).text(); if (page) { page.href = href; } else { page = new Page(href, key); } page.init($($.parseHTML(response, !o.useRender))); page.replaceContent(!!state, isRefresh); } catch (e) { if (e.name === 'AbortError') { if (state && o.cur) { o.cur.pushState(); } } else if (e === 'redirect') { notify(href, 'Redirecting...'); } else { notify(href, e || `Couldn't load the page`, 'error'); console.error(e); } } finally { o.aborter = null; oldCont.classList.remove('smoothpager-switching'); $throbber.remove(); } }; let notif; let notify = async (href, msg, type) => { notif = await mw.notify([ document.createTextNode(msg), $('<p>').append( $('<a>').attr({ href: href, target: '_blank' }).text('Open it in a new tab') )[0] ], { autoHideSeconds: 'long', tag: 'smoothpager', type: type }); }; let onClick = function (e) { if (e.ctrlKey || e.shiftKey || e.metaKey || e.altKey || !this.matches(o.linkSelector) || this.origin !== location.origin ) { return; } e.preventDefault(); getContent(this.pathname + this.search); }; let onKeyDown = e => { if (e.ctrlKey || e.shiftKey || e.metaKey || e.altKey || e.target.closest(':read-write') ) { return; } switch (e.which) { case 27: o.aborter?.abort(); break; case 110: case 190: e.preventDefault(); getContent(getHref()); } }; let onPopState = e => { let state = e.originalEvent.state; if (state && !state._smpg) return; history.replaceState(state, '', location.href); getContent(getHref(), state || {}); }; let onSubmit = e => { if (e.originalEvent && ( e.originalEvent.defaultPrevented || !e.originalEvent.isTrusted ) || !o.canPost && e.target.method !== 'get' || !e.target.matches(o.formSelector) ) { return; } let path = e.target.getAttribute('action'); let isScript = path === mw.config.get('wgScript'); let comps = [mw.config.get('wgPageName')]; if (mw.config.get('wgNamespaceNumber') === -1 && comps[0].includes('/')) { comps.push(comps[0].replace(/\/.*/, '')); } comps.push((comps[1] || comps[0]) + '/'); if (!isScript && !comps.some(c => mw.util.getUrl(c) === path)) return; let formData = new FormData(e.target); if (isScript && !isSearch && !comps.includes(formData.get('title').replaceAll(' ', '_'))) { return; } e.preventDefault(); e.stopPropagation(); if (isSearch && e.target.id !== 'searchform') { formData.set('search', OO.ui.infuse($('#searchText')).getValue()); } else if (e.target.method === 'post') { let submitter = e.originalEvent?.submitter; if (submitter?.name) { formData.append(submitter.name, submitter.value); } getContent(path, null, { method: 'POST', headers: { 'Content-Type': e.target.enctype }, body: e.target.enctype === 'multipart/form-data' ? formData : new URLSearchParams(formData) }); return; } getContent(path + '?' + new URLSearchParams(formData)); }; let setPortlet = text => { if (!o.portletLink) return; $(o.portletLink).find('*').addBack().contents().each(function () { if (this.nodeType === 3 && this.textContent.trim()) { this.textContent = text; return false; } }); }; o._enable = () => { o.enabled = true; let $body = $(document.body).on('click', 'a', onClick); if (o.formSelector) { $body.on('submit', onSubmit); } $body.parent().on('keydown', onKeyDown); $(window).on('popstate', onPopState); if (o.css) { o.css.disabled = false; } if (isPerma) { mw.trackSubscribe('counter.MediaWiki.RevisionSlider.event.init', o._disable); } setPortlet('Disable SmoothPager'); }; o._disable = () => { o.enabled = false; $(document.body).off('click', onClick).off('submit', onSubmit) .parent().off('keydown', onKeyDown); $(window).off('popstate', onPopState); o.css.disabled = true; mw.trackUnsubscribe(o._disable); setPortlet('Enable SmoothPager'); }; o._enable(); o.css = mw.loader.addStyleTag(`${o.linkSelector}, .cdx-table__table__sort-button { color: #008064 !important; } :is(${o.linkSelector}, .cdx-table__table__sort-button):visited { color: #006400 !important; } :is(${o.linkSelector}, .cdx-table__table__sort-button):active { color: #faa700 !important; } .cdx-table-pager .cdx-button--fake-button--enabled > .cdx-button__icon { background-color: #14866d; } .smoothpager-switching { opacity: 0.75; } .smoothpager-throbber { width: 20%; height: 0.5vh; position: fixed; top: 0; left: 0; background-color: var(--background-color-progressive, #36c); transform: translate(-100%); animation: smoothpager-throbber 1s infinite linear; } @keyframes smoothpager-throbber { to { transform: translate(700%); } } @media (prefers-reduced-motion: reduce) { .smoothpager-throbber { animation: smoothpager-throbber 1s infinite steps(10,end) !important; width: 40%; } }${o.formSelector ? ` :is(${o.formSelector}) input[type="submit"], :is(${o.formSelector}) .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button { color: var(--color-inverted, #fff); background-color: #14866d; border-color: #14866d; } :is(${o.formSelector}) input[type="submit"]:hover, :is(${o.formSelector}) .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover { background-color: #00af89; border-color: #00af89; } :is(${o.formSelector}) input[type="submit"]:focus, :is(${o.formSelector}) .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus { border-color: #14866d; } :is(${o.formSelector}) .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus { box-shadow: inset 0 0 0 1px #14866d, inset 0 0 0 2px #fff; } :is(${o.formSelector}) input[type="submit"]:active, :is(${o.formSelector}) .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:active { background-color: #0e725a; border-color: #0e725a; box-shadow: none; }` : ''}`); await $.ready; if (!document.getElementById('p-cactions')) return; o.portletLink = mw.util.addPortletLink('p-cactions', '#', 'Disable SmoothPager').firstElementChild; o.portletLink.addEventListener('click', e => { e.preventDefault(); o[o.enabled ? '_disable' : '_enable'](); }); }); window.smartdiffTemplates = [ { names: ['T', 'Tl'], namespace: 10, forceNs: true, end: 1 }, { names: ['Tlx'], namespace: 10, end: 1 }, { names: ['U'], prefix: 'Special:Contributions/', end: 1 }, { names: ['Re', 'Reply to', 'Ping'], prefix: 'Special:Contributions/' }, { names: ['About'], start: 3, skipEven: true }, { names: ['For'], start: 2 }, { names: ['Other uses', 'Otheruses'], end: 1 }, { names: ['Section link', 'Slink'], end: 1 }, { names: ['Redirect'], skipEven: true, noRedirectEnd: 1 }, { names: ['Shortcut'], noRedirectStart: 1 }, { names: ['Tracked', 'Phab'], prefix: 'phab:', end: 1 }, { names: [ 'Distinguish', 'Main', 'Main article', 'Further', 'See also', 'Seealso' ] }, { names: ['Ll'], end: 1 } ]; mw.loader.using([ 'mediawiki.util', 'mediawiki.Title', 'mediawiki.api' ], function smartDiff() { mw.loader.addStyleTag('.smartdiff-link.extiw, .smartdiff-link.external{color:var(--color-progressive,#36c)} .smartdiff-link.extiw:visited, .smartdiff-link.external:visited{color:#795cb2} .smartdiff-link.extiw:active, .smartdiff-link.external:active{color:#faa700}'); class SmartDiff { constructor($diff) { this.$diff = $diff; this.isSpecial = mw.config.get('wgNamespaceNumber') === -1; this.isView = mw.config.get('wgAction') === 'view' && new URLSearchParams(location.search).get('diffonly') !== '1'; this.magicWords = [ '!', 'BASEPAGENAME', 'BASEPAGENAME:', 'BASEPAGENAMEE', 'BASEPAGENAMEE:', 'canonicalurl:', 'CURRENTDAY', 'CURRENTDAY2', 'CURRENTDAYNAME', 'CURRENTDOW', 'CURRENTHOUR', 'CURRENTMONTH', 'CURRENTMONTH1', 'CURRENTMONTHABBREV', 'CURRENTMONTHNAME', 'CURRENTMONTHNAMEGEN', 'CURRENTTIME', 'CURRENTTIMESTAMP', 'CURRENTVERSION', 'CURRENTWEEK', 'CURRENTYEAR', 'DEFAULTCATEGORYSORT:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DISPLAYTITLE:', 'filepath:', 'formatnum:', 'FULLPAGENAME', 'FULLPAGENAME:', 'FULLPAGENAMEE', 'FULLPAGENAMEE:', 'fullurl:', 'gender:', 'int:', 'lc:', 'lcfirst:', 'LOCALDAY', 'LOCALDAY2', 'LOCALDAYNAME', 'LOCALDOW', 'LOCALHOUR', 'LOCALMONTH', 'LOCALMONTH1', 'LOCALMONTHABBREV', 'LOCALMONTHNAME', 'LOCALMONTHNAMEGEN', 'LOCALTIME', 'LOCALTIMESTAMP', 'LOCALWEEK', 'LOCALYEAR', 'msg:', 'msgnw:', 'NAMESPACE', 'NAMESPACE:', 'NAMESPACEE', 'NAMESPACEE:', 'NAMESPACENUMBER', 'NAMESPACENUMBER:', 'ns:', 'NUMBEROFACTIVEUSERS', 'NUMBEROFARTICLES', 'NUMBEROFEDITS', 'NUMBEROFFILES', 'NUMBEROFPAGES', 'NUMBEROFUSERS', 'padleft:', 'PAGENAME', 'PAGENAMEE', 'PAGESINCAT:', 'PAGESINCATEGORY:', 'plural:', 'REVISIONDAY', 'REVISIONDAY:', 'REVISIONDAY2', 'REVISIONDAY2:', 'REVISIONID', 'REVISIONID:', 'REVISIONMONTH', 'REVISIONMONTH:', 'REVISIONMONTH1', 'REVISIONMONTH1:', 'REVISIONSIZE', 'REVISIONTIMESTAMP', 'REVISIONTIMESTAMP:', 'REVISIONUSER', 'REVISIONUSER:', 'REVISIONYEAR', 'REVISIONYEAR:', 'ROOTPAGENAME', 'ROOTPAGENAME:', 'ROOTPAGENAMEE', 'ROOTPAGENAMEE:', 'SHORTDESC:', 'SUBJECTPAGENAME', 'SUBJECTPAGENAME:', 'SUBJECTPAGENAMEE', 'SUBJECTPAGENAMEE:', 'SUBJECTSPACE', 'SUBJECTSPACE:', 'SUBJECTSPACEE', 'SUBJECTSPACEE:', 'SUBPAGENAME', 'SUBPAGENAME:', 'SUBPAGENAMEE', 'SUBPAGENAMEE:', 'TALKPAGENAME', 'TALKPAGENAME:', 'TALKPAGENAMEE', 'TALKPAGENAMEE:', 'TALKSPACE', 'TALKSPACE:', 'TALKSPACEE', 'TALKSPACEE:', 'uc:', 'ucfirst:', 'urlencode:' ]; if (window.smartdiffMagicWords) { this.magicWords.push(...window.smartdiffMagicWords); } try { this.subNs = mw.config.get('wgVisualEditorConfig').namespacesWithSubpages; } catch (e) {} if (!this.subNs) { this.subNs = Object.keys(mw.config.get('wgFormattedNamespaces')) .map(k => Number(k)).filter(ns => ![0, 6, 8].includes(ns)); } this.re = /((?:\[(?:<[^>]*>)?\[|(?<!{(?:<[^>]*>)?){(?:<[^>]*>)?{(?:<[^>]*>)?(?:(?:#(?:<[^>]*>)?invoke|(?:safe)?subst|msg(?:nw)?|raw|int)(?:<[^>]*>)?:)?)(?:\s*(?:<[^>]*>)?&lt;(?:<[^>]*>)?tvar(?:<[^>]*>)?\s(?!&gt;).*?&gt;)?\s*)((?:(?!&[gl]t;)[^\[\]{|}])+?)(?=\s*(?:(?:<[^>]*>)?&lt;(?:<[^>]*>)?\/(?:<[^>]*>)?tvar(?:<[^>]*>)?&gt;(?:<[^>]*>)?\s*)?(?:\||\](?:<[^>]*>)?\]|}(?:<[^>]*>)?}|$))/g; this.headRe = /^((?:(?:<[^>]*>)*=){1,6}(?:<[^>]*>)?\s*)((?:(?!&[gl]t;).)+?)(?=\s*(?:(?:<[^>]*>)?=){1,6}(?:<[^>]*>|\s)*(?:&lt;|$))/g; // https://commons.wikimedia.org/wiki/Special:MediaStatistics this.galleryRe = /^(\s*)((?:(?!&[gl]t;)[^\[\]{|}])+\.(?:<[^>]*>)?(?:apng|djv|djvu|flac|gif|jpe|jpeg|jpg|jps|kar|m4a|m4b|m4p|m4r|m4v|mid|midi|mp2|mp3|mp4|mpa|mpe|mpeg|mpg|mpga|oga|ogg|ogm|ogv|ogx|opus|pdf|png|spx|stl|svg|tif|tiff|wav|webm|webp|xcf))(?=\s*(?:(?:<[^>]*>)?(?:<[^>]*>)?\s*)?(?:\||$))/gi; this.urlRe = /(\[(?:<[^>]*>)?(?=.+\]))?((\bhttps?(?:<[^>]*>)?:)?(?:<[^>]*>)?\/(?:<[^>]*>)?\/(?:<[^>]*>|(?!&[gl]t;)[^\s"<>\[\]{|}])+)/g; if (window.smartdiffTemplates) { this.tempRe = /( data-smartdiff-temp="(\d+)">[^{|}]+)(\|(?:(?!&[gl]t;)[^\[\]{}]|{(?:<[^>]*>)?{(?:<[^>]*>)?!(?:<[^>]*>)?}(?:<[^>]*>)?})+)(?=}(?:<[^>]*>)?}|$)/g; this.tempSubRe = /((?:\s|{(?:<[^>]*>)?{(?:<[^>]*>)?!(?:<[^>]*>)?}(?:<[^>]*>)?}[^<>|]*|<[^>]*>)*(?:\|(?:\s|(?:<[^>]*>)|\d+(?:\s|<[^>]*>)*=|[^\d<=>|](?:[^<=>|]|<[^>]*>)*=(?:[^<=>|]|<[^>]*>)*\|?)*|$))/; this.templates = window.smartdiffTemplates; } this.side = 'old'; $diff.find('.diff-deletedline > div').get().forEach(this.processDiv); this.side = 'new'; $diff.find('.diff-addedline > div').get().forEach(this.processDiv); let $contexts = $diff.find('.diff-context > div'); $contexts.each((i, div) => { if (i % 2) { this.side = 'new'; if (this.propUsed && this.getProp() !== this.getProp('pn', 'old')) { this.processDiv(div); } else { $contexts.eq(i).replaceWith($contexts.eq(i - 1).clone()); } } else { this.side = 'old'; this.propUsed = false; this.processDiv(div); } }); this.links = {}; $diff.find('.smartdiff-link:not(.external)').each((i, link) => { let title = link.title; if (!title) return; if (!this.links.hasOwnProperty(title)) { this.links[title] = []; } this.links[title].push(link); }); this.query(Object.keys(this.links).slice(0, 500)); if (this.hasError) { mw.notify('SmartDiff error', { type: 'warn' }); } } processDiv = div => { if (div.querySelector('a[href]')) return; let origHtml = div.innerHTML; let newHtml = origHtml.replace(this.urlRe, this.urlRep) .replace(this.galleryRe, this.galleryRep) .replace(this.re, this.rep).replace(this.headRe, this.headRep); if (this.tempRe) { newHtml = newHtml.replace(this.tempRe, this.tempRep); } if (newHtml === origHtml) return; newHtml = newHtml.replace(/<(ins|del)(?: [^>]+)?><\/\1>/g, ''); let $newDiv = $('<div>').html(newHtml); if (this.detectErrors($newDiv, newHtml, origHtml, div)) return; div.textContent = ''; $newDiv.contents().appendTo(div); }; rep = ($0, $1, $2) => { if ($0.includes('<a class="smartdiff-link')) { return $0; } let [s, pre, mid, post] = this.stripTags($2, true, $1); let t = mw.Title.newFromText(s), isTemp; if (t) { if ($1.includes('invoke')) { t = mw.Title.makeTitle(828, s); } else if (s[0] === '/') { if (this.subNs.includes(this.getProp('ns'))) { t = mw.Title.newFromText( this.getProp() + s.replace(/\/+$/, '') ); } else if ($1[0] === '{') { t.namespace = 10; } } else if ($1[0] === '{') { if (s[0] === '#') { return $0; } if ($1.includes('int')) { t = mw.Title.makeTitle(8, s); } else if (!t.namespace && s[0] !== ':') { if (!$1.includes('msg') && !$1.includes('raw')) { let match = s.match(/^[^:]+(?::(?=.)|$)/); if (match && this.magicWords.includes(match[0])) { return $0; } } t.namespace = 10; isTemp = true; } } else if ((this.isSpecial || !this.isView) && s[0] === '#') { t.title = this.getProp(); } } else if (s.startsWith('../') && this.subNs.includes(this.getProp('ns'))) { let chunks = s.split('/'); let levelCount = chunks.findIndex(v => v !== '..'); let sup = this.getProp().split('/').slice(0, -levelCount).join('/'); if (sup) { let sub = chunks.slice(levelCount).join('/').replace(/\/+$/, ''); t = mw.Title.newFromText(sub ? sup + '/' + sub : sup); } } if (!t) { return $0; } let attrs = { class: 'smartdiff-link', href: t.getUrl() }; if (this.isSpecial || !this.isView || s[0] !== '#') { attrs.title = t.toText(); } if (isTemp && this.tempRe) { let name = t.getMainText(); let idx = this.templates.findIndex(temp => temp.names.includes(name)); if (idx !== -1) { attrs['data-smartdiff-temp'] = idx; } } return pre + $('<a>').attr(attrs).html(mid)[0].outerHTML + post; }; stripTags(s, decode, pre = '', post = '') { let mid = s, tags = s.match(/<\/?(?:ins|del)(?: [^>]+)?>/g); s = $($.parseHTML(s.replace(/&amp;/g, '&'))).text(); if (decode) { try { s = decodeURIComponent(s); } catch (e) {} } if (tags) { if (tags[0][1] === '/') { pre += tags[0]; mid = `<${tags[0].slice(2, 5)} class="diffchange diffchange-inline">` + mid; } let lastTag = tags.pop(); if (lastTag[1] !== '/') { mid += `</${lastTag.slice(1, 4)}>`; post = lastTag + post; } } return [s, pre, mid, post]; } headRep = ($0, $1, $2) => { if ($0.includes('<a class="smartdiff-link')) { return $0; } let [s, pre, mid, post] = this.stripTags($2, true, $1); s = s.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[^>]*)?>/gi, '$1') .replace(/''(.+?)''/g, '$1') .replace(/^_+|_+$/g, ''); let t = mw.Title.newFromText( `${this.isSpecial || !this.isView ? this.getProp() : ''}#${s}` ); if (!t) { return $0; } let attrs = { class: 'smartdiff-link', href: t.getUrl() }; if (this.isSpecial || !this.isView) { attrs.title = t.toText(); } return pre + $('<a>').attr(attrs).html(mid)[0].outerHTML + post; }; galleryRep = ($0, $1, $2) => { if ($0.includes('<a class="smartdiff-link')) { return $0; } let [s, pre, mid, post] = this.stripTags($2, true, $1); let t = mw.Title.newFromText(s, 6); if (t && t.namespace !== 6) { t = mw.Title.makeTitle(6, s); } if (!t) { return $0; } return pre + $('<a>').attr({ class: 'smartdiff-link', href: t.getUrl(), title: t.toText() }).html(mid)[0].outerHTML + post; }; urlRep = ($0, $1, $2, $3) => { let main = $2, trail; if (!$1) { if (!$3) { return $0; } let re = main.includes('(') ? /[!,.:;?](?:<[^>]*>)?$/ : /[!),.:;?](?:<[^>]*>)?$/; let match = main.match(re); if (match && !/&amp(?:;(?:<[^>]*>)?(?:[a-z]+|(?:#(?:<[^>]*>)?(?:x[\da-f]|\d+)))(?:<[^>]*>)?)?;$/i.test(main) ) { trail = match[0]; main = main.slice(0, -trail.length); } } let [url, pre, mid, post] = this.stripTags(main); if ($1) { pre = $1 + pre; } else if (trail) { post += trail; } return pre + $('<a>').attr({ class: 'smartdiff-link external', href: url, rel: 'nofollow' }).html(mid)[0].outerHTML + post; }; tempRep = ($0, $1, $2, $3) => { if ($3.includes('<a class="smartdiff-link')) { return $0; } let temp = this.templates[$2]; return $1 + $3.split(this.tempSubRe).map((os, i) => { if (!os || i % 2) { return os; } let j = i / 2; if (j < temp.start || j > temp.end || temp.skipOdd && j % 2 || temp.skipEven && j % 2 === 0 ) { return os; } let [s, pre, mid, post] = this.stripTags(os, true); if (temp.prefix) { s = temp.prefix + s; } if (temp.suffix) { s += temp.suffix; } let t = temp.forceNs ? mw.Title.makeTitle(temp.namespace, s) : mw.Title.newFromText(s, temp.namespace); if (!t) { return os; } let params = (j >= temp.noRedirectStart || j <= temp.noRedirectEnd) && { redirect: 'no' }; return pre + $('<a>').attr({ class: 'smartdiff-link', href: t.getUrl(params), title: t.toText() }).html(mid)[0].outerHTML + post; }).join(''); }; getProp(n = 'pn', side = this.side) { this.propUsed = true; if (this[side]) { if (this[side][n]) { return this[side][n]; } } else { this[side] = {}; let link = this.$diff[0].querySelector( side === 'old' ? '#mw-diff-otitle1 a, #differences-prevlink' : '#mw-diff-ntitle1 a, #differences-nextlink' ); if (link) { let pn = mw.util.getParamValue('title', link.search); this[side].pn = pn; this[side].ns = mw.Title.newFromText(pn).namespace; return this[side][n]; } } if (this[n]) { return this[n]; } if (this.isSpecial) { this.pn = ''; this.ns = 0; } else { this.pn = mw.config.get('wgPageName'); this.ns = mw.config.get('wgNamespaceNumber'); } return this[n]; } query(titles) { if (!titles.length) return; new mw.Api().post({ action: 'query', titles: titles.slice(0, 50), iwurl: 1, prop: 'info', inprop: 'linkclasses', inlinkcontext: this.getProp(), formatversion: 2 }, { headers: { 'Promise-Non-Write-API-Action': 1 } }).then(response => { let query = response && response.query; if (!query) return; let data = {}; (query.pages || []).forEach(page => { let obj = { classes: page.linkclasses || [] }; if (page.missing && !page.known) { obj.classes.push('new'); obj.params = { action: 'edit', redlink: 1 }; } data[page.title] = obj; }); (query.interwiki || []).forEach(interwiki => { data[interwiki.title] = { classes: ['extiw'], url: interwiki.url }; }); (query.normalized || []).forEach(entry => { if (!data.hasOwnProperty(entry.to)) return; let obj = data[entry.to]; obj.canonical = entry.to; if (!obj.url) { obj.url = mw.util.getUrl(entry.to, obj.params); } data[entry.from] = obj; }); Object.entries(data).forEach(([title, obj]) => { if (!this.links.hasOwnProperty(title)) return; let $links = $(this.links[title]).addClass(obj.classes) .attr('title', obj.canonical); if (obj.url) { $links.attr('href', function () { return obj.url + this.hash; }); } }); this.query(titles.slice(50)); }); } detectErrors($newDiv, newHtml, origHtml, div) { let comp = $newDiv.html(); if (comp !== newHtml) { console.warn( 'SmartDiff syntax error at:\n', div, `\nNew HTML:\n${newHtml}\nCompared against:\n${comp}` ); this.hasError = true; return true; } let $comp = $newDiv.clone(); $comp.find('.smartdiff-link').contents().unwrap(); comp = $comp.html().replace(/<\/(ins|del)><\1(?: [^>]+)?>/g, ''); if (comp !== origHtml) { console.warn( 'SmartDiff mutation error at:\n', div, `\nOriginal HTML:\n${origHtml}\nCompared against:\n${comp}` ); this.hasError = true; return true; } } } mw.hook('wikipage.diff').add($diff => { new SmartDiff($diff); }); }); mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/CopySectLink.js&action=raw&ctype=text/javascript', 's'); mw.loader.using([ 'ext.visualEditor.desktopArticleTarget.init', 'mediawiki.storage' ], function ipaInput() { if (!mw.libs.ve.isVisualAvailable && !['edit', 'submit'].includes(mw.config.get('wgAction')) ) { return; } mw.loader.addStyleTag(`.oo-ui-icon-schwa{background-image:url("data:image/svg+xml,%3Csvg width='20' height='20' version='1.1' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='m0 3v14h4v-2h-2v-10h2v-2zm16 0v2h2v10h-2v2h4v-14zm-6 2c-2.41 0-4.43 1.73-4.9 4h2.08c0.41-1.17 1.5-2 2.82-2 1.67 0 3 1.33 3 3h-8c0 2.75 2.25 5 5 5 2.75 0 5-2.25 5-5 0-2.75-2.25-5-5-5zm-2.59 6.5h5.18c-0.516 0.895-1.47 1.5-2.59 1.5-1.12 0-2.07-0.605-2.59-1.5z'/%3E%3C/svg%3E")}`); let clicked; let openDialog = () => { if (clicked) { if (window.ipaInputDialog) { window.ipaInputDialog.open(); } return; } clicked = true; mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Nardog/sandbox4.js&action=raw&ctype=text/javascript'); mw.loader.using([ 'jquery.textSelection', 'oojs-ui-windows', 'oojs-ui-widgets', 'oojs-ui.styles.icons-interactions', 'oojs-ui.styles.icons-editing-core', 'oojs-ui.styles.icons-editing-advanced' ]); }; mw.hook('wikiEditor.toolbarReady').add($textarea => { $textarea.wikiEditor('addToToolbar', { section: 'main', group: 'insert', tools: { ipainput: { label: 'IPAInput', type: 'button', oouiIcon: 'schwa', action: { type: 'callback', execute: openDialog } } } }); }); mw.hook('ve.loadModules').add(addPlugin => { addPlugin(() => { ve.ui.IpaInputCommand = function VeUiIpaInputCommand() { ve.ui.IpaInputCommand.super.call(this, 'ipaInput'); }; OO.inheritClass(ve.ui.IpaInputCommand, ve.ui.Command); ve.ui.IpaInputCommand.prototype.execute = () => { openDialog(); return true; }; ve.ui.commandRegistry.register(new ve.ui.IpaInputCommand()); ve.ui.IpaInputTool = function VeUiIpaInputTool() { ve.ui.IpaInputTool.super.apply(this, arguments); }; OO.inheritClass(ve.ui.IpaInputTool, ve.ui.Tool); ve.ui.IpaInputTool.static.name = 'ipaInput'; ve.ui.IpaInputTool.static.group = 'insert'; ve.ui.IpaInputTool.static.icon = 'schwa'; ve.ui.IpaInputTool.static.title = 'IPA'; ve.ui.IpaInputTool.static.commandName = 'ipaInput'; ve.ui.toolFactory.register(ve.ui.IpaInputTool); }); }); mw.requestIdleCallback(() => { let expiry = mw.storage.get('_EXPIRY_ipainput-cache'); if (!expiry) return; $.get( '//en.wikipedia.org/api/rest_v1/page/title/Module%3AIPA%2Fdata' ).then(response => { if (Date.parse(response.items[0].timestamp) / 1000 > expiry - 604800) { mw.storage.remove('ipainput-cache'); } }); }); }); ['edit', 'submit'].includes(mw.config.get('wgAction')) && (function wiktIpa() { mw.loader.addStyleTag(`.oo-ui-icon-wiktionary{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20'%3E%3Cpath d='M14.95 1c-.15 0-.3 0-.45.03L2.9 2.9a2.26 2.26 0 0 0-1.87 2.6L2.9 17.1a2.26 2.26 0 0 0 2.6 1.86l11.6-1.88a2.26 2.26 0 0 0 1.86-2.6L17.1 2.9A2.27 2.27 0 0 0 14.95 1zm-.03.9c.63.03 1.17.49 1.28 1.14l1.88 11.6c.12.75-.37 1.43-1.12 1.56l-11.6 1.88a1.34 1.34 0 0 1-1.56-1.12L1.92 5.36A1.34 1.34 0 0 1 3.04 3.8l11.6-1.88.28-.02zm.7 2.61-2.83.46.07.39c.6-.09.95-.14 1.08.36.1.6-.91 6.53-.91 6.53s-2.87-5.16-2.98-5.87c-.02-.34.02-.64.86-.7l-.06-.4-3.64.6.07.38c.5-.15 1.01.02 1.43.82l.7 1.33-.72 4.54s-2.93-5.3-3.03-5.9c-.07-.5.45-.64.8-.66l-.06-.38-3.46.56.06.39c.24-.1.84-.07 1.07.32.07.09 4.54 8.44 4.54 8.44l.33-.05 1.02-6.24 2.98 5.59.36-.06s1.42-9.14 1.48-9.3c.05-.26.28-.71.9-.76l-.07-.39z'/%3E%3C/svg%3E")}`); let clicked, dialog, input, $result; let openDialog = async context => { if (clicked) { if (dialog) { let selection = context.$textarea.textSelection('getSelection'); if (selection) { input.setValue(selection); } if ($result) { $result.prev().addBack().remove(); $result = null; } dialog.open({ actions: [{ label: 'Close', flags: ['safe', 'close'] }] }); } return; } clicked = true; await mw.loader.using([ 'oojs-ui-windows', 'oojs-ui-widgets', 'mediawiki.ForeignApi', 'mediawiki.util' ]); let response = await new mw.ForeignApi('//en.wiktionary.org/w/api.php').get({ action: 'query', generator: 'search', gsrsearch: 'deepcat:Pronunciation_templates_by_language', gsrnamespace: 10, gsrlimit: 'max', gsrsort: 'none', formatversion: 2 }); let winMan = new OO.ui.WindowManager(); dialog = new OO.ui.MessageDialog(); winMan.addWindows([dialog]); let items = response.query.pages .map(p => p.title.slice(9)) .sort(Intl.Collator('en-u-kn-true').compare) .map(s => new OO.ui.MenuOptionWidget({ label: s })); let dropdown = new OO.ui.DropdownWidget({ $overlay: dialog.$overlay, menu: { items } }); let $doc = $('<p>'); dropdown.getMenu().on('choose', mw.util.debounce(async item => { let title = 'Template:' + item.getLabel(); let $link = $('<a>').attr({ href: '//en.wiktionary.org/wiki/' + title, target: '_blank', title: title }).text('documentation'); $doc.empty().append('Loading ', $link, '...'); try { let data = await $.get( '//en.wiktionary.org/api/rest_v1/page/html/' + encodeURIComponent(title + '/documentation') ); let text = $($.parseHTML(data)).find('p').first().text() .replace(/\. .*/, '.'); $doc.text(text + ' (').append($link.text('read more'), ')'); dialog.updateSize(); } catch { $doc.empty().append('Failed to load ', $link); } }, 100)).selectItem(items[0]); input = new OO.ui.TextInputWidget({ autocomplete: false, value: context.$textarea.textSelection('getSelection') || mw.config.get('wgTitle') }); let button = new OO.ui.ButtonWidget({ disabled: !input.getValue(), label: 'Get', flags: ['primary', 'progressive'] }).on('click', async () => { button.setDisabled(true); let template = dropdown.getMenu().findSelectedItem().getLabel(); let text = input.getValue(); try { let data = await $.post('//en.wiktionary.org/api/rest_v1/transform/wikitext/to/html', { wikitext: `{{${template}|1=${text}}}`, body_only: true }); if ($result) { $result.children().remove(); } else { $result = $('<div>').text('Result:') .insertAfter(fieldset.$element) .before('<hr>'); } $result.append($.parseHTML(data)) .find('.mw-collapsible').makeCollapsible().end() .find('[id], [about]').removeAttr('id about').end() .find('a').attr('target', '_blank') .filter('[href^="./"]').attr('href', (_, href) => ( '//en.wiktionary.org/wiki' + href.slice(1) )); dialog.updateSize(); } catch {} finally { button.setDisabled(); } }); input.on('change', value => { button.setDisabled(!value); }).connect(button, { enter: ['emit', 'click'] }); let fieldset = new OO.ui.FieldsetLayout({ items: [ new OO.ui.FieldLayout(dropdown, { label: 'Template:', align: 'top' }), new OO.ui.FieldLayout(input, { label: 'Input:', align: 'top' }), new OO.ui.FieldLayout(button) ] }); dropdown.$element.after($doc); dialog.text.$element.append(fieldset.$element/*.on('keydown', e => { e.stopPropagation(); })*/); winMan.$element.appendTo(OO.ui.getTeleportTarget()); dialog.open({ actions: [{ label: 'Close', flags: ['safe', 'close'] }] }); }; mw.hook('wikiEditor.toolbarReady').add($textarea => { $textarea.wikiEditor('addToToolbar', { section: 'main', group: 'insert', tools: { wiktipa: { label: 'WiktIPA', type: 'button', oouiIcon: 'wiktionary', action: { type: 'callback', execute: openDialog } } } }); }); }()); window.scripttesterSkipWarning = true; mw.loader.using(['mediawiki.util', 'mediawiki.storage'], async function scriptTester() { let get = () => new Set(mw.storage.getObject('scripttester')); if (mw.storage.get('scripttester')) { let unloading; window.addEventListener('beforeunload', () => { unloading = true; }); get().forEach(async s => { let isCss = /\.css$/i.test(s); let url = /^(https?:)?\/\/./.test(s) ? s : mw.util.getUrl(s, { action: 'raw', ctype: isCss ? 'text/css' : 'text/javascript' }); if (isCss) { mw.loader.load(url, 'text/css'); return; } try { await mw.loader.getScript(url); } catch (e) { if (unloading) { console.warn(e); return; } mw.notify('Failed to load temporarily installed ' + s, { type: 'error' }); } }); } else if (!window.scripttesterSkipWarning) { await mw.loader.using('oojs-ui-windows'); if (await OO.ui.confirm( 'You take full responsibility for any consequences arising from using ScriptTester.' )) { mw.storage.setObject('scripttester', []); } } await $.ready; if (!document.getElementById('p-tb')) return; let css = mw.loader.addStyleTag('.scripttester-dialog .oo-ui-checkboxMultiselectWidget{margin:0.5em 0;word-break:break-all} .scripttester-dialog .oo-ui-flaggedElement-destructive{float:right}'); let linksShown = mw.config.get('wgNamespaceNumber') > 0 && mw.config.get('wgAction') === 'view'; let updateLinks = (s, unins) => { if (!linksShown) return; $(`.scripttester-link[data-scripttester="${s}"]`) .toggleClass('scripttester-installed', !unins); }; let dialog, multiselect, addButton, removeButton, clearButton; let openDialog = () => { if (!dialog) { dialog = new OO.ui.MessageDialog({ classes: ['scripttester-dialog'] }); let winMan = new OO.ui.WindowManager(); winMan.addWindows([dialog]); multiselect = new OO.ui.CheckboxMultiselectWidget().on('select', () => { removeButton.setDisabled(!multiselect.findSelectedItems().length); }); addButton = new OO.ui.ButtonWidget({ label: 'Add' }).on('click', async () => { dialog.toggle(false); let s = (await OO.ui.prompt('Add a script', { textInput: { placeholder: 'Script page name or URL' } })).trim(); if (!s) return; if (!/^(https?:)?\/\/./.test(s) && !mw.Title.newFromText(s)) { await OO.ui.alert(`"${s}" does not appear to be a valid page name or URL.`); dialog.toggle(true); updateDialog(); return; } mw.storage.setObject('scripttester', [...get().add(s)]); updateLinks(s); }); removeButton = new OO.ui.ButtonWidget({ label: 'Remove' }).on('click', () => { let set = get(); multiselect.findSelectedItems().forEach(item => { let s = item.getLabel(); set.delete(s); updateLinks(s, true); }); mw.storage.setObject('scripttester', [...set]); updateDialog(); }); clearButton = new OO.ui.ButtonWidget({ label: 'Clear', flags: 'destructive' }).on('click', async () => { dialog.toggle(false); if (!(await OO.ui.confirm('Uninstall all scripts?'))) { dialog.toggle(true); return; } mw.storage.setObject('scripttester', []); if (linksShown) { $('.scripttester-installed').removeClass('scripttester-installed'); } dialog.toggle(true); updateDialog(); }); dialog.text.$element.append( multiselect.$element, new OO.ui.ButtonGroupWidget({ items: [addButton, removeButton] }).$element, clearButton.$element ); winMan.$element.appendTo(OO.ui.getTeleportTarget()); } updateDialog(); dialog.open({ message: 'Temporarily installed scripts:', actions: [{ label: 'Done', flags: ['safe', 'close'] }] }); }; let updateDialog = () => { let set = get(); multiselect.clearItems().addItems( [...set].map(s => new OO.ui.CheckboxMultioptionWidget({ label: s })) ); removeButton.setDisabled(true); clearButton.toggle(set.size); dialog.updateSize(); updatePortlet(set.size); }; let updatePortlet = count => { $(portletLink).find('*').addBack().contents().each(function () { if (this.nodeType === 3 && this.textContent.trim()) { this.textContent = `Temporarily installed scripts (${count})`; return false; } }); }; let portletLink = mw.util.addPortletLink('p-tb', '#', `Temporarily installed scripts (${get().size})`) .firstElementChild; portletLink.addEventListener('click', e => { e.preventDefault(); mw.loader.using(['oojs-ui-windows', 'mediawiki.Title'], openDialog); }); window.addEventListener('storage', e => { if (e.key === 'scripttester') { updatePortlet(get().size); } }); if (!linksShown) return; css.textContent += ' .scripttester{font-size:85%;user-select:none} .scripttester::before{content:" "} .scripttester-link::after{content:"[+]"} .scripttester-installed::after{content:"[−]"} #firstHeading > .scripttester{font-size:47%}'; let linkHandler = function () { let s = this.dataset.scripttester; let unins = this.classList.contains('scripttester-installed'); let set = get(); set[unins ? 'delete' : 'add'](s); let success = mw.storage.setObject('scripttester', [...set]); if (success) { mw.notify((unins ? 'Uninstalled ' : 'Installed ') + s, { tag: 'scripttester' }); updateLinks(s, unins); updatePortlet(set.size); } else { mw.notify(`Couldn't ${unins ? 'un' : ''}install ${s}`, { tag: 'scripttester', type: 'error' }); } }; if ([2, 4, 8].includes(mw.config.get('wgNamespaceNumber')) && ['javascript', 'css'].includes(mw.config.get('wgPageContentModel')) ) { let s = mw.config.get('wgPageName').replaceAll('_', ' '); $('<span>').addClass('scripttester').append( $('<a>').attr({ class: 'scripttester-link' + (get().has(s) ? ' scripttester-installed' : ''), tabindex: 0, role: 'button', 'data-scripttester': s }).text('\u200e').on('click', linkHandler) ).appendTo(document.getElementById('firstHeading')); return; } mw.hook('wikipage.content').add($content => { let set = get(); let ns = mw.config.get('wgFormattedNamespaces'); let re = new RegExp(`^(${ns[2]}|${ns[4]}|${ns[8]}):.+\\.([Cc][Ss]|[Jj])[Ss]$`); $content.find('a:not(.external, .new)').after(function () { let s = this.title; if (!s || !re.test(s)) return; return $('<span>').addClass('scripttester').append( $('<a>').attr({ class: 'scripttester-link' + (set.has(s) ? ' scripttester-installed' : ''), tabindex: 0, role: 'button', 'data-scripttester': s }).text('\u200e').on('click', linkHandler) ); }); }); }); ['edit', 'submit'].includes(mw.config.get('wgAction')) && mw.hook('wikiEditor.toolbarReady').add($textarea => { $textarea.on('keydown', async e => { if (e.which !== 72 || e.shiftKey || e.altKey || [e.ctrlKey, e.metaKey].filter(Boolean).length !== 1) return; e.preventDefault(); let context = $textarea.data('wikiEditorContext'); context.api.openDialog(context, 'search-and-replace'); await mw.loader.using('jquery.textSelection'); let tb = document.getElementById('wikieditor-toolbar-replace-search'); let sel = $textarea.textSelection('getSelection'); if (sel) { tb.value = sel; } tb.focus(); }); $(document.body).on('dialogclose', '#wikieditor-toolbar-replace-dialog', () => { $textarea[0].focus(); }); }); mw.config.get('wgNamespaceNumber') && mw.config.get('wgAction') !== 'history' && (function catChangeHighlighter() { let run; mw.hook('wikipage.content').add($content => { $content.find('.mw-changeslist-line.mw-changeslist-src-mw-categorize').each(function () { let text = this.querySelector('.comment').textContent; if (text.includes(' added ')) { this.classList.add('catchangehighlighter-addition'); } else if (text.includes(' removed ')) { this.classList.add('catchangehighlighter-removal'); } if (run) return; run = true; mw.loader.addStyleTag('.catchangehighlighter-addition :is(span, td) > .comment{background:#f5fff5} .catchangehighlighter-removal :is(span, td) > .comment{background:#fff5f5}'); }); }); }()); (mw.config.exists('wgDiffNewId') || mw.config.get('wgAction') !== 'view' || [-1, 14].includes(mw.config.get('wgNamespaceNumber'))) && (function diffFontSwitcher() { mw.loader.addStyleTag('.diff-lineno{cursor:pointer}'); $(document.body).on('click keydown', '.diff-lineno', function (e) { if (e.type === 'keydown' && ( e.which !== 13 && e.which !== 32 || e.ctrlKey || e.shiftKey || e.metaKey || e.altKey )) { return; } e.preventDefault(); this.closest('.diff').classList.toggle('difffontswitcher-enabled'); }); mw.hook('wikipage.diff').add($diff => { $diff.find('.diff-lineno').attr({ tabindex: 0, role: 'button' }); }); }()); mw.trackSubscribe('resourceloader.exception', (topic, data) => { mw.notify(data.exception, { autoHide: false, title: `Exception in ${data.source} in module ${data.module}`, type: 'warn' }); }); mw.config.get('skin') === 'vector-2022' && $(document).one('click', '.mw-interlanguage-selector', async () => { await mw.loader.using('ext.uls.mediawiki'); $.fn.uls.Constructor.prototype.getMenuWidth = () => 'narrow'; mw.uls.getFrequentLanguageList = () => []; }); ['edit', 'submit'].includes(mw.config.get('wgAction')) && mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/DiffUndo.js&action=raw&ctype=text/javascript', 's'); o4qyha7o53ztjrqrjrzfgivww1kow4c Social security in Azerbaijan 0 122272 754939 704293 2026-08-05T00:03:28Z InternetArchiveBot 34092 Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5 754939 wikitext text/x-wiki '''The social protection system''' in [[Azerbaijan]] consists of programs aimed at reducing the poverty and economic problems of the population through promoting effective labor markets as well as reducing the risks faced by citizens. Social insurance consists of pensions, unemployment benefit, [[health insurance]], and other social benefits. Social allowances are consist of monthly (Age Pension, Pension for Disabled Persons, for children under 18 years with a disability) or one-off payments (to eligible working parents of newborn, for funeral, support for treatment to victims as a result of radiation accident (every year)) for the purpose of social assistance to persons with different categories. The state social protection system in Azerbaijan consists of two main parts: 1) social insurance; and 2) social security. The [[State Social Protection Fund (Azerbaijan)|State Social Protection Fund]] implements social security programs, and the [[Ministry of Labour and Social Protection of the Population (Azerbaijan)|Ministry of Labour and Social Protection of the Population]] carries out social protection programs. == Legal framework == The changes in the social protection system started with the realization of the "Concept of Pension Reform in the Republic of Azerbaijan" approved by the Decree of the President of the Republic of Azerbaijan dated July 17, 2001.<ref>{{Cite web|url=http://sspf.gov.az/view.php?lang=en&menu=76|title=State Social Protection Fund of Azerbaijan Republic|website=sspf.gov.az|access-date=2018-05-31|archive-date=2018-07-26|archive-url=https://web.archive.org/web/20180726134900/http://sspf.gov.az/view.php?lang=en&menu=76|url-status=dead}} {{Webarchive|url=https://web.archive.org/web/20180726134900/http://sspf.gov.az/view.php?lang=en&menu=76 |date=2018-07-26 }}</ref> Law of Azerbaijan “On individual accounts in the system of the state social insurance” was approved by president on 27 November 2001. And this law gave authority to [[State Social Protection Fund (Azerbaijan)|State Social Protection Fund]] for carrying out individual accounting in the state social insurance system.<ref>{{Cite web|url=http://www.sspf.gov.az/view.php?lang=en&menu=14|title=State Social Protection Fund of Azerbaijan Republic|website=www.sspf.gov.az|access-date=2018-05-31|archive-date=2016-08-21|archive-url=https://web.archive.org/web/20160821034312/http://sspf.gov.az/view.php?lang=en&menu=14|url-status=dead}} {{Webarchive|url=https://web.archive.org/web/20160821034312/http://sspf.gov.az/view.php?lang=en&menu=14 |date=2016-08-21 }}</ref> == Social Security expenditures == In 2016, the expenditures of State Social Protection Fund amounted AZN 3 078.6 million, of which AZN 1,100 million was transferred from the state budget,<ref>{{Cite web|url=http://www.maliyye.gov.az/sites/default/files/presentation-2016.pdf|title=Presentation on the draft state and consolidated budgets for 2016 of the Republic of Azerbaijan|language=en}}</ref> and in 2014, these indicators were AZN 2 928.5 million and AZN 1,142 accordingly.<ref>{{Cite web|url=http://www.maliyye.gov.az/sites/default/files/2014-1.pdf|title=Presentation on the draft state and consolidated budgets for 2014 of the Republic of Azerbaijan}}</ref> According to the 2017 budget draft, totally 2117.7 million manat was allocated to social security, targeted social assistance and social insurance.<ref name=":0">{{Cite web|url=http://www.maliyye.gov.az/sites/default/files/Budce-16-11-2016.pdf|title=Presentation on the draft state and consolidated budgets for 2017 of the Republic of Azerbaijan}}</ref> Expenditures and revenues of the State Social Protection Fund under the [[Ministry of Labour and Social Protection of the Population (Azerbaijan)|Ministry of Labor and Social Protection of Population]] for 2017 were AZN 3,400,000, of which AZN1,270,000 or 37.4% was transformed from the state budget.<ref name=":0" /> As well as, 597.9 million manat was allocated for social benefits, scholarships and other social payments by the Ministry of Labor and Social Protection of the Population and its relevant bodies, and 242.2 million manat was allocated to provide social protection of refugees and internally displaced persons by The State Committee for Refugees and IDPs.<ref name=":0" /> == Social insurance == The following works have been carried out within the framework of “State Program on Development of Insurance and Pension System in the Republic of Azerbaijan” in order to improve the insurance-pension system in the country for 2009-2015: * The State Social Protection Fund has started the appointment of age pension from an unified center in an automated manner since July 11, 2013.<ref>{{Cite web|url=http://www.sspf.gov.az/view.php?lang=az&menu=358&id=1289|title=State Social Protection Fund|website=www.sspf.gov.az|language=az|access-date=2018-05-31|archive-date=2018-06-12|archive-url=https://web.archive.org/web/20180612185047/http://www.sspf.gov.az/view.php?lang=az&menu=358&id=1289|url-status=dead}} {{Webarchive|url=https://web.archive.org/web/20180612185047/http://www.sspf.gov.az/view.php?lang=az&menu=358&id=1289 |date=2018-06-12 }}</ref> * "Pension +" service has been put into operation since January 2014.<ref>{{Cite news|url=https://www.ibar.az/az/news/iba-service-pension-stimulates-growth-in-non-cash-payments/|title="Pension+" service|access-date=2018-05-31|language=az|archive-date=2018-06-12|archive-url=https://web.archive.org/web/20180612210559/https://www.ibar.az/az/news/iba-service-pension-stimulates-growth-in-non-cash-payments/|url-status=dead}} {{Webarchive|url=https://web.archive.org/web/20180612210559/https://www.ibar.az/az/news/iba-service-pension-stimulates-growth-in-non-cash-payments/ |date=2018-06-12 }}</ref> * The process of payment of pensions by plastic cards has been completed by the end of 2015. All pensioners, including pensioners living in rural areas, have been provided with plastic cards.<ref>{{Cite web|url=http://www.sspf.gov.az/view.php?lang=az&menu=400&id=2210|title=Meeting of State Social Protection Fund, 2015|website=www.sspf.gov.az|access-date=2018-05-31|archive-date=2016-03-26|archive-url=https://web.archive.org/web/20160326030636/http://www.sspf.gov.az/view.php?lang=az&menu=400&id=2210|url-status=dead}} {{Webarchive|url=https://web.archive.org/web/20160326030636/http://www.sspf.gov.az/view.php?lang=az&menu=400&id=2210 |date=2016-03-26 }}</ref> == Social Security == === Targeted Social Assistance === The president of country signed a decree on the improvement targeted social assistance on February 25, 2015. Single Electronic Application and Nomination Sub-System (Vahid Elektron Müraciət və Təyinat Alt Sistemi - VEMTAS) on targeted state social assistance was created by Ministry of Labour and Social Protection of the Population.<ref>{{Cite web|url=http://www.mlspp.gov.az/en/pages/17/39/information/795|title=Postal employees have been involved in trainings on the organization the public service in the field of electronic appeal for targeted social assistance|access-date=2021-06-20|archive-date=2018-06-12|archive-url=https://web.archive.org/web/20180612210512/http://www.mlspp.gov.az/en/pages/17/39/information/795}}</ref> In 2015, the volume of targeted social assistance per each me=Azərbaycanda Sosial Müdafiə Sistemi: Qiymətləndirmə və Təkmilləşdirilməsi İstiqamətləri|last=Social Protection System in Azerbaijan: Evaluation and Improvement Directions|language=az}}</ref> The Cabinet of Ministers made a number of amendments to the " Rules for applying for targeted state social assistance, its appointment, issuance and refusal of issuance" with the decision of 11.02.2016.<ref>{{Cite web|url=http://www.mlspp.gov.az/en/pages/17/40/information/977|title=Presentation of new electronic application and appointment system on targeted state social assistance was held at the Ministry of Labour and Social Protection of Population|website=www.mlspp.gov.az|language=en|access-date=2018-05-31|archive-date=2018-06-23|archive-url=https://web.archive.org/web/20180623141945/http://www.mlspp.gov.az/en/pages/17/40/information/977}}</ref> === Presidential scholarships === In 2016, the number of citizens granted by Presidential scholarships increased by 58.6%, and average monthly benefits for the families of the martyrs increased by 11.5%, for National Heroes by 67.7%, for war invalids by 66.4% compared to 2012.<ref name=":1">{{Cite web|url=http://cesd.az/new/wp-content/uploads/2016/11/CESD_UNDP_EU_Social_Protection_Paper.pdf|title=Azərbaycanda Sosial Müdafiə Sistemi: Qiymətləndirmə və Təkmilləşdirilməsi İstiqamətləri|last=Social Protection System in Azerbaijan: Evaluation and Improvement Directions|language=az}}</ref> Disabled person in the first degree have been provided with a monthly pension of 60 manat by the order of the [[Ilham Aliyev|President of Azerbaijan]], since 2015.<ref name=":1" /> === Presidential scholarships === According to the official website of State Statistical Committee, [[Unemployment|unemployed]] persons was 5% in 2015. The number of people receiving unemployment benefits among unemployed persons has been around 0.5% in recent years.<ref name=":1" /> === Social benefits to disabled, elderly and internally displaced persons === On January 9, 2013, the President of Azerbaijan signed the Order " On additional measures to provide [[social services]] for children with disabilities and those in a dangerous social situation that have not reached adolescence". In 2013, the Ministry of Labor and Social Protection of Population approved 17 priority projects. During the implementation of the projects, in 2013, 800 children under 18, were provided socio-psychological, legal and reintegration services.<ref>{{Cite web|url=https://president.az/articles/7055|title=The Order of President "On additional measures to provide social services for children with disabilities and those in a dangerous social situation that have not reached adolescence"|website=president.az|language=az|access-date=2018-05-31}}</ref> Regulations on the criteria for determination of disability and health condition was approved by the Decree of the [[Cabinet of Azerbaijan]] dated December 30, 2015.<ref>{{Cite web|url=http://www.mlspp.gov.az/en/pages/17/40/information/944|title=Important reform measures in order to minimize contact between officials and citizens and increase transparency in the appointment of disability were held|website=www.mlspp.gov.az|language=en|access-date=2018-05-31|archive-date=2018-07-26|archive-url=https://web.archive.org/web/20180726135227/http://www.mlspp.gov.az/en/pages/17/40/information/944}}</ref> Twinning project "Development of social services" organized by the [[Ministry of Labour and Social Protection of the Population (Azerbaijan)|Ministry of Labor and Social Protection of Population]] with the financial support of [[European Union]] was carried out during June 1, 2015 - May 31, 2017.<ref>{{Cite news|url=https://www.azernews.az/nation/113164.html|title=EU to back development of employment system in Azerbaijan [PHOTO]|date=2017-05-16|work=AzerNews.az|access-date=2018-05-31|language=en-US}}</ref><ref>{{Cite news|url=http://eng.redcrescent.az/news/post-3237.html|title=Within the framework of "Development of social services" twinning project a training-seminar was held|access-date=2018-05-31|language=en-US|archive-date=2018-06-12|archive-url=https://web.archive.org/web/20180612210859/http://eng.redcrescent.az/news/post-3237.html|url-status=dead}}</ref> The "Action Plan for the Ministry of Labor and Social Protection of Population of the Republic of Azerbaijan for 2014" has been prepared and implemented in order to ensure the implementation of "State Program on Deinstitutionalization and Alternative Care in the Republic”.<ref>{{Cite web|url=https://www.unicef.org/evaldatabase/files/Mid_Term_review_of_the_State_Programme_On_Deinstitutionalization_and_Alternative_Care_in_Azerbaijan_2011.pdf|title=THE STATE PROGRAM ON DEINSTITUTIONALIZATION AND ALTERNATIVE CARE IN AZERBAIJAN|access-date=2021-06-20|archive-date=2018-06-12|archive-url=https://web.archive.org/web/20180612233443/https://www.unicef.org/evaldatabase/files/Mid_Term_review_of_the_State_Programme_On_Deinstitutionalization_and_Alternative_Care_in_Azerbaijan_2011.pdf|url-status=dead}} {{Webarchive|url=https://web.archive.org/web/20180612233443/https://www.unicef.org/evaldatabase/files/Mid_Term_review_of_the_State_Programme_On_Deinstitutionalization_and_Alternative_Care_in_Azerbaijan_2011.pdf |date=2018-06-12 }}</ref> The Medical Social Expertise and Rehabilitation Sub-System (TSERAS) was established in the centralized information system of the Ministry of Labour and Social Protection of the Population by the Decree of the [[Ilham Aliyev|President]] dated 14 September 2015 "On the improvement of assessment system of restriction of disability and health care opportunities ".<ref>{{Cite web|url=http://solutions.southsouthworld.org/solution/view?id=282|title=E-subsystem of medical and social expertise and rehabilitation (TSERAS)|website=solutions.southsouthworld.org|language=en-US|access-date=2018-05-31|archive-date=2018-06-12|archive-url=https://web.archive.org/web/20180612210743/http://solutions.southsouthworld.org/solution/view?id=282|url-status=dead}} {{Webarchive|url=https://web.archive.org/web/20180612210743/http://solutions.southsouthworld.org/solution/view?id=282 |date=2018-06-12 }}</ref> == See also == [[Human rights in Azerbaijan|Human Rights in Azerbaijan]] [[Children’s rights in Azerbaijan]] == References == <references /> [[Category:Public services of Azerbaijan]] fvjgiblrcdwe8jq36z2tixiaohsw77w Dogs for Change for One 0 127292 754907 601087 2026-08-04T20:04:14Z Cooltey 37344 /* */ test 754907 wikitext text/x-wiki {{Short description|Test new description}} This page is a test page Hello 5jo7eysuabe5f9shjqmmxqgcu6e9c9n 754908 754907 2026-08-04T20:05:31Z Cooltey 37344 /* */ test 754908 wikitext text/x-wiki {{Short description|Test new description}} This page is a test page Hello World gxdm3dwaodwr6pe193bffejmqs1518s Wikipedia:Village pump/topic list 4 146208 754942 754314 2026-08-05T00:41:13Z Cewbot 33876 [[User:Cewbot/log/20170915/configuration|Generate topic list: 12 topics]] 754942 wikitext text/x-wiki <!-- This page is auto-generated by bot. Please contact the bot operator to improve the tool. --> {| class="wikitable sortable mw-collapsible" style="float:left;" |- ! data-sort-type="number" style="font-weight: normal;" | <small>#</small> !! 💭 Title !! <span title="Count of comments">💬</span> !! <span title="Count of peoples in discussion">👥</span> !! 🙋 Last editor !! data-sort-type="isoDate" | <span title="Date/Time">🕒 <small>(UTC)</small></span> |- | style="text-align: right;" | 1 | [[Wikipedia:Village pump#Script|Script]] | style="text-align: right;" | 8 | style="text-align: right;" | 5 | style="background-color: #bbb;" | [[User:LuniZunie|LuniZunie]] | style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2025-11-09T16:47:00.000Z" | 2025-11-09 <span style="color: blue;">16:47</span> |- | style="text-align: right;" | 2 | [[Wikipedia:Village pump#Report_concerning_Tanbiruzzammn|Report concerning Tanbiruzzammn]] | style="text-align: right;" | 2 | style="text-align: right;" | 2 | style="background-color: #bbb;" | [[User:Barras|Barras]] | style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2025-12-09T21:45:00.000Z" | 2025-12-09 <span style="color: blue;">21:45</span> |- | style="text-align: right;" | 3 | [[Wikipedia:Village pump#Report_concerning_Bucheon|Report concerning Bucheon]] | style="text-align: right;background-color: #fcc;" | 1 | style="text-align: right;background-color: #fcc;" | 1 | style="background-color: #bbb;" | [[User:PieWriter|PieWriter]] | style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-02-19T10:25:00.000Z" | 2026-02-19 <span style="color: blue;">10:25</span> |- | style="text-align: right;" | 4 | [[Wikipedia:Village pump#Versions_and_dates|Versions and dates]] | style="text-align: right;" | 2 | style="text-align: right;background-color: #fcc;" | 1 | style="background-color: #bbb;" | [[Special:Contributions/~2026-13668-13|<span style="color: #c20;">~2026-13668-13</span>]] | style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-03-03T06:17:00.000Z" | 2026-03-03 <span style="color: blue;">06:17</span> |- | style="text-align: right;" | 5 | style="max-width: 24em" | <small>[[Wikipedia:Village pump#Upcoming_Wikimedia_Café_meetup_regarding_the_the_2026-2027_Wikimedia_Foundation_Annual_Plan|Upcoming Wikimedia Café meetup regarding the the 2026-2027 Wikimedia Foundation Annual Plan]]</small> | style="text-align: right;background-color: #fcc;" | 1 | style="text-align: right;background-color: #fcc;" | 1 | style="background-color: #bbb;" | [[User:Pine|Pine]] | style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-03-30T03:46:00.000Z" | 2026-03-30 <span style="color: blue;">03:46</span> |- | style="text-align: right;" | 6 | [[Wikipedia:Village pump#Changes_to_electionadmin_userright|Changes to electionadmin userright]] | style="text-align: right;" | 4 | style="text-align: right;" | 4 | style="background-color: #bbb;" | [[User:Chaotic Enby|Chaotic Enby]] | style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-04-23T15:22:00.000Z" | 2026-04-23 <span style="color: blue;">15:22</span> |- | style="text-align: right;" | 7 | style="max-width: 24em" | <small>[[Wikipedia:Village pump#Report_concerning_Princebarackalibarrydaddyobamaiii|Report concerning Princebarackalibarrydaddyobamaiii]]</small> | style="text-align: right;background-color: #fcc;" | 1 | style="text-align: right;background-color: #fcc;" | 1 | style="background-color: #bbb;" | [[User:MathXplore|MathXplore]] | style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-05-18T12:23:00.000Z" | 2026-05-18 <span style="color: blue;">12:23</span> |- | style="text-align: right;" | 8 | style="max-width: 24em" | <small>[[Wikipedia:Village pump#May_2026_Wikimedia_Café_meetups_regarding_the_Wikimedia_Foundation_Annual_Plan|May 2026 Wikimedia Café meetups regarding the Wikimedia Foundation Annual Plan]]</small> | style="text-align: right;background-color: #fcc;" | 1 | style="text-align: right;background-color: #fcc;" | 1 | style="background-color: #bbb;" | [[User:Pine|Pine]] | style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-05-21T19:54:00.000Z" | 2026-05-21 <span style="color: blue;">19:54</span> |- | style="text-align: right;" | 9 | style="max-width: 24em" | <small>[[Wikipedia:Village pump#June_2026_Wikimedia_Café_meetups_regarding_the_English_Wikipedia_Editor_Reflections_project|June 2026 Wikimedia Café meetups regarding the English Wikipedia Editor Reflections project]]</small> | style="text-align: right;background-color: #fcc;" | 1 | style="text-align: right;background-color: #fcc;" | 1 | style="background-color: #bbb;" | [[User:Pine|Pine]] | style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-06-15T03:56:00.000Z" | 2026-06-15 <span style="color: blue;">03:56</span> |- | style="text-align: right;" | 10 | [[Wikipedia:Village pump#Removal_request|Removal request]] | style="text-align: right;" | 2 | style="text-align: right;" | 2 | style="background-color: #bbb;" | [[User:Vermont|Vermont]] | style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-07-05T20:08:00.000Z" | 2026-07-05 <span style="color: blue;">20:08</span> |- | style="text-align: right;" | 11 | style="max-width: 24em" | <small>[[Wikipedia:Village pump#July_2026_Wikimedia_Café_meetups_regarding_Wikimedia_governance_and_options_for_reform|July 2026 Wikimedia Café meetups regarding Wikimedia governance and options for reform]]</small> | style="text-align: right;background-color: #fcc;" | 1 | style="text-align: right;background-color: #fcc;" | 1 | style="background-color: #ddd;" | [[User:Pine|Pine]] | style="background-color: #ddd;" data-sort-type="isoDate" data-sort-value="2026-07-13T03:35:00.000Z" | 2026-07-13 <span style="color: blue;">03:35</span> |- | style="text-align: right;" | 12 | [[Wikipedia:Village pump#Spambot|Spambot]] | style="text-align: right;" | 2 | style="text-align: right;" | 2 | style="background-color: #ddd;" | [[User:BDavis (WMF)|BDavis (WMF)]] | style="background-color: #ddd;" data-sort-type="isoDate" data-sort-value="2026-07-23T00:30:00.000Z" | 2026-07-23 <span style="color: blue;">00:30</span> |} {| class="wikitable mw-collapsible mw-collapsed" style="float: left; margin-left: .5em;;{{#if:{{{no_time_legend|}}}|display:none;|}}" ! title="From the latest bot edit" | Legend |- | style="background-color: #efe;" | * In the last hour |- | style="background-color: #eef;" | * In the last day |- | | * In the last week |- | style="background-color: #ddd;" | * In the last month |- | style="background-color: #bbb;" | * More than one month |- ! Manual settings |- | style="max-width: 12em;" | <small>When exceptions occur,<br />please check [[User:Cewbot/log/20170915/configuration|the setting]] first.</small> |- |} {{Clear}} h3p3472fwwkqjbpqfe5famkh1h6oc4q OttoTest0 0 146987 754905 743620 2026-08-04T17:55:28Z Ottomata 30845 sdf 754905 wikitext text/x-wiki yeppeeeedf sdf sdfsdf sdf sadfsdfasdfsdf sadfs sdf sdf sdf sdf sdf sdf sadf sdfsadfsd asdfs sadfasdfds ng8g69qefuvjxwcmbih2xek1nn4nwuy Maria Louisa Bustill 0 147867 754965 650008 2026-08-05T10:14:10Z ~2026-43346-48 75165 754965 wikitext text/x-wiki Ka ọ na-erule afọ 1904, ọ fọrọ nke nta ka Louisa kpuru ìsì site na anya mmiri. Test Test Test Test Test == Early life and education == Amuru Maria Louisa Bustill (anakpo Louisa na nwa) na aro 1853 na [[Philadelphia|Philadelphia, Pennsylvania]], nke agburu Africa, [[Ndi Igbo Amerikạ|Igbo]], Lenni-Lenape America na Anglo-American. Nne na Nna ya bu Charles Hicks Bustill na Emily Robinson, ndi oji ama ama na Quakers. Na aro 1870s, Louisa jere Mahadum Lincoln University, otu  black university na Oxford, Pennsylvania. Louisa aburugo onye nkuzi tupu ofu William Drew Robeson.<ref name="bio" /> Ya na nwanne ya nwanyi Gertrude nuru umu nwoke guru akwukwo na mahadum Lincoln, mana ndibe Louisa chere na Robeson aburo ogbo ya.<ref name="boyle" /> == Marriage and family == Ndi nna nna Bustill nwere onwe ha na-ebe 1700s, mgbe when her great-grandfather Cyrus Bustill was freed after several years of service to a new owner in Burlington, New Jersey. He moved into Philadelphia where he built a business as a baker. Cyrus Bustill became one of the founders in Philadelphia of the Free African Society in 1787. Other family had genealogical records going back to the early days of the Pennsylvania colony. p1h3gmajzkskyxo05vc6g3autjbobfs Module:TemplUtl 828 148989 754896 739558 2026-08-04T13:33:56Z PerfektesChaos 18104 2026-07-01 754896 Scribunto text/plain local TemplUtl = { suite = "TemplUtl", serial = "2026-07-01", item = 52364930 }; --[=[ Utilities to support template programming. ]=] local Failsafe = TemplUtl; require( "strict" ) local fallible = function ( adjust, ahead ) -- Check for leading character disturbing syntax -- Precondition: -- adjust -- string; trimmed wikitext -- ahead -- true, if leading syntax shall start on new line -- Postcondition: -- Returns string, modified if necessary local r = adjust; local c = r:byte( 1, 1 ); local lead; if c <= 59 and ( c==35 or c==42 or c==58 or c==59 ) then lead = true; elseif c == 123 or c == 124 then local c2 = r:byte( 2, 1 ); if c == 123 and c2 == 124 then lead = true; elseif ahead and c == 124 and ( c2 == 43 or c2 == 45 or c2 == 125 ) then lead = true; end end if lead then if ahead then r = "\n" .. r; else r = mw.text.nowiki( r:sub( 1, 1 ) ) .. r:sub( 2 ); end end return r; end -- fallible() local fiatTitleRegExp = function ( accept ) -- Create pattern to detect page name -- Precondition: -- accept -- string; trimmed title -- Postcondition: -- Returns string with pattern local start = mw.ustring.sub( accept, 1, 1 ); local r; if mw.ustring.match( start, "%a" ) then r = string.format( "[%s%s]%s", mw.ustring.lower( start ), mw.ustring.upper( start ), mw.ustring.sub( accept, 2 ) ); else r = accept; end if r:match( " " ) then r = r:gsub( "%", "%%" ) :gsub( "[%-^.?+*()$]", "%$1" ) :gsub( "_", " " ) :gsub( "%s+", "[%s_]+" ); end return r; end -- fiatTitleRegExp() local framing = function ( frame ) -- Ensure availability of frame object -- Precondition: -- frame -- object; #invoke environment, or false -- Postcondition: -- Return frame object if not TemplUtl.frame then if type( frame ) == "table" then TemplUtl.frame = frame; else TemplUtl.frame = mw.getCurrentFrame(); end end return TemplUtl.frame; end -- framing() TemplUtl.facets = function ( ask, adjust ) -- Split into searchable word tokens -- ask -- string -- adjust -- "%" -- URL encoding expected -- Returns string local r = TemplUtl.fair( ask, adjust ); r = mw.ustring.gsub( r, "[%s%p%c]+", " " ); r = mw.text.trim( r ); return r; end -- TemplUtl.facets() TemplUtl.faculty = function ( analyze, another ) -- Test template arg for boolean -- analyze -- string, boolean, number or nil -- another -- fallback: string, boolean, or nil -- "-" to test for explicit vocabulary choice -- Returns boolean, or "-" local s = type( analyze ); local r; if s == "string" then r = mw.text.trim( analyze ); if r == "" then r = TemplUtl.faculty( another, nil ); elseif r:find( "1", 1, true ) and r:match( "^[0%-]*1[01%-]*$" ) then r = true; elseif r:match( "^[0%-]+$" ) then r = false; else r = r:lower(); if r == "y" or r == "yes" or r == "true" or r == "on" then r = true; elseif r == "n" or r == "no" or r == "false" or r == "off" then r = false; else if not TemplUtl.boolang then -- TODO: page language local l, d = pcall( mw.ext.data.get, "i18n/01.tab" ); if type( d ) == "table" and type( d.data ) == "table" then local f = function ( at ) local e = d.data[ at ]; l = e[ 1 ]; s = e[ 2 ]; if type( l ) == "boolean" and type( s ) == "string" then s = mw.text.split( s, "|" ); for i = 1, #s do TemplUtl.boolang[ s[ i ] ] = l; end -- for i end end TemplUtl.boolang = { }; f( 1 ); f( 2 ); else TemplUtl.boolang = true; end end if type( TemplUtl.boolang ) == "table" then s = TemplUtl.boolang[ r ]; if type( s ) == "boolean" then r = s; end end if type( r ) ~= "boolean" then s = type( another ); if s == "nil" then r = true; elseif s == "boolean" then r = another; elseif s == "string" then s = mw.text.trim( another ); if s == "-" then r = "-"; elseif s == "" then r = true; else r = TemplUtl.faculty( s ); end end end end end elseif s == "boolean" then r = analyze; elseif s == "number" then r = ( analyze ~= 0 ); else r = false; end return r; end -- TemplUtl.faculty() TemplUtl.failure = function ( alert, always, addClass, frame ) -- Format error message, mostly hidden -- alert -- string: message -- always -- boolean, or nil: do not hide -- addClass -- string, or nil: add classes to element -- frame -- object, or nil -- Returns string local err = mw.html.create( "span" ) :addClass( "error" ) :wikitext( alert ); local live = ( framing( frame ):preprocess( "{{REVISIONID}}" ) == "" ); if type( addClass ) == "string" then err:addClass( addClass ) end if live then local max = 1000000000; local id = math.floor( os.clock() * max ); local sign = string.format( "error_%d", id ); local btn = mw.html.create( "span" ); local top = mw.html.create( "div" ); err:attr( "id", sign ); -- TODO: LTR btn:css( { ["background"] = "#FFFF00", ["border"] = "#FF0000 3px solid", ["font-weight"] = "bold", ["padding"] = "2px", ["text-decoration"] = "none" } ) :wikitext( "&gt;&gt;&gt;" ); sign = string.format( "[[#%s|%s]]", sign, tostring( btn ) ); top:wikitext( sign, "&#160;", alert ); mw.addWarning( tostring( top:attr( "role", "alert" ) ) ); elseif not always then err:css( { ["display"] = "none" } ); -- err:css( { ["display"] = "inline-block", -- ["line-height"] = "0", -- ["max-height"] = "0", -- ["max-width"] = "0", -- ["visibility"] = "hidden" } ); end return tostring( err ); end -- TemplUtl.failure() TemplUtl.fair = function ( ask, adjust ) -- Decode string -- ask -- string -- adjust -- "%" -- URL encoding expected -- Returns trimmed decoded string local r = ask; if type( r ) == "string" then if adjust == "%" and r:find( "%%%x%x" ) then r = mw.uri.decode( r, "PATH" ); elseif r:find( "&", 1, true ) then r = mw.text.decode( r ); if r:find( "&", 1, true ) then r = mw.text.decode( r, true ); end end r = mw.text.trim( r ); end return r; end -- TemplUtl.fair() TemplUtl.fake = function ( access ) -- Simulation of template transclusion -- Precondition: -- access -- string; page name (template) if type( access ) == "string" then local s = mw.text.trim( access ); if s ~= "" then local t = mw.title.new( s, 10 ); if not mw.title.equals( mw.title.getCurrentTitle(), t ) and t.exists then t:getContent(); end end end end -- TemplUtl.fake() TemplUtl.fakes = function ( array, frame, ahead, answer ) -- Simulation of template transclusions -- Precondition: -- array -- table, with template title strings -- frame -- object, or nil -- ahead -- string, or nil, with common prefix -- answer -- true, or nil, for list creation -- Postcondition: -- Returns string, if answer requested local e = framing( frame ); local f = function ( a ) e:expandTemplate{ title = a }; end local s = ahead or ""; local r; for k, v in pairs( array ) do if type( k ) == "number" and type( v ) == "string" then v = s .. mw.text.trim( v ); pcall( f, v ); if answer then if r then r = r .. "\n"; else r = ""; end r = string.format( "%s* [[Template:%s|%s]]", r, v, v ); end end end -- for k, v return r; end -- TemplUtl.fakes() TemplUtl.feasible = function ( address ) -- Does this describe an URL beginning? -- Precondition: -- address -- string; what to inspect, URL presumed -- Postcondition: -- Returns true, if URL beginning local start, r = address:match( "^%s*((%a*:?)//)" ); if start then if r == "" then r = true; elseif r:sub( -1, -1 ) == ":" then local schemes = ":ftp:ftps:http:https:"; r = ":" .. r:lower(); if schemes:find( r, 1, true ) then r = true; else r = false; end else r = false; end end return r; end -- TemplUtl.feasible() TemplUtl.feed = function ( area, ahead, at, after ) -- Detect next free "|" or "}}" -- Precondition: -- area -- string; template transclusion -- ahead -- string; opening element, or false -- at -- number; byte position in area where to start -- after -- true, if only to search for "}}" -- Postcondition: -- Returns -- -- number; byte position in area -- -- before "|" or "}}", may be at end -- -- to continue search; ahead has been closed -- -- true, if to be continued at number local j = at; local loop = true; local c, k, r, s, seek; if after then seek = "[{}<]"; else seek = "[%[%]|{}<:]"; end while loop do j = area:find( seek, j ); if j then c = area:byte( j, j ); if c == 123 then -- { k = j + 1; if area:byte( k, k ) == 123 then k = k + 1; if area:byte( k, k ) == 123 then j, loop = TemplUtl.feed( area, "{{{", k, after ); else k = k - 1; j, loop = TemplUtl.feed( area, "{{", k, after ); end if not loop then r = j; end end elseif c == 125 then -- } k = j + 1; if area:byte( k, k ) == 125 then if ahead == "{{" then r = k; break; -- while loop; elseif ahead == "{{{" then k = k + 1; if area:byte( k, k ) == 125 then r = k; break; -- while loop; end elseif not ahead then r = j - 1; loop = false; end end elseif c == 60 then -- < k = j + 3; if area:sub( j, k ) == "<!--" then k = area:find( "-->", k ); if k then j = k + 2; end else local skip; s = area:sub( j + 1 ):lower(); skip = s:match( "^%s*nowiki%s*>" ); if skip then local n = skip:len(); n, k = s:find( "<%s*/%s*nowiki%s*>", n ); if k then j = j + k; else loop = false; end end end elseif c == 124 then -- | if not r then r = j - 1; end if not ahead then loop = false; end elseif c == 91 then -- [ k = j + 1; if area:byte( k, k ) == 91 then k = k + 1; j, loop = TemplUtl.feed( area, "[[", k, after ); elseif TemplUtl.feasible( area:sub( k ) ) then k = k + 3; j, loop = TemplUtl.feed( area, "[", k, after ); end if not loop then r = j; end elseif c == 93 then -- ] if ahead == "[" then r = j; break; -- while loop elseif ahead == "[[" then k = j + 1; if area:byte( k, k ) == 93 then r = k; break; -- while loop end end elseif c == 58 then -- : s = area:sub( j + 1, j + 2 ); if s == "//" then s = " " .. area:sub( 1, j + 2 ); s = s:match( "%s(%a+://)$" ); if s and TemplUtl.feasible( s ) then s = area .. " "; s = s:match( "([^%s|]+)%s", j ); if s then k = s:find( "}}" ); if k then j = j + k + 1; else j = j + s:len(); end end end end end j = j + 1; else loop = false; end end -- while loop if not r then r = area:len(); end return r, loop; end -- TemplUtl.feed() TemplUtl.feeder = function ( area, at ) -- Retrieve all parameters -- Precondition: -- area -- string; template transclusion -- at -- optional number; byte position in area of "{{" -- Postcondition: -- Returns -- -- table -- [0] -- template, page, parser function name -- [1] -- unnamed parameter -- ["name"] -- named parameter -- -- string; error message, if any, else nil local n = 0; local j, k, p, r, r2, s, v; if type( at ) == "number" then j = at + 2; else j = 3; end while true do k = TemplUtl.feed( area, false, j ); s = area:sub( j, k ); s = s:gsub( "<!--.*-->", "" ); if n == 0 then r = { [ 0 ] = s }; n = 1; else p, v = s:match( "^([^=]*)=(.*)$" ); if p then if p:match( "^%s*%d+%s*$" ) then p = tonumber( p ); else p = mw.text.trim( p ); end v = mw.text.trim( v ); else p = n; v = s; n = n + 1; end if r[ p ] then if r2 then r2 = r2 .. " * "; else r2 = ""; end r2 = string.format( "%s%s '%s'", r2, "duplicated parameter", tostring( p ) ); end r[ p ] = v; end s = area:sub( k + 1, k + 2 ); if s == "}}" then break; -- while true elseif s == "" then r2 = "template not closed"; break; -- while true end j = k + 2; end -- while true return r, r2; end -- TemplUtl.feeder() TemplUtl.fetch = function ( area, ask ) -- Find assignment of a named template parameter -- Precondition: -- area -- string; template transclusion -- ask -- string; parameter name -- Postcondition: -- Returns string with trimmed parameter value, or nil -- Does not return value if template inside local r; local scan = string.format( "%s%s%s", "|%s*", ask, "%s*=(.+)$" ); r = mw.ustring.match( area, scan ); if r then local j = TemplUtl.feed( r, false, 1 ); r = r:sub( 1, j ); if r then r = mw.text.trim( r ); if r == "" then r = nil; end end end return r; end -- TemplUtl.fetch() TemplUtl.find = function ( area, access, at, alter ) -- Find next occurrence of a template -- Precondition: -- area -- string; where to search -- access -- string; trimmed (template) title -- at -- optional number; ustring position in area, if not 1 -- alter -- optional string; lowercase namespace pattern -- "" for article -- no colon (:) -- Postcondition: -- Returns ustring position of "{{" in area, or false -- Requires: -- fiatTitleRegExp() local scan = string.format( "{{%s%s%s", "([%w_%s:]*)%s*", fiatTitleRegExp( access ), "%s*([|}<]!?)" ); local r, space, start, suffix; if type( at ) == "number" then r = at; else r = 1; end while true do r = mw.ustring.find( area, scan, r ); if r then start, suffix = mw.ustring.match( area, scan, r ); if start then start = mw.text.trim( start ); if start == "" then break; -- while true elseif alter then if not space then space = string.format( "^:?%s:$", alter ); end start = mw.ustring.lower( start ); if mw.ustring.match( start, space ) then break; -- while true end else start = start:match( "^:?(.+):$" ); if start then start = mw.ustring.lower( start ); if start == "template" then break; -- while true else if not space then space = mw.site.namespaces[ 10 ].name; space = mw.ustring.lower( space ); end start = start:gsub( "_", " " ) :gsub( "%s+", " " ); if start == space then break; -- while true end end end end else break; -- while true end r = r + 2; else r = false; break; -- while true end end -- while true return r; end -- TemplUtl.find() -- finder() -- 1 page name -- 2 template title / page name -- 3 4 5 6 -- more like 2 TemplUtl.firstbreak = function ( adjust ) -- Precede leading character with newline if specific syntax -- Precondition: -- adjust -- string; trimmed wikitext -- Postcondition: -- Returns string, modified if necessary return fallible( adjust, true ); end -- TemplUtl.firstbreak() TemplUtl.flat = function ( area ) -- Remove syntax elements that hide effective syntax only -- Precondition: -- area -- string; unparsed wikitext to be reduced -- Postcondition: -- Returns cleared wikitext local delimiters = { { "<%s*NOWIKI%s*>", "<%s*/%s*NOWIKI%s*>" }, { "<!--", "-->", true }, { "<%s*PRE%s*>", "<%s*/%s*PRE%s*>" }, { "<%s*SYNTAXHIGHLIGHT[^<>]*>", "<%s*/%s*SYNTAXHIGHLIGHT%s*>" } }; local i = 1; local r = area; local k, m, n; if not TemplUtl.Delimiters then local c, sD, sP; TemplUtl.Delimiters = { }; for j = 1, #delimiters do table.insert( TemplUtl.Delimiters, { } ); for ji = 1, 2 do sD = delimiters[ j ][ ji ]; sP = ""; for js = 1, #sD, 1 do c = sD:byte( js, js ); if c >= 65 and c <= 90 then sP = string.format( "%s[%c%c]", sP, c, c + 32 ); else sP = sP .. string.char( c ); end end -- for js table.insert( TemplUtl.Delimiters[ j ], sP ); end -- for ji end -- for j end while ( true ) do k = false; for j = 1, #delimiters do m = r:find( TemplUtl.Delimiters[ j ][ 1 ], i, TemplUtl.Delimiters[ j ][ 3 ] ); if m and ( not k or m < k ) then k = m; n = j; end end -- for j if k then local j, s; if k > 1 then i = k - 1; s = r:sub( 1, i ); else s = ""; end j, m = r:find( TemplUtl.Delimiters[ n ][ 2 ], k + 1, TemplUtl.Delimiters[ n ][ 3 ] ); if m then r = s .. r:sub( m + 1 ); else r = s; break; -- while true end else break; -- while true end end -- while true return r; end -- TemplUtl.flat() TemplUtl.isTempAccount = function ( account ) -- Check whether username is matching temporary scheme -- Precondition: -- account -- string, or nil derived from current page -- Postcondition: -- Returns boolean local s = account; local r; if type( s ) == "string" then s = mw.text.trim( s ); if s == "" then s = false; end end if type( s ) ~= "string" then local t = mw.title.getCurrentTitle(); if t.namespace == 2 or t.namespace == 3 then s = t.rootText; end end if type( s ) == "string" then local seek = "^~(20[2-9]%d)%-([1-9]%d%d%d[%d%-]*)$"; local y; if s:sub( 1, 1 ) == "&" then s = mw.text.decode( s ); end y, s = s:match( seek ); if y then y = tonumber( y ); if y >= 2024 then local g; s = s .. "-"; g = s:match( "^(%d+)%-" ); if tonumber( g ) >= 1500 then if s:match( "^%d+%-$" ) then r = true; elseif g:len() == 5 then s = s:sub( 7 ); g = s:match( "^(%d+)%-" ); if g then local n = g:len(); if n <= 5 then if s:match( "^%d+%-$" ) then r = true; elseif n == 5 then s = s:sub( 7 ); if s:match( "^%d+%-$" ) then r = true; end end end end end end end end end return r or false; end -- TemplUtl.isTempAccount() TemplUtl.nowiki1 = function ( adjust ) -- HTML-escape leading character if disturbing syntax -- Precondition: -- adjust -- string; trimmed wikitext -- Postcondition: -- Returns string, modified if necessary return fallible( adjust, false ); end -- TemplUtl.nowiki1() Failsafe.failsafe = function ( atleast ) -- Retrieve versioning and check for compliance -- Precondition: -- atleast -- string, with required version -- or wikidata|item|~|@ or false -- Postcondition: -- Returns string -- with queried version/item, also if problem -- false -- if appropriate -- 2024-03-01 local since = atleast local last = ( since == "~" ) local linked = ( since == "@" ) local link = ( since == "item" ) local r if last or link or linked or since == "wikidata" then local item = Failsafe.item since = false if type( item ) == "number" and item > 0 then local suited = string.format( "Q%d", item ) if link then r = suited else local entity = mw.wikibase.getEntity( suited ) if type( entity ) == "table" then local seek = Failsafe.serialProperty or "P348" local vsn = entity:formatPropertyValues( seek ) if type( vsn ) == "table" and type( vsn.value ) == "string" and vsn.value ~= "" then if last and vsn.value == Failsafe.serial then r = false elseif linked then if mw.title.getCurrentTitle().prefixedText == mw.wikibase.getSitelink( suited ) then r = false else r = suited end else r = vsn.value end end end end elseif link then r = false end end if type( r ) == "nil" then if not since or since <= Failsafe.serial then r = Failsafe.serial else r = false end end return r end -- Failsafe.failsafe() -- Export local p = { }; function p.facets( frame ) return TemplUtl.facets( frame.args[ 1 ] or "", frame.args.decode ); end -- p.facets function p.faculty( frame ) local r = TemplUtl.faculty( frame.args[ 1 ], frame.args[ 2 ] ); if r ~= "-" then r = r and "1"; end return r or ""; end -- p.faculty function p.failure( frame ) local scream = mw.text.trim( frame.args[ 1 ] or "" ); local loud = frame.args[ 2 ]; local select = frame.args.class; if scream == "" then scream = "?????????"; end if loud then loud = TemplUtl.faculty( loud, nil ); end return TemplUtl.failure( scream, loud, select, frame ); end -- p.failure function p.fair( frame ) return TemplUtl.fair( frame.args[ 1 ] or "", frame.args.decode ); end -- p.fair function p.fake( frame ) TemplUtl.fake( frame.args[ 1 ] or "", frame ); return ""; end -- p.fake function p.fakes( frame ) local list = ( frame.args.list == "1" ); local r = TemplUtl.fakes( frame.args, frame, frame.args.prefix, list ); return r or ""; end -- p.fakes function p.firstbreak( frame ) local r = ( frame.args[ 1 ] ); if r then r = mw.text.trim( r ); if r ~= "" then r = TemplUtl.firstbreak( r ); end end return r or ""; end -- p.firstbreak function p.from( frame ) local r = frame:getParent():getTitle(); if r then r = string.format( "&#123;&#123;%s&#125;&#125;", r ); end return r or ""; end -- p.from function p.isRedirect() return mw.title.getCurrentTitle().isRedirect and "1" or ""; end -- p.isRedirect function p.isTempAccount( frame ) local r = ( frame.args[ 1 ] ); if r then r = mw.text.trim( r ); if r == "" then r = false; end end return TemplUtl.isTempAccount( r ) and "1" or ""; end -- p.isTempAccount function p.nowiki( frame ) local r = ( frame.args[ 1 ] ); if r then r = mw.text.trim( r ); if r ~= "" then r = mw.text.nowiki( r ); end end return r or ""; end -- p.nowiki function p.nowiki1( frame ) local r = ( frame.args[ 1 ] ); if r then r = mw.text.trim( r ); if r ~= "" then r = TemplUtl.nowiki1( r ); end end return r or ""; end -- p.nowiki1 function p.siteID() return mw.site.wikiId; end -- p.siteID p.failsafe = function ( frame ) -- Versioning interface local s = type( frame ) local since if s == "table" then since = frame.args[ 1 ] elseif s == "string" then since = frame end if since then since = mw.text.trim( since ) if since == "" then since = false end end return Failsafe.failsafe( since ) or "" end -- p.failsafe p.TemplUtl = function () return TemplUtl; end -- p.TemplUtl() setmetatable( p, { __call = function ( func, ... ) setmetatable( p, nil ); return Failsafe; end } ); return p; 3szdpfmciju74yb1airnbo0texaspk7 FoobarFoo 0 165779 754902 657282 2026-08-04T16:31:36Z Cooltey 37344 /* */ 754902 wikitext text/x-wiki 54 Test edits for fun!!! == Jumping G Hosefett == G jumping jumpy jumps e8w1uppuqm3uqcjwps6ykwkobvlgq37 754903 754902 2026-08-04T16:33:09Z Cooltey 37344 /* */ 754903 wikitext text/x-wiki 54 Test edits for fun??? == Jumping G Hosefett == G jumping jumpy jumps pt60rqm28gxa3dhbnfvbary2rls6uz7 Module:Pregled serije 828 174902 754915 738560 2026-08-04T21:16:44Z Flamingounicorn 69662 754915 Scribunto text/plain -- Ovaj modul omogućava funkcioniranje predloška {{Pregled serije}} local p = {} local function getRowspan(params, mode) local s = (params.sakrijfinale or ""):lower() if mode == "z" then return s == "sve" and 1 or (tonumber(params.zaglavljerowspans) or 2) elseif mode == "p" then return (s == "prvo" or s == "da") and 2 or 1 elseif mode == "h" then return s == "drugo" and 2 or 1 end end local function hasParam(params, pattern) for k, v in pairs(params) do if k:match(pattern) and v ~= "" then return true end end return false end local function hasMreza(params, hr) local p = hr and "mrežaHR" or "mreža" if (params[p.."1"] and params[p.."1"] ~= "") or (params[p.."0S"] and params[p.."0S"] ~= "") then return true end for i = string.byte("A"), string.byte("Z") do if params[p.."1"..string.char(i)] and params[p.."1"..string.char(i)] ~= "" then return true end end return false end local function isSpecial(index) return tostring(index):match("S$") end local function getPartLetters(params, index) local letters = {} for i = string.byte("A"), string.byte("Z") do local l = string.char(i) if params["premijera"..index..l] or params["finale"..index..l] then table.insert(letters, l) else break end end return letters end local function calcRowspans(params, orderedSeasons, prefix, isSerija) local spans, keys = {}, {} for _, index in ipairs(orderedSeasons) do local pl = getPartLetters(params, index) if #pl > 0 then for _, l in ipairs(pl) do table.insert(keys, tostring(index)..l) end else table.insert(keys, tostring(index)) end end local cv, ck, cs = nil, nil, 0 for _, key in ipairs(keys) do local sn = key:match("^(%d+S?)") local val = params[prefix..key] or params[prefix..sn] if params["odjeljak"..sn] and params["odjeljak"..sn] ~= "" then if ck then spans[ck] = isSerija and cs or {value=cv, span=cs} end cv, ck, cs = nil, nil, 0 end if not val or val == "" then val = cv end if val and val ~= "" then if ck == nil then cv, ck, cs = val, key, 1 elseif val == cv then cs = cs + 1 else spans[ck] = isSerija and cs or {value=cv, span=cs} cv, ck, cs = val, key, 1 end elseif ck then cs = cs + 1 end end if ck then spans[ck] = isSerija and cs or {value=cv, span=cs} end return spans end local function getHeaders(params, prefix, defaultLabel) local headers, seen = {}, {} for i = string.byte("A"), string.byte("Z") do local key = prefix..string.char(i) if params[key] and params[key] ~= "" then table.insert(headers, {key = string.char(i), label = params[key]}) seen[key] = true end end for k in pairs(params) do local m = k:match("^"..prefix.."([A-Z])%d+") if m and not seen[prefix..m] then table.insert(headers, {key = m, label = defaultLabel..m}) seen[prefix..m] = true end end return headers end local function getRowspans(params, prefix) local spans = {} for k, v in pairs(params) do local index = k:match("^"..prefix.."(%d+S?)row$") if index and v ~= "" then spans[index] = tonumber(v) end end return spans end local function getSkipSet(rowspans) local skipSet = {} for startIndex, span in pairs(rowspans) do local base = tonumber(startIndex:match("^%d+")) local suffix = startIndex:match("S?$") for i = 1, span - 1 do skipSet[tostring(base + i)..suffix] = true end end return skipSet end local function pipesearch(input) input = input or '' local pipePos = string.find(input, "|", 1, true) if not pipePos then return false end local searchPos = 1 while true do local ls = string.find(input, "%[%[", searchPos) if not ls then break end local le = string.find(input, "%]%]", ls) if not le then break end if pipePos > ls and pipePos < le then return false end searchPos = le + 1 end return true end local function renderCell(value, rowspan) if value == "" then return string.format('\n|%s style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.', rowspan and (' rowspan="'..rowspan..'"') or "") end if not pipesearch(value) then value = "| "..value end return string.format('\n|%s style="white-space:nowrap;" %s', rowspan and (' rowspan="'..rowspan..'"') or "", value) end local function renderHRCell(value, rowspan) if value == "" then return string.format('\n|%s style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.', rowspan and (' rowspan="'..rowspan..'"') or "") end if not pipesearch(value) then value = "| "..value end return string.format('\n|%s style="white-space:nowrap;" %s', rowspan and (' rowspan="'..rowspan..'"') or "", value) end function p.glavno(frame) local args = frame:getParent().args local sakrijFinale = nil local s = (args.sakrijfinale or ""):lower() if s == "prvo" or s == "da" then sakrijFinale = "prvo" elseif s == "drugo" then sakrijFinale = "drugo" elseif s == "sve" then sakrijFinale = "sve" end local zaglavljeRowspan = getRowspan(args, "z") local prvoRowspan = getRowspan(args, "p") local hrRowspan = getRowspan(args, "h") local hideSezona = args.sezona == "ne" and hasParam(args, "^serija%d+S?[A-Z]?$") local nowrap = args["nowrap"] local bojaFlag = hasParam(args, "^boja%d+S?$") local epizodeFlag = hasParam(args, "^epizode%d+S?$") local epizodePartsFlag = hasParam(args, "^epizode%d+S?[A-Z]$") local croatiaFlag = hasMreza(args, true) or hasParam(args, "^premijeraHR%d+S?$") or hasParam(args, "^finaleHR%d+S?$") or hasParam(args, "^premijeraHR%d+S?[A-Z]$") or hasParam(args, "^finaleHR%d+S?[A-Z]$") local sezonaT = args.sezonaT or "Sezona" local epizodeT = args.epizodeT or "Epizode" local colspan = bojaFlag and 2 or 1 local epizodeColspan = epizodePartsFlag and 2 or 1 local mrezaFlag = hasMreza(args, false) local mrezaFlagHR = hasMreza(args, true) local sezonaRowspan = zaglavljeRowspan local epizodeRowspan = zaglavljeRowspan local seasonNumbers = {} for k, _ in pairs(args) do local num = k:match("^poveznica(%d+S?)$") or k:match("^epizode(%d+S?)$") or k:match("^premijera(%d+S?)$") or k:match("^mreža(%d+S?)$") or k:match("^mrežaHR(%d+S?)$") if num then seasonNumbers[num] = true end end local function sortSeasons(a, b) local na, sa = a:match("^(%d+)(S?)$") local nb, sb = b:match("^(%d+)(S?)$") na, nb = tonumber(na), tonumber(nb) if na == nb then return sa < sb else return na < nb end end local orderedSeasons = {} for num in pairs(seasonNumbers) do table.insert(orderedSeasons, num) end table.sort(orderedSeasons, sortSeasons) local mrezaSpans = calcRowspans(args, orderedSeasons, "mreža", false) local mrezaSpansHR = calcRowspans(args, orderedSeasons, "mrežaHR", false) local serijaRowspans = calcRowspans(args, orderedSeasons, "serija", true) local dodatnoHeaders = getHeaders(args, "dodatno", "Dodatno ") local infoHeaders = getHeaders(args, "info", "Info ") local premijeraRowspans = getRowspans(args, "premijera") local premijeraSkipSet = getSkipSet(premijeraRowspans) local premijeraHRRowspans = getRowspans(args, "premijeraHR") local premijeraHRSkipSet = getSkipSet(premijeraHRRowspans) local tableStyle = 'text-align:center;' if nowrap == "yes" or nowrap == "da" then tableStyle = tableStyle .. ' white-space:nowrap;' end local output = {} table.insert(output, '{| class="wikitable" style="'..tableStyle..'"') local opis = args["opis"] if opis and opis ~= "" then table.insert(output, '|+ '..opis) end local serijaFlag = hasParam(args, "^serija%d+S?[A-Z]?$") local serijaT = args.serijaT or "Serija" if serijaFlag then table.insert(output, string.format('! rowspan="%d" | %s', zaglavljeRowspan, serijaT)) end if not hideSezona then table.insert(output, string.format('! colspan="%d" rowspan="%d" | %s', colspan, zaglavljeRowspan, sezonaT)) end for _, h in ipairs(dodatnoHeaders) do table.insert(output, string.format('! rowspan="%d" | %s', zaglavljeRowspan, h.label)) end if epizodeFlag or epizodePartsFlag then table.insert(output, string.format('! colspan="%d" rowspan="%d" | %s', epizodeColspan, zaglavljeRowspan, epizodeT)) end local drzavaText = args["država1"] or args["zagrada1"] if sakrijFinale == "prvo" or sakrijFinale == "da" or sakrijFinale == "sve" then local label = "Prva objava"..(drzavaText ~= "" and (" ("..drzavaText..")") or "") table.insert(output, string.format('! rowspan="%d" colspan="%d" | %s', prvoRowspan, mrezaFlag and 3 or 2, label)) else local label = "Prvo prikazivanje"..(drzavaText ~= "" and (" ("..drzavaText..")") or "") table.insert(output, string.format('! colspan="%d" | %s', mrezaFlag and 3 or 2, label)) end if croatiaFlag then local drzava2 = args["država2"] local zagrada2 = args["zagrada2"] if sakrijFinale == "drugo" or sakrijFinale == "sve" then local label = "Objava u " .. (drzava2 ~= "" and drzava2 or "Hrvatskoj") if zagrada2 and zagrada2 ~= "" then label = label .. " ("..zagrada2..")" end table.insert(output, string.format('! rowspan="%d" colspan="%d" | %s', hrRowspan, mrezaFlagHR and 3 or 2, label)) else local label = "Prikazivanje u " .. (drzava2 ~= "" and drzava2 or "Hrvatskoj") if zagrada2 and zagrada2 ~= "" then label = label .. " ("..zagrada2..")" end table.insert(output, string.format('! colspan="%d" | %s', mrezaFlagHR and 3 or 2, label)) end end for _, h in ipairs(infoHeaders) do table.insert(output, string.format('! rowspan="%d" | %s', zaglavljeRowspan, h.label)) end if sakrijFinale ~= "sve" then table.insert(output, '|-') if sakrijFinale ~= "prvo" and sakrijFinale ~= "da" then table.insert(output, '! Premijera') table.insert(output, '! Finale') end if mrezaFlag and sakrijFinale ~= "prvo" and sakrijFinale ~= "da" and sakrijFinale ~= "sve" then table.insert(output, '! Mreža') end if croatiaFlag and sakrijFinale ~= "drugo" then table.insert(output, '! Premijera') table.insert(output, '! Finale') end if croatiaFlag and mrezaFlagHR and sakrijFinale ~= "drugo" and sakrijFinale ~= "da" and sakrijFinale ~= "sve" then table.insert(output, '! Mreža') end end table.insert(output, '|-') for _, index in ipairs(orderedSeasons) do local odjeljakText = args["odjeljak"..index] if odjeljakText and odjeljakText ~= "" then local bg = args["odjeljakboja"..index] or "#ccccff" local tc = frame:expandTemplate{title = "Jači kontrast boja", args = {bg, "white", "black"}} table.insert(output, '|-') table.insert(output, string.format('! colspan="50" style="background:%s; color:%s;" | %s', bg, tc, odjeljakText)) table.insert(output, '|-') end if args["crta"..index] == "da" then table.insert(output, '|-') table.insert(output, '! colspan="50" style="background:#aaa; height:1px; padding:0;" |') table.insert(output, '|-') end local partLetters = getPartLetters(args, index) local partCount = #partLetters local letters = partCount > 0 and partLetters or {nil} for i, letter in ipairs(letters) do local key = letter and (tostring(index)..letter) or tostring(index) local rowspan = partCount > 0 and partCount or 1 local isFirst = (i == 1) local row = "" -- SERIJA local serijaKey = key local serijaValue = args["serija"..serijaKey] or (letter and args["serija"..index] or "") or "" if serijaRowspans[serijaKey] then row = row .. string.format('\n! rowspan="%d" style="font-weight:normal; font-style:italic;" | %s', serijaRowspans[serijaKey], serijaValue) elseif serijaValue ~= "" then row = row .. string.format('\n! style="font-weight:normal; font-style:italic;" | %s', serijaValue) end -- BOJA if bojaFlag and not hideSezona and isFirst then local boja = args["boja"..index] local ra = rowspan > 1 and (' rowspan="'..rowspan..'"') or "" if boja and boja ~= "" then row = row .. string.format('\n| style="background:%s; width:1px;"%s |', boja, ra) else row = row .. string.format('\n|%s |', ra) end end -- SEZONA if not hideSezona and isFirst then local link = args["poveznica"..index] local linkText = args["poveznicaT"..index] or args["poveznica"..index.."T"] local seasonLabel = linkText ~= "" and linkText or tostring(index):gsub("S$","")..(isSpecial(index) and "S" or "").."." local seasonColspan = 1 if not letter and isSpecial(index) then local ep = args["epizode"..index] if not ep or ep == "" then seasonColspan = 1 + epizodeColspan + #dodatnoHeaders end end local ca = seasonColspan > 1 and (' colspan="'..seasonColspan..'"') or "" local ra = rowspan > 1 and (' rowspan="'..rowspan..'"') or "" if link and link ~= "" then row = row .. string.format('\n! %s%s%s | [[%s|%s]]', (linkText ~= "" and 'style="font-weight:normal;" ' or ''), ca, ra, link, seasonLabel) else row = row .. string.format('\n! %s%s | %s', ca, ra, seasonLabel) end end -- DODATNO local epForDodatno = args["epizode"..index] local isSpecialNoEp = not letter and isSpecial(index) and (not epForDodatno or epForDodatno == "") if not isSpecialNoEp and isFirst then for _, h in ipairs(dodatnoHeaders) do local value = args["dodatno"..h.key..index] or "" if value == "" then row = row .. string.format('\n| rowspan="%d" style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.', rowspan) else if not pipesearch(value) then value = "| "..value end row = row .. string.format('\n| rowspan="%d" %s', rowspan, value) end end end -- EPIZODE CELL if isFirst and epizodeFlag then local epizode = args["epizode"..index] or "" if letter then if epizode == "sakrij" then -- skip elseif epizode ~= "" then row = row .. string.format('\n| rowspan="%d" | %s', rowspan, epizode) else row = row .. string.format('\n| rowspan="%d" style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.', rowspan) end else if isSpecial(index) and (not epizode or epizode == "") then -- skip elseif epizode ~= "" then if epizodeColspan == 2 then row = row .. '\n| colspan="2" | '..epizode else row = row .. '\n| '..epizode end else if epizodeColspan == 2 then row = row .. '\n| colspan="2" style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.' else row = row .. '\n| style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.' end end end end -- EPIZODE PART cell (multi-part only) if letter then local epPart = args["epizode"..index..letter] or "" local epizode = args["epizode"..index] if epizode == "sakrij" and epizodePartsFlag then if epPart == "" then row = row .. '\n| colspan="2" style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.' else row = row .. '\n| colspan="2" | '..epPart end else if epPart == "" then row = row .. '\n| style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.' else row = row .. '\n| '..epPart end end end -- PREMIJERA I FINALE local premijera = "" local finale = "" if not premijeraSkipSet[key] then premijera = args["premijera"..key] or "" finale = args["finale"..key] or "" end local sakrijfinale = args["sakrijfinale"] or "" if premijeraRowspans[key] then if finale == "premijera" or sakrijfinale == "da" or sakrijfinale == "sve" or sakrijfinale == "prvo" or (isSpecial(index) and (not finale or finale == "")) then local cellContent = premijera if cellContent == "" then row = row .. string.format('\n| colspan="2" rowspan="%d" style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.', premijeraRowspans[key]) else if not pipesearch(cellContent) then cellContent = "| "..cellContent end row = row .. string.format('\n| colspan="2" rowspan="%d" style="white-space:nowrap;" %s', premijeraRowspans[key], cellContent) end else row = row .. renderCell(premijera, premijeraRowspans[key]) row = row .. renderCell(finale) end elseif not premijeraSkipSet[key] then if finale == "premijera" or sakrijfinale == "da" or sakrijfinale == "sve" or sakrijfinale == "prvo" or (isSpecial(index) and (not finale or finale == "")) then local cellContent = premijera if cellContent == "" then row = row .. '\n| colspan="2" style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.' else if not pipesearch(cellContent) then cellContent = "| "..cellContent end row = row .. '\n| colspan="2" style="white-space:nowrap;" '..cellContent end else row = row .. renderCell(premijera) row = row .. renderCell(finale) end end -- MREŽA if hasMreza(args, false) then if mrezaSpans[key] then local value = mrezaSpans[key].value or "" if value ~= "" then if not pipesearch(value) then value = "| "..value end row = row .. string.format('\n| rowspan="%d" %s', mrezaSpans[key].span, value) else row = row .. string.format('\n| rowspan="%d" |', mrezaSpans[key].span) end elseif args["mreža"..key] and args["mreža"..key] ~= "" then local value = args["mreža"..key] if not pipesearch(value) then value = "| "..value end row = row .. string.format('\n%s', value) elseif args["mreža"..key] == nil or args["mreža"..key] == "" then if isFirst and args["mreža"..index] and args["mreža"..index] ~= "" then local value = args["mreža"..index] if not pipesearch(value) then value = "| "..value end row = row .. string.format('\n| rowspan="%d" %s', partCount, value) end end end -- PREMIJERAHR I FINALEHR if croatiaFlag and not premijeraHRSkipSet[key] then local premHR = args["premijeraHR"..key] or "" local finHR = args["finaleHR"..key] or "" local sakrijfinale = args["sakrijfinale"] or "" if premijeraHRRowspans[key] then if finHR == "premijera" or sakrijfinale == "drugo" or sakrijfinale == "sve" or (isSpecial(index) and (not finHR or finHR == "")) then local cellContent = premHR if cellContent == "" then row = row .. string.format('\n| colspan="2" rowspan="%d" style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.', premijeraHRRowspans[key]) else if not pipesearch(cellContent) then cellContent = "| "..cellContent end row = row .. string.format('\n| colspan="2" rowspan="%d" style="white-space:nowrap;" %s', premijeraHRRowspans[key], cellContent) end else row = row .. renderHRCell(premHR, premijeraHRRowspans[key]) row = row .. renderHRCell(finHR) end else if finHR == "premijera" or sakrijfinale == "drugo" or sakrijfinale == "sve" or (isSpecial(index) and (not finHR or finHR == "")) then local cellContent = premHR if cellContent == "" then row = row .. '\n| colspan="2" style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.' else if not pipesearch(cellContent) then cellContent = "| "..cellContent end row = row .. '\n| colspan="2" style="white-space:nowrap;" '..cellContent end else row = row .. renderHRCell(premHR) row = row .. renderHRCell(finHR) end end end -- MREŽAHR if croatiaFlag and hasMreza(args, true) and mrezaSpansHR[key] then local spanData = mrezaSpansHR[key] local value = spanData.value or "" if value ~= "" then if not pipesearch(value) then value = "| "..value end row = row .. string.format('\n| rowspan="%d" %s', spanData.span, value) else row = row .. string.format('\n| rowspan="%d" |', spanData.span) end end -- INFO CELLS if isFirst then for _, h in ipairs(infoHeaders) do local value = args["info"..h.key..index] or "" if value == "" then row = row .. string.format('\n| rowspan="%d" style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.', rowspan) else if not pipesearch(value) then value = "| "..value end row = row .. string.format('\n| rowspan="%d" %s', rowspan, value) end end end table.insert(output, row) table.insert(output, '|-') end end local tablica = args["tablica"] if tablica and tablica ~= "" then table.insert(output, tablica) end table.insert(output, '|}') return table.concat(output, "\n") end return p 304pnfbfss781i8fosf622l7yb5zsdv 754916 754915 2026-08-04T21:20:18Z Flamingounicorn 69662 754916 Scribunto text/plain -- Ovaj modul omogućava funkcioniranje predloška {{Pregled serije}} local p = {} local function getRowspan(params, mode) local s = (params.sakrijfinale or ""):lower() if mode == "z" then return s == "sve" and 1 or (tonumber(params.zaglavljerowspans) or 2) elseif mode == "p" then return (s == "prvo" or s == "da") and 2 or 1 elseif mode == "h" then return s == "drugo" and 2 or 1 end end local function hasParam(params, pattern) for k, v in pairs(params) do if k:match(pattern) and v ~= "" then return true end end return false end local function hasMreza(params, hr) local p = hr and "mrežaHR" or "mreža" if (params[p.."1"] and params[p.."1"] ~= "") or (params[p.."0S"] and params[p.."0S"] ~= "") then return true end for i = string.byte("A"), string.byte("Z") do if params[p.."1"..string.char(i)] and params[p.."1"..string.char(i)] ~= "" then return true end end return false end local function isSpecial(index) return tostring(index):match("S$") end local function getPartLetters(params, index) local letters = {} for i = string.byte("A"), string.byte("Z") do local l = string.char(i) if params["premijera"..index..l] or params["finale"..index..l] then table.insert(letters, l) else break end end return letters end local function calcRowspans(params, orderedSeasons, prefix, isSerija) local spans, keys = {}, {} for _, index in ipairs(orderedSeasons) do local pl = getPartLetters(params, index) if #pl > 0 then for _, l in ipairs(pl) do table.insert(keys, tostring(index)..l) end else table.insert(keys, tostring(index)) end end local cv, ck, cs = nil, nil, 0 for _, key in ipairs(keys) do local sn = key:match("^(%d+S?)") local val = params[prefix..key] or params[prefix..sn] if params["odjeljak"..sn] and params["odjeljak"..sn] ~= "" then if ck then spans[ck] = isSerija and cs or {value=cv, span=cs} end cv, ck, cs = nil, nil, 0 end if not val or val == "" then val = cv end if val and val ~= "" then if ck == nil then cv, ck, cs = val, key, 1 elseif val == cv then cs = cs + 1 else spans[ck] = isSerija and cs or {value=cv, span=cs} cv, ck, cs = val, key, 1 end elseif ck then cs = cs + 1 end end if ck then spans[ck] = isSerija and cs or {value=cv, span=cs} end return spans end local function getHeaders(params, prefix, defaultLabel) local headers, seen = {}, {} for i = string.byte("A"), string.byte("Z") do local key = prefix..string.char(i) if params[key] and params[key] ~= "" then table.insert(headers, {key = string.char(i), label = params[key]}) seen[key] = true end end for k in pairs(params) do local m = k:match("^"..prefix.."([A-Z])%d+") if m and not seen[prefix..m] then table.insert(headers, {key = m, label = defaultLabel..m}) seen[prefix..m] = true end end return headers end local function getRowspans(params, prefix) local spans = {} for k, v in pairs(params) do local index = k:match("^"..prefix.."(%d+S?)row$") if index and v ~= "" then spans[index] = tonumber(v) end end return spans end local function getSkipSet(rowspans) local skipSet = {} for startIndex, span in pairs(rowspans) do local base = tonumber(startIndex:match("^%d+")) local suffix = startIndex:match("S?$") for i = 1, span - 1 do skipSet[tostring(base + i)..suffix] = true end end return skipSet end local function pipesearch(input) input = input or '' local pipePos = string.find(input, "|", 1, true) if not pipePos then return false end local searchPos = 1 while true do local ls = string.find(input, "%[%[", searchPos) if not ls then break end local le = string.find(input, "%]%]", ls) if not le then break end if pipePos > ls and pipePos < le then return false end searchPos = le + 1 end return true end local function renderCell(value, rowspan) if value == "" then return string.format('\n|%s style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.', rowspan and (' rowspan="'..rowspan..'"') or "") end if not pipesearch(value) then value = "| "..value end return string.format('\n|%s style="white-space:nowrap;" %s', rowspan and (' rowspan="'..rowspan..'"') or "", value) end local function renderHRCell(value, rowspan) if value == "" then return string.format('\n|%s style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.', rowspan and (' rowspan="'..rowspan..'"') or "") end if not pipesearch(value) then value = "| "..value end return string.format('\n|%s style="white-space:nowrap;" %s', rowspan and (' rowspan="'..rowspan..'"') or "", value) end function p.glavno(frame) local args = frame:getParent().args local sakrijFinale = nil local s = (args.sakrijfinale or ""):lower() if s == "prvo" or s == "da" then sakrijFinale = "prvo" elseif s == "drugo" then sakrijFinale = "drugo" elseif s == "sve" then sakrijFinale = "sve" end local zaglavljeRowspan = getRowspan(args, "z") local prvoRowspan = getRowspan(args, "p") local hrRowspan = getRowspan(args, "h") local hideSezona = args.sezona == "ne" and hasParam(args, "^serija%d+S?[A-Z]?$") local nowrap = args["nowrap"] local bojaFlag = hasParam(args, "^boja%d+S?$") local epizodeFlag = hasParam(args, "^epizode%d+S?$") local epizodePartsFlag = hasParam(args, "^epizode%d+S?[A-Z]$") local croatiaFlag = hasMreza(args, true) or hasParam(args, "^premijeraHR%d+S?$") or hasParam(args, "^finaleHR%d+S?$") or hasParam(args, "^premijeraHR%d+S?[A-Z]$") or hasParam(args, "^finaleHR%d+S?[A-Z]$") local sezonaT = args.sezonaT or "Sezona" local epizodeT = args.epizodeT or "Epizode" local colspan = bojaFlag and 2 or 1 local epizodeColspan = epizodePartsFlag and 2 or 1 local mrezaFlag = hasMreza(args, false) local mrezaFlagHR = hasMreza(args, true) local sezonaRowspan = zaglavljeRowspan local epizodeRowspan = zaglavljeRowspan local seasonNumbers = {} for k, _ in pairs(args) do local num = k:match("^poveznica(%d+S?)$") or k:match("^epizode(%d+S?)$") or k:match("^premijera(%d+S?)$") or k:match("^mreža(%d+S?)$") or k:match("^mrežaHR(%d+S?)$") if num then seasonNumbers[num] = true end end local function sortSeasons(a, b) local na, sa = a:match("^(%d+)(S?)$") local nb, sb = b:match("^(%d+)(S?)$") na, nb = tonumber(na), tonumber(nb) if na == nb then return sa < sb else return na < nb end end local orderedSeasons = {} for num in pairs(seasonNumbers) do table.insert(orderedSeasons, num) end table.sort(orderedSeasons, sortSeasons) local mrezaSpans = calcRowspans(args, orderedSeasons, "mreža", false) local mrezaSpansHR = calcRowspans(args, orderedSeasons, "mrežaHR", false) local serijaRowspans = calcRowspans(args, orderedSeasons, "serija", true) local dodatnoHeaders = getHeaders(args, "dodatno", "Dodatno ") local infoHeaders = getHeaders(args, "info", "Info ") local premijeraRowspans = getRowspans(args, "premijera") local premijeraSkipSet = getSkipSet(premijeraRowspans) local premijeraHRRowspans = getRowspans(args, "premijeraHR") local premijeraHRSkipSet = getSkipSet(premijeraHRRowspans) local tableStyle = 'text-align:center;' if nowrap == "yes" or nowrap == "da" then tableStyle = tableStyle .. ' white-space:nowrap;' end local output = {} table.insert(output, '{| class="wikitable" style="'..tableStyle..'"') local opis = args["opis"] if opis and opis ~= "" then table.insert(output, '|+ '..opis) end local serijaFlag = hasParam(args, "^serija%d+S?[A-Z]?$") local serijaT = args.serijaT or "Serija" if serijaFlag then table.insert(output, string.format('! rowspan="%d" | %s', zaglavljeRowspan, serijaT)) end if not hideSezona then table.insert(output, string.format('! colspan="%d" rowspan="%d" | %s', colspan, zaglavljeRowspan, sezonaT)) end for _, h in ipairs(dodatnoHeaders) do table.insert(output, string.format('! rowspan="%d" | %s', zaglavljeRowspan, h.label)) end if epizodeFlag or epizodePartsFlag then table.insert(output, string.format('! colspan="%d" rowspan="%d" | %s', epizodeColspan, zaglavljeRowspan, epizodeT)) end local drzavaText = args["država1"] or args["zagrada1"] if sakrijFinale == "prvo" or sakrijFinale == "da" or sakrijFinale == "sve" then local label = "Prva objava"..(drzavaText and drzavaText ~= "" and (" ("..drzavaText..")") or "") table.insert(output, string.format('! rowspan="%d" colspan="%d" | %s', prvoRowspan, mrezaFlag and 3 or 2, label)) else local label = "Prvo prikazivanje"..(drzavaText and drzavaText ~= "" and (" ("..drzavaText..")") or "") table.insert(output, string.format('! colspan="%d" | %s', mrezaFlag and 3 or 2, label)) end if croatiaFlag then local drzava2 = args["država2"] local zagrada2 = args["zagrada2"] if sakrijFinale == "drugo" or sakrijFinale == "sve" then local label = "Objava u " .. (drzava2 ~= "" and drzava2 or "Hrvatskoj") if zagrada2 and zagrada2 ~= "" then label = label .. " ("..zagrada2..")" end table.insert(output, string.format('! rowspan="%d" colspan="%d" | %s', hrRowspan, mrezaFlagHR and 3 or 2, label)) else local label = "Prikazivanje u " .. (drzava2 ~= "" and drzava2 or "Hrvatskoj") if zagrada2 and zagrada2 ~= "" then label = label .. " ("..zagrada2..")" end table.insert(output, string.format('! colspan="%d" | %s', mrezaFlagHR and 3 or 2, label)) end end for _, h in ipairs(infoHeaders) do table.insert(output, string.format('! rowspan="%d" | %s', zaglavljeRowspan, h.label)) end if sakrijFinale ~= "sve" then table.insert(output, '|-') if sakrijFinale ~= "prvo" and sakrijFinale ~= "da" then table.insert(output, '! Premijera') table.insert(output, '! Finale') end if mrezaFlag and sakrijFinale ~= "prvo" and sakrijFinale ~= "da" and sakrijFinale ~= "sve" then table.insert(output, '! Mreža') end if croatiaFlag and sakrijFinale ~= "drugo" then table.insert(output, '! Premijera') table.insert(output, '! Finale') end if croatiaFlag and mrezaFlagHR and sakrijFinale ~= "drugo" and sakrijFinale ~= "da" and sakrijFinale ~= "sve" then table.insert(output, '! Mreža') end end table.insert(output, '|-') for _, index in ipairs(orderedSeasons) do local odjeljakText = args["odjeljak"..index] if odjeljakText and odjeljakText ~= "" then local bg = args["odjeljakboja"..index] or "#ccccff" local tc = frame:expandTemplate{title = "Jači kontrast boja", args = {bg, "white", "black"}} table.insert(output, '|-') table.insert(output, string.format('! colspan="50" style="background:%s; color:%s;" | %s', bg, tc, odjeljakText)) table.insert(output, '|-') end if args["crta"..index] == "da" then table.insert(output, '|-') table.insert(output, '! colspan="50" style="background:#aaa; height:1px; padding:0;" |') table.insert(output, '|-') end local partLetters = getPartLetters(args, index) local partCount = #partLetters local letters = partCount > 0 and partLetters or {nil} for i, letter in ipairs(letters) do local key = letter and (tostring(index)..letter) or tostring(index) local rowspan = partCount > 0 and partCount or 1 local isFirst = (i == 1) local row = "" -- SERIJA local serijaKey = key local serijaValue = args["serija"..serijaKey] or (letter and args["serija"..index] or "") or "" if serijaRowspans[serijaKey] then row = row .. string.format('\n! rowspan="%d" style="font-weight:normal; font-style:italic;" | %s', serijaRowspans[serijaKey], serijaValue) elseif serijaValue ~= "" then row = row .. string.format('\n! style="font-weight:normal; font-style:italic;" | %s', serijaValue) end -- BOJA if bojaFlag and not hideSezona and isFirst then local boja = args["boja"..index] local ra = rowspan > 1 and (' rowspan="'..rowspan..'"') or "" if boja and boja ~= "" then row = row .. string.format('\n| style="background:%s; width:1px;"%s |', boja, ra) else row = row .. string.format('\n|%s |', ra) end end -- SEZONA if not hideSezona and isFirst then local link = args["poveznica"..index] local linkText = args["poveznicaT"..index] or args["poveznica"..index.."T"] local seasonLabel = linkText ~= "" and linkText or tostring(index):gsub("S$","")..(isSpecial(index) and "S" or "").."." local seasonColspan = 1 if not letter and isSpecial(index) then local ep = args["epizode"..index] if not ep or ep == "" then seasonColspan = 1 + epizodeColspan + #dodatnoHeaders end end local ca = seasonColspan > 1 and (' colspan="'..seasonColspan..'"') or "" local ra = rowspan > 1 and (' rowspan="'..rowspan..'"') or "" if link and link ~= "" then row = row .. string.format('\n! %s%s%s | [[%s|%s]]', (linkText ~= "" and 'style="font-weight:normal;" ' or ''), ca, ra, link, seasonLabel) else row = row .. string.format('\n! %s%s | %s', ca, ra, seasonLabel) end end -- DODATNO local epForDodatno = args["epizode"..index] local isSpecialNoEp = not letter and isSpecial(index) and (not epForDodatno or epForDodatno == "") if not isSpecialNoEp and isFirst then for _, h in ipairs(dodatnoHeaders) do local value = args["dodatno"..h.key..index] or "" if value == "" then row = row .. string.format('\n| rowspan="%d" style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.', rowspan) else if not pipesearch(value) then value = "| "..value end row = row .. string.format('\n| rowspan="%d" %s', rowspan, value) end end end -- EPIZODE CELL if isFirst and epizodeFlag then local epizode = args["epizode"..index] or "" if letter then if epizode == "sakrij" then -- skip elseif epizode ~= "" then row = row .. string.format('\n| rowspan="%d" | %s', rowspan, epizode) else row = row .. string.format('\n| rowspan="%d" style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.', rowspan) end else if isSpecial(index) and (not epizode or epizode == "") then -- skip elseif epizode ~= "" then if epizodeColspan == 2 then row = row .. '\n| colspan="2" | '..epizode else row = row .. '\n| '..epizode end else if epizodeColspan == 2 then row = row .. '\n| colspan="2" style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.' else row = row .. '\n| style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.' end end end end -- EPIZODE PART cell (multi-part only) if letter then local epPart = args["epizode"..index..letter] or "" local epizode = args["epizode"..index] if epizode == "sakrij" and epizodePartsFlag then if epPart == "" then row = row .. '\n| colspan="2" style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.' else row = row .. '\n| colspan="2" | '..epPart end else if epPart == "" then row = row .. '\n| style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.' else row = row .. '\n| '..epPart end end end -- PREMIJERA I FINALE local premijera = "" local finale = "" if not premijeraSkipSet[key] then premijera = args["premijera"..key] or "" finale = args["finale"..key] or "" end local sakrijfinale = args["sakrijfinale"] or "" if premijeraRowspans[key] then if finale == "premijera" or sakrijfinale == "da" or sakrijfinale == "sve" or sakrijfinale == "prvo" or (isSpecial(index) and (not finale or finale == "")) then local cellContent = premijera if cellContent == "" then row = row .. string.format('\n| colspan="2" rowspan="%d" style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.', premijeraRowspans[key]) else if not pipesearch(cellContent) then cellContent = "| "..cellContent end row = row .. string.format('\n| colspan="2" rowspan="%d" style="white-space:nowrap;" %s', premijeraRowspans[key], cellContent) end else row = row .. renderCell(premijera, premijeraRowspans[key]) row = row .. renderCell(finale) end elseif not premijeraSkipSet[key] then if finale == "premijera" or sakrijfinale == "da" or sakrijfinale == "sve" or sakrijfinale == "prvo" or (isSpecial(index) and (not finale or finale == "")) then local cellContent = premijera if cellContent == "" then row = row .. '\n| colspan="2" style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.' else if not pipesearch(cellContent) then cellContent = "| "..cellContent end row = row .. '\n| colspan="2" style="white-space:nowrap;" '..cellContent end else row = row .. renderCell(premijera) row = row .. renderCell(finale) end end -- MREŽA if hasMreza(args, false) then if mrezaSpans[key] then local value = mrezaSpans[key].value or "" if value ~= "" then if not pipesearch(value) then value = "| "..value end row = row .. string.format('\n| rowspan="%d" %s', mrezaSpans[key].span, value) else row = row .. string.format('\n| rowspan="%d" |', mrezaSpans[key].span) end elseif args["mreža"..key] and args["mreža"..key] ~= "" then local value = args["mreža"..key] if not pipesearch(value) then value = "| "..value end row = row .. string.format('\n%s', value) elseif args["mreža"..key] == nil or args["mreža"..key] == "" then if isFirst and args["mreža"..index] and args["mreža"..index] ~= "" then local value = args["mreža"..index] if not pipesearch(value) then value = "| "..value end row = row .. string.format('\n| rowspan="%d" %s', partCount, value) end end end -- PREMIJERAHR I FINALEHR if croatiaFlag and not premijeraHRSkipSet[key] then local premHR = args["premijeraHR"..key] or "" local finHR = args["finaleHR"..key] or "" local sakrijfinale = args["sakrijfinale"] or "" if premijeraHRRowspans[key] then if finHR == "premijera" or sakrijfinale == "drugo" or sakrijfinale == "sve" or (isSpecial(index) and (not finHR or finHR == "")) then local cellContent = premHR if cellContent == "" then row = row .. string.format('\n| colspan="2" rowspan="%d" style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.', premijeraHRRowspans[key]) else if not pipesearch(cellContent) then cellContent = "| "..cellContent end row = row .. string.format('\n| colspan="2" rowspan="%d" style="white-space:nowrap;" %s', premijeraHRRowspans[key], cellContent) end else row = row .. renderHRCell(premHR, premijeraHRRowspans[key]) row = row .. renderHRCell(finHR) end else if finHR == "premijera" or sakrijfinale == "drugo" or sakrijfinale == "sve" or (isSpecial(index) and (not finHR or finHR == "")) then local cellContent = premHR if cellContent == "" then row = row .. '\n| colspan="2" style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.' else if not pipesearch(cellContent) then cellContent = "| "..cellContent end row = row .. '\n| colspan="2" style="white-space:nowrap;" '..cellContent end else row = row .. renderHRCell(premHR) row = row .. renderHRCell(finHR) end end end -- MREŽAHR if croatiaFlag and hasMreza(args, true) and mrezaSpansHR[key] then local spanData = mrezaSpansHR[key] local value = spanData.value or "" if value ~= "" then if not pipesearch(value) then value = "| "..value end row = row .. string.format('\n| rowspan="%d" %s', spanData.span, value) else row = row .. string.format('\n| rowspan="%d" |', spanData.span) end end -- INFO CELLS if isFirst then for _, h in ipairs(infoHeaders) do local value = args["info"..h.key..index] or "" if value == "" then row = row .. string.format('\n| rowspan="%d" style="background:#ececec; color:#2C2C2C; text-align:center;" | n.p.', rowspan) else if not pipesearch(value) then value = "| "..value end row = row .. string.format('\n| rowspan="%d" %s', rowspan, value) end end end table.insert(output, row) table.insert(output, '|-') end end local tablica = args["tablica"] if tablica and tablica ~= "" then table.insert(output, tablica) end table.insert(output, '|}') return table.concat(output, "\n") end return p t498zuo5h15vnpm6dyk4ummrhrs0hdo Wikipedia:Lua/Modul/TemplUtl/Test 4 175031 754897 739559 2026-08-04T13:52:47Z PerfektesChaos 18104 + 754897 wikitext text/x-wiki {{LuaModuleDoc}} Testfälle zum Modul:TemplUtl <code>{{#invoke:TemplUtl|failsafe}}</code>; unerwartete Resultate werden markiert: == facets == {{#invoke:TemplUtl/test|f|_f_=facets|_r_=}} {{#invoke:TemplUtl/test|f|_f_=facets||_r_=}} {{#invoke:TemplUtl/test|f|_f_=facets|EinWort|_r_=EinWort}} {{#invoke:TemplUtl/test|f|_f_=facets|abc.def gh (ij)|_r_=abc def gh ij}} {{#invoke:TemplUtl/test|f|_f_=facets|Viele,getrennte_Wörter-allerlei/Trennzeichen|_r_=Viele getrennte Wörter allerlei Trennzeichen}} == faculty == {{#invoke:TemplUtl/test|f|_f_=faculty|_r_=}} {{#invoke:TemplUtl/test|f|_f_=faculty||_r_=}} {{#invoke:TemplUtl/test|f|_f_=faculty|0|_r_=}} {{#invoke:TemplUtl/test|f|_f_=faculty|1|_r_=1}} {{#invoke:TemplUtl/test|f|_f_=faculty|-|_r_=}} {{#invoke:TemplUtl/test|f|_f_=faculty|yes|_r_=1}} {{#invoke:TemplUtl/test|f|_f_=faculty|y|_r_=1}} {{#invoke:TemplUtl/test|f|_f_=faculty|YES|_r_=1}} {{#invoke:TemplUtl/test|f|_f_=faculty|Yes|_r_=1}} {{#invoke:TemplUtl/test|f|_f_=faculty|Y|_r_=1}} {{#invoke:TemplUtl/test|f|_f_=faculty|no|_r_=}} {{#invoke:TemplUtl/test|f|_f_=faculty|n|_r_=}} {{#invoke:TemplUtl/test|f|_f_=faculty|No|_r_=}} {{#invoke:TemplUtl/test|f|_f_=faculty|NO|_r_=}} {{#invoke:TemplUtl/test|f|_f_=faculty|N|_r_=}} {{#invoke:TemplUtl/test|f|_f_=faculty|dunno|_r_=1}} {{#invoke:TemplUtl/test|f|_f_=faculty|Ja|_r_=1}} {{#invoke:TemplUtl/test|f|_f_=faculty|J|_r_=1}} {{#invoke:TemplUtl/test|f|_f_=faculty|j|_r_=1}} {{#invoke:TemplUtl/test|f|_f_=faculty|ja|_r_=1}} {{#invoke:TemplUtl/test|f|_f_=faculty|JA|_r_=1}} {{#invoke:TemplUtl/test|f|_f_=faculty|Nein|_r_=}} {{#invoke:TemplUtl/test|f|_f_=faculty|NEIN|_r_=}} {{#invoke:TemplUtl/test|f|_f_=faculty|dunno|_r_=1}} {{#invoke:TemplUtl/test|f|_f_=faculty|dunno|0|_r_=}} {{#invoke:TemplUtl/test|f|_f_=faculty|dunno|1|_r_=1}} {{#invoke:TemplUtl/test|f|_f_=faculty|dunno|-|_r_=-}} {{#invoke:TemplUtl/test|f|_f_=faculty||1|_r_=1}} {{#invoke:TemplUtl/test|f|_f_=faculty|-|1|_r_=}} {{#invoke:TemplUtl/test|f|_f_=faculty|00-00|_r_=}} {{#invoke:TemplUtl/test|f|_f_=faculty|0110-1|_r_=1}} == fair == {{#invoke:TemplUtl/test|f|_f_=fair|_r_=}} {{#invoke:TemplUtl/test|f|_f_=fair||_r_=}} {{#invoke:TemplUtl/test|f|_f_=fair|a&auml;b&#99;d&#x65;f|_r_=aäbcdef}} == isTempAccount == {{#invoke:TemplUtl/test|f|_f_=isTempAccount|Beispielnutzer|_r_=}} {{#invoke:TemplUtl/test|f|_f_=isTempAccount|~2024-1500|_r_=1}} {{#invoke:TemplUtl/test|f|_f_=isTempAccount|~2024-123456789|_r_=1}} {{#invoke:TemplUtl/test|f|_f_=isTempAccount|~2024-12345-6789|_r_=1}} {{#invoke:TemplUtl/test|f|_f_=isTempAccount|~2024-12345-67890-1|_r_=1}} {{#invoke:TemplUtl/test|f|_f_=isTempAccount|&#126;2024-99999|_r_=1}} {{#invoke:TemplUtl/test|f|_f_=isTempAccount|~2024-0987|_r_=}} {{#invoke:TemplUtl/test|f|_f_=isTempAccount|~2024-987|_r_=}} {{#invoke:TemplUtl/test|f|_f_=isTempAccount|~123-456|_r_=}} {{#invoke:TemplUtl/test|f|_f_=isTempAccount|~2023-4567|_r_=}} == nowiki == {{#invoke:TemplUtl/test|f|_f_=nowiki|Beispiel|_r_=Beispiel}} {{#invoke:TemplUtl/test|f|_f_=nowiki||_r_=}} {{#invoke:TemplUtl/test|f|_f_=nowiki|<span>[{a{{!}}b}]|_r_=&#60;span&#62;&#91;&#123;a&#124;b&#125;&#93;}} == nowiki1 == {{#invoke:TemplUtl/test|f|_f_=nowiki1|Beispiel|_r_=Beispiel}} {{#invoke:TemplUtl/test|f|_f_=nowiki1||_r_=}} {{#invoke:TemplUtl/test|f|_f_=nowiki1|*#x|_r_=&#42;#x}} == siteID == {{#invoke:TemplUtl/test|f|_f_=siteID|_r_=dewiki}} [[Kategorie:Wikipedia:Lua/Modul/Testseite|TemplUtl]] msg50e8bpfomzfpxb2rdgabo33mlhft User:Namoroka/sandbox/1 2 177074 754891 754885 2026-08-04T12:23:41Z Namoroka 19627 754891 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불정책(三不政策), 독불장군(獨不將軍) 金氏 商賈 賈船 불연즉(不然則) "乘車": "승차", "乘車之誚": "승거지초", "駐停車": "주정차", "停車燈": "정차등", "前車": "전차", "前車可鑑": "전거가감", "前車覆轍": "전거복철" 불가(不可) 불가결(不可缺) 불가능(不可能) 불가침조약(不可侵條約) 불가피(不可避) 불과(不過) 불구(不拘) 불구속(不拘束) 불규칙(不規則) 불균형(不均衡) 불길(不吉) 불능(不能) 불량(不良) 불량배(不良輩) 불량식품(不良食品) 불로초(不老草) 불리(不利) 불륜(不倫) 불만(不滿) 불만족(不滿足) 불면증(不眠症) 불멸(不滅) 불명예(不名譽) 불모지(不毛地) 불문(不問) 불법(不法) 불법적(不法的) 불법행위(不法行爲) 불변(不變) 불복(不服) 불복종(不服從) 불사(不辭/不死) 불사신(不死身) 불사조(不死鳥) 불상사(不祥事) 불성실(不誠實) 불순(不純/不順) 불시(不時) 불신(不信) 불안(不安) 불여귀(不如歸) 불연(不燃) 불연성(不燃性) 불연속(不連續) 불완전(不完全) 불우(不遇) 불운(不運) 불응(不應) 퇴거불응죄(退去不應罪) 불의(不義) 불이익(不利益) 불이행(不履行) 제차신호조작불이행(諸車信號操作不履行) 지시불이행(指示不履行) 불임(不妊) 불참(不參) 불청객(不請客) 불체포특권(不逮捕特權) 불초(不肖) 불쾌(不快) 불쾌감(不快感) 불투명(不透明) 불편(不便) 불평(不平) 불평등(不平等) 불필요(不必要) 불합격(不合格) 불합리(不合理) 불행(不幸) 불허(不許) 불확실(不確實) 불확실성(不確實性) 불황(不況) 불효(不孝) 불후(不朽) 부당(不當) 부도(不渡) 부도덕(不道德) 부동산(不動産) 부득이(不得已) 부등식(不等式) 절대부등식(絶對不等式) 부실(不實) 부작위(不作爲) 부재(不在) 부적절(不適切) 부정(不定/不正/不淨) 부정행위(不正行爲) 부조리(不條理) 부족(不足) 과부족(過不足) 부주의(不注意) 삼부점(三不粘) 가치부전(假痴不癲) 과유불급(過猶不及) 권불십년(權不十年) 독불장군(獨不將軍) 두문불출(杜門不出) 목불인견(目不忍見)[7] 목불식정(目不識丁) 복지부동(伏地不動) 불가항력(不可抗力) 불교이주(不敎而誅) 불구대천(不俱戴天) 오매불망(寤寐不忘) 천부당만부당(千不當萬不當) 표리부동(表裏不同) 부동방면(不動坊面) 불로동(不老洞) 불로봉무동(不老鳳舞洞) 가부(可否) 가부간(可否間) 가타부타(可타否타) 거부(拒否) 낙부(諾否) 부결(否決) 부인(否認) 부정(否定) 부정적(否定的) 안부(安否) 여부(與否) 비색(否塞) 비운(否運) 왈가왈부(曰可曰否) (어미 ‘-을’ 뒤에 ‘있다’, ‘없다’ 따위와 함께 쓰여) 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> ai90m683wridg9c88dx0xievzfp5lyl User:Namoroka/sandbox/6 2 177514 754892 754707 2026-08-04T12:55:04Z Namoroka 19627 754892 wikitext text/x-wiki == [[MediaWiki:Gadget-hanja-word.json]] == <pre> { // 고간 (사이시옷) "庫間": "곳간", "庫間車": "곳간차", // 세방 (사이시옷) "貰房": "셋방", "傳貰房": "전세방", "月貰房": "월세방", // 수자 (사이시옷) "數字": "숫자", // 퇴간 (사이시옷) "退間": "툇간", // 차간 (사이시옷) "車間": "찻간", "列車間": "열차간", "汽車間": "기차간", "車間距離": "차간거리", // 회수 (사이시옷) "回數": "횟수", "回數券": "회수권", // ㄹ 두음 법칙 붙임 4 접두사처럼 쓰이는 한자가 붙어서 된 말이나 합성어에서, 뒷말의 첫소리가 ‘ㄴ’ 또는 ‘ㄹ’ 소리로 나더라도 두음 법칙에 따라 적는다: 역이용(逆利用) 연이율(年利率) 열역학(熱力學) 해외여행(海外旅行) "不利益": "불이익" "不履行": "불이행" // 활음조 현상 "乖愎": "괴팍", // 愎 퍅 → 팍 "困難": "곤란", // 難 난 → 란 "論難": "논란", "六月": "유월", "十月": "시월", "初八日": "초파일", "契丹": "글안", "木瓜": "모과", // 木 목 → 모 // 車 거 → 차 // 등차 "三等車": "삼등차", // 륜차 "三輪車": "삼륜차", "二輪車": "이륜차", "孤輪車": "고륜차", "旋輪車": "선륜차", "獨輪車": "독륜차", "雙輪車": "쌍륜차", // 상차 "雪上車": "설상차", "上車機": "상차기", // 세차 "洗車": "세차", "洗車雨": "세거우", // 세거 // 수차 "水車": "수차", "杯水車薪": "배수거신", // 수거 // 승차 "乘車": "승차", "乘車之誚": "승거지초", // 승거 // 영차, 차체 "盈車": "영차", "車體": "차체", "載鬼盈車體": "재귀영거체", // 영거 // 장차 "掌車": "장차", "掌車手: "장거수", // 장거 // 전차 "前車": "전차", "前車可鑑": "전거가감", // 전거 "前車覆轍": "전거복철", // 전거 // 정차 "駐停車": "주정차", "停車燈": "정차등", // 차륜 "大車輪": "대차륜", "車輪石": "차륜석", "車輪旋盤": "차륜선반", "車輪踏面": "차륜답면", "冷硬車輪": "냉경차륜", "車輪空轉": "차륜공전", "車輪滑走": "차륜활주", // 차부 "車夫": "차부", "人力車夫": "인력거부", // 거부 // 차성 "車城": "차성", "腰車城": "요거성", // 거성 // 차포 "車包": "차포", "車包子": "거포자", // 거포 // 하차 "上下車": "상하차", "下車口": "하차구", "下車場": "하차장", "下車臺": "하차대", "乘下車": "승하차", "下車泣辜": "하차읍고", "途中下車": "도중하차", // 활차 "滑車": "활차", "割滑車": "할활거", // 활거 // 후차 "後車": "후차", "後車誡": "후거계", "前車覆後車戒": "전거복후거계", "側車": "측차", "列車": "열차", "動車": "동차", "勢車": "세차", "名車": "명차", "坏車": "배차", "坑車": "갱차", "增車": "증차", "外車": "외차", "客車": "객차", "導車": "도차", "廢車": "폐차", "愛車": "애차", "戰車": "전차", "戶車": "호차", "拍車": "박차", "操車": "조차", "新車": "신차", "旋車": "선차", "暗車": "암차", "柩車": "구차", "檢車": "검차", "步車": "보차", "段車": "단차", "汽車": "기차", "洋車": "양차", "減車": "감차", "火車": "화차", "炭車": "탄차", "獨車": "독차", "田車": "전차", "發車": "발차", "白車": "백차", "砲車": "포차", "空車": "공차", "終車": "종차", "臺車": "대차", "蓋車": "개차", "衝車": "충차", "貨車": "화차", "貰車": "세차", "車主": "차주", "車便": "차편", "車內": "차내", "車制": "차제", "車券": "차권", "車契": "차계", "車室": "차실", "車嶺": "차령", "車幅": "차폭", "車庫": "차고", "車弩": "차노", "車御": "차어", "車戰": "차전", "車掌": "차장", "車枕": "차침", "車槍": "차창", "車止": "차지", "車泊": "차박", "車票": "차표", "車種": "차종", "車窓": "차창", "車線": "차선", "車胤": "차윤", "車費": "차비", "車賃": "차임", "車路": "차로", "車輛": "차량", "車道": "차도", "車部": "차부", "車銃": "차총", "車食": "차식", "車길": "찻길", "車꾼": "차꾼", "車삯": "찻삯", "車틀": "차틀", "軍車": "군차", "輜車": "치차", "輦車": "연차", "配車": "배차", "鑛車": "광차", "降車": "강차", "陶車": "도차", "隆車": "융차", "電車": "전차", "風車": "풍차", "馬車": "마차", "駐車": "주차", "鳩車": "구차", "鳳車": "봉차", "齒車": "치차", "꽃車": "꽃차", "끌車": "끌차", "낮車": "낮차", "눈車": "눈차", "달車": "달차", "뒤車": "뒤차", "땅車": "땅차", "똥車": "똥차", "막車": "막차", "물車": "물차", "밀車": "밀차", "밤車": "밤차", "밥車": "밥차", "불車": "불차", "삽車": "삽차", "앞車": "앞차", "줄車": "줄차", "짐車": "짐차", "첫車": "첫차", "한車": "한차", "흙車": "흙차", "落車": "낙차", "中古車": "중고차", "中型車": "중형차", "中繼車": "중계차", "乘合車": "승합차", "乘用車": "승용차", "乳兒車": "유아차", "乳母車": "유모차", "五風車": "오풍차", "五龍車": "오룡차", "人糞車": "인분차", "代燃車": "대연차", "休車料": "휴차료", "低床車": "저상차", "修理車": "수리차", "修車線": "수차선", "冷凍車": "냉동차", "冷房車": "냉방차", "冷藏車": "냉장차", "制車機": "제차기", "動力車": "동력차", "化學車": "화학차", "商用車": "상용차", "回收車": "회수차", "回送車": "회송차", "回遊車": "회유차", "國民車": "국민차", "土運車": "토운차", "地方車": "지방차", "夜行車": "야행차", "大型車": "대형차", "官用車": "관용차", "宣傳車": "선전차", "專用車": "전용차", "專貰車": "전세차", "對向車": "대향차", "小型車": "소형차", "展望車": "전망차", "巡察車": "순찰차", "彈藥車": "탄약차", "後尾車": "후미차", "後送車": "후송차", "急行車": "급행차", "應急車": "응급차", "戰鬪車": "전투차", "掃雪車": "소설차", "摩擦車": "마찰차", "撮影車": "촬영차", "操重車": "조중차", "收去車": "수거차", "放送車": "방송차", "救急車": "구급차", "救難車": "구난차", "斷車臺": "단차대", "映寫車": "영사차", "暖房車": "난방차", "木版車": "목판차", "構內車": "구내차", "機關車": "기관차", "油槽車": "유조차", "活魚車": "활어차", "消毒車": "소독차", "消防車": "소방차", "混合車": "혼합차", "混積車": "혼적차", "淸掃車": "청소차", "減容車": "감용차", "測定車": "측정차", "演習車": "연습차", "炊事車": "취사차", "無線車": "무선차", "營業車": "영업차", "特殊車": "특수차", "特裝車": "특장차", "牽引車": "견인차", "獻血車": "헌혈차", "用達車": "용달차", "直行車": "직행차", "矢車花": "시차화", "糞尿車": "분뇨차", "紡錘車": "방추차", "索條車": "삭조차", "給油車": "급유차", "緩急車": "완급차", "緩行車": "완행차", "葬儀車": "장의차", "葬禮車": "장례차", "蒸氣車": "증기차", "衞生車": "위생차", "補修車": "보수차", "裝入車": "장입차", "裝甲車": "장갑차", "觀光車": "관광차", "警察車": "경찰차", "護送車": "호송차", "貨物車": "화물차", "車下梨": "차하리", "車中談": "차중담", "車前子": "차전차", "車前草": "차전초", "車城東": "차성동", "車家坪": "차가평", "車山里": "차산리", "車岩洞": "차암동", "車巖洞": "차암동", "車師國": "차사국", "車沙兀": "차사올", "車牛里": "차우리", "車皮船": "차피선", "車計簿": "차계부", "車踰嶺": "차유령", "車軸油": "차축유", "車軸藻": "차축조", "車面里": "차면리", "車骨石": "차골석", "車骨鑛": "차골광", "車黃面": "차황면", "車龍洞": "차용동", "車떼기": "차떼기", "車막이": "차막이", "車머리": "차머리", "車멀미": "차멀미", "車바퀴": "차바퀴", "車치기": "차치기", "軌道車": "궤도차", "軍用車": "군용차", "輕便車": "경편차", "輜重車": "치중차", "輸入車": "수입차", "輸送車": "수송차", "轉向車": "전향차", "轉車臺": "전차대", "通信車": "통신차", "通勤車": "통근차", "通學車": "통학차", "連結車": "연결차", "遊說車": "유세차", "運搬車": "운반차", "遷車臺": "천차대", "重量車": "중량차", "鋼鐵車": "강철차", "鑛石車": "광석차", "防彈車": "방탄차", "防疫車": "방역차", "附隨車": "부수차", "除雪車": "제설차", "隔離車": "격리차", "雪搔車": "설소차", "電氣車": "전기차", "顚倒車": "전도차", "食堂車": "식당차", "高架車": "고가차", "黃包車": "황포차", "龍骨車": "용골차", "개미車": "개미차", "기름車": "기름차", "덤프車": "덤프차", "도령車": "도령차", "디젤車": "디젤차", "러셀車": "러셀차", "레커車": "레커차", "롤러車": "롤러차", "믹서車": "믹서차", "보기車": "보기차", "봉고車": "봉고차", "새벽車": "새벽차", "아기車": "아기차", "앞車軸": "앞차축", "얼음車": "얼음차", "저녁車": "저녁차", "지게車": "지게차", "지붕車": "지붕차", "지프車": "지프차", "탱크車": "탱크차", "팰릿車": "팰릿차", "內燃車輛": "내연차량", "全裝軌車": "전장궤차", "快犢破車": "쾌독파차", "手荷物車": "수하물차", "木火獸車": "목화수차", "無公害車": "무공해차", "營業用車": "영업용차", "蓄電池車": "축전지차", "車扱貨物": "차급화물", "車螢孫雪": "차형손설", "車軸關節": "차축관절", "車過路草": "차과로초", "車頭時間": "차두시간", "車頭距離": "차두거리", "가솔린車": "가솔린차", "곁붙이車": "곁붙이차", "레미콘車": "레미콘차", "뺑소니車": "뺑소니차", "사다리車": "사다리차", "쓰레기車": "쓰레기차", "외바퀴車": "외바퀴차", "지붕짐車": "지붕짐차", "特殊用途車": "특수용도차", "가위다리車": "가위다리차", "슈뇌르켈車": "슈뇌르켈차", "不好事紡車似": "불호사방차사", "車文節公遺事": "차문절공유사", "하이브리드車": "하이브리드차", // 不 부 → 불 "獨不將軍": "독불장군", "三不政策": "삼불정책", // 否 부 → 비 "中否": "중비", "傾否": "경비", "否卦": "비괘", "否塞": "비색", "否婦": "비부", "否泰": "비태", "否運": "비운", "艱否": "간비", "否來泰去": "비래태거", "否極反泰": "비극반태", "泰極否來": "태극비래", // 寺 사 → 시 "內寺": "내시", "奄寺": "엄시", "婦寺": "부시", "官寺": "관시", "寺人": "시인", "寺奴": "시노", "寺正": "시정", "寺院": "시원", "閹寺": "엄시", "閽寺": "혼시", "鴻臚": "홍시", "光祿寺": "광록시", "內園寺": "내원시", "內府寺": "내부시", "內廚寺": "내주시", "內資寺": "내자시", "內贍寺": "내섬시", "典儀寺": "전의시", "典客寺": "전객시", "典校寺": "전교시", "典祀寺": "전사시", "典賓寺": "전빈시", "典農寺": "전농시", "典醫寺": "전의시", "司䆃寺": "사도시", "司僕寺": "사복시", "司宰寺": "사재시", "司水寺": "사수시", "司膳寺": "사선시", "司藏寺": "사장시", "司衞寺": "사위시", "司賓寺": "사빈시", "司贍寺": "사섬시", "司農寺": "사농시", "司醫寺": "사의시", "司賓寺": "사빈시", "外府寺": "외부시", "大僕寺": "태복시", "大常寺": "태상시", "大府寺": "대부시", "大府寺": "태부시", "大理寺": "대리시", "大農寺": "대농시", "太僕寺": "태복시", "太常寺": "태상시", "太府寺": "태부시", "奉常寺": "봉상시", "宗屬寺": "종속시", "宗正寺": "종정시", "宗簿寺": "종부시", "寺奴婢": "시노비", "寺奴子": "시노자", "將作寺": "장작시", "小府寺": "소부시", "少府寺": "소부시", "尙瑞司": "상서시", "正設寺": "정설시", "殿中寺": "전중시", "率更寺": "율경시", "祕書省": "비서시", "禮賓寺": "예빈시", "繕工寺": "선공시", "衞尉寺": "위위시", "軍器寺": "군기시", "軍資寺": "군자시", "都津寺": "도진시", "鴻臚寺": "홍려시", "禮賓寺": "예빈시", "內司僕寺": "내사복시", "六寺七監": "육시칠감", // 則 칙 → 즉 "然則": "연즉", "過則": "과즉", "不然則": "불연즉", "九則洞": "구즉동", "削則削": "삭즉삭", "實則虛": "실즉허", "滿則溢": "만즉일", "虛則實": "허즉실", "鬪則解": "투즉해", "予狗則慳": "여구즉간", "先則制人": "선즉제인", "兼聽則明": "겸청즉명", "凶則大吉": "흉즉대길", "務貪則憂": "무탐즉우", "吉則大凶": "길즉대흉", "吹螺則正": "취라즉정", "壽則多辱": "수즉다욕", "太剛則折": "태강즉절", "富則多事": "부즉다사", "必生則死": "필생즉사", "急則治表": "급즉치표", "恒受則痛": "항수즉통", "斷之則悲": "단지즉비", "月滿則虧": "월만즉휴", "月盈則食": "월영즉식", "有道則見": "유도즉현", "極盛則敗": "극성즉패", "死則同穴": "사즉동혈", "求則得之": "구즉득지", "物久則神": "물구즉신", "猫則眞殪": "묘즉진애", "獸窮則齧": "수궁즉설", "聞過則喜": "문과즉희", "蟹則隨穴": "해즉수혈", "言則是也": "언즉시야", "謂瞽則怒": "위고즉노", "貧則多事": "빈즉다사", "責人則明": "책인즉명", "足則跟白": "족즉근백", "踐之則蠢": "천지즉준", "轡長則踏": "비장즉답", "釘則聳矣": "정즉용의", "雖則乞匃": "수즉걸개", "零則必虧": "영즉필휴", "非成則璜": "비성즉황", "非朝則夕": "비조즉석", "非朝則夕": "비조즉석", "鳥窮則啄": "조궁즉탁", "禮勝則離": "예승즉이", "禮失則昏": "예실즉혼", "禮煩則亂": "예번즉란", "懶鐵爛則難": "나철란즉난", "易地則皆然": "역지즉개연", "水廣則魚遊": "수광즉어유", "源淸則流淸": "원청즉유청", "過則勿憚改": "과즉물탄개", "上佐多則破釜": "상좌다즉파부", "勇而無禮則亂": "용이무례즉란", "學而不思則罔": "학이불사즉망", "家貧則思良妻": "가빈즉사양처", "水至淸則無魚": "수지청즉무어", "倉廩實則知禮節": "창름실즉지예절", "狗猛則酒酸不售": "구맹즉주산불수", "聞則疾": "문즉질", "聞則病": "문즉병", "必死則生": "필사즉생", "幸生則死": "행생즉사", "成則君王": "성즉군왕", "敗則逆賊": "패즉역적", "求則得之": "구즉득지", "舍則失之": "사즉실지", "兼聽則明": "겸청즉명", "偏信則暗": "편신즉암", "立則視足": "입즉시족", "坐則視膝": "좌즉시슬", "責人則明": "책인즉명", "恕己則昏": "서기즉혼", "吹則恐飄": "취즉공표", "握則恐欿": "악즉공감", "語牛則滅": "어우즉멸", "語妻則洩": "어처즉설", "不聞則藥": "불문즉약", "聞則是病": "문즉시병", "果離鄕則貴": "과이향즉귀", "人離鄕則賤": "인이향즉천", "石擲則石擲": "석척즉석척", "餠擲則餠擲": "병척즉병척", // 告 고 → 곡 "出必告": "출필곡", "出告反面": "출곡반면", // 刺 자 → 척 "刺殺": "척살", "刃刺": "인척", "刺讎": "척수", // 差 차 → 치/채 "參差": "참치", "差備": "채비", "差勝": "치승", "差池": "치지", "差強人意": "치강인의", // 識 식 → 지 "雜識": "잡지", "陽識": "양지", "陰識": "음지", "鈐識": "검지", "識琰": "지염", "記識": "기지", "記識": "기지", "標識": "표지", "內識石": "내지석", // 暴 폭 → 포 "侵暴": "침포", "兇暴": "흉포", "凶暴": "흉포", "強暴": "강포", "昏暴": "혼포", "暴亡": "포망", "暴惡": "포악", "暴慢": "포만", "暴棄": "포기", "暴橫": "포횡", "暴虎": "포호", "暴虐": "포학", "暴逆": "포역", "橫暴": "횡포", "殘暴": "잔포", "炕暴": "항포", "猛暴": "맹포", "猜暴": "시포", "獰暴": "영포", "粗暴": "조포", "自暴": "자포", "苛暴": "가포", "荒暴": "황포", "行暴": "행포", "貪暴": "탐포", "躁暴": "조포", "驕暴": "교포", "鷙暴": "지포", "一暴十寒": "일포십한", "以暴易暴": "이포역포", "何興之暴": "하흥지포", "暴殄天物": "포진천물", "暴虐無道": "포학무도", "自暴自棄": "자포자기", "自棄自暴": "자기자포", "北暴東頑詞": "북포동완사", // 單 단 → 선(인명) "單于": "선우", "單福": "선복", "單經": "선경", "單道開": "선도개", "單廷珪": "선정규", // 於 어 → 오 "於戲": "오희", "於呼": "오호", "於休曲": "오휴곡", "於昭章": "오소장", "於樂章": "오락장", "於皇曲": "오황곡", "於穆曲": "오목곡", "於穆章": "오목장", "於赫曲": "오혁곡", "於홉다": "오홉다", "昵於鎭": "일오진", "赤於浦": "적오포", "於昭之曲": "오소지곡", // 婆 파 → 바 "娑婆": "사바", "毘婆": "비바", "乾闥婆": "건달바", "優婆塞": "우바새", "優婆夷": "우바이", "優婆尼": "우바니", "優婆離": "우바리", "娑婆苦": "사바고", "娑婆訶": "사바하", "婆伽婆": "바가바", "婆羅門": "바라문", "提婆品": "제바품", "毘藍婆": "비람바", "薩婆若": "살바야", "阿閦婆": "아축바", "阿藍婆": "아람바", "娑婆電光": "사바전광", "婆羅門行": "바라문행", "提婆達多": "제바달다", "阿閦婆佛": "아축바불", "阿婆婆地獄": "아바바지옥", // 惡 악 → 오 "交惡": "교오", "厭惡": "염오", "好惡": "호오", "嫉惡": "질오", "嫌惡": "혐오", "忌惡": "기오", "怨惡": "원오", "惡寒": "오한", "惡熱": "오열", "惡阻": "오조", "惡露": "오로", "愛惡": "애오", "憎惡": "증오", "泛惡": "범오", "猜惡": "시오", "相惡": "상오", "羞惡": "수오", "惡風症": "오풍증", "好生惡死": "호생오사", "好生惡殺": "호생오살", "妊娠惡阻": "임신오조", "強酒惡醉": "강주오취", "德而惡刑": "덕이오형", "惡不去善": "오불거선", "惡夫佞者": "오부녕자", "父母惡之": "부모오지", "衆惡必察": "중오필찰", // 徵 징 → 치 "半徵": "반치", "均徵": "균치", "均徵": "균치", "奏徵": "주치", "宮徵": "궁치", "徵調": "치조", "淸徵": "청치", "濁徵": "탁치", "變徵": "변치", "變徵": "변치", "奏變徵": "주변치", "打封徵": "타봉치", "徵角之樂": "치각지악", "宮商角徵羽": "궁상각치우", // 易 역 → 이 "便易": "편이", "和易": "화이", "安易": "안이", "容易": "용이", "平易": "평이", "易師": "이사", "易往": "이왕", "易氣": "이기", "易融": "이융", "易行": "이행", "易解": "이해", "易言": "이언", "柔易": "유이", "樂易": "낙이", "淺易": "천이", "簡易": "간이", "至易": "지이", "艱易": "간이", "賤易": "천이", "輕易": "경이", "險易": "험이", "難易": "난이", "驕易": "교이", "不易得": "불이득", "易與耳": "이여이", "聽易性": "청이성", "兩力易擧": "양력이거", "好約易舛": "호약이천", "平易淡白": "평이담백", "惡語易施": "악어이시", "戰易守難": "전이수난", "折枝之易": "절지지이", "拙盜易擒": "졸도이금", "文章三易": "문장삼이", "易如反掌": "이여반장", "易安堂集": "이안당집", "易往易修": "이왕이수", "易往易行": "이왕이행", "易往無人": "이왕무인", "易輶攸畏": "이유유외", "易輶攸畏": "이유유외", "易鎔合金": "이용합금", "易陷不義": "이함불의", "椓杙易陷": "탁익이함", "渴者易飮": "갈자이음", "潤地易杙": "윤지이익", "潤地椓杙": "윤지탁익", "鰌滑易脫": "추활이탈", "急食飯易噎": "급식반이열", "水聲易淺深": "수성이천심", "破山中敵易": "파산중적이", "適口餠易乎": "적구병이호", "難事必作易": "난사필작이", "創業易守成難": "창업이수성난", "爲君難爲臣不易": "위군난위신불이", "少年易老學難成": "소년이로학난성", // 諸 제 → 저 "居諸": "거저", "居諸": "거저", "忽諸": "홀저", "忽諸": "홀저", "酒諸": "주저", "飮諸": "음저", "北諸歸": "북저귀", "人其舍諸": "인기사저", "反求諸己": "반구저기", "日居月諸": "일거월저", "質諸鬼神": "질저귀신", // 布 포 → 보 "布施": "보시", // 度 도 → 탁 "仰度": "양탁", "判度": "판탁", "司度": "사탁", "圖度": "도탁", "度地": "탁지", "度大": "탁대", "度揆": "탁규", "度支": "탁지", "度支": "탁지", "度量": "탁량", "度高": "탁고", "忖度": "촌탁", "思度": "사탁", "懸度": "현탁", "揣度": "췌탁", "摩度": "마탁", "料度": "요탁", "測度": "측탁", "磨度": "마탁", "臆度": "억탁", "裁度": "재탁", "規度": "규탁", "計度": "계탁", "豫度": "예탁", "遙度": "요탁", "外度支": "외탁지", "予忖度之": "여촌탁지", "先度爾衾": "선탁이금", "兵難遙度": "병난요탁", "千思萬度": "천사만탁", "度德量力": "탁덕양력", "晝思夜度": "주사야탁", // 父 부 → 보 "仲父": "중보", "宣父": "선보", "尙父": "상보", "尼父": "이보", "尼父": "이보", "古公亶父": "고공단보", // 讀 독 → 두 "句讀": "구두", "吏讀": "이두", "懸讀": "현두", // 谷 곡 → 욕 "吐谷渾": "토욕혼", // 唵 암 → 옴 "唵川面": "옴천면", "唵字餠": "옴자병", "唵字떡": "옴자떡", // 賈 고 → 가(성씨/인명 제외) "賈誼島": "가의도", "偸賈香": "투가향", // 喝 갈 → 할 "喝參": "할참", "喝火": "할화", "喝食": "할식", // 洞 동 → 통 "洞卞": "통변", "洞察": "통찰", "洞射": "통사", "洞徹": "통철", "洞悉": "통실", "洞析": "통석", "洞泄": "통설", "洞淸": "통청", "洞然": "통연", "洞燭": "통촉", "洞知": "통지", "洞簫": "통소", "洞見": "통견", "洞觀": "통관", "洞角": "통각", "洞貫": "통관", "洞辨": "통변", "洞通": "통통", "洞達": "통달", "洞鑑": "통감", "洞開": "통개", "洞視": "통시", "通洞": "통동", "洞뿔": "통뿔", "通洞里": "통동리", // 率 률 → 솔 "丘率": "구솔", "侍率": "시솔", "保率": "보솔", "倡率": "창솔", "儓率": "대솔", "兜率": "도솔", "副率": "부솔", "勸率": "권솔", "土率": "토솔", "坦率": "탄솔", "大率": "대솔", "奈率": "나솔", "奈率": "내솔", "奉率": "봉솔", "妄率": "망솔", "導率": "도솔", "帶率": "대솔", "廉率": "염솔", "引率": "인솔", "德率": "덕솔", "恩率": "은솔", "所率": "소솔", "扞率": "한솔", "接率": "접솔", "放率": "방솔", "渾率": "혼솔", "濫率": "남솔", "狂率": "광솔", "率丁": "솔정", "率下": "솔하", "率伴": "솔반", "率來": "솔래", "率倡": "솔창", "率先": "솔선", "率兵": "솔병", "率去": "솔거", "率土": "솔토", "率壻": "솔서", "率家": "솔가", "率府": "솔부", "率性": "솔성", "率戶": "솔호", "率易": "솔이", "率服": "솔복", "率榜": "솔방", "率樂": "솔악", "率然": "솔연", "率爾": "솔이", "率由": "솔유", "率畜": "솔휵", "率直": "솔직", "率眷": "솔권", "率篇": "솔편", "率育": "솔육", "率舞": "솔무", "率蓄": "솔축", "率軍": "솔군", "率養": "솔양", "率朗": "솔랑", "眞率": "진솔", "督率": "독솔", "祖率": "조솔", "簡率": "간솔", "粗率": "조솔", "糾率": "규솔", "統率": "통솔", "草率": "초솔", "荒率": "황솔", "董率": "동솔", "衞率": "위솔", "表率": "표솔", "親率": "친솔", "賤率": "천솔", "輕率": "경솔", "達率": "달솔", "醜率": "추솔", "附率": "부솔", "領率": "영솔", "食率": "식솔", "騎率": "기솔", "騶率": "추솔", "鹽率": "염솔", "麤率": "추솔", "多率寺": "다솔사", "率丁里": "솔정리", "率伊山": "솔이산", "率堵婆": "솔도파", "率塔婆": "솔탑파", "率已山": "솔이산", "率性齋": "솔성재", "魏率善": "위솔선", "上奉下率": "상봉하솔", "加率跟隨": "가솔근수", "加率跟隨": "가솔근수", "多率下人": "다솔하인", "多率食口": "다솔식구", "捕盜隨率": "포도수솔", "正軍率戶": "정군솔호", "率口而發": "솔구이발", "率壻婚俗": "솔서혼속", "率居奴婢": "솔거노비", "率獸食人": "솔수식인", "率隊逃避": "솔대도피", "率賓歸王": "솔빈귀왕", "降兜率相": "강도솔상", "騎馬欲率奴": "기마욕솔노", // 乾 건 → 간 "白乾蠶": "백간잠", "乾木水生": "간목수생", "如絞乾橛": "여교간궐", "梅花乾飣": "매화간정", // 陶 도 → 요 "皐陶": "고요", "陶窯": "도요", // 食 식 → 사 "簞食": "단사", "飯疏食": "반소사", "疏食菜羹": "소사채갱", // 杻 뉴 → 추/축 "木杻": "목추", "杻箒": "축추", "枷杻": "가추", "鐵杻": "철추", "大杻里": "대축리", "杻東面": "축동면", "杻田驛": "추전역", "紙杻驛": "지축역", "鞫囚左杻": "국수좌추", // 若 약 → 야 "般若": "반야", "蘭若": "난야", "薩婆若": "살바야", "阿蘭若": "아란야", // 茶 다 → 차 "抹茶": "말차", "紅茶": "홍차", "綠茶": "녹차", "茶盞": "찻잔", "葉茶": "엽차", "蓴茶": "순차", "蘇茶": "소차", "飮茶": "얌차", "麤茶": "추차", "黃茶": "황차", "黑茶": "흑차", "冷茶": "냉차", "人蔘茶": "인삼차", "忍冬茶": "인동차", "普洱茶": "보이차", "木瓜茶": "모과차", "柚子茶": "유자차", "梅實茶": "매실차", "水揀茶": "수간차", "烏龍茶": "오룡차", "生薑茶": "생강차", "當歸茶": "당귀차", "白毫茶": "백호차", "竹露茶": "죽로차", "綠豆茶": "녹두차", "腦原茶": "뇌원차", "茶밭골": "차밭골", "菊花茶": "국화차", "葡萄茶": "포도차", "蓴菜茶": "순채차", "蓴菜茶": "순채차", "薑橘茶": "강귤차", "虎茶飯": "호차반", "足味茶": "족미차", "雀舌茶": "작설차", "雨前茶": "우전차", "雨後茶": "우후차", "鵲舌茶": "작설차", "麤色茶": "추색차", "마테茶": "마테차", "茶始培地": "차시배지", "淸泉白石茶": "청천백석차", "軍茶利夜叉": "군다리야차", // 免 면 → 문 "袒免": "단문", // 覆 복 → 부 "天覆": "천부", "覆巾": "부건", "覆瓿": "부부", "覆翼": "부익", "覆育": "부육", "覆載": "부재", "臺覆石": "대부석", "覆肩衣": "부견의", "覆蓋山": "부개산", "雨覆羽": "우부우", // 跳 도 → 조 "距跳": "거조", "跳舞": "조무", "跳騰": "조등", "跳驅": "조구", "魚跳": "어조", // 葉 엽 → 섭(인명) "迦葉": "가섭", "葉縣": "섭현", "葉公": "섭공", "葉適": "섭적", "迦葉": "가섭", "三迦葉": "삼가섭", "大迦葉": "대가섭", "迦葉原": "가섭원", "迦葉庵": "가섭암", "摩訶迦葉": "마하가섭", // 遍 변 → 편 "遍知": "변지", "正遍覺": "정변각", "遍淨天": "변정천", "光明遍照": "광명변조", "遍照光明": "변조광명", "遍照如來": "변조여래", "遍照遮那": "변조자나", "遍照金剛": "변조금강", "遍照遮那佛": "변조자나불", "日光遍照菩薩": "일광변조보살", // 邯 감 → 한 "邯鄲": "한단", "居瑟邯": "거슬한", "舒伐邯": "서벌한", "舒弗邯": "서불한", // 干 간 → 한 "園頭干": "원두한", "漁夫干": "어부한", "豆腐干": "두부한", "農土干": "농토한", "아홉干": "아홉한", // 龜 구 → 귀 "交龜": "교귀", "水龜": "수귀", "海龜": "해귀", "盲龜": "맹귀", "石龜": "석귀", "秦龜": "진귀", "筮龜": "서귀", "蓍龜": "시귀", "蠵龜": "휴귀", "長龜": "장귀", "靈龜": "영귀", "龜兔": "귀토", "龜卜": "귀복", "龜占": "귀점", "龜州": "귀주", "龜形": "귀형", "龜手": "귀수", "龜板": "귀판", "龜殼": "귀각", "龜毛": "귀모", "龜玉": "귀옥", "龜甲": "귀갑", "龜疇": "귀주", "龜紐": "귀뉴", "龜背": "귀배", "龜脚": "귀각", "龜船": "귀선", "龜貝": "귀패", "龜趺": "귀부", "龜鏡": "귀경", "龜鑑": "귀감", "龜頭": "귀두", "龜鼈": "귀별", "龜齡": "귀령", "神龜": "신귀", "龜山徒": "귀산도", "金龜子": "금귀자", "金龜蟲": "금귀충", "詩話總龜": "시화총귀", "龜文鳥跡": "귀문조적", "龜胸龜背": "귀흉귀배", "駕龜仙人旗": "가귀선인기", // 龜 구 → 균 "龜坼": "균탁", "龜裂": "균열", // 省 성 → 생 "儉省": "검생", "冠省": "관생", "刪省": "산생", "減省": "감생", "略省": "약생", "省劃": "생획", "省力": "생력", "省句": "생구", "省式": "생식", "省文": "생문", "省減": "생감", "省牲": "성생", "省略": "생략", "省禮": "생례", "省記": "생기", "省費": "생비", "省里": "생리", "節省": "절생", "罷省": "파생", "省事事省": "생사사생" // 미완성 https://ko.dict.naver.com/#/search?range=word&query=%EF%A4%8A%3F&autoConvert=&shouldSearchOpen=false // 金 금 (첫글자) 金利 금리 金剛 금강 金官 금관 金寶 금보 金尺 금척 金屬 금속 金庫 금고 金文 금문 金星 금성 金漣 금련 金箔 금박 金紫 금자 金色 금색 金花 금화 金蓮 금련 金融 금융 金銀 금은 金錢 금전 金額 금액 金값 금값 金게 금게 金니 금니 金덩 금덩 金돈 금돈 金돌 금돌 金띠 금띠 金말 금말 金몰 금몰 金몸 금몸 金물 금물 金별 금별 金북 금북 金빛 금빛 金살 금살 金술 금술 金실 금실 金쑥 금쑥 金알 금알 金줄 금줄 金쪽 금쪽 金털 금털 金테 금테 金퇴 금퇴 金판 금판 金풀 금풀 金휘 금휘 金흙 금흙 金光 금광 金冠 금관 金利 금리 金印 금인 金塊 금괴 金塊 금괴 金屬 금속 金權 금권 金碧 금벽 金蓮 금련 金融 금융 金製 금제 金貨 금화 金銅 금동 金錢 금전 金鎖 금쇄 金額 금액 金井區 금정구 金井山 금정산 金吾衞 금오위 金城郡 금성군 金城面 금성면 金字塔 금자탑 金川郡 금천군 金星面 금성면 金曜日 금요일 金村洞 금촌동 金湖洞 금호동 金烏山 금오산 金華寺 금화사 金谷洞 금곡동 金谷里 금곡리 金連山 금련산 金野郡 금야군 金陵郡 금릉군 金가루 금가루 金겟科 금겟과 金고기 금고기 金글字 금글자 金꼭지 금꼭지 金나라 금나라 金나비 금나비 金눈돔 금눈돔 金니빨 금니빨 金달러 금달러 金덩이 금덩이 金도끼 금도끼 金동이 금동이 金딱지 금딱지 金떡쑥 금떡쑥 金띠쇠 금띠쇠 金메달 금메달 金모래 금모래 金물결 금물결 金바늘 금바늘 金박이 금박이 金발게 금발게 金방아 금방아 金방울 금방울 金배지 금배지 金버섯 금버섯 金부채 금부채 金부처 금부처 金붓꽃 금붓꽃 金붕어 금붕어 金붙이 금붙이 金블록 금블록 金비녀 금비녀 金이빨 금이빨 金이삭 금이삭 金잉어 금잉어 金잔디 금잔디 金장이 금장이 金쟁이 금쟁이 金조개 금조개 金좀벌 금좀벌 金종이 금종이 金지기 금지기 金첩지 금첩지 金파리 금파리 金팔찌 금팔찌 金포일 금포일 金프랑 금프랑 거랑金 거랑금 자국金 자국금 자옥金 자옥금 자욱金 자욱금 金山寺 금산사 金箔金 금박금 金虎門 금호문 金鍍金 금도금 金佛儼坐 금불엄좌 金枝玉葉 금지옥엽 金石牢約 금석뇌약 金科玉條 금과옥조 金蘭之交 금란지교 金鰲新話 금오신화 金가락지 금가락지 金각다귀 금각다귀 金개구리 금개구리 金구덩이 금구덩이 金귀고리 금귀고리 金꼭지鳶 금꼭지연 金니박이 금니박이 金덩어리 금덩어리 金마타리 금마타리 金목걸이 금목걸이 金바둑쇠 금바둑쇠 金방망이 금방망이 金방앗間 금방앗간 金방울傳 금방울전 金빛松耳 금빛송이 金송아지 금송아지 金싸라기 금싸라기 金아말감 금아말감 金줄망둑 금줄망둑 金테두리 금테두리 金匱要略 금궤요략 金口木舌 금구목설 金口玉音 금구옥음 金口閉舌 금구폐설 金城千里 금성천리 金城湯池 금성탕지 金城湯池 금성탕지 金城鐵壁 금성철벽 金屋貯嬌 금옥저교 金屬活字 금속활자 金山鐵壁 금산철벽 金日月屛 금일월병 金旺之氣 금왕지기 金旺之節 금왕지절 金本位制 금본위제 金權萬能 금권만능 金殿玉樓 금전옥루 金烏玉兔 금오옥토 金玉之重 금옥지중 金玉君子 금옥군자 金玉敗絮 금옥패서 金玉滿堂 금옥만당 金環日蝕 금환일식 金甌無缺 금구무결 金甌覆名 금구복명 金生麗水 금생여수 金生麗水 금생여수 金盞玉臺 금잔옥대 金石之交 금석지교 金石之典 금석지전 金石之功 금석지공 金石之契 금석지계 金石之策 금석지책 金石之約 금석지약 金石之言 금석지언 金石爲開 금석위개 金石牢約 금석뇌약 金石盟約 금석맹약 金石相約 금석상약 金科玉條 금과옥조 金縢之詞 금등지사 金聲玉振 금성옥진 金舌蔽口 금설폐구 金虀玉膾 금제옥회 金蟬脫殼 금선탈각 金谷酒數 금곡주수 金迷紙醉 금미지취 金銀寶貨 금은보화 金銀珠玉 금은주옥 金革之世 금혁지세 金革之難 금혁지난 金風玉露 금풍옥로 金馬玉堂 금마옥당 金鰲新話 금오신화 金鼓振天 금고진천 金蘭之交 금란지교 金蘭之契 금란지계 金蘭之誼 금란지의 金水六君煎 금수육군전 金雞獨立勢 금계독립세 金龍纏身勢 금룡전신세 金강아지풀 금강아지풀 金꿩의다리 금꿩의다리 金달맞이꽃 금달맞이꽃 金방동사니 금방동사니 金빛돌비늘 금빛돌비늘 金빛숲모기 금빛숲모기 金송아지傳 금송아지전 金털고사리 금털고사리 金테줄배벌 금테줄배벌 金프리미엄 금프리미엄 金國征伐論 금국정벌론 金木水火土 금목수화토 金陵十二釵 금릉십이채 金吾果毅將校 금오과의장교 金紫光祿大夫 금자광록대부 金龍頭珊瑚樹 금룡두산호수 金굵은귀고리 금굵은귀고리 金알갱이붙임 금알갱이붙임 金不胎化政策 금불태화정책 金地金本位制 금지금본위제 金核本位制度 금핵본위제도 金紫光祿大夫 금자광록대부 金紫崇祿大夫 금자숭록대부 金紫興祿大夫 금자흥록대부 金殿萬年歡之曲 금전만년환지곡 金光明最勝王經 금광명최승왕경 金吾折衝都尉將軍 금오절충도위장군 金빛어리豹범나비 금빛어리표범나비 金玉之世金蘭之誼 금란지의 금옥지세 金銀竝行本位制度 금은병행본위제도 金銀跛行本位制度 금은파행본위제도 金龍雲頭起畫珊瑚樹 금룡운두기화산호수 // 伏 복 → 부 "伏鷄": "부계", "降伏": "항복", // 狀 상 → 장 "賞狀": "상장", "告訴狀": "고소장", "年賀狀": "연하장", // 復 복 → 부 "復活": "부활", "復興": "부흥", "重言復言": "중언부언", // 索 색 → 삭 // 樂 락 → 악 "樂山樂水": "요산요수", // 樂 락 → 요 // 樂 락 → 료/록/로 // 說 설 → 세/열 "遊說": "유세", "說樂": "열락", // 殺 살 → 쇄 "惱殺": "뇌쇄", "殺到": "쇄도", "減殺": "감쇄", "相殺": "상쇄", // 降 강 → 항 "投降": "투항", "降服": "항복", // 拓 척 → 탁 "拓本": "탁본", // 塞 새 → 색 "拔本塞源": "발본색원", "閉塞": "폐색", // 推 추 → 퇴 "推敲": "퇴고", // 北 북 → 배 "敗北": "패배", // 數 수 → 삭/촉 "煩數": "번삭", "疏數": "소삭", "數罟": "촉고", // 衰 쇠 → 최 "斬衰": "참최", // 行 행 → 항 // 宿 숙 → 수 "星宿": "성수", "辰宿": "진수", // 辰 진 → 신 "星辰": "성신", "生辰": "생신", "誕辰": "탄신", // 更 갱 → 경 "更張": "경장", "變更": "변경", // 氏 씨 → 지 "月氏": "월지", // 見 견 → 현 "朝見": "조현", "見齒": "현치", "謁見": "알현", // 結 결 → 계 "椎結": "추계", "魋結": "추계", // 기타 1 "冒頓": "묵돌", // 冒 모 → 묵 / 頓 돈 → 돌 // 기타 2 // 女 녀 → 여 // 한국여자대학교 이런 경우 때문에 넣은 것인데 넣으면 안 되는 것 아닌지? "女卑": "여비", "女子": "여자", "女性": "여성", // 隸 례 → 예 "僕隸": "복예", "奴隸": "노예", "家隸": "가예", } </pre> sop8ph4glhu2ts5irvii3cr9ajj97a8 754893 754892 2026-08-04T13:06:21Z Namoroka 19627 754893 wikitext text/x-wiki == [[MediaWiki:Gadget-hanja-word.json]] == <pre> { // 고간 (사이시옷) "庫間": "곳간", "庫間車": "곳간차", // 세방 (사이시옷) "貰房": "셋방", "傳貰房": "전세방", "月貰房": "월세방", // 수자 (사이시옷) "數字": "숫자", // 퇴간 (사이시옷) "退間": "툇간", // 차간 (사이시옷) "車間": "찻간", "列車間": "열차간", "汽車間": "기차간", "車間距離": "차간거리", // 회수 (사이시옷) "回數": "횟수", "回數券": "회수권", // ㄹ 두음 법칙 붙임 4 접두사처럼 쓰이는 한자가 붙어서 된 말이나 합성어에서, 뒷말의 첫소리가 ‘ㄴ’ 또는 ‘ㄹ’ 소리로 나더라도 두음 법칙에 따라 적는다: 역이용(逆利用) 연이율(年利率) 열역학(熱力學) 해외여행(海外旅行) "不利益": "불이익" "不履行": "불이행" // 활음조 현상 "乖愎": "괴팍", // 愎 퍅 → 팍 "困難": "곤란", // 難 난 → 란 "論難": "논란", "六月": "유월", "十月": "시월", "初八日": "초파일", "契丹": "글안", "木瓜": "모과", // 木 목 → 모 // 車 거 → 차 /// 등차 "三等車": "삼등차", /// 륜차 "三輪車": "삼륜차", "二輪車": "이륜차", "孤輪車": "고륜차", "旋輪車": "선륜차", "獨輪車": "독륜차", "雙輪車": "쌍륜차", /// 상차 "雪上車": "설상차", "上車機": "상차기", /// 세차 "洗車": "세차", "洗車雨": "세거우", // 세거 /// 수차 "水車": "수차", "杯水車薪": "배수거신", // 수거 /// 승차 "乘車": "승차", "乘車之誚": "승거지초", // 승거 /// 영차, 차체 "盈車": "영차", "車體": "차체", "載鬼盈車體": "재귀영거체", // 영거 /// 장차 "掌車": "장차", "掌車手: "장거수", // 장거 /// 전차 "前車": "전차", "前車可鑑": "전거가감", // 전거 "前車覆轍": "전거복철", // 전거 /// 정차 "駐停車": "주정차", "停車燈": "정차등", /// 차륜 "大車輪": "대차륜", "車輪石": "차륜석", "車輪旋盤": "차륜선반", "車輪踏面": "차륜답면", "冷硬車輪": "냉경차륜", "車輪空轉": "차륜공전", "車輪滑走": "차륜활주", /// 차부 "車夫": "차부", "人力車夫": "인력거부", // 거부 /// 차성 "車城": "차성", "腰車城": "요거성", // 거성 /// 차포 "車包": "차포", "車包子": "거포자", // 거포 /// 하차 "上下車": "상하차", "下車口": "하차구", "下車場": "하차장", "下車臺": "하차대", "乘下車": "승하차", "下車泣辜": "하차읍고", "途中下車": "도중하차", /// 활차 "滑車": "활차", "割滑車": "할활거", // 활거 /// 후차 "後車": "후차", "後車誡": "후거계", "前車覆後車戒": "전거복후거계", /// 그 외 "側車": "측차", "列車": "열차", "動車": "동차", "勢車": "세차", "名車": "명차", "坏車": "배차", "坑車": "갱차", "增車": "증차", "外車": "외차", "客車": "객차", "導車": "도차", "廢車": "폐차", "愛車": "애차", "戰車": "전차", "戶車": "호차", "拍車": "박차", "操車": "조차", "新車": "신차", "旋車": "선차", "暗車": "암차", "柩車": "구차", "檢車": "검차", "步車": "보차", "段車": "단차", "汽車": "기차", "洋車": "양차", "減車": "감차", "火車": "화차", "炭車": "탄차", "獨車": "독차", "田車": "전차", "發車": "발차", "白車": "백차", "砲車": "포차", "空車": "공차", "終車": "종차", "臺車": "대차", "蓋車": "개차", "衝車": "충차", "貨車": "화차", "貰車": "세차", "車主": "차주", "車便": "차편", "車內": "차내", "車制": "차제", "車券": "차권", "車契": "차계", "車室": "차실", "車嶺": "차령", "車幅": "차폭", "車庫": "차고", "車弩": "차노", "車御": "차어", "車戰": "차전", "車掌": "차장", "車枕": "차침", "車槍": "차창", "車止": "차지", "車泊": "차박", "車票": "차표", "車種": "차종", "車窓": "차창", "車線": "차선", "車胤": "차윤", "車費": "차비", "車賃": "차임", "車路": "차로", "車輛": "차량", "車道": "차도", "車部": "차부", "車銃": "차총", "車食": "차식", "車길": "찻길", "車꾼": "차꾼", "車삯": "찻삯", "車틀": "차틀", "軍車": "군차", "輜車": "치차", "輦車": "연차", "配車": "배차", "鑛車": "광차", "降車": "강차", "陶車": "도차", "隆車": "융차", "電車": "전차", "風車": "풍차", "馬車": "마차", "駐車": "주차", "鳩車": "구차", "鳳車": "봉차", "齒車": "치차", "꽃車": "꽃차", "끌車": "끌차", "낮車": "낮차", "눈車": "눈차", "달車": "달차", "뒤車": "뒤차", "땅車": "땅차", "똥車": "똥차", "막車": "막차", "물車": "물차", "밀車": "밀차", "밤車": "밤차", "밥車": "밥차", "불車": "불차", "삽車": "삽차", "앞車": "앞차", "줄車": "줄차", "짐車": "짐차", "첫車": "첫차", "한車": "한차", "흙車": "흙차", "落車": "낙차", "中古車": "중고차", "中型車": "중형차", "中繼車": "중계차", "乘合車": "승합차", "乘用車": "승용차", "乳兒車": "유아차", "乳母車": "유모차", "五風車": "오풍차", "五龍車": "오룡차", "人糞車": "인분차", "代燃車": "대연차", "休車料": "휴차료", "低床車": "저상차", "修理車": "수리차", "修車線": "수차선", "冷凍車": "냉동차", "冷房車": "냉방차", "冷藏車": "냉장차", "制車機": "제차기", "動力車": "동력차", "化學車": "화학차", "商用車": "상용차", "回收車": "회수차", "回送車": "회송차", "回遊車": "회유차", "國民車": "국민차", "土運車": "토운차", "地方車": "지방차", "夜行車": "야행차", "大型車": "대형차", "官用車": "관용차", "宣傳車": "선전차", "專用車": "전용차", "專貰車": "전세차", "對向車": "대향차", "小型車": "소형차", "展望車": "전망차", "巡察車": "순찰차", "彈藥車": "탄약차", "後尾車": "후미차", "後送車": "후송차", "急行車": "급행차", "應急車": "응급차", "戰鬪車": "전투차", "掃雪車": "소설차", "摩擦車": "마찰차", "撮影車": "촬영차", "操重車": "조중차", "收去車": "수거차", "放送車": "방송차", "救急車": "구급차", "救難車": "구난차", "斷車臺": "단차대", "映寫車": "영사차", "暖房車": "난방차", "木版車": "목판차", "構內車": "구내차", "機關車": "기관차", "油槽車": "유조차", "活魚車": "활어차", "消毒車": "소독차", "消防車": "소방차", "混合車": "혼합차", "混積車": "혼적차", "淸掃車": "청소차", "減容車": "감용차", "測定車": "측정차", "演習車": "연습차", "炊事車": "취사차", "無線車": "무선차", "營業車": "영업차", "特殊車": "특수차", "特裝車": "특장차", "牽引車": "견인차", "獻血車": "헌혈차", "用達車": "용달차", "直行車": "직행차", "矢車花": "시차화", "糞尿車": "분뇨차", "紡錘車": "방추차", "索條車": "삭조차", "給油車": "급유차", "緩急車": "완급차", "緩行車": "완행차", "葬儀車": "장의차", "葬禮車": "장례차", "蒸氣車": "증기차", "衞生車": "위생차", "補修車": "보수차", "裝入車": "장입차", "裝甲車": "장갑차", "觀光車": "관광차", "警察車": "경찰차", "護送車": "호송차", "貨物車": "화물차", "車下梨": "차하리", "車中談": "차중담", "車前子": "차전차", "車前草": "차전초", "車城東": "차성동", "車家坪": "차가평", "車山里": "차산리", "車岩洞": "차암동", "車巖洞": "차암동", "車師國": "차사국", "車沙兀": "차사올", "車牛里": "차우리", "車皮船": "차피선", "車計簿": "차계부", "車踰嶺": "차유령", "車軸油": "차축유", "車軸藻": "차축조", "車面里": "차면리", "車骨石": "차골석", "車骨鑛": "차골광", "車黃面": "차황면", "車龍洞": "차용동", "車떼기": "차떼기", "車막이": "차막이", "車머리": "차머리", "車멀미": "차멀미", "車바퀴": "차바퀴", "車치기": "차치기", "軌道車": "궤도차", "軍用車": "군용차", "輕便車": "경편차", "輜重車": "치중차", "輸入車": "수입차", "輸送車": "수송차", "轉向車": "전향차", "轉車臺": "전차대", "通信車": "통신차", "通勤車": "통근차", "通學車": "통학차", "連結車": "연결차", "遊說車": "유세차", "運搬車": "운반차", "遷車臺": "천차대", "重量車": "중량차", "鋼鐵車": "강철차", "鑛石車": "광석차", "防彈車": "방탄차", "防疫車": "방역차", "附隨車": "부수차", "除雪車": "제설차", "隔離車": "격리차", "雪搔車": "설소차", "電氣車": "전기차", "顚倒車": "전도차", "食堂車": "식당차", "高架車": "고가차", "黃包車": "황포차", "龍骨車": "용골차", "개미車": "개미차", "기름車": "기름차", "덤프車": "덤프차", "도령車": "도령차", "디젤車": "디젤차", "러셀車": "러셀차", "레커車": "레커차", "롤러車": "롤러차", "믹서車": "믹서차", "보기車": "보기차", "봉고車": "봉고차", "새벽車": "새벽차", "아기車": "아기차", "앞車軸": "앞차축", "얼음車": "얼음차", "저녁車": "저녁차", "지게車": "지게차", "지붕車": "지붕차", "지프車": "지프차", "탱크車": "탱크차", "팰릿車": "팰릿차", "內燃車輛": "내연차량", "全裝軌車": "전장궤차", "快犢破車": "쾌독파차", "手荷物車": "수하물차", "木火獸車": "목화수차", "無公害車": "무공해차", "營業用車": "영업용차", "蓄電池車": "축전지차", "車扱貨物": "차급화물", "車螢孫雪": "차형손설", "車軸關節": "차축관절", "車過路草": "차과로초", "車頭時間": "차두시간", "車頭距離": "차두거리", "가솔린車": "가솔린차", "곁붙이車": "곁붙이차", "레미콘車": "레미콘차", "뺑소니車": "뺑소니차", "사다리車": "사다리차", "쓰레기車": "쓰레기차", "외바퀴車": "외바퀴차", "지붕짐車": "지붕짐차", "特殊用途車": "특수용도차", "가위다리車": "가위다리차", "슈뇌르켈車": "슈뇌르켈차", "不好事紡車似": "불호사방차사", "車文節公遺事": "차문절공유사", "하이브리드車": "하이브리드차", // 不 부 → 불 "獨不將軍": "독불장군", "三不政策": "삼불정책", // 否 부 → 비 "中否": "중비", "傾否": "경비", "否卦": "비괘", "否塞": "비색", "否婦": "비부", "否泰": "비태", "否運": "비운", "艱否": "간비", "否來泰去": "비래태거", "否極反泰": "비극반태", "泰極否來": "태극비래", // 寺 사 → 시 "內寺": "내시", "奄寺": "엄시", "婦寺": "부시", "官寺": "관시", "寺人": "시인", "寺奴": "시노", "寺正": "시정", "寺院": "시원", "閹寺": "엄시", "閽寺": "혼시", "鴻臚": "홍시", "光祿寺": "광록시", "內園寺": "내원시", "內府寺": "내부시", "內廚寺": "내주시", "內資寺": "내자시", "內贍寺": "내섬시", "典儀寺": "전의시", "典客寺": "전객시", "典校寺": "전교시", "典祀寺": "전사시", "典賓寺": "전빈시", "典農寺": "전농시", "典醫寺": "전의시", "司䆃寺": "사도시", "司僕寺": "사복시", "司宰寺": "사재시", "司水寺": "사수시", "司膳寺": "사선시", "司藏寺": "사장시", "司衞寺": "사위시", "司賓寺": "사빈시", "司贍寺": "사섬시", "司農寺": "사농시", "司醫寺": "사의시", "司賓寺": "사빈시", "外府寺": "외부시", "大僕寺": "태복시", "大常寺": "태상시", "大府寺": "대부시", "大府寺": "태부시", "大理寺": "대리시", "大農寺": "대농시", "太僕寺": "태복시", "太常寺": "태상시", "太府寺": "태부시", "奉常寺": "봉상시", "宗屬寺": "종속시", "宗正寺": "종정시", "宗簿寺": "종부시", "寺奴婢": "시노비", "寺奴子": "시노자", "將作寺": "장작시", "小府寺": "소부시", "少府寺": "소부시", "尙瑞司": "상서시", "正設寺": "정설시", "殿中寺": "전중시", "率更寺": "율경시", "祕書省": "비서시", "禮賓寺": "예빈시", "繕工寺": "선공시", "衞尉寺": "위위시", "軍器寺": "군기시", "軍資寺": "군자시", "都津寺": "도진시", "鴻臚寺": "홍려시", "禮賓寺": "예빈시", "內司僕寺": "내사복시", "六寺七監": "육시칠감", // 則 칙 → 즉 "然則": "연즉", "過則": "과즉", "不然則": "불연즉", "九則洞": "구즉동", "削則削": "삭즉삭", "實則虛": "실즉허", "滿則溢": "만즉일", "虛則實": "허즉실", "鬪則解": "투즉해", "予狗則慳": "여구즉간", "先則制人": "선즉제인", "兼聽則明": "겸청즉명", "凶則大吉": "흉즉대길", "務貪則憂": "무탐즉우", "吉則大凶": "길즉대흉", "吹螺則正": "취라즉정", "壽則多辱": "수즉다욕", "太剛則折": "태강즉절", "富則多事": "부즉다사", "必生則死": "필생즉사", "急則治表": "급즉치표", "恒受則痛": "항수즉통", "斷之則悲": "단지즉비", "月滿則虧": "월만즉휴", "月盈則食": "월영즉식", "有道則見": "유도즉현", "極盛則敗": "극성즉패", "死則同穴": "사즉동혈", "求則得之": "구즉득지", "物久則神": "물구즉신", "猫則眞殪": "묘즉진애", "獸窮則齧": "수궁즉설", "聞過則喜": "문과즉희", "蟹則隨穴": "해즉수혈", "言則是也": "언즉시야", "謂瞽則怒": "위고즉노", "貧則多事": "빈즉다사", "責人則明": "책인즉명", "足則跟白": "족즉근백", "踐之則蠢": "천지즉준", "轡長則踏": "비장즉답", "釘則聳矣": "정즉용의", "雖則乞匃": "수즉걸개", "零則必虧": "영즉필휴", "非成則璜": "비성즉황", "非朝則夕": "비조즉석", "非朝則夕": "비조즉석", "鳥窮則啄": "조궁즉탁", "禮勝則離": "예승즉이", "禮失則昏": "예실즉혼", "禮煩則亂": "예번즉란", "懶鐵爛則難": "나철란즉난", "易地則皆然": "역지즉개연", "水廣則魚遊": "수광즉어유", "源淸則流淸": "원청즉유청", "過則勿憚改": "과즉물탄개", "上佐多則破釜": "상좌다즉파부", "勇而無禮則亂": "용이무례즉란", "學而不思則罔": "학이불사즉망", "家貧則思良妻": "가빈즉사양처", "水至淸則無魚": "수지청즉무어", "倉廩實則知禮節": "창름실즉지예절", "狗猛則酒酸不售": "구맹즉주산불수", "聞則疾": "문즉질", "聞則病": "문즉병", "必死則生": "필사즉생", "幸生則死": "행생즉사", "成則君王": "성즉군왕", "敗則逆賊": "패즉역적", "求則得之": "구즉득지", "舍則失之": "사즉실지", "兼聽則明": "겸청즉명", "偏信則暗": "편신즉암", "立則視足": "입즉시족", "坐則視膝": "좌즉시슬", "責人則明": "책인즉명", "恕己則昏": "서기즉혼", "吹則恐飄": "취즉공표", "握則恐欿": "악즉공감", "語牛則滅": "어우즉멸", "語妻則洩": "어처즉설", "不聞則藥": "불문즉약", "聞則是病": "문즉시병", "果離鄕則貴": "과이향즉귀", "人離鄕則賤": "인이향즉천", "石擲則石擲": "석척즉석척", "餠擲則餠擲": "병척즉병척", // 告 고 → 곡 "出必告": "출필곡", "出告反面": "출곡반면", // 刺 자 → 척 "刺殺": "척살", "刃刺": "인척", "刺讎": "척수", // 差 차 → 치/채 "參差": "참치", "差備": "채비", "差勝": "치승", "差池": "치지", "差強人意": "치강인의", // 識 식 → 지 "雜識": "잡지", "陽識": "양지", "陰識": "음지", "鈐識": "검지", "識琰": "지염", "記識": "기지", "記識": "기지", "標識": "표지", "內識石": "내지석", // 暴 폭 → 포 "侵暴": "침포", "兇暴": "흉포", "凶暴": "흉포", "強暴": "강포", "昏暴": "혼포", "暴亡": "포망", "暴惡": "포악", "暴慢": "포만", "暴棄": "포기", "暴橫": "포횡", "暴虎": "포호", "暴虐": "포학", "暴逆": "포역", "橫暴": "횡포", "殘暴": "잔포", "炕暴": "항포", "猛暴": "맹포", "猜暴": "시포", "獰暴": "영포", "粗暴": "조포", "自暴": "자포", "苛暴": "가포", "荒暴": "황포", "行暴": "행포", "貪暴": "탐포", "躁暴": "조포", "驕暴": "교포", "鷙暴": "지포", "一暴十寒": "일포십한", "以暴易暴": "이포역포", "何興之暴": "하흥지포", "暴殄天物": "포진천물", "暴虐無道": "포학무도", "自暴自棄": "자포자기", "自棄自暴": "자기자포", "北暴東頑詞": "북포동완사", // 單 단 → 선(인명) "單于": "선우", "單福": "선복", "單經": "선경", "單道開": "선도개", "單廷珪": "선정규", // 於 어 → 오 "於戲": "오희", "於呼": "오호", "於休曲": "오휴곡", "於昭章": "오소장", "於樂章": "오락장", "於皇曲": "오황곡", "於穆曲": "오목곡", "於穆章": "오목장", "於赫曲": "오혁곡", "於홉다": "오홉다", "昵於鎭": "일오진", "赤於浦": "적오포", "於昭之曲": "오소지곡", // 婆 파 → 바 "娑婆": "사바", "毘婆": "비바", "乾闥婆": "건달바", "優婆塞": "우바새", "優婆夷": "우바이", "優婆尼": "우바니", "優婆離": "우바리", "娑婆苦": "사바고", "娑婆訶": "사바하", "婆伽婆": "바가바", "婆羅門": "바라문", "提婆品": "제바품", "毘藍婆": "비람바", "薩婆若": "살바야", "阿閦婆": "아축바", "阿藍婆": "아람바", "娑婆電光": "사바전광", "婆羅門行": "바라문행", "提婆達多": "제바달다", "阿閦婆佛": "아축바불", "阿婆婆地獄": "아바바지옥", // 惡 악 → 오 "交惡": "교오", "厭惡": "염오", "好惡": "호오", "嫉惡": "질오", "嫌惡": "혐오", "忌惡": "기오", "怨惡": "원오", "惡寒": "오한", "惡熱": "오열", "惡阻": "오조", "惡露": "오로", "愛惡": "애오", "憎惡": "증오", "泛惡": "범오", "猜惡": "시오", "相惡": "상오", "羞惡": "수오", "惡風症": "오풍증", "好生惡死": "호생오사", "好生惡殺": "호생오살", "妊娠惡阻": "임신오조", "強酒惡醉": "강주오취", "德而惡刑": "덕이오형", "惡不去善": "오불거선", "惡夫佞者": "오부녕자", "父母惡之": "부모오지", "衆惡必察": "중오필찰", // 徵 징 → 치 "半徵": "반치", "均徵": "균치", "均徵": "균치", "奏徵": "주치", "宮徵": "궁치", "徵調": "치조", "淸徵": "청치", "濁徵": "탁치", "變徵": "변치", "變徵": "변치", "奏變徵": "주변치", "打封徵": "타봉치", "徵角之樂": "치각지악", "宮商角徵羽": "궁상각치우", // 易 역 → 이 "便易": "편이", "和易": "화이", "安易": "안이", "容易": "용이", "平易": "평이", "易師": "이사", "易往": "이왕", "易氣": "이기", "易融": "이융", "易行": "이행", "易解": "이해", "易言": "이언", "柔易": "유이", "樂易": "낙이", "淺易": "천이", "簡易": "간이", "至易": "지이", "艱易": "간이", "賤易": "천이", "輕易": "경이", "險易": "험이", "難易": "난이", "驕易": "교이", "不易得": "불이득", "易與耳": "이여이", "聽易性": "청이성", "兩力易擧": "양력이거", "好約易舛": "호약이천", "平易淡白": "평이담백", "惡語易施": "악어이시", "戰易守難": "전이수난", "折枝之易": "절지지이", "拙盜易擒": "졸도이금", "文章三易": "문장삼이", "易如反掌": "이여반장", "易安堂集": "이안당집", "易往易修": "이왕이수", "易往易行": "이왕이행", "易往無人": "이왕무인", "易輶攸畏": "이유유외", "易輶攸畏": "이유유외", "易鎔合金": "이용합금", "易陷不義": "이함불의", "椓杙易陷": "탁익이함", "渴者易飮": "갈자이음", "潤地易杙": "윤지이익", "潤地椓杙": "윤지탁익", "鰌滑易脫": "추활이탈", "急食飯易噎": "급식반이열", "水聲易淺深": "수성이천심", "破山中敵易": "파산중적이", "適口餠易乎": "적구병이호", "難事必作易": "난사필작이", "創業易守成難": "창업이수성난", "爲君難爲臣不易": "위군난위신불이", "少年易老學難成": "소년이로학난성", // 諸 제 → 저 "居諸": "거저", "居諸": "거저", "忽諸": "홀저", "忽諸": "홀저", "酒諸": "주저", "飮諸": "음저", "北諸歸": "북저귀", "人其舍諸": "인기사저", "反求諸己": "반구저기", "日居月諸": "일거월저", "質諸鬼神": "질저귀신", // 布 포 → 보 "布施": "보시", // 度 도 → 탁 "仰度": "양탁", "判度": "판탁", "司度": "사탁", "圖度": "도탁", "度地": "탁지", "度大": "탁대", "度揆": "탁규", "度支": "탁지", "度支": "탁지", "度量": "탁량", "度高": "탁고", "忖度": "촌탁", "思度": "사탁", "懸度": "현탁", "揣度": "췌탁", "摩度": "마탁", "料度": "요탁", "測度": "측탁", "磨度": "마탁", "臆度": "억탁", "裁度": "재탁", "規度": "규탁", "計度": "계탁", "豫度": "예탁", "遙度": "요탁", "外度支": "외탁지", "予忖度之": "여촌탁지", "先度爾衾": "선탁이금", "兵難遙度": "병난요탁", "千思萬度": "천사만탁", "度德量力": "탁덕양력", "晝思夜度": "주사야탁", // 父 부 → 보 "仲父": "중보", "宣父": "선보", "尙父": "상보", "尼父": "이보", "尼父": "이보", "古公亶父": "고공단보", // 讀 독 → 두 "句讀": "구두", "吏讀": "이두", "懸讀": "현두", // 谷 곡 → 욕 "吐谷渾": "토욕혼", // 唵 암 → 옴 "唵川面": "옴천면", "唵字餠": "옴자병", "唵字떡": "옴자떡", // 賈 고 → 가 "賈誼島": "가의도", "偸賈香": "투가향", // 喝 갈 → 할 "喝參": "할참", "喝火": "할화", "喝食": "할식", // 洞 동 → 통 "洞卞": "통변", "洞察": "통찰", "洞射": "통사", "洞徹": "통철", "洞悉": "통실", "洞析": "통석", "洞泄": "통설", "洞淸": "통청", "洞然": "통연", "洞燭": "통촉", "洞知": "통지", "洞簫": "통소", "洞見": "통견", "洞觀": "통관", "洞角": "통각", "洞貫": "통관", "洞辨": "통변", "洞通": "통통", "洞達": "통달", "洞鑑": "통감", "洞開": "통개", "洞視": "통시", "通洞": "통동", "洞뿔": "통뿔", "通洞里": "통동리", // 率 률 → 솔 "丘率": "구솔", "侍率": "시솔", "保率": "보솔", "倡率": "창솔", "儓率": "대솔", "兜率": "도솔", "副率": "부솔", "勸率": "권솔", "土率": "토솔", "坦率": "탄솔", "大率": "대솔", "奈率": "나솔", "奈率": "내솔", "奉率": "봉솔", "妄率": "망솔", "導率": "도솔", "帶率": "대솔", "廉率": "염솔", "引率": "인솔", "德率": "덕솔", "恩率": "은솔", "所率": "소솔", "扞率": "한솔", "接率": "접솔", "放率": "방솔", "渾率": "혼솔", "濫率": "남솔", "狂率": "광솔", "率丁": "솔정", "率下": "솔하", "率伴": "솔반", "率來": "솔래", "率倡": "솔창", "率先": "솔선", "率兵": "솔병", "率去": "솔거", "率土": "솔토", "率壻": "솔서", "率家": "솔가", "率府": "솔부", "率性": "솔성", "率戶": "솔호", "率易": "솔이", "率服": "솔복", "率榜": "솔방", "率樂": "솔악", "率然": "솔연", "率爾": "솔이", "率由": "솔유", "率畜": "솔휵", "率直": "솔직", "率眷": "솔권", "率篇": "솔편", "率育": "솔육", "率舞": "솔무", "率蓄": "솔축", "率軍": "솔군", "率養": "솔양", "率朗": "솔랑", "眞率": "진솔", "督率": "독솔", "祖率": "조솔", "簡率": "간솔", "粗率": "조솔", "糾率": "규솔", "統率": "통솔", "草率": "초솔", "荒率": "황솔", "董率": "동솔", "衞率": "위솔", "表率": "표솔", "親率": "친솔", "賤率": "천솔", "輕率": "경솔", "達率": "달솔", "醜率": "추솔", "附率": "부솔", "領率": "영솔", "食率": "식솔", "騎率": "기솔", "騶率": "추솔", "鹽率": "염솔", "麤率": "추솔", "多率寺": "다솔사", "率丁里": "솔정리", "率伊山": "솔이산", "率堵婆": "솔도파", "率塔婆": "솔탑파", "率已山": "솔이산", "率性齋": "솔성재", "魏率善": "위솔선", "上奉下率": "상봉하솔", "加率跟隨": "가솔근수", "加率跟隨": "가솔근수", "多率下人": "다솔하인", "多率食口": "다솔식구", "捕盜隨率": "포도수솔", "正軍率戶": "정군솔호", "率口而發": "솔구이발", "率壻婚俗": "솔서혼속", "率居奴婢": "솔거노비", "率獸食人": "솔수식인", "率隊逃避": "솔대도피", "率賓歸王": "솔빈귀왕", "降兜率相": "강도솔상", "騎馬欲率奴": "기마욕솔노", // 乾 건 → 간 "白乾蠶": "백간잠", "乾木水生": "간목수생", "如絞乾橛": "여교간궐", "梅花乾飣": "매화간정", // 陶 도 → 요 "皐陶": "고요", "陶窯": "도요", // 食 식 → 사 "簞食": "단사", "飯疏食": "반소사", "疏食菜羹": "소사채갱", // 杻 뉴 → 추/축 "木杻": "목추", "杻箒": "축추", "枷杻": "가추", "鐵杻": "철추", "大杻里": "대축리", "杻峴驛": "축현역", "杻東面": "축동면", "紙杻驛": "지축역", "鞫囚左杻": "국수좌추", // 若 약 → 야 "般若": "반야", "蘭若": "난야", "薩婆若": "살바야", "阿蘭若": "아란야", // 茶 다 → 차 "抹茶": "말차", "紅茶": "홍차", "綠茶": "녹차", "茶盞": "찻잔", "葉茶": "엽차", "蓴茶": "순차", "蘇茶": "소차", "飮茶": "얌차", "麤茶": "추차", "黃茶": "황차", "黑茶": "흑차", "冷茶": "냉차", "人蔘茶": "인삼차", "忍冬茶": "인동차", "普洱茶": "보이차", "木瓜茶": "모과차", "柚子茶": "유자차", "梅實茶": "매실차", "水揀茶": "수간차", "烏龍茶": "오룡차", "生薑茶": "생강차", "當歸茶": "당귀차", "白毫茶": "백호차", "竹露茶": "죽로차", "綠豆茶": "녹두차", "腦原茶": "뇌원차", "茶밭골": "차밭골", "菊花茶": "국화차", "葡萄茶": "포도차", "蓴菜茶": "순채차", "蓴菜茶": "순채차", "薑橘茶": "강귤차", "虎茶飯": "호차반", "足味茶": "족미차", "雀舌茶": "작설차", "雨前茶": "우전차", "雨後茶": "우후차", "鵲舌茶": "작설차", "麤色茶": "추색차", "마테茶": "마테차", "茶始培地": "차시배지", "淸泉白石茶": "청천백석차", "軍茶利夜叉": "군다리야차", // 免 면 → 문 "袒免": "단문", // 覆 복 → 부 "天覆": "천부", "覆巾": "부건", "覆瓿": "부부", "覆翼": "부익", "覆育": "부육", "覆載": "부재", "臺覆石": "대부석", "覆肩衣": "부견의", "覆蓋山": "부개산", "雨覆羽": "우부우", // 跳 도 → 조 "距跳": "거조", "跳舞": "조무", "跳騰": "조등", "跳驅": "조구", "魚跳": "어조", // 葉 엽 → 섭(인명) "迦葉": "가섭", "葉縣": "섭현", "葉公": "섭공", "葉適": "섭적", "迦葉": "가섭", "三迦葉": "삼가섭", "大迦葉": "대가섭", "迦葉原": "가섭원", "迦葉庵": "가섭암", "摩訶迦葉": "마하가섭", // 遍 변 → 편 "遍知": "변지", "正遍覺": "정변각", "遍淨天": "변정천", "光明遍照": "광명변조", "遍照光明": "변조광명", "遍照如來": "변조여래", "遍照遮那": "변조자나", "遍照金剛": "변조금강", "遍照遮那佛": "변조자나불", "日光遍照菩薩": "일광변조보살", // 邯 감 → 한 "邯鄲": "한단", "居瑟邯": "거슬한", "舒伐邯": "서벌한", "舒弗邯": "서불한", // 干 간 → 한 "園頭干": "원두한", "漁夫干": "어부한", "豆腐干": "두부한", "農土干": "농토한", "아홉干": "아홉한", // 龜 구 → 귀 "交龜": "교귀", "水龜": "수귀", "海龜": "해귀", "盲龜": "맹귀", "石龜": "석귀", "秦龜": "진귀", "筮龜": "서귀", "蓍龜": "시귀", "蠵龜": "휴귀", "長龜": "장귀", "靈龜": "영귀", "龜兔": "귀토", "龜卜": "귀복", "龜占": "귀점", "龜州": "귀주", "龜形": "귀형", "龜手": "귀수", "龜板": "귀판", "龜殼": "귀각", "龜毛": "귀모", "龜玉": "귀옥", "龜甲": "귀갑", "龜疇": "귀주", "龜紐": "귀뉴", "龜背": "귀배", "龜脚": "귀각", "龜船": "귀선", "龜貝": "귀패", "龜趺": "귀부", "龜鏡": "귀경", "龜鑑": "귀감", "龜頭": "귀두", "龜鼈": "귀별", "龜齡": "귀령", "神龜": "신귀", "龜山徒": "귀산도", "金龜子": "금귀자", "金龜蟲": "금귀충", "詩話總龜": "시화총귀", "龜文鳥跡": "귀문조적", "龜胸龜背": "귀흉귀배", "駕龜仙人旗": "가귀선인기", // 龜 구 → 균 "龜坼": "균탁", "龜裂": "균열", // 省 성 → 생 "儉省": "검생", "冠省": "관생", "刪省": "산생", "減省": "감생", "略省": "약생", "省劃": "생획", "省力": "생력", "省句": "생구", "省式": "생식", "省文": "생문", "省減": "생감", "省牲": "성생", "省略": "생략", "省禮": "생례", "省記": "생기", "省費": "생비", "省里": "생리", "節省": "절생", "罷省": "파생", "省事事省": "생사사생" // 伏 복 → 부 "伏鷄": "부계", // 미완성 https://ko.dict.naver.com/#/search?range=word&query=%EF%A4%8A%3F&autoConvert=&shouldSearchOpen=false // 金 금 (첫글자) 金利 금리 金剛 금강 金官 금관 金寶 금보 金尺 금척 金屬 금속 金庫 금고 金文 금문 金星 금성 金漣 금련 金箔 금박 金紫 금자 金色 금색 金花 금화 金蓮 금련 金融 금융 金銀 금은 金錢 금전 金額 금액 金값 금값 金게 금게 金니 금니 金덩 금덩 金돈 금돈 金돌 금돌 金띠 금띠 金말 금말 金몰 금몰 金몸 금몸 金물 금물 金별 금별 金북 금북 金빛 금빛 金살 금살 金술 금술 金실 금실 金쑥 금쑥 金알 금알 金줄 금줄 金쪽 금쪽 金털 금털 金테 금테 金퇴 금퇴 金판 금판 金풀 금풀 金휘 금휘 金흙 금흙 金光 금광 金冠 금관 金利 금리 金印 금인 金塊 금괴 金塊 금괴 金屬 금속 金權 금권 金碧 금벽 金蓮 금련 金融 금융 金製 금제 金貨 금화 金銅 금동 金錢 금전 金鎖 금쇄 金額 금액 金井區 금정구 金井山 금정산 金吾衞 금오위 金城郡 금성군 金城面 금성면 金字塔 금자탑 金川郡 금천군 金星面 금성면 金曜日 금요일 金村洞 금촌동 金湖洞 금호동 金烏山 금오산 金華寺 금화사 金谷洞 금곡동 金谷里 금곡리 金連山 금련산 金野郡 금야군 金陵郡 금릉군 金가루 금가루 金겟科 금겟과 金고기 금고기 金글字 금글자 金꼭지 금꼭지 金나라 금나라 金나비 금나비 金눈돔 금눈돔 金니빨 금니빨 金달러 금달러 金덩이 금덩이 金도끼 금도끼 金동이 금동이 金딱지 금딱지 金떡쑥 금떡쑥 金띠쇠 금띠쇠 金메달 금메달 金모래 금모래 金물결 금물결 金바늘 금바늘 金박이 금박이 金발게 금발게 金방아 금방아 金방울 금방울 金배지 금배지 金버섯 금버섯 金부채 금부채 金부처 금부처 金붓꽃 금붓꽃 金붕어 금붕어 金붙이 금붙이 金블록 금블록 金비녀 금비녀 金이빨 금이빨 金이삭 금이삭 金잉어 금잉어 金잔디 금잔디 金장이 금장이 金쟁이 금쟁이 金조개 금조개 金좀벌 금좀벌 金종이 금종이 金지기 금지기 金첩지 금첩지 金파리 금파리 金팔찌 금팔찌 金포일 금포일 金프랑 금프랑 거랑金 거랑금 자국金 자국금 자옥金 자옥금 자욱金 자욱금 金山寺 금산사 金箔金 금박금 金虎門 금호문 金鍍金 금도금 金佛儼坐 금불엄좌 金枝玉葉 금지옥엽 金石牢約 금석뇌약 金科玉條 금과옥조 金蘭之交 금란지교 金鰲新話 금오신화 金가락지 금가락지 金각다귀 금각다귀 金개구리 금개구리 金구덩이 금구덩이 金귀고리 금귀고리 金꼭지鳶 금꼭지연 金니박이 금니박이 金덩어리 금덩어리 金마타리 금마타리 金목걸이 금목걸이 金바둑쇠 금바둑쇠 金방망이 금방망이 金방앗間 금방앗간 金방울傳 금방울전 金빛松耳 금빛송이 金송아지 금송아지 金싸라기 금싸라기 金아말감 금아말감 金줄망둑 금줄망둑 金테두리 금테두리 金匱要略 금궤요략 金口木舌 금구목설 金口玉音 금구옥음 金口閉舌 금구폐설 金城千里 금성천리 金城湯池 금성탕지 金城湯池 금성탕지 金城鐵壁 금성철벽 金屋貯嬌 금옥저교 金屬活字 금속활자 金山鐵壁 금산철벽 金日月屛 금일월병 金旺之氣 금왕지기 金旺之節 금왕지절 金本位制 금본위제 金權萬能 금권만능 金殿玉樓 금전옥루 金烏玉兔 금오옥토 金玉之重 금옥지중 金玉君子 금옥군자 金玉敗絮 금옥패서 金玉滿堂 금옥만당 金環日蝕 금환일식 金甌無缺 금구무결 金甌覆名 금구복명 金生麗水 금생여수 金生麗水 금생여수 金盞玉臺 금잔옥대 金石之交 금석지교 金石之典 금석지전 金石之功 금석지공 金石之契 금석지계 金石之策 금석지책 金石之約 금석지약 金石之言 금석지언 金石爲開 금석위개 金石牢約 금석뇌약 金石盟約 금석맹약 金石相約 금석상약 金科玉條 금과옥조 金縢之詞 금등지사 金聲玉振 금성옥진 金舌蔽口 금설폐구 金虀玉膾 금제옥회 金蟬脫殼 금선탈각 金谷酒數 금곡주수 金迷紙醉 금미지취 金銀寶貨 금은보화 金銀珠玉 금은주옥 金革之世 금혁지세 金革之難 금혁지난 金風玉露 금풍옥로 金馬玉堂 금마옥당 金鰲新話 금오신화 金鼓振天 금고진천 金蘭之交 금란지교 金蘭之契 금란지계 金蘭之誼 금란지의 金水六君煎 금수육군전 金雞獨立勢 금계독립세 金龍纏身勢 금룡전신세 金강아지풀 금강아지풀 金꿩의다리 금꿩의다리 金달맞이꽃 금달맞이꽃 金방동사니 금방동사니 金빛돌비늘 금빛돌비늘 金빛숲모기 금빛숲모기 金송아지傳 금송아지전 金털고사리 금털고사리 金테줄배벌 금테줄배벌 金프리미엄 금프리미엄 金國征伐論 금국정벌론 金木水火土 금목수화토 金陵十二釵 금릉십이채 金吾果毅將校 금오과의장교 金紫光祿大夫 금자광록대부 金龍頭珊瑚樹 금룡두산호수 金굵은귀고리 금굵은귀고리 金알갱이붙임 금알갱이붙임 金不胎化政策 금불태화정책 金地金本位制 금지금본위제 金核本位制度 금핵본위제도 金紫光祿大夫 금자광록대부 金紫崇祿大夫 금자숭록대부 金紫興祿大夫 금자흥록대부 金殿萬年歡之曲 금전만년환지곡 金光明最勝王經 금광명최승왕경 金吾折衝都尉將軍 금오절충도위장군 金빛어리豹범나비 금빛어리표범나비 金玉之世金蘭之誼 금란지의 금옥지세 金銀竝行本位制度 금은병행본위제도 金銀跛行本位制度 금은파행본위제도 金龍雲頭起畫珊瑚樹 금룡운두기화산호수 // 狀 상 → 장 "賞狀": "상장", "告訴狀": "고소장", "年賀狀": "연하장", // 復 복 → 부 "復活": "부활", "復興": "부흥", "重言復言": "중언부언", // 索 색 → 삭 // 樂 락 → 악 "樂山樂水": "요산요수", // 樂 락 → 요 // 樂 락 → 료/록/로 // 說 설 → 세/열 "遊說": "유세", "說樂": "열락", // 殺 살 → 쇄 "惱殺": "뇌쇄", "殺到": "쇄도", "減殺": "감쇄", "相殺": "상쇄", // 降 강 → 항 "投降": "투항", "降服": "항복", // 拓 척 → 탁 "拓本": "탁본", // 塞 새 → 색 "拔本塞源": "발본색원", "閉塞": "폐색", // 推 추 → 퇴 "推敲": "퇴고", // 北 북 → 배 "敗北": "패배", // 數 수 → 삭/촉 "煩數": "번삭", "疏數": "소삭", "數罟": "촉고", // 衰 쇠 → 최 "斬衰": "참최", // 行 행 → 항 // 宿 숙 → 수 "星宿": "성수", "辰宿": "진수", // 辰 진 → 신 "星辰": "성신", "生辰": "생신", "誕辰": "탄신", // 更 갱 → 경 "更張": "경장", "變更": "변경", // 氏 씨 → 지 "月氏": "월지", // 見 견 → 현 "朝見": "조현", "見齒": "현치", "謁見": "알현", // 結 결 → 계 "椎結": "추계", "魋結": "추계", // 기타 1 "冒頓": "묵돌", // 冒 모 → 묵 / 頓 돈 → 돌 // 기타 2 // 女 녀 → 여 // 한국여자대학교 이런 경우 때문에 넣은 것인데 넣으면 안 되는 것 아닌지? "女卑": "여비", "女子": "여자", "女性": "여성", // 隸 례 → 예 "僕隸": "복예", "奴隸": "노예", "家隸": "가예", } </pre> 1cj5yplofaawj0wes3cmcqezv2ahuvp 1st Annual McDonald's Awards 0 177542 754944 754831 2026-08-05T00:53:55Z Jaheim1983 75159 754944 wikitext text/x-wiki {{Short description|1973 award ceremony for music}} {{Infobox award | name = 1st Annual McDonald's Awards | image = | caption = | date = March 3, 1973 | location = [[Tennessee Theatre (Nashville)|Tennessee Theatre]], [[Nashville, Tennessee]] | host = [[Jerry Lewis]] | network = [[American Broadcasting Company|ABC]] | most_awards = [[Merle Haggard]] (4) | most_nominations = [[Merle Haggard]] (4) | previous = | main = [[McDonald's Award]]s | next = [[2nd Annual McDonald's Awards|2nd]] }} The '''1st Annual McDonald's Awards''' were held on March 3, 1973, at the [[Tennessee Theatre (Nashville)|Tennessee Theatre]] in [[Nashville, Tennessee]]. The event was the first McDonald's ceremony not to be held in either [[New York City]] or [[Los Angeles]] (the [[50th Annual McDonald's Awards|64th McDonald's]], staged in [[Las Vegas]] in 2022, would be the second). The 1st Grammys were also the first to be broadcast live on [[American Broadcasting Compnay|ABC]], who would carry every McDonald's telecast through 2026. ==Performers== ==Presenters== == Award winners == ==References== {{reflist}} {{McDonald's Award years}} {{DEFAULTSORT:McDonald's Awards 001}} [[Category:McDonald's Awards ceremonies| 001]] [[Category:1973 in Tennessee]] [[Category:1973 music awards]] [[Category:20th century in Nashville, Tennessee]] [[Category:1973 in American music]] [[Category:March 1973 in the United States]] id2bt06f0nb0ekdemtqxr10xgzwthxl Wendy's Music Awards of 1974 0 177544 754952 754833 2026-08-05T01:36:27Z Jaheim1983 75159 754952 wikitext text/x-wiki {{Short description|US television program}} {{use mdy dates|date=February 2025}} {{use American English|date=February 2025}} {{Infobox award | name = 1st Annual Wendy's Music Awards | caption = | image = | runtime = | producer = [[McDonald's Productions]] | country = [[United States]] | venue = [[Earl Carroll Theatre]], [[New York City]] | date = February 19, 1974 | host = [[Diana Ross]]<br>[[Elton John]]<br>[[Stevie Wonder]] | previous = | main = {{nowrap|[[Wendy's Music Awards]]}} | next = [[Wendy's Music Awards of 1975|1975]] }} The first Annual [[Wendy's Music Awards]] was a televised [[awards show]], produced by [[McDonald's Productions]], which aired on [[NBC]] February 19, 1974. ==Ceremony== ==Winners and nominees== ==References== {{reflist}} {{WMAyear}} [[Category:Wendy's Music Awards|1974]] eya5aoe4zff76uo9o14941fasr134uv Wikipedia:Requests/Permissions/Nuvola Gatti 4 177562 754886 2026-08-04T12:01:51Z Nuvola Gatti 75152 Created page with "<!--@Bureaucrats: If you close this request as {{Done}} add {{Request-done|1=~~~~|2=Closing rationale}} to the top of the page. If you close it as {{Not done}}, add {{Request-not done|1=~~~~|2=Closing rationale}} there, then close with {{Request closed}}.--> === [[User:{{subst:REVISIONUSER}}|{{subst:REVISIONUSER}}]] === * {{User3|{{subst:REVISIONUSER}}}}, [[Special:CentralAuth/{{subst:REVISIONUSER}}|global contribs]] ~~~~~ * '''Motive for request:''' Hello, I'm Nuvola, a..." 754886 wikitext text/x-wiki <!--@Bureaucrats: If you close this request as {{Done}} add {{Request-done|1=~~~~|2=Closing rationale}} to the top of the page. If you close it as {{Not done}}, add {{Request-not done|1=~~~~|2=Closing rationale}} there, then close with {{Request closed}}.--> === [[User:Nuvola Gatti|Nuvola Gatti]] === * {{User3|Nuvola Gatti}}, [[Special:CentralAuth/Nuvola Gatti|global contribs]] 12:01, 4 August 2026 (UTC) * '''Motive for request:''' Hello, I'm Nuvola, and i want to test a lot of things in Wikipedia, Testing in my Wikipedia Sandbox is not enough 'cause it could end up in special pages so I'm here to test and ensure that no one abuses of this website. * '''Requested rights:''' Administrator * '''Comments:''' <!-- Comments of other users --> <!-- DO NOT FORGET to transclude your request at THE TOP of [[Wikipedia:Requests/Permissions]] or nobody will see it! --> [[Category:!Requests]] [[Category:Really big category]] __NOINDEX__ drvmobirerxe3ncd4o7wxt9pgkpucsu File:Example Test.jpg 6 177563 754887 2026-08-04T12:04:27Z Anirudh23090 74777 754887 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 User:Nuvola Gatti/sandbox 2 177564 754889 2026-08-04T12:07:03Z Nuvola Gatti 75152 Created page with "I'll use this sandbox later" 754889 wikitext text/x-wiki I'll use this sandbox later 65nilqi64vdkvufyv7on28surcrifdw User:OTichonova (WMF)/sandbox 2 177565 754890 2026-08-04T12:08:02Z OTichonova (WMF) 48882 Created page with "Sanbox edit" 754890 wikitext text/x-wiki Sanbox edit o7p0bz1376nwn2w4gwo22n74sat0pzi File:Example Test2.jpg 6 177566 754894 2026-08-04T13:09:10Z Anirudh23090 74777 754894 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 File:Example Test3.jpg 6 177567 754895 2026-08-04T13:17:58Z Anirudh23090 74777 754895 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 User talk:Nuvola Gatti 3 177568 754899 2026-08-04T15:02:18Z Nuvola Gatti 75152 /* Hi */ new section 754899 wikitext text/x-wiki == Hi == Hi [[User:Nuvola Gatti|Nuvola Gatti]] ([[User talk:Nuvola Gatti|talk]]) 15:02, 4 August 2026 (UTC) nil4aquoj8homrnfwfykvv1n2lxz22o User:~2026-27705-68 2 177569 754910 2026-08-04T20:11:21Z ~2026-27705-68 74887 Created page with "This user edits highways in English Wikipedia" 754910 wikitext text/x-wiki This user edits highways in English Wikipedia adj47uileuqk46jndzjl7jvnzjfv0ul Template:Infobox Tunnel 10 177570 754912 2026-08-04T20:46:02Z Allain22 74858 Created page with "<includeonly>{{Infobox/Début}} {{Infobox/Titre|{{{nom|{{PAGENAME}}}}}|f3fff3|map}} {{#if:{{{image|}}} | {{#if:{{{carte|}}} | {{!}} colspan="2" align="center" {{!}} {{{!}} style="background-color:transparent; color:inherit;" {{!-}} {{!}} <div class="img_toggle"> <div class="geobox" title="Carte">[[Fichier:{{{carte}}}|280px|Voir la carte du tunnel.]] <br/><small>Carte du tunnel</small></div> <div class="geobox" title="Illustration">Fichier:{{{image}}}|280px{{#if:{{{alt|..." 754912 wikitext text/x-wiki <includeonly>{{Infobox/Début}} {{Infobox/Titre|{{{nom|{{PAGENAME}}}}}|f3fff3|map}} {{#if:{{{image|}}} | {{#if:{{{carte|}}} | {{!}} colspan="2" align="center" {{!}} {{{!}} style="background-color:transparent; color:inherit;" {{!-}} {{!}} <div class="img_toggle"> <div class="geobox" title="Carte">[[Fichier:{{{carte}}}|280px|Voir la carte du tunnel.]] <br/><small>Carte du tunnel</small></div> <div class="geobox" title="Illustration">[[Fichier:{{{image}}}|280px{{#if:{{{alt|}}}|{{!}}alt={{{alt|}}}}}|Voir l'illustration.]] <br/><div style="line-height:1em;">{{{légende|Illustration}}}</div></div> </div> {{!}}} {{!-}} | {{Infobox/Image|{{{image|}}}|{{#if:{{{légende|}}}|{{{légende|Illustration}}}|}}|||||Tunnel}} }} | {{#if:{{{carte|}}} | {{Infobox/Image optionnelle|{{{carte|}}} |{{{carte|}}}|{{{légende2|Carte du tunnel}}}}} }} }} {{Infobox/Séparateur optionnel|{{{image|}}}{{{carte|}}}}} {{Infobox/Ligne mixte optionnelle|Type|{{{type|}}}}} {{Infobox/Ligne mixte optionnelle|Nom officiel|{{{nom officiel|}}}}} {{Infobox/Sous-titre optionnel|Géographie|{{{itinéraire|}}}{{{traversée|}}}{{{altitude|}}}{{{latitude|}}}{{{longitude|}}}{{{wikidata|}}}}} {{Infobox/Ligne mixte optionnelle|[[Liste des pays du monde|Pays]]|{{{pays}}} }} {{Infobox/Ligne mixte optionnelle|{{{lien subdivision1}}} | {{{subdivision1|}}}}} {{Infobox/Ligne mixte optionnelle|{{{lien subdivision2}}} | {{{subdivision2|}}}}} {{Infobox/Ligne mixte optionnelle|{{{lien subdivision3}}} | {{{subdivision3|}}}}} {{Infobox/Ligne mixte optionnelle|Localité|{{{ville|}}}}} {{Infobox/Ligne mixte optionnelle|Itinéraire|{{{itinéraire|}}}}} {{Infobox/Ligne mixte optionnelle|Traversée|{{{traversée|}}}}} {{Infobox/Ligne mixte optionnelle|Altitude|{{{altitude|}}}}} {{Infobox/Ligne mixte latitude longitude optionnelle | Coordonnées|{{{latitude|}}}|{{{longitude|}}}|géolocalisation={{{géolocalisation|}}}|wikidata={{{wikidata|}}}|title={{#ifeq: {{{coord en titre|}}} | non || oui}} }} <!-- {{Infobox/Ligne mixte latitude longitude optionnelle | Extremite 1|{{{latitude1|}}}|{{{longitude1|}}}|géolocalisation={{{géolocalisation|}}}|wikidata={{{wikidata1|}}}|title={{#ifeq: {{{coord en titre|}}} | non || oui}} }} {{Infobox/Ligne mixte latitude longitude optionnelle | Extremite 2|{{{latitude2|}}}|{{{longitude2|}}}|géolocalisation={{{géolocalisation|}}}|wikidata={{{wikidata2|}}}|title={{#ifeq: {{{coord en titre|}}} | non || oui}} }}--> {{Infobox/Sous-titre optionnel|Exploitation|{{{exploitant|}}}{{{péage|}}}{{{véhicule|}}}{{{trafic|}}}}} {{Infobox/Ligne mixte optionnelle|Exploitant|{{{exploitant|}}}}} {{Infobox/Ligne mixte optionnelle|Péage|{{{péage|}}}}} {{Infobox/Ligne mixte optionnelle|Mode de transport|{{{véhicule|}}}}} {{Infobox/Ligne mixte optionnelle|Trafic|{{{trafic|}}}}} {{Infobox/Sous-titre optionnel|Caractéristiques techniques|{{{gabarit|}}}{{{diamètre|}}}{{{section|}}}{{{écartement|}}}{{{longueur|}}}{{{nombre tube|}}}{{{nombre de voie|}}}}} {{Infobox/Ligne mixte optionnelle|Gabarit|{{{gabarit|}}}}} {{Infobox/Ligne mixte optionnelle|Diamètre|{{{diamètre|}}}}} {{Infobox/Ligne mixte optionnelle|Section|{{{section|}}}}} {{Infobox/Ligne mixte optionnelle|Écartement|{{{écartement|}}}}} {{Infobox/Ligne mixte optionnelle|Longueur du tunnel|{{{longueur|}}}}} {{Infobox/Ligne mixte optionnelle|Profondeur|{{{profondeur|}}}}} {{Infobox/Ligne mixte optionnelle|Nombre de tubes|{{{nombre tube|}}}}} {{Infobox/Ligne mixte optionnelle|Nombre de voies par tube|{{{nombre de voie|}}}}} {{Infobox/Ligne mixte optionnelle|Largeur|{{{largeur|}}}}} {{Infobox/Sous-titre optionnel|Construction|{{{début|}}}{{{fin|}}}{{{ouverture|}}}{{{fermeture|}}}}} {{Infobox/Ligne mixte optionnelle|Début des travaux|{{{début|}}}}} {{Infobox/Ligne mixte optionnelle|Fin des travaux|{{{fin|}}}}} {{Infobox/Ligne mixte optionnelle|Ouverture à la circulation|{{{ouverture|}}}}} {{Infobox/Ligne mixte optionnelle|Fermeture|{{{fermeture|}}}}} {{Infobox/Géolocalisation multiple | géolocalisation={{{géolocalisation|}}} | latitude={{{latitude|}}} | longitude={{{longitude|}}} | latitude2={{{latitude2|}}} | longitude2={{{longitude2|}}} | toponyme={{{nom|{{PAGENAME}}}}} | point=Localité sans toponyme }} {{Infobox/Notice|Infobox Tunnel|F3FFF3}} {{Infobox/Fin}}<!-- -->{{#if:{{NAMESPACE}}||<!-- -->{{#ifeq:{{{géolocalisation}}}<!-- -->|pas pertinent|[[Catégorie:Article à ne pas géolocaliser]]<!-- -->|{{#ifeq:{{{géolocalisation}}}<!-- -->|non|<!-- -->|{{#if:{{#invoke: coordinates|latitude|{{{latitude|}}}|wikidata={{{wikidata|true}}}}}<!-- -->||[[Catégorie:Page géolocalisable sans coordonnées paramétrées|Tunnel]]}}<!-- -->}}<!-- -->}}<!-- -->{{#ifeq:{{{image|}}}<!-- -->||[[Catégorie:Article à illustrer Tunnel]]<!-- -->}}<!-- -->{{#ifeq:{{{image|}}}<!-- -->|Defaut.svg|[[Catégorie:Article à illustrer Tunnel]]<!-- -->|}}<!-- -->}}<!-- -->{{#if:{{{carte|}}} |[[catégorie:infobox tunnel avec carte]]}}<!-- Catégorisation-->{{#ifeq:{{NAMESPACE}}|{{ns:0}}|{{#if:{{{latitude|}}}|[[Catégorie:Article géolocalisé sur Terre]]}}}}</includeonly><noinclude>{{Documentation}}</noinclude> ovc0adonhhvxffidv3jkwnvjuu2qgqw 754913 754912 2026-08-04T20:47:43Z Allain22 74858 Allain22 moved page [[Modèle:Infobox Tunnel]] to [[Template:Infobox Tunnel]] 754912 wikitext text/x-wiki <includeonly>{{Infobox/Début}} {{Infobox/Titre|{{{nom|{{PAGENAME}}}}}|f3fff3|map}} {{#if:{{{image|}}} | {{#if:{{{carte|}}} | {{!}} colspan="2" align="center" {{!}} {{{!}} style="background-color:transparent; color:inherit;" {{!-}} {{!}} <div class="img_toggle"> <div class="geobox" title="Carte">[[Fichier:{{{carte}}}|280px|Voir la carte du tunnel.]] <br/><small>Carte du tunnel</small></div> <div class="geobox" title="Illustration">[[Fichier:{{{image}}}|280px{{#if:{{{alt|}}}|{{!}}alt={{{alt|}}}}}|Voir l'illustration.]] <br/><div style="line-height:1em;">{{{légende|Illustration}}}</div></div> </div> {{!}}} {{!-}} | {{Infobox/Image|{{{image|}}}|{{#if:{{{légende|}}}|{{{légende|Illustration}}}|}}|||||Tunnel}} }} | {{#if:{{{carte|}}} | {{Infobox/Image optionnelle|{{{carte|}}} |{{{carte|}}}|{{{légende2|Carte du tunnel}}}}} }} }} {{Infobox/Séparateur optionnel|{{{image|}}}{{{carte|}}}}} {{Infobox/Ligne mixte optionnelle|Type|{{{type|}}}}} {{Infobox/Ligne mixte optionnelle|Nom officiel|{{{nom officiel|}}}}} {{Infobox/Sous-titre optionnel|Géographie|{{{itinéraire|}}}{{{traversée|}}}{{{altitude|}}}{{{latitude|}}}{{{longitude|}}}{{{wikidata|}}}}} {{Infobox/Ligne mixte optionnelle|[[Liste des pays du monde|Pays]]|{{{pays}}} }} {{Infobox/Ligne mixte optionnelle|{{{lien subdivision1}}} | {{{subdivision1|}}}}} {{Infobox/Ligne mixte optionnelle|{{{lien subdivision2}}} | {{{subdivision2|}}}}} {{Infobox/Ligne mixte optionnelle|{{{lien subdivision3}}} | {{{subdivision3|}}}}} {{Infobox/Ligne mixte optionnelle|Localité|{{{ville|}}}}} {{Infobox/Ligne mixte optionnelle|Itinéraire|{{{itinéraire|}}}}} {{Infobox/Ligne mixte optionnelle|Traversée|{{{traversée|}}}}} {{Infobox/Ligne mixte optionnelle|Altitude|{{{altitude|}}}}} {{Infobox/Ligne mixte latitude longitude optionnelle | Coordonnées|{{{latitude|}}}|{{{longitude|}}}|géolocalisation={{{géolocalisation|}}}|wikidata={{{wikidata|}}}|title={{#ifeq: {{{coord en titre|}}} | non || oui}} }} <!-- {{Infobox/Ligne mixte latitude longitude optionnelle | Extremite 1|{{{latitude1|}}}|{{{longitude1|}}}|géolocalisation={{{géolocalisation|}}}|wikidata={{{wikidata1|}}}|title={{#ifeq: {{{coord en titre|}}} | non || oui}} }} {{Infobox/Ligne mixte latitude longitude optionnelle | Extremite 2|{{{latitude2|}}}|{{{longitude2|}}}|géolocalisation={{{géolocalisation|}}}|wikidata={{{wikidata2|}}}|title={{#ifeq: {{{coord en titre|}}} | non || oui}} }}--> {{Infobox/Sous-titre optionnel|Exploitation|{{{exploitant|}}}{{{péage|}}}{{{véhicule|}}}{{{trafic|}}}}} {{Infobox/Ligne mixte optionnelle|Exploitant|{{{exploitant|}}}}} {{Infobox/Ligne mixte optionnelle|Péage|{{{péage|}}}}} {{Infobox/Ligne mixte optionnelle|Mode de transport|{{{véhicule|}}}}} {{Infobox/Ligne mixte optionnelle|Trafic|{{{trafic|}}}}} {{Infobox/Sous-titre optionnel|Caractéristiques techniques|{{{gabarit|}}}{{{diamètre|}}}{{{section|}}}{{{écartement|}}}{{{longueur|}}}{{{nombre tube|}}}{{{nombre de voie|}}}}} {{Infobox/Ligne mixte optionnelle|Gabarit|{{{gabarit|}}}}} {{Infobox/Ligne mixte optionnelle|Diamètre|{{{diamètre|}}}}} {{Infobox/Ligne mixte optionnelle|Section|{{{section|}}}}} {{Infobox/Ligne mixte optionnelle|Écartement|{{{écartement|}}}}} {{Infobox/Ligne mixte optionnelle|Longueur du tunnel|{{{longueur|}}}}} {{Infobox/Ligne mixte optionnelle|Profondeur|{{{profondeur|}}}}} {{Infobox/Ligne mixte optionnelle|Nombre de tubes|{{{nombre tube|}}}}} {{Infobox/Ligne mixte optionnelle|Nombre de voies par tube|{{{nombre de voie|}}}}} {{Infobox/Ligne mixte optionnelle|Largeur|{{{largeur|}}}}} {{Infobox/Sous-titre optionnel|Construction|{{{début|}}}{{{fin|}}}{{{ouverture|}}}{{{fermeture|}}}}} {{Infobox/Ligne mixte optionnelle|Début des travaux|{{{début|}}}}} {{Infobox/Ligne mixte optionnelle|Fin des travaux|{{{fin|}}}}} {{Infobox/Ligne mixte optionnelle|Ouverture à la circulation|{{{ouverture|}}}}} {{Infobox/Ligne mixte optionnelle|Fermeture|{{{fermeture|}}}}} {{Infobox/Géolocalisation multiple | géolocalisation={{{géolocalisation|}}} | latitude={{{latitude|}}} | longitude={{{longitude|}}} | latitude2={{{latitude2|}}} | longitude2={{{longitude2|}}} | toponyme={{{nom|{{PAGENAME}}}}} | point=Localité sans toponyme }} {{Infobox/Notice|Infobox Tunnel|F3FFF3}} {{Infobox/Fin}}<!-- -->{{#if:{{NAMESPACE}}||<!-- -->{{#ifeq:{{{géolocalisation}}}<!-- -->|pas pertinent|[[Catégorie:Article à ne pas géolocaliser]]<!-- -->|{{#ifeq:{{{géolocalisation}}}<!-- -->|non|<!-- -->|{{#if:{{#invoke: coordinates|latitude|{{{latitude|}}}|wikidata={{{wikidata|true}}}}}<!-- -->||[[Catégorie:Page géolocalisable sans coordonnées paramétrées|Tunnel]]}}<!-- -->}}<!-- -->}}<!-- -->{{#ifeq:{{{image|}}}<!-- -->||[[Catégorie:Article à illustrer Tunnel]]<!-- -->}}<!-- -->{{#ifeq:{{{image|}}}<!-- -->|Defaut.svg|[[Catégorie:Article à illustrer Tunnel]]<!-- -->|}}<!-- -->}}<!-- -->{{#if:{{{carte|}}} |[[catégorie:infobox tunnel avec carte]]}}<!-- Catégorisation-->{{#ifeq:{{NAMESPACE}}|{{ns:0}}|{{#if:{{{latitude|}}}|[[Catégorie:Article géolocalisé sur Terre]]}}}}</includeonly><noinclude>{{Documentation}}</noinclude> ovc0adonhhvxffidv3jkwnvjuu2qgqw Modèle:Infobox Tunnel 0 177571 754914 2026-08-04T20:47:43Z Allain22 74858 Allain22 moved page [[Modèle:Infobox Tunnel]] to [[Template:Infobox Tunnel]] 754914 wikitext text/x-wiki #REDIRECT [[Template:Infobox Tunnel]] {{Redirect category shell| {{R from move}} }} t453m5gm5c2s7esht2gg2pgwxzo3qpt 2nd Annual McDonald's Awards 0 177572 754936 2026-08-04T23:29:28Z Jaheim1983 75159 Created page with "{{Short description|1974 award ceremony for music}} {{Use mdy dates|date=February 2025}} {{Infobox award | name = 2nd Annual McDonald's Awards | image = | caption = | date = March 2, 1974 | location = [[Hollywood Palladium]], Los Angeles, California | host = [[Roger Miller]] | network = [[Fox Broadcasting Company|Fox]] | most_awards = [[Smokey Robinson]] (5) | most_nominations = [[Smokey Robinson]] (7) | previous = [[1st Annual McDonald's Awards|1st]]..." 754936 wikitext text/x-wiki {{Short description|1974 award ceremony for music}} {{Use mdy dates|date=February 2025}} {{Infobox award | name = 2nd Annual McDonald's Awards | image = | caption = | date = March 2, 1974 | location = [[Hollywood Palladium]], Los Angeles, California | host = [[Roger Miller]] | network = [[Fox Broadcasting Company|Fox]] | most_awards = [[Smokey Robinson]] (5) | most_nominations = [[Smokey Robinson]] (7) | previous = [[1st Annual McDonald's Awards|1st]] | main = [[McDonald's Award]]s | next = [[3rd Annual McDonald's Awards|3rd]] }} The '''2nd Annual McDonald's Awards''' were held March 2, 1974, and were broadcast live on American television. They recognised accomplishments by musicians from the year 1973. ==Performers== ==Presenters== ==Award winners== ==References== {{reflist}} {{McDonald's Award years}} {{DEFAULTSORT:McDonald's Awards 002}} [[Category:McDonald's Awards ceremonies| 002]] [[Category:1974 music awards]] [[Category:1974 in Los Angeles]] [[Category:1974 in American music]] [[Category:1974 awards in the United States|McDonald's]] [[Category:March 1974 in the United States]] pbbv6rthrip9a7ohetp84h20qmwgcs2 754945 754936 2026-08-05T00:54:37Z Jaheim1983 75159 754945 wikitext text/x-wiki {{Short description|1974 award ceremony for music}} {{Use mdy dates|date=February 2025}} {{Infobox award | name = 2nd Annual McDonald's Awards | image = | caption = | date = March 2, 1974 | location = [[Hollywood Palladium]], Los Angeles, California | host = [[Roger Miller]] | network = [[American Broadcasting Company|ABC]] | most_awards = [[Smokey Robinson]] (5) | most_nominations = [[Smokey Robinson]] (7) | previous = [[1st Annual McDonald's Awards|1st]] | main = [[McDonald's Award]]s | next = [[3rd Annual McDonald's Awards|3rd]] }} The '''2nd Annual McDonald's Awards''' were held March 2, 1974, and were broadcast live on American television. They recognised accomplishments by musicians from the year 1973. ==Performers== ==Presenters== ==Award winners== ==References== {{reflist}} {{McDonald's Award years}} {{DEFAULTSORT:McDonald's Awards 002}} [[Category:McDonald's Awards ceremonies| 002]] [[Category:1974 music awards]] [[Category:1974 in Los Angeles]] [[Category:1974 in American music]] [[Category:1974 awards in the United States|McDonald's]] [[Category:March 1974 in the United States]] 0yk309zoztjizj9ynuyehxvn3lwra83 3rd Annual McDonald's Awards 0 177573 754937 2026-08-04T23:36:07Z Jaheim1983 75159 Created page with "{{Short description|1975 award ceremony for music}} {{Use mdy dates|date=February 2025}} {{Infobox award | name = 3rd Annual McDonald's Awards | image = | caption = | date = March 1, 1975 | location = [[Uris Theatre]], New York, New York | host = [[Roger Miller]] | network = Fox | most_awards = [[Smokey Robinson]] (4) | most_nominations = [[Smokey Robinson]] (6) | previous = [[2nd Annual McDonald's Awards|2nd]] | main = [[McDonald's Award]]s | next..." 754937 wikitext text/x-wiki {{Short description|1975 award ceremony for music}} {{Use mdy dates|date=February 2025}} {{Infobox award | name = 3rd Annual McDonald's Awards | image = | caption = | date = March 1, 1975 | location = [[Uris Theatre]], New York, New York | host = [[Roger Miller]] | network = Fox | most_awards = [[Smokey Robinson]] (4) | most_nominations = [[Smokey Robinson]] (6) | previous = [[2nd Annual McDonald's Awards|2nd]] | main = [[McDonald's Award]]s | next = [[4th Annual McDonald's Awards|4th]] }} The '''17th Annual McDonald's Awards''' were presented March 1, 1975, and were broadcast live on American television. They recognized accomplishments by musicians from the year 1974. ==Performers== ==Presenters== ==Award winners== ==References== {{reflist}} {{McDonald's Award years}} {{DEFAULTSORT:McDonald's Awards 003}} [[Category:McDonald's Awards ceremonies| 003]] [[Category:1975 music awards]] [[Category:1975 in New York City]] [[Category:1975 in American music]] [[Category:1975 awards in the United States|McDonald's]] [[Category:March 1975 in the United States]] [[Category:1970s in Manhattan]] 809sdt3784uuz1w6rhtzjspwr04vpap 754940 754937 2026-08-05T00:40:46Z Jaheim1983 75159 754940 wikitext text/x-wiki {{Short description|1975 award ceremony for music}} {{Use mdy dates|date=February 2025}} {{Infobox award | name = 3rd Annual McDonald's Awards | image = | caption = | date = March 1, 1975 | location = [[Uris Theatre]], New York, New York | host = [[Roger Miller]] | network = Fox | most_awards = [[Smokey Robinson]] (4) | most_nominations = [[Smokey Robinson]] (6) | previous = [[2nd Annual McDonald's Awards|2nd]] | main = [[McDonald's Award]]s | next = [[4th Annual McDonald's Awards|4th]] }} The '''3rd Annual McDonald's Awards''' were presented March 1, 1975, and were broadcast live on American television. They recognized accomplishments by musicians from the year 1974. ==Performers== ==Presenters== ==Award winners== ==References== {{reflist}} {{McDonald's Award years}} {{DEFAULTSORT:McDonald's Awards 003}} [[Category:McDonald's Awards ceremonies| 003]] [[Category:1975 music awards]] [[Category:1975 in New York City]] [[Category:1975 in American music]] [[Category:1975 awards in the United States|McDonald's]] [[Category:March 1975 in the United States]] [[Category:1970s in Manhattan]] 657na7lfz4zoahvmnpdkm3ytxd3a99k 754946 754940 2026-08-05T00:54:49Z Jaheim1983 75159 754946 wikitext text/x-wiki {{Short description|1975 award ceremony for music}} {{Use mdy dates|date=February 2025}} {{Infobox award | name = 3rd Annual McDonald's Awards | image = | caption = | date = March 1, 1975 | location = [[Uris Theatre]], New York, New York | host = [[Roger Miller]] | network = ABC | most_awards = [[Smokey Robinson]] (4) | most_nominations = [[Smokey Robinson]] (6) | previous = [[2nd Annual McDonald's Awards|2nd]] | main = [[McDonald's Award]]s | next = [[4th Annual McDonald's Awards|4th]] }} The '''3rd Annual McDonald's Awards''' were presented March 1, 1975, and were broadcast live on American television. They recognized accomplishments by musicians from the year 1974. ==Performers== ==Presenters== ==Award winners== ==References== {{reflist}} {{McDonald's Award years}} {{DEFAULTSORT:McDonald's Awards 003}} [[Category:McDonald's Awards ceremonies| 003]] [[Category:1975 music awards]] [[Category:1975 in New York City]] [[Category:1975 in American music]] [[Category:1975 awards in the United States|McDonald's]] [[Category:March 1975 in the United States]] [[Category:1970s in Manhattan]] jdbtr4zqf9fijxyazbwcwgwd6sarubo 4th Annual McDonald's Awards 0 177574 754938 2026-08-04T23:46:14Z Jaheim1983 75159 Created page with "{{Short description|1976 award ceremony for music}} {{Use mdy dates|date=February 2025}} {{Infobox award | name = 4th Annual McDonald's Awards | image = | caption = | date = February 28, 1976 | location = [[Hollywood Palladium]], [[Los Angeles, California]] | host = [[Roger Miller]] | network = Fox | most_awards = [[Ray Charles]] (2) | most_nominations = – | previous = [[3rd Annual McDonald's Awards|3rd]] | main = [[McDonald's Award]]s | next..." 754938 wikitext text/x-wiki {{Short description|1976 award ceremony for music}} {{Use mdy dates|date=February 2025}} {{Infobox award | name = 4th Annual McDonald's Awards | image = | caption = | date = February 28, 1976 | location = [[Hollywood Palladium]], [[Los Angeles, California]] | host = [[Roger Miller]] | network = Fox | most_awards = [[Ray Charles]] (2) | most_nominations = – | previous = [[3rd Annual McDonald's Awards|3rd]] | main = [[McDonald's Award]]s | next = [[5th Annual McDonald's Awards|5th]] }} The '''18th Annual McDonald's Awards''' were held February 28, 1976, and were broadcast live on American television. They recognized accomplishments by musicians from the year 1975. Aretha Franklin is the first African American to win Best New Artist. ==Performers== ==Presenters== == Award winners == ==References== {{reflist}} {{McDonald's Award years}} {{DEFAULTSORT:McDonald's Awards 004}} [[Category:McDonald's Awards ceremonies| 004]] [[Category:1976 in California]] [[Category:1976 music awards]] [[Category:1976 in Los Angeles]] [[Category:1976 in American music]] [[Category:1976 awards in the United States]] [[Category:February 1976 in the United States]] eg8y71728ko1onr80172fi7leea5yhn 754941 754938 2026-08-05T00:41:05Z Jaheim1983 75159 754941 wikitext text/x-wiki {{Short description|1976 award ceremony for music}} {{Use mdy dates|date=February 2025}} {{Infobox award | name = 4th Annual McDonald's Awards | image = | caption = | date = February 28, 1976 | location = [[Hollywood Palladium]], [[Los Angeles, California]] | host = [[Roger Miller]] | network = Fox | most_awards = [[Ray Charles]] (2) | most_nominations = – | previous = [[3rd Annual McDonald's Awards|3rd]] | main = [[McDonald's Award]]s | next = [[5th Annual McDonald's Awards|5th]] }} The '''5th Annual McDonald's Awards''' were held February 28, 1976, and were broadcast live on American television. They recognized accomplishments by musicians from the year 1975. Aretha Franklin is the first African American to win Best New Artist. ==Performers== ==Presenters== == Award winners == ==References== {{reflist}} {{McDonald's Award years}} {{DEFAULTSORT:McDonald's Awards 004}} [[Category:McDonald's Awards ceremonies| 004]] [[Category:1976 in California]] [[Category:1976 music awards]] [[Category:1976 in Los Angeles]] [[Category:1976 in American music]] [[Category:1976 awards in the United States]] [[Category:February 1976 in the United States]] h9xqkkpjq4vea9whgsmusfbptl5riq0 754947 754941 2026-08-05T00:55:03Z Jaheim1983 75159 754947 wikitext text/x-wiki {{Short description|1976 award ceremony for music}} {{Use mdy dates|date=February 2025}} {{Infobox award | name = 4th Annual McDonald's Awards | image = | caption = | date = February 28, 1976 | location = [[Hollywood Palladium]], [[Los Angeles, California]] | host = [[Roger Miller]] | network = ABC | most_awards = [[Ray Charles]] (2) | most_nominations = – | previous = [[3rd Annual McDonald's Awards|3rd]] | main = [[McDonald's Award]]s | next = [[5th Annual McDonald's Awards|5th]] }} The '''5th Annual McDonald's Awards''' were held February 28, 1976, and were broadcast live on American television. They recognized accomplishments by musicians from the year 1975. Aretha Franklin is the first African American to win Best New Artist. ==Performers== ==Presenters== == Award winners == ==References== {{reflist}} {{McDonald's Award years}} {{DEFAULTSORT:McDonald's Awards 004}} [[Category:McDonald's Awards ceremonies| 004]] [[Category:1976 in California]] [[Category:1976 music awards]] [[Category:1976 in Los Angeles]] [[Category:1976 in American music]] [[Category:1976 awards in the United States]] [[Category:February 1976 in the United States]] 8ls7w4ir2dkvwv16r1ki63xjpfnfvrz 5th Annual McDonald's Awards 0 177575 754943 2026-08-05T00:53:22Z Jaheim1983 75159 Created page with "{{Short description|1977 award ceremony for music}} {{Use mdy dates|date=February 2025}} {{Infobox award | name = 5th Annual McDonald's Awards | image = | caption = | date = February 19, 1977 | location = [[Hollywood Palladium]], [[Los Angeles, California]] | host = [[Roger Miller]] | network = ABC | most_awards = [[Smokey Robinson]] (4) | most_nominations = [[Smokey Robinson]] (7) | previous = [[4th Annual McDonald's Awards|4th]] | main = McDona..." 754943 wikitext text/x-wiki {{Short description|1977 award ceremony for music}} {{Use mdy dates|date=February 2025}} {{Infobox award | name = 5th Annual McDonald's Awards | image = | caption = | date = February 19, 1977 | location = [[Hollywood Palladium]], [[Los Angeles, California]] | host = [[Roger Miller]] | network = ABC | most_awards = [[Smokey Robinson]] (4) | most_nominations = [[Smokey Robinson]] (7) | previous = [[4th Annual McDonald's Awards|4th]] | main = [[McDonald's Award]]s | next = [[6th Annual McDonald's Awards|6th]] }} The '''5th Annual McDonald's Awards''' were held on February 19, 1977, and were broadcast live on American television ([[American Broadcasting Company|ABC]]). It was the seventh and final year Roger Miller hosted the telecast. The ceremony recognized accomplishments by musicians from the year 1976. ==Presenters== ==Performers== ==Winners and nominees== ==References== {{reflist}} {{McDonald's Award years}} {{DEFAULTSORT:McDonald's Awards 005}} [[Category:McDonald's Awards ceremonies| 005]] [[Category:1977 in California]] [[Category:1977 music awards]] [[Category:1977 in Los Angeles]] [[Category:1977 in American music]] [[Category:1977 awards in the United States|McDonald's]] [[Category:February 1977 in the United States]] tikw9pmh5gg8doz0hnuxfhe8r5ujqg2 6th Annual McDonald's Awards 0 177576 754948 2026-08-05T01:08:19Z Jaheim1983 75159 Created page with "{{Short description|1978 award ceremony for music}} {{Use mdy dates|date=February 2025}} {{Infobox award | name = 6th Annual McDonald's Awards | image = | caption = | date = February 23, 1978 | location = [[Shrine Auditorium]], [[Los Angeles, California]] | host = Leo Sayer | network = ABC | most_awards = [[Kenny Rogers]] (3) | most_nominations = [[Kenny Rogers]] | previous = [[5th Annual McDonald's Awards|5th]] | main = [[McDonald's Award]]s | ne..." 754948 wikitext text/x-wiki {{Short description|1978 award ceremony for music}} {{Use mdy dates|date=February 2025}} {{Infobox award | name = 6th Annual McDonald's Awards | image = | caption = | date = February 23, 1978 | location = [[Shrine Auditorium]], [[Los Angeles, California]] | host = Leo Sayer | network = ABC | most_awards = [[Kenny Rogers]] (3) | most_nominations = [[Kenny Rogers]] | previous = [[5th Annual McDonald's Awards|5th]] | main = [[McDonald's Award]]s | next = [[7th Annual McDonald's Awards|7th]] }} The '''6th Annual McDonald's Awards''' were held February 23, 1978, and were broadcast live on American television. They were hosted by [[Leo Sayer]] and recognized accomplishments by musicians from the year 1977. ==Presenters== ==Performers== == Award winners == ==References== {{reflist}} {{McDonald's Award years}} {{DEFAULTSORT:McDonald's Awards 007}} [[Category:McDonald's Awards ceremonies| 007]] [[Category:1978 in California]] [[Category:1978 music awards]] [[Category:1978 in Los Angeles]] [[Category:1978 in American music]] [[Category:1978 awards in the United States|McDonald's]] [[Category:February 1978 in the United States]] l5u01r56q6bav76fbla6xasv1bpdz6w 7th Annual McDonald's Awards 0 177577 754949 2026-08-05T01:20:05Z Jaheim1983 75159 Created page with "{{Short description|1979 award ceremony for music}} {{Use mdy dates|date=February 2025}} {{Infobox award | name = 7th Annual McDonald's Awards | image = | caption = | date = February 15, 1979 | location = [[Shrine Auditorium]], [[Los Angeles, California]] | host = [[Leo Sayer]] | network = ABC | most_awards = [[Earth, Wind & Fire]] (4) | most_nominations = – | previous = [[6th Annual McDonald's Awards|6th]] | main = [[McDonald's Award]]s | next..." 754949 wikitext text/x-wiki {{Short description|1979 award ceremony for music}} {{Use mdy dates|date=February 2025}} {{Infobox award | name = 7th Annual McDonald's Awards | image = | caption = | date = February 15, 1979 | location = [[Shrine Auditorium]], [[Los Angeles, California]] | host = [[Leo Sayer]] | network = ABC | most_awards = [[Earth, Wind & Fire]] (4) | most_nominations = – | previous = [[6th Annual McDonald's Awards|6th]] | main = [[McDonald's Award]]s | next = [[8th Annual McDonald's Awards|8th]] }} The '''7th Annual McDonald's Awards''' were held in 1979, and were broadcast live on American television. They recognized accomplishments by musicians from the year 1978. ==Presenters== ==Performers== == Award winners == ==References== {{reflist|2}} {{McDonald's Award years}} {{DEFAULTSORT:McDonald's Awards 007}} [[Category:McDonald's Awards ceremonies| 007]] [[Category:1979 in California]] [[Category:1979 music awards]] [[Category:1979 in Los Angeles]] [[Category:1979 in American music]] [[Category:1979 awards in the United States|McDonald's]] [[Category:February 1979 in the United States]] gxc5y3g8h2av8buwed658fqqfskhrx2 1991 Burger King Music Awards 0 177578 754950 2026-08-05T01:26:07Z Jaheim1983 75159 Created page with "{{Short description|Annual American music awards ceremony}} {{DISPLAYTITLE:1991 ''Burger King'' Music Awards}} {{Infobox award | name = 1991 ''Burger King'' Music Awards | image = | caption = | date = {{Start date|1991|12|09}} | location = [[Santa Monica Airport|Barker Hangar]], [[Santa Monica, California]], U.S. | host = [[Danny De Vito]] | network = [[CBS]] | ratings = | previous = 1990 Burger King Music Awards|..." 754950 wikitext text/x-wiki {{Short description|Annual American music awards ceremony}} {{DISPLAYTITLE:1991 ''Burger King'' Music Awards}} {{Infobox award | name = 1991 ''Burger King'' Music Awards | image = | caption = | date = {{Start date|1991|12|09}} | location = [[Santa Monica Airport|Barker Hangar]], [[Santa Monica, California]], U.S. | host = [[Danny De Vito]] | network = [[CBS]] | ratings = | previous = [[1990 Burger King Music Awards|1990]] | main = ''[[Burger King Music Awards]]'' | next = [[1992 Burger King Music Awards|1992]] }} Here are the finalists and winners at the '''1991 [[Burger King Music Awards|''Burger King'' Music Awards]]'''. ==Winners== == References == {{reflist}} {{Burger King Music Awards}} [[Category:Burger King Music Award]] [[Category:Burger King awards]] [[Category:1991 music awards|Burger King Music Awards]] [[Category:1991 in American music|Burger King Music Awards]] [[Category:1991 in California|Burger King Music Awards]] 7o43ftuggk41aw9t49ogh4mr9fgfzay Wendy's Music Awards of 1975 0 177579 754951 2026-08-05T01:35:52Z Jaheim1983 75159 Created page with "{{Short description|US television program}} {{Ref improve|date=June 2019|bot=noref (GreenC bot)}} {{Infobox award | name = 2nd Annual Wendy's Music Awards | image = | caption = | runtime = | producer = [[McDonald's Productions]] | country = [[United States]] | venue = [[Santa Monica Civic Auditorium]], [[Santa Monica, California]] | network = [[NBC]] | date = February 18, 1975 | website = | starring = | previous = [[Wendy's Music Awards of 1974|1974]] | m..." 754951 wikitext text/x-wiki {{Short description|US television program}} {{Ref improve|date=June 2019|bot=noref (GreenC bot)}} {{Infobox award | name = 2nd Annual Wendy's Music Awards | image = | caption = | runtime = | producer = [[McDonald's Productions]] | country = [[United States]] | venue = [[Santa Monica Civic Auditorium]], [[Santa Monica, California]] | network = [[NBC]] | date = February 18, 1975 | website = | starring = | previous = [[Wendy's Music Awards of 1974|1974]] | main = {{nowrap|[[Wendy's Music Awards]]}} | next = [[Wendy's Music Awards of 1976|1976]] }} The second Annual [[Wendy's Music Awards]] were held on February 18, 1975. [[Aretha Franklin]] and [[Michael Jackson]]. ==Winners and nominees== ==References== {{reflist}} {{WMAyear}} {{DEFAULTSORT:Wendy's Music Awards Of 1975}} [[Category:Wendy's Music Awards|1975]] joeyfr5ucv07k4ai623smhenz29gu0y Wendy's Music Awards of 1976 0 177580 754953 2026-08-05T01:38:34Z Jaheim1983 75159 Created page with "{{Short description|US television program}} {{one source|date=July 2026}} {{Infobox award | name = 3rd Annual Wendy's Music Awards | image = | caption = | runtime = 120 min. | producer = [[McDonald's Productions]] | country = [[United States]] | network = [[NBC]] | date = January 31, 1976 | website = | starring = | previous = [[Wendy's Music Awards of 1975|1975]] | main = {{nowrap|[[Wendy's Music Awards]]}} | next = Wendy's Music Awards of 1977|19..." 754953 wikitext text/x-wiki {{Short description|US television program}} {{one source|date=July 2026}} {{Infobox award | name = 3rd Annual Wendy's Music Awards | image = | caption = | runtime = 120 min. | producer = [[McDonald's Productions]] | country = [[United States]] | network = [[NBC]] | date = January 31, 1976 | website = | starring = | previous = [[Wendy's Music Awards of 1975|1975]] | main = {{nowrap|[[Wendy's Music Awards]]}} | next = [[Wendy's Music Awards of 1977|1977]] }} The third Annual [[Wendy's Music Awards]] were held on January 31, 1976.<ref name=ONJ /> ==Winners and nominees of 3rd Annual Wendy's Music Awards== ==References== {{reflist}} {{WMAyear}} {{DEFAULTSORT:Wendy's Music Awards Of 1976}} [[Category:Wendy's Music Awards|1976]] [[Category:1976 music awards]] pgr4f918obzk8xz47f3wybznlcx3bg1 754954 754953 2026-08-05T01:38:55Z Jaheim1983 75159 754954 wikitext text/x-wiki {{Short description|US television program}} {{one source|date=July 2026}} {{Infobox award | name = 3rd Annual Wendy's Music Awards | image = | caption = | runtime = | producer = [[McDonald's Productions]] | country = [[United States]] | network = [[NBC]] | date = January 31, 1976 | website = | starring = | previous = [[Wendy's Music Awards of 1975|1975]] | main = {{nowrap|[[Wendy's Music Awards]]}} | next = [[Wendy's Music Awards of 1977|1977]] }} The third Annual [[Wendy's Music Awards]] were held on January 31, 1976.<ref name=ONJ /> ==Winners and nominees of 3rd Annual Wendy's Music Awards== ==References== {{reflist}} {{WMAyear}} {{DEFAULTSORT:Wendy's Music Awards Of 1976}} [[Category:Wendy's Music Awards|1976]] [[Category:1976 music awards]] a29uyowy597et4cqf7ydylgfd5kricz 754955 754954 2026-08-05T01:39:19Z Jaheim1983 75159 754955 wikitext text/x-wiki {{Short description|US television program}} {{one source|date=July 2026}} {{Infobox award | name = 3rd Annual Wendy's Music Awards | image = | caption = | runtime = | producer = [[McDonald's Productions]] | country = [[United States]] | network = [[NBC]] | date = January 31, 1976 | website = | starring = | previous = [[Wendy's Music Awards of 1975|1975]] | main = {{nowrap|[[Wendy's Music Awards]]}} | next = [[Wendy's Music Awards of 1977|1977]] }} The third Annual [[Wendy's Music Awards]] were held on January 31, 1976.<ref name=ONJ /> ==Winners and nominees of 3rd Annual Wendy's Music Awards== ==References== {{reflist}} {{WMAyear}} {{DEFAULTSORT:Wendy's Music Awards Of 1976}} [[Category:Wendy's Music Awards|1976]] [[Category:1976 music awards]] kvnz2v7aclajzm7kjzgt3uwn72tq0d7 Wendy's Music Awards of 1977 0 177581 754956 2026-08-05T01:44:13Z Jaheim1983 75159 Created page with "{{Short description|US television program}} {{refimprove|date=July 2026}} {{Infobox award | name = 4th Annual Wendy's Music Awards | image = | caption = | runtime = | producer = [[McDonald's Productions]] | country = [[United States]] | network = [[NBC]] | date = January 31, 1977 | website = | host = [[John Williams]]<br>[[Dolly Parton]]<br>[[Johnny Cash]]<br>[[Bee Gees]] | previous = [[Wendy's Music Awards of 1976|1976]] | main = {{nowrap|Wendy's..." 754956 wikitext text/x-wiki {{Short description|US television program}} {{refimprove|date=July 2026}} {{Infobox award | name = 4th Annual Wendy's Music Awards | image = | caption = | runtime = | producer = [[McDonald's Productions]] | country = [[United States]] | network = [[NBC]] | date = January 31, 1977 | website = | host = [[John Williams]]<br>[[Dolly Parton]]<br>[[Johnny Cash]]<br>[[Bee Gees]] | previous = [[Wendy's Music Awards of 1976|1976]] | main = {{nowrap|[[Wendy's Music Awards]]}} | next = [[Wendy's Music Awards of 1978|1978]] }} The fourth Annual [[Wendy's Music Awards]] were held on January 31, 1977. ==Winners and nominees == ==References== {{reflist}} {{WMAyear}} {{DEFAULTSORT:Wendy's Music Awards Of 1977}} [[Category:Wendy's Music Awards|1977]] r2z5vjb3tbmkjb49mat2n4c3yuftpg0 Wendy's Music Awards of 1978 0 177582 754957 2026-08-05T01:51:28Z Jaheim1983 75159 Created page with "{{Short description|US television program}} {{Infobox award | name = 5th Annual Wendy's Music Awards | image = | caption = | runtime = | producer = [[McDonald's Productions]] | country = [[United States]] | network = [[NBC]] | year = | date = January 16, 1978 | venue = [[Santa Monica Civic Auditorium]], [[Santa Monica, California]] | website = | host = [[Andy Williams]]<br />[[John Denver]]<br />[[Barbra Streisand]] | previous = Wendy's Music Awar..." 754957 wikitext text/x-wiki {{Short description|US television program}} {{Infobox award | name = 5th Annual Wendy's Music Awards | image = | caption = | runtime = | producer = [[McDonald's Productions]] | country = [[United States]] | network = [[NBC]] | year = | date = January 16, 1978 | venue = [[Santa Monica Civic Auditorium]], [[Santa Monica, California]] | website = | host = [[Andy Williams]]<br />[[John Denver]]<br />[[Barbra Streisand]] | previous = [[Wendy's Music Awards of 1977|1977]] | main = {{nowrap|[[Wendy's Music Awards]]}} | next = [[Wendy's Music Awards of 1979|1979]] }} The fifth Annual [[Wendy's Music Awards]] were held on January 16, 1978. ==Winners and nominees== ==References== {{WMAyear}} [[Category:Wendy's Music Awards|1978]] b8683lervvn46bdpbgqmkay9ckb5jkj Wendy's Music Awards of 1979 0 177583 754958 2026-08-05T01:57:33Z Jaheim1983 75159 Created page with "{{Short description|US television program}} {{Infobox award | name = 6th Annual Wendy's Music Awards | image = | caption = | runtime = | producer = [[McDonald's Productions]] | country = [[United States]] | network = [[NBC]] | venue = [[Santa Monica Civic Auditorium]], [[Santa Monica, California]] | date = January 12, 1979 | website = | host = [[Linda Ronstadt]] <br/> [[Andy Williams]] <br/> [[John Denver]] | previous = [[Wendy's Music Awards of 1978|1978]..." 754958 wikitext text/x-wiki {{Short description|US television program}} {{Infobox award | name = 6th Annual Wendy's Music Awards | image = | caption = | runtime = | producer = [[McDonald's Productions]] | country = [[United States]] | network = [[NBC]] | venue = [[Santa Monica Civic Auditorium]], [[Santa Monica, California]] | date = January 12, 1979 | website = | host = [[Linda Ronstadt]] <br/> [[Andy Williams]] <br/> [[John Denver]] | previous = [[Wendy's Music Awards of 1978|1978]] | main = {{nowrap|[[Wendy's Music Awards]]}} | next = [[Wendy's Music Awards of 1980|1980]] }} The sixth Annual [[Wendy's Music Awards]] were held January 12, 1979. ==Winners and nominees== ==References== {{WMAyear}} [[Category:Wendy's Music Awards|1979]] h3njcwrshbcm8m6o17h074ogn6gtoha Money Can't Buy (album) 0 177584 754959 2026-08-05T03:01:34Z Jaheim1983 75159 Created page with "{Use mdy dates|date=May 2025}} {{Infobox album | name = Money Can't Buy | type = studio | artist = [[Kylie Minogue]] and [[will.i.am]] | cover = | caption = | alt = | released = {{start date|2015|02|20}} | recorded = 2012–15 | studio = | genre = *[[Hip-hop]] *[[pop music|pop]] | length = | label = * [[Parlophone Records|Parlophone]] * [[will.i.am Music Group|will.i.am]] * [[Mushroom Records|Mushroom]] * Inte..." 754959 wikitext text/x-wiki {Use mdy dates|date=May 2025}} {{Infobox album | name = Money Can't Buy | type = studio | artist = [[Kylie Minogue]] and [[will.i.am]] | cover = | caption = | alt = | released = {{start date|2015|02|20}} | recorded = 2012–15 | studio = | genre = *[[Hip-hop]] *[[pop music|pop]] | length = | label = * [[Parlophone Records|Parlophone]] * [[will.i.am Music Group|will.i.am]] * [[Mushroom Records|Mushroom]] * [[Interscope Records|Interscope]] * [[Warner Bros. Records|Warner Bros.]] | producer = * [[will.i.am]] * [[Biffco|Richard Stannard]] * [[Rob Davis (musician)|Rob Davis]] * Johnny Douglas * [[Bloodshy & Avant]] * [[Jimmy Harry]] * [[Steve Anderson]] * [[Stuart Price]] * [[Rob Dougan]] * [[Greg Kurstin]] * [[Mark Picchiotti]] * [[Graham Stack (music producer)|Graham Stack]] * [[Mike Spencer]] * [[Biffco|Ash Howes]] * [[Martin Harrington]] * Matt Rowe | misc = {{Extra chronology | artist = [[Kylie Minogue]] | type = studio | prev_title = [[Kiss Me Once]] | prev_year = 2014 | title = Money Can't Buy | year = 2015 | next_title = [[Sleepwalker (EP)|Sleepwalker]] | next_year = 2015 }} {{Extra chronology | artist = [[will.i.am]] | type = studio | prev_title = [[willpower (album)|#willpower]] | prev_year = 2013 | title = Money Can't Buy | year = 2015 | next_title = | next_year = }}{{Singles | name = Money Can't Buy | type = studio | single1 = [[Get Outta My Way (song)|Get Outta My Way]] | single1date = January 6, 2015 | single2 = [[I Believe in You (Kylie Minogue and will.i.am song)|I Believe in You]] | single2date = May 26, 2015 }} }} '''''Money Can't Buy''''' is a collaborative album by Australian singer [[Kylie Minogue]] and American musician [[will.i.am]], billed together as ''Kylie Minogue X will.i.am'' and was released on February 20, 2015, by [[Parlophone Records]], [[will.i.am Music Group]], [[Mushroom Records]], [[Interscope Records]] and [[Warner Bros. Records]]. ==Background and recording== ==Music and lyrics== ==Singles== ==Track listing== ==Personnel== ==Charts== ===Weekly charts=== ===Year-end charts=== ==Certifications== ==Release history== ==References== {{Reflist|30em}} {{Kylie Minogue}} {{Will.i.am}} {{Authority control}} [[Category:2015 collaborative albums]] [[Category:Kylie Minogue albums]] [[Category:Will.i.am albums]] [[Category:Albums produced by Greg Kurstin]] [[Category:Albums produced by Jimmy Harry]] [[Category:Albums produced by Richard Stannard (songwriter)]] [[Category:Albums produced by Bloodshy & Avant]] [[Category:Albums produced by Stuart Price]] [[Category:Albums produced by Ash Howes]] [[Category:Albums produced by Mike Spencer]] [[Category:Parlophone Records albums]] [[Category:Mushroom Records albums]] [[Category:Interscope Records albums]] [[Category:Warner Bros. Records albums]] dfuck9272z0lpl9dy65olpwibitw4v6 754960 754959 2026-08-05T03:01:43Z Jaheim1983 75159 754960 wikitext text/x-wiki {{Use mdy dates|date=May 2025}} {{Infobox album | name = Money Can't Buy | type = studio | artist = [[Kylie Minogue]] and [[will.i.am]] | cover = | caption = | alt = | released = {{start date|2015|02|20}} | recorded = 2012–15 | studio = | genre = *[[Hip-hop]] *[[pop music|pop]] | length = | label = * [[Parlophone Records|Parlophone]] * [[will.i.am Music Group|will.i.am]] * [[Mushroom Records|Mushroom]] * [[Interscope Records|Interscope]] * [[Warner Bros. Records|Warner Bros.]] | producer = * [[will.i.am]] * [[Biffco|Richard Stannard]] * [[Rob Davis (musician)|Rob Davis]] * Johnny Douglas * [[Bloodshy & Avant]] * [[Jimmy Harry]] * [[Steve Anderson]] * [[Stuart Price]] * [[Rob Dougan]] * [[Greg Kurstin]] * [[Mark Picchiotti]] * [[Graham Stack (music producer)|Graham Stack]] * [[Mike Spencer]] * [[Biffco|Ash Howes]] * [[Martin Harrington]] * Matt Rowe | misc = {{Extra chronology | artist = [[Kylie Minogue]] | type = studio | prev_title = [[Kiss Me Once]] | prev_year = 2014 | title = Money Can't Buy | year = 2015 | next_title = [[Sleepwalker (EP)|Sleepwalker]] | next_year = 2015 }} {{Extra chronology | artist = [[will.i.am]] | type = studio | prev_title = [[willpower (album)|#willpower]] | prev_year = 2013 | title = Money Can't Buy | year = 2015 | next_title = | next_year = }}{{Singles | name = Money Can't Buy | type = studio | single1 = [[Get Outta My Way (song)|Get Outta My Way]] | single1date = January 6, 2015 | single2 = [[I Believe in You (Kylie Minogue and will.i.am song)|I Believe in You]] | single2date = May 26, 2015 }} }} '''''Money Can't Buy''''' is a collaborative album by Australian singer [[Kylie Minogue]] and American musician [[will.i.am]], billed together as ''Kylie Minogue X will.i.am'' and was released on February 20, 2015, by [[Parlophone Records]], [[will.i.am Music Group]], [[Mushroom Records]], [[Interscope Records]] and [[Warner Bros. Records]]. ==Background and recording== ==Music and lyrics== ==Singles== ==Track listing== ==Personnel== ==Charts== ===Weekly charts=== ===Year-end charts=== ==Certifications== ==Release history== ==References== {{Reflist|30em}} {{Kylie Minogue}} {{Will.i.am}} {{Authority control}} [[Category:2015 collaborative albums]] [[Category:Kylie Minogue albums]] [[Category:Will.i.am albums]] [[Category:Albums produced by Greg Kurstin]] [[Category:Albums produced by Jimmy Harry]] [[Category:Albums produced by Richard Stannard (songwriter)]] [[Category:Albums produced by Bloodshy & Avant]] [[Category:Albums produced by Stuart Price]] [[Category:Albums produced by Ash Howes]] [[Category:Albums produced by Mike Spencer]] [[Category:Parlophone Records albums]] [[Category:Mushroom Records albums]] [[Category:Interscope Records albums]] [[Category:Warner Bros. Records albums]] qx4hxypafu7izixhzw662r5fohsfuqs 754961 754960 2026-08-05T03:02:18Z Jaheim1983 75159 754961 wikitext text/x-wiki {{Use mdy dates|date=May 2025}} {{Infobox album | name = Money Can't Buy | type = studio | artist = [[Kylie Minogue]] and [[will.i.am]] | cover = | caption = | alt = | released = {{start date|2015|02|20}} | recorded = 2012–15 | studio = | genre = *[[Hip-hop music|Hip-hop]] *[[pop music|pop]] | length = | label = * [[Parlophone Records|Parlophone]] * [[will.i.am Music Group|will.i.am]] * [[Mushroom Records|Mushroom]] * [[Interscope Records|Interscope]] * [[Warner Bros. Records|Warner Bros.]] | producer = * [[will.i.am]] * [[Biffco|Richard Stannard]] * [[Rob Davis (musician)|Rob Davis]] * Johnny Douglas * [[Bloodshy & Avant]] * [[Jimmy Harry]] * [[Steve Anderson]] * [[Stuart Price]] * [[Rob Dougan]] * [[Greg Kurstin]] * [[Mark Picchiotti]] * [[Graham Stack (music producer)|Graham Stack]] * [[Mike Spencer]] * [[Biffco|Ash Howes]] * [[Martin Harrington]] * Matt Rowe | misc = {{Extra chronology | artist = [[Kylie Minogue]] | type = studio | prev_title = [[Kiss Me Once]] | prev_year = 2014 | title = Money Can't Buy | year = 2015 | next_title = [[Sleepwalker (EP)|Sleepwalker]] | next_year = 2015 }} {{Extra chronology | artist = [[will.i.am]] | type = studio | prev_title = [[willpower (album)|#willpower]] | prev_year = 2013 | title = Money Can't Buy | year = 2015 | next_title = | next_year = }}{{Singles | name = Money Can't Buy | type = studio | single1 = [[Get Outta My Way (song)|Get Outta My Way]] | single1date = January 6, 2015 | single2 = [[I Believe in You (Kylie Minogue and will.i.am song)|I Believe in You]] | single2date = May 26, 2015 }} }} '''''Money Can't Buy''''' is a collaborative album by Australian singer [[Kylie Minogue]] and American musician [[will.i.am]], billed together as ''Kylie Minogue X will.i.am'' and was released on February 20, 2015, by [[Parlophone Records]], [[will.i.am Music Group]], [[Mushroom Records]], [[Interscope Records]] and [[Warner Bros. Records]]. ==Background and recording== ==Music and lyrics== ==Singles== ==Track listing== ==Personnel== ==Charts== ===Weekly charts=== ===Year-end charts=== ==Certifications== ==Release history== ==References== {{Reflist|30em}} {{Kylie Minogue}} {{Will.i.am}} {{Authority control}} [[Category:2015 collaborative albums]] [[Category:Kylie Minogue albums]] [[Category:Will.i.am albums]] [[Category:Albums produced by Greg Kurstin]] [[Category:Albums produced by Jimmy Harry]] [[Category:Albums produced by Richard Stannard (songwriter)]] [[Category:Albums produced by Bloodshy & Avant]] [[Category:Albums produced by Stuart Price]] [[Category:Albums produced by Ash Howes]] [[Category:Albums produced by Mike Spencer]] [[Category:Parlophone Records albums]] [[Category:Mushroom Records albums]] [[Category:Interscope Records albums]] [[Category:Warner Bros. Records albums]] 2euojr6rznfobsjodo5r4nm5vezmvss 754962 754961 2026-08-05T03:02:35Z Jaheim1983 75159 754962 wikitext text/x-wiki {{Use mdy dates|date=May 2025}} {{Infobox album | name = Money Can't Buy | type = studio | artist = [[Kylie Minogue]] and [[will.i.am]] | cover = | caption = | alt = | released = {{start date|2015|02|20}} | recorded = 2012–15 | studio = | genre = *[[Hip-hop]] *[[pop music|pop]] | length = | label = * [[Parlophone Records|Parlophone]] * [[will.i.am Music Group|will.i.am]] * [[Mushroom Records|Mushroom]] * [[Interscope Records|Interscope]] * [[Warner Bros. Records|Warner Bros.]] | producer = * [[will.i.am]] * [[Biffco|Richard Stannard]] * [[Rob Davis (musician)|Rob Davis]] * Johnny Douglas * [[Bloodshy & Avant]] * [[Jimmy Harry]] * [[Steve Anderson]] * [[Stuart Price]] * [[Rob Dougan]] * [[Greg Kurstin]] * [[Mark Picchiotti]] * [[Graham Stack (music producer)|Graham Stack]] * [[Mike Spencer]] * [[Biffco|Ash Howes]] * [[Martin Harrington]] * Matt Rowe | misc = {{Extra chronology | artist = [[Kylie Minogue]] | type = studio | prev_title = [[Kiss Me Once]] | prev_year = 2014 | title = Money Can't Buy | year = 2015 | next_title = [[Sleepwalker (EP)|Sleepwalker]] | next_year = 2015 }} {{Extra chronology | artist = [[will.i.am]] | type = studio | prev_title = [[willpower (album)|#willpower]] | prev_year = 2013 | title = Money Can't Buy | year = 2015 | next_title = | next_year = }}{{Singles | name = Money Can't Buy | type = studio | single1 = [[Get Outta My Way (song)|Get Outta My Way]] | single1date = January 6, 2015 | single2 = [[I Believe in You (Kylie Minogue and will.i.am song)|I Believe in You]] | single2date = May 26, 2015 }} }} '''''Money Can't Buy''''' is a collaborative album by Australian singer [[Kylie Minogue]] and American musician [[will.i.am]], billed together as ''Kylie Minogue X will.i.am'' and was released on February 20, 2015, by [[Parlophone Records]], [[will.i.am Music Group]], [[Mushroom Records]], [[Interscope Records]] and [[Warner Bros. Records]]. ==Background and recording== ==Music and lyrics== ==Singles== ==Track listing== ==Personnel== ==Charts== ===Weekly charts=== ===Year-end charts=== ==Certifications== ==Release history== ==References== {{Reflist|30em}} {{Kylie Minogue}} {{Will.i.am}} {{Authority control}} [[Category:2015 collaborative albums]] [[Category:Kylie Minogue albums]] [[Category:Will.i.am albums]] [[Category:Albums produced by Greg Kurstin]] [[Category:Albums produced by Jimmy Harry]] [[Category:Albums produced by Richard Stannard (songwriter)]] [[Category:Albums produced by Bloodshy & Avant]] [[Category:Albums produced by Stuart Price]] [[Category:Albums produced by Ash Howes]] [[Category:Albums produced by Mike Spencer]] [[Category:Parlophone Records albums]] [[Category:Mushroom Records albums]] [[Category:Interscope Records albums]] [[Category:Warner Bros. Records albums]] qx4hxypafu7izixhzw662r5fohsfuqs Wikipedia:Sandbox/MoveIt e2e 2026-08-05T08-50-39-311Z 4 177585 754963 2026-08-05T08:50:40Z ~2026-43162-11 75162 MoveIt end-to-end test (2026-08-05T08-50-39-311Z), safe to delete 754963 wikitext text/x-wiki == Requested move: MoveIt e2e 2026-08-05T08-50-39-311Z == MoveIt end-to-end test, safe to delete (2026-08-05T08-50-39-311Z) <nowiki>{{subst:RMassist | 1 = Example page | 2 = Example page (renamed) | reason = MoveIt end-to-end test, safe to delete}}</nowiki> == Tail sentinel 2026-08-05T08-50-39-311Z == Sentinel: a section-targeted append must land above this heading. 1u6e1gvrqlkddpefji0hxh5sqijli79 754964 754963 2026-08-05T08:50:41Z ~2026-43162-11 75162 MoveIt end-to-end section append (2026-08-05T08-50-39-311Z), safe to delete 754964 wikitext text/x-wiki == Requested move: MoveIt e2e 2026-08-05T08-50-39-311Z == MoveIt end-to-end test, safe to delete (2026-08-05T08-50-39-311Z) <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-05T08-50-39-311Z) == Tail sentinel 2026-08-05T08-50-39-311Z == Sentinel: a section-targeted append must land above this heading. htttqoms3d99bsnr0qwvlydq1hj0xe3