Wikipedia
testwiki
https://test.wikipedia.org/wiki/Main_Page
MediaWiki 1.47.0-wmf.18
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
Package
Package talk
CNBanner
CNBanner talk
Translations
Translations talk
Event
Event talk
Topic
Newsletter
Newsletter talk
Wikipedia:Test
4
71460
759897
759849
2026-09-01T22:40:16Z
Rosetvrnip
75253
/* Test */ Start
759897
wikitext
text/x-wiki
= Test =
901
Candy Crush Saga Wiki: Tasty Sugar Track Edits Is Out Of Control and continue until the 24 Restriction until no edits made all day, Most Edits made on 6/23, No New Episodes Released on 6/24.
2:6 — 8:18, 194 days, (8:19+ to fill out).
*8:19, 8:20, 8:21, 8:22, 8:23 (?)
*8:24 (?)
*8:25 (?)
*8:26 (?)
*8:27 (?)
*8:28 (?)
*8:29 (8:30)
''8:31''
*202 6525, Pot with Fork and Spoon, Bags with Sunglasses.
*202 6526, Baskets, Tobacco Stuff or Socks.
*202 6527, Food Shopping like Cola Bottles, Cans, Cordial and Others.
*202 6528, Socks, Pairs of Shoes, Dressing Gowns.
*202 6529, Towels, Cubes with Things.
*202 6530, Cloths, Flowers Frisun or Soap.
*202 6531, Food Shopping like Party Pies, Waters and Others.
*202 6601, Pairs of Boots, Pillow or Podiatrist.
*202 6602, Plates or Pans, Grated Cheese or Baskets.
*202 6603, Forks, Pans and Other Kitchen Tools.
*202 6604, Cups, Cordial Jug or Strawberry Milk.
*202 6605, Food Shopping like Cans of Coca Cola, Waters, Cordials or Pile of Sauce.
*202 6606, Purses, Lu Papers or Paper Towels.
*202 6607, Candles, Statues or Pizza Boxes.
*202 6608, Cups, Blankets and Others.
*202 6609, Food Shoppibg like Cola Bottles, Sour Cream and Onion Chips or Cans.
*202 6610, Towels, Cloths, Soap or Containers.
*202 6611, Nachos, Apple N Raspberry Codrial or Stationary.
*202 6612, Basket, Electric Bed with Instructions or Paint.
*202 6613, Aerobar, Birthday Cake or Packet of Candles.
*202 6614, Plates, Blankets or even Vacuum Cleaner.
*202 6615, Towels, Cloths or Dressing Gowns.
*202 6616, Smiths Chips, Heater Vents, Stuff for Lasagna or Cloths.
*202 6617, Pans, Table Spoons or Lids.
*202 6618, Food Shopping like Cans of Coca Cola, Waters, Milk and Others.
*202 6619, Chocolate Milk, Cups of Tea or Extra Mints.
*202 6620, Kitkats, Pens or Domino's Pizza.
*202 6621, Blankets and Pillows or Vacuum Cleaner.
*202 6622, Tea Towels, Cans of Coca Cola or Carlton Draught.
*202 6623, Food Shopping like Bottles of Cola, Waters or New Pyjamas.
*202 6624, Staples, Socks, Hats and Others.
*202 6625, Kitchen Bowls, Pans and Others.
*202 6626, Food Shopping like Colas, Milk or Rainbow Paddlepop.
*202 6627, Tablemats, Sunglasses or Garden Plant.
*202 6628, Boots, Sleep Medicine or Pillow.
*202 6629, Sewing Machine, Tobacco Stuff or Pan.
*202 6630, Food Shopping like Cans of Cocacola, Bottles, Kitkat or M&Ms.
*202 6701, BBQ Chips, Biskits or Grated Cheese.
*202 6702, Lighters, Plates or Cloths.
*202 6703, Hot Dogs, Cola Cans or Lasagna.
*202 6704, Mop, Battery Packs or Doorhandle.
*202 6705, Video Cameras, Internet or McDonalds Bag?.
*202 6706, Pans, Freshmint, or Hotdog Roll.
*202 6707, Food Shopping like Cans of Coca Cola, Cola Bottles, Waters, Shopping Bag or Grated Cheese.
*202 6708, Ktimes, Nutrigrain or Mueslibars.
*202 6709, Saladas, Socks, Vegemite or Textures.
*202 6710, Baskets, Favourites or Cordial Jug.
*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?.
*202 6716, Soaps, Toothpastes, Cotton Buds and Others.
*202 6717, Cans of Coca Cola, Bottles, Waters, Novo Shoes and Others.
*202 6718, Food Shopping like Upngo, Breads or Cans of Coca Cola.
*202 6719, Quichebox, Plate or Cup or Cheese Machine.
*202 6720, Cups, Milkshakes, Jug or Can of Coca Cola?.
*202 6721, Baskets, Coathangers, Chocolate Milk or Frypan?.
*202 6722, Food Shopping like Cola Bottles, Waters, Milk or Nachos?
*202 6723, Slippers, Blanket Sheets, Clothes Pair and Others.
*202 6724, Pans, Plates, Scissors or Tools.
*202 6725, Aldi Stuff, Domino's Pizza or Lynxspray.
*202 6726, Towels, Lighter or Journal Books.
*202 6727, Food Shopping like Bottles of Cola or Water, Cans or Milk.
*202 6728, Baskets, Battery Packs or Vaporizer and Others.
*202 6729, Sleep Medicines, Deep Heat or Pillows.
*202 6730, Schnitzels, Nesquiks, Milos and Others.
*202 6731, Toothpicks and Nuts and Others.
*202 6801, Food Shopping like Bottles, Cans, Waters and Others.
*202 6802, Plates, Bowls or Battery Packs.
*202 6803, Towels, Blankets, Purse or Boots.
*202 6804, M&M's, Baskets, Cloths or Coathangers.
*202 6805, Boots, Leaves, Texture and Others.
*202 6806, Food Shopping like Cans of Coca Cola, Nachos, Cheese or Milk.
*202 6807, Dressing Gowns, Glasses or Pillows.
*202 6808, Grater Cheese, Pizza, Mat or Plate.
*202 6809, Stylus, Mask, Soaps and Others.
*202 6810, Paper Towels, Staples, Lighter and Others.
*202 6811, Baskets, Cans of Coca Cola or Biskit Shapes.
*202 6812, Blackngold Cola, Blankets or Chocolatebox.
*202 6813, Smiths Chips, Cheese Mozarella or Bread.
*202 6814, Textures, Pens or Basket and Others.
*202 6815, Smoothies, Toys, Chopping Board or Box.
*202 6816, Cups like Gold, Cup of Tea, Metal Bottle and Others.
Current, 202 6817. ($#!+).
*202 6818. (Rare, Unique or Unisex Names).
''2026819''
pdujysve9uq89ps8r144cm5knqc7xnd
759898
759897
2026-09-01T22:40:41Z
Rosetvrnip
75253
759898
wikitext
text/x-wiki
= Test =
901 - Vacant
Candy Crush Saga Wiki: Tasty Sugar Track Edits Is Out Of Control and continue until the 24 Restriction until no edits made all day, Most Edits made on 6/23, No New Episodes Released on 6/24.
2:6 — 8:18, 194 days, (8:19+ to fill out).
*8:19, 8:20, 8:21, 8:22, 8:23 (?)
*8:24 (?)
*8:25 (?)
*8:26 (?)
*8:27 (?)
*8:28 (?)
*8:29 (8:30)
''8:31''
*202 6525, Pot with Fork and Spoon, Bags with Sunglasses.
*202 6526, Baskets, Tobacco Stuff or Socks.
*202 6527, Food Shopping like Cola Bottles, Cans, Cordial and Others.
*202 6528, Socks, Pairs of Shoes, Dressing Gowns.
*202 6529, Towels, Cubes with Things.
*202 6530, Cloths, Flowers Frisun or Soap.
*202 6531, Food Shopping like Party Pies, Waters and Others.
*202 6601, Pairs of Boots, Pillow or Podiatrist.
*202 6602, Plates or Pans, Grated Cheese or Baskets.
*202 6603, Forks, Pans and Other Kitchen Tools.
*202 6604, Cups, Cordial Jug or Strawberry Milk.
*202 6605, Food Shopping like Cans of Coca Cola, Waters, Cordials or Pile of Sauce.
*202 6606, Purses, Lu Papers or Paper Towels.
*202 6607, Candles, Statues or Pizza Boxes.
*202 6608, Cups, Blankets and Others.
*202 6609, Food Shoppibg like Cola Bottles, Sour Cream and Onion Chips or Cans.
*202 6610, Towels, Cloths, Soap or Containers.
*202 6611, Nachos, Apple N Raspberry Codrial or Stationary.
*202 6612, Basket, Electric Bed with Instructions or Paint.
*202 6613, Aerobar, Birthday Cake or Packet of Candles.
*202 6614, Plates, Blankets or even Vacuum Cleaner.
*202 6615, Towels, Cloths or Dressing Gowns.
*202 6616, Smiths Chips, Heater Vents, Stuff for Lasagna or Cloths.
*202 6617, Pans, Table Spoons or Lids.
*202 6618, Food Shopping like Cans of Coca Cola, Waters, Milk and Others.
*202 6619, Chocolate Milk, Cups of Tea or Extra Mints.
*202 6620, Kitkats, Pens or Domino's Pizza.
*202 6621, Blankets and Pillows or Vacuum Cleaner.
*202 6622, Tea Towels, Cans of Coca Cola or Carlton Draught.
*202 6623, Food Shopping like Bottles of Cola, Waters or New Pyjamas.
*202 6624, Staples, Socks, Hats and Others.
*202 6625, Kitchen Bowls, Pans and Others.
*202 6626, Food Shopping like Colas, Milk or Rainbow Paddlepop.
*202 6627, Tablemats, Sunglasses or Garden Plant.
*202 6628, Boots, Sleep Medicine or Pillow.
*202 6629, Sewing Machine, Tobacco Stuff or Pan.
*202 6630, Food Shopping like Cans of Cocacola, Bottles, Kitkat or M&Ms.
*202 6701, BBQ Chips, Biskits or Grated Cheese.
*202 6702, Lighters, Plates or Cloths.
*202 6703, Hot Dogs, Cola Cans or Lasagna.
*202 6704, Mop, Battery Packs or Doorhandle.
*202 6705, Video Cameras, Internet or McDonalds Bag?.
*202 6706, Pans, Freshmint, or Hotdog Roll.
*202 6707, Food Shopping like Cans of Coca Cola, Cola Bottles, Waters, Shopping Bag or Grated Cheese.
*202 6708, Ktimes, Nutrigrain or Mueslibars.
*202 6709, Saladas, Socks, Vegemite or Textures.
*202 6710, Baskets, Favourites or Cordial Jug.
*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?.
*202 6716, Soaps, Toothpastes, Cotton Buds and Others.
*202 6717, Cans of Coca Cola, Bottles, Waters, Novo Shoes and Others.
*202 6718, Food Shopping like Upngo, Breads or Cans of Coca Cola.
*202 6719, Quichebox, Plate or Cup or Cheese Machine.
*202 6720, Cups, Milkshakes, Jug or Can of Coca Cola?.
*202 6721, Baskets, Coathangers, Chocolate Milk or Frypan?.
*202 6722, Food Shopping like Cola Bottles, Waters, Milk or Nachos?
*202 6723, Slippers, Blanket Sheets, Clothes Pair and Others.
*202 6724, Pans, Plates, Scissors or Tools.
*202 6725, Aldi Stuff, Domino's Pizza or Lynxspray.
*202 6726, Towels, Lighter or Journal Books.
*202 6727, Food Shopping like Bottles of Cola or Water, Cans or Milk.
*202 6728, Baskets, Battery Packs or Vaporizer and Others.
*202 6729, Sleep Medicines, Deep Heat or Pillows.
*202 6730, Schnitzels, Nesquiks, Milos and Others.
*202 6731, Toothpicks and Nuts and Others.
*202 6801, Food Shopping like Bottles, Cans, Waters and Others.
*202 6802, Plates, Bowls or Battery Packs.
*202 6803, Towels, Blankets, Purse or Boots.
*202 6804, M&M's, Baskets, Cloths or Coathangers.
*202 6805, Boots, Leaves, Texture and Others.
*202 6806, Food Shopping like Cans of Coca Cola, Nachos, Cheese or Milk.
*202 6807, Dressing Gowns, Glasses or Pillows.
*202 6808, Grater Cheese, Pizza, Mat or Plate.
*202 6809, Stylus, Mask, Soaps and Others.
*202 6810, Paper Towels, Staples, Lighter and Others.
*202 6811, Baskets, Cans of Coca Cola or Biskit Shapes.
*202 6812, Blackngold Cola, Blankets or Chocolatebox.
*202 6813, Smiths Chips, Cheese Mozarella or Bread.
*202 6814, Textures, Pens or Basket and Others.
*202 6815, Smoothies, Toys, Chopping Board or Box.
*202 6816, Cups like Gold, Cup of Tea, Metal Bottle and Others.
Current, 202 6817. ($#!+).
*202 6818. (Rare, Unique or Unisex Names).
''2026819''
56qa9nfmnecyg4y8n7gscjv3eebam8c
759899
759898
2026-09-01T22:40:47Z
Rosetvrnip
75253
759899
wikitext
text/x-wiki
= Test =
901 - Vacant Land
Candy Crush Saga Wiki: Tasty Sugar Track Edits Is Out Of Control and continue until the 24 Restriction until no edits made all day, Most Edits made on 6/23, No New Episodes Released on 6/24.
2:6 — 8:18, 194 days, (8:19+ to fill out).
*8:19, 8:20, 8:21, 8:22, 8:23 (?)
*8:24 (?)
*8:25 (?)
*8:26 (?)
*8:27 (?)
*8:28 (?)
*8:29 (8:30)
''8:31''
*202 6525, Pot with Fork and Spoon, Bags with Sunglasses.
*202 6526, Baskets, Tobacco Stuff or Socks.
*202 6527, Food Shopping like Cola Bottles, Cans, Cordial and Others.
*202 6528, Socks, Pairs of Shoes, Dressing Gowns.
*202 6529, Towels, Cubes with Things.
*202 6530, Cloths, Flowers Frisun or Soap.
*202 6531, Food Shopping like Party Pies, Waters and Others.
*202 6601, Pairs of Boots, Pillow or Podiatrist.
*202 6602, Plates or Pans, Grated Cheese or Baskets.
*202 6603, Forks, Pans and Other Kitchen Tools.
*202 6604, Cups, Cordial Jug or Strawberry Milk.
*202 6605, Food Shopping like Cans of Coca Cola, Waters, Cordials or Pile of Sauce.
*202 6606, Purses, Lu Papers or Paper Towels.
*202 6607, Candles, Statues or Pizza Boxes.
*202 6608, Cups, Blankets and Others.
*202 6609, Food Shoppibg like Cola Bottles, Sour Cream and Onion Chips or Cans.
*202 6610, Towels, Cloths, Soap or Containers.
*202 6611, Nachos, Apple N Raspberry Codrial or Stationary.
*202 6612, Basket, Electric Bed with Instructions or Paint.
*202 6613, Aerobar, Birthday Cake or Packet of Candles.
*202 6614, Plates, Blankets or even Vacuum Cleaner.
*202 6615, Towels, Cloths or Dressing Gowns.
*202 6616, Smiths Chips, Heater Vents, Stuff for Lasagna or Cloths.
*202 6617, Pans, Table Spoons or Lids.
*202 6618, Food Shopping like Cans of Coca Cola, Waters, Milk and Others.
*202 6619, Chocolate Milk, Cups of Tea or Extra Mints.
*202 6620, Kitkats, Pens or Domino's Pizza.
*202 6621, Blankets and Pillows or Vacuum Cleaner.
*202 6622, Tea Towels, Cans of Coca Cola or Carlton Draught.
*202 6623, Food Shopping like Bottles of Cola, Waters or New Pyjamas.
*202 6624, Staples, Socks, Hats and Others.
*202 6625, Kitchen Bowls, Pans and Others.
*202 6626, Food Shopping like Colas, Milk or Rainbow Paddlepop.
*202 6627, Tablemats, Sunglasses or Garden Plant.
*202 6628, Boots, Sleep Medicine or Pillow.
*202 6629, Sewing Machine, Tobacco Stuff or Pan.
*202 6630, Food Shopping like Cans of Cocacola, Bottles, Kitkat or M&Ms.
*202 6701, BBQ Chips, Biskits or Grated Cheese.
*202 6702, Lighters, Plates or Cloths.
*202 6703, Hot Dogs, Cola Cans or Lasagna.
*202 6704, Mop, Battery Packs or Doorhandle.
*202 6705, Video Cameras, Internet or McDonalds Bag?.
*202 6706, Pans, Freshmint, or Hotdog Roll.
*202 6707, Food Shopping like Cans of Coca Cola, Cola Bottles, Waters, Shopping Bag or Grated Cheese.
*202 6708, Ktimes, Nutrigrain or Mueslibars.
*202 6709, Saladas, Socks, Vegemite or Textures.
*202 6710, Baskets, Favourites or Cordial Jug.
*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?.
*202 6716, Soaps, Toothpastes, Cotton Buds and Others.
*202 6717, Cans of Coca Cola, Bottles, Waters, Novo Shoes and Others.
*202 6718, Food Shopping like Upngo, Breads or Cans of Coca Cola.
*202 6719, Quichebox, Plate or Cup or Cheese Machine.
*202 6720, Cups, Milkshakes, Jug or Can of Coca Cola?.
*202 6721, Baskets, Coathangers, Chocolate Milk or Frypan?.
*202 6722, Food Shopping like Cola Bottles, Waters, Milk or Nachos?
*202 6723, Slippers, Blanket Sheets, Clothes Pair and Others.
*202 6724, Pans, Plates, Scissors or Tools.
*202 6725, Aldi Stuff, Domino's Pizza or Lynxspray.
*202 6726, Towels, Lighter or Journal Books.
*202 6727, Food Shopping like Bottles of Cola or Water, Cans or Milk.
*202 6728, Baskets, Battery Packs or Vaporizer and Others.
*202 6729, Sleep Medicines, Deep Heat or Pillows.
*202 6730, Schnitzels, Nesquiks, Milos and Others.
*202 6731, Toothpicks and Nuts and Others.
*202 6801, Food Shopping like Bottles, Cans, Waters and Others.
*202 6802, Plates, Bowls or Battery Packs.
*202 6803, Towels, Blankets, Purse or Boots.
*202 6804, M&M's, Baskets, Cloths or Coathangers.
*202 6805, Boots, Leaves, Texture and Others.
*202 6806, Food Shopping like Cans of Coca Cola, Nachos, Cheese or Milk.
*202 6807, Dressing Gowns, Glasses or Pillows.
*202 6808, Grater Cheese, Pizza, Mat or Plate.
*202 6809, Stylus, Mask, Soaps and Others.
*202 6810, Paper Towels, Staples, Lighter and Others.
*202 6811, Baskets, Cans of Coca Cola or Biskit Shapes.
*202 6812, Blackngold Cola, Blankets or Chocolatebox.
*202 6813, Smiths Chips, Cheese Mozarella or Bread.
*202 6814, Textures, Pens or Basket and Others.
*202 6815, Smoothies, Toys, Chopping Board or Box.
*202 6816, Cups like Gold, Cup of Tea, Metal Bottle and Others.
Current, 202 6817. ($#!+).
*202 6818. (Rare, Unique or Unisex Names).
''2026819''
ag1dbeci3w689a3e7nusjkjqmrzng0c
759900
759899
2026-09-01T22:40:57Z
Rosetvrnip
75253
759900
wikitext
text/x-wiki
= Test =
901 - Vacant Land (61 Hume Avenue)
Candy Crush Saga Wiki: Tasty Sugar Track Edits Is Out Of Control and continue until the 24 Restriction until no edits made all day, Most Edits made on 6/23, No New Episodes Released on 6/24.
2:6 — 8:18, 194 days, (8:19+ to fill out).
*8:19, 8:20, 8:21, 8:22, 8:23 (?)
*8:24 (?)
*8:25 (?)
*8:26 (?)
*8:27 (?)
*8:28 (?)
*8:29 (8:30)
''8:31''
*202 6525, Pot with Fork and Spoon, Bags with Sunglasses.
*202 6526, Baskets, Tobacco Stuff or Socks.
*202 6527, Food Shopping like Cola Bottles, Cans, Cordial and Others.
*202 6528, Socks, Pairs of Shoes, Dressing Gowns.
*202 6529, Towels, Cubes with Things.
*202 6530, Cloths, Flowers Frisun or Soap.
*202 6531, Food Shopping like Party Pies, Waters and Others.
*202 6601, Pairs of Boots, Pillow or Podiatrist.
*202 6602, Plates or Pans, Grated Cheese or Baskets.
*202 6603, Forks, Pans and Other Kitchen Tools.
*202 6604, Cups, Cordial Jug or Strawberry Milk.
*202 6605, Food Shopping like Cans of Coca Cola, Waters, Cordials or Pile of Sauce.
*202 6606, Purses, Lu Papers or Paper Towels.
*202 6607, Candles, Statues or Pizza Boxes.
*202 6608, Cups, Blankets and Others.
*202 6609, Food Shoppibg like Cola Bottles, Sour Cream and Onion Chips or Cans.
*202 6610, Towels, Cloths, Soap or Containers.
*202 6611, Nachos, Apple N Raspberry Codrial or Stationary.
*202 6612, Basket, Electric Bed with Instructions or Paint.
*202 6613, Aerobar, Birthday Cake or Packet of Candles.
*202 6614, Plates, Blankets or even Vacuum Cleaner.
*202 6615, Towels, Cloths or Dressing Gowns.
*202 6616, Smiths Chips, Heater Vents, Stuff for Lasagna or Cloths.
*202 6617, Pans, Table Spoons or Lids.
*202 6618, Food Shopping like Cans of Coca Cola, Waters, Milk and Others.
*202 6619, Chocolate Milk, Cups of Tea or Extra Mints.
*202 6620, Kitkats, Pens or Domino's Pizza.
*202 6621, Blankets and Pillows or Vacuum Cleaner.
*202 6622, Tea Towels, Cans of Coca Cola or Carlton Draught.
*202 6623, Food Shopping like Bottles of Cola, Waters or New Pyjamas.
*202 6624, Staples, Socks, Hats and Others.
*202 6625, Kitchen Bowls, Pans and Others.
*202 6626, Food Shopping like Colas, Milk or Rainbow Paddlepop.
*202 6627, Tablemats, Sunglasses or Garden Plant.
*202 6628, Boots, Sleep Medicine or Pillow.
*202 6629, Sewing Machine, Tobacco Stuff or Pan.
*202 6630, Food Shopping like Cans of Cocacola, Bottles, Kitkat or M&Ms.
*202 6701, BBQ Chips, Biskits or Grated Cheese.
*202 6702, Lighters, Plates or Cloths.
*202 6703, Hot Dogs, Cola Cans or Lasagna.
*202 6704, Mop, Battery Packs or Doorhandle.
*202 6705, Video Cameras, Internet or McDonalds Bag?.
*202 6706, Pans, Freshmint, or Hotdog Roll.
*202 6707, Food Shopping like Cans of Coca Cola, Cola Bottles, Waters, Shopping Bag or Grated Cheese.
*202 6708, Ktimes, Nutrigrain or Mueslibars.
*202 6709, Saladas, Socks, Vegemite or Textures.
*202 6710, Baskets, Favourites or Cordial Jug.
*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?.
*202 6716, Soaps, Toothpastes, Cotton Buds and Others.
*202 6717, Cans of Coca Cola, Bottles, Waters, Novo Shoes and Others.
*202 6718, Food Shopping like Upngo, Breads or Cans of Coca Cola.
*202 6719, Quichebox, Plate or Cup or Cheese Machine.
*202 6720, Cups, Milkshakes, Jug or Can of Coca Cola?.
*202 6721, Baskets, Coathangers, Chocolate Milk or Frypan?.
*202 6722, Food Shopping like Cola Bottles, Waters, Milk or Nachos?
*202 6723, Slippers, Blanket Sheets, Clothes Pair and Others.
*202 6724, Pans, Plates, Scissors or Tools.
*202 6725, Aldi Stuff, Domino's Pizza or Lynxspray.
*202 6726, Towels, Lighter or Journal Books.
*202 6727, Food Shopping like Bottles of Cola or Water, Cans or Milk.
*202 6728, Baskets, Battery Packs or Vaporizer and Others.
*202 6729, Sleep Medicines, Deep Heat or Pillows.
*202 6730, Schnitzels, Nesquiks, Milos and Others.
*202 6731, Toothpicks and Nuts and Others.
*202 6801, Food Shopping like Bottles, Cans, Waters and Others.
*202 6802, Plates, Bowls or Battery Packs.
*202 6803, Towels, Blankets, Purse or Boots.
*202 6804, M&M's, Baskets, Cloths or Coathangers.
*202 6805, Boots, Leaves, Texture and Others.
*202 6806, Food Shopping like Cans of Coca Cola, Nachos, Cheese or Milk.
*202 6807, Dressing Gowns, Glasses or Pillows.
*202 6808, Grater Cheese, Pizza, Mat or Plate.
*202 6809, Stylus, Mask, Soaps and Others.
*202 6810, Paper Towels, Staples, Lighter and Others.
*202 6811, Baskets, Cans of Coca Cola or Biskit Shapes.
*202 6812, Blackngold Cola, Blankets or Chocolatebox.
*202 6813, Smiths Chips, Cheese Mozarella or Bread.
*202 6814, Textures, Pens or Basket and Others.
*202 6815, Smoothies, Toys, Chopping Board or Box.
*202 6816, Cups like Gold, Cup of Tea, Metal Bottle and Others.
Current, 202 6817. ($#!+).
*202 6818. (Rare, Unique or Unisex Names).
''2026819''
clevn0usztym859hzroj0ohsqvllv0p
759901
759900
2026-09-01T22:41:22Z
Rosetvrnip
75253
/* Test */ All done
759901
wikitext
text/x-wiki
= Test =
901 - Vacant Land (61 Hume Avenue)
Candy Crush Saga Wiki: Tasty Sugar Track Edits Is Out Of Control and continue until the 24 Restriction until no edits made all day, Most Edits made on 6/23, No New Episodes Released on 6/24.
2:6 — 8:18, 194 days, (8:19+ to fill out).
*8:19, 8:20, 8:21, 8:22, 8:23 (?)
*8:24 (?)
*8:25 (?)
*8:26 (?)
*8:27 (?)
*8:28 (?)
*8:29 (?)
*8:30 (8:31)
''9:1''
*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?.
*202 6716, Soaps, Toothpastes, Cotton Buds and Others.
*202 6717, Cans of Coca Cola, Bottles, Waters, Novo Shoes and Others.
*202 6718, Food Shopping like Upngo, Breads or Cans of Coca Cola.
*202 6719, Quichebox, Plate or Cup or Cheese Machine.
*202 6720, Cups, Milkshakes, Jug or Can of Coca Cola?.
*202 6721, Baskets, Coathangers, Chocolate Milk or Frypan?.
*202 6722, Food Shopping like Cola Bottles, Waters, Milk or Nachos?
*202 6723, Slippers, Blanket Sheets, Clothes Pair and Others.
*202 6724, Pans, Plates, Scissors or Tools.
*202 6725, Aldi Stuff, Domino's Pizza or Lynxspray.
*202 6726, Towels, Lighter or Journal Books.
*202 6727, Food Shopping like Bottles of Cola or Water, Cans or Milk.
*202 6728, Baskets, Battery Packs or Vaporizer and Others.
*202 6729, Sleep Medicines, Deep Heat or Pillows.
*202 6730, Schnitzels, Nesquiks, Milos and Others.
*202 6731, Toothpicks and Nuts and Others.
*202 6801, Food Shopping like Bottles, Cans, Waters and Others.
*202 6802, Plates, Bowls or Battery Packs.
*202 6803, Towels, Blankets, Purse or Boots.
*202 6804, M&M's, Baskets, Cloths or Coathangers.
*202 6805, Boots, Leaves, Texture and Others.
*202 6806, Food Shopping like Cans of Coca Cola, Nachos, Cheese or Milk.
*202 6807, Dressing Gowns, Glasses or Pillows.
*202 6808, Grater Cheese, Pizza, Mat or Plate.
*202 6809, Stylus, Mask, Soaps and Others.
*202 6810, Paper Towels, Staples, Lighter and Others.
*202 6811, Baskets, Cans of Coca Cola or Biskit Shapes.
*202 6812, Blackngold Cola, Blankets or Chocolatebox.
*202 6813, Smiths Chips, Cheese Mozarella or Bread.
*202 6814, Textures, Pens or Basket and Others.
*202 6815, Smoothies, Toys, Chopping Board or Box.
*202 6816, Cups like Gold, Cup of Tea, Metal Bottle and Others.
Current, 202 6817. ($#!+).
*202 6818. (Rare, Unique or Unisex Names).
''2026819''
lxkwvbd38cr8n4m734uj5abej6lgm8k
759902
759901
2026-09-01T22:41:44Z
Rosetvrnip
75253
/* Test */ All done
759902
wikitext
text/x-wiki
= Test =
901 - Vacant Land (61 Hume Avenue)
Candy Crush Saga Wiki: Tasty Sugar Track Edits Is Out Of Control and continue until the 24 Restriction until no edits made all day, Most Edits made on 6/23, No New Episodes Released on 6/24.
2:6 — 8:18, 194 days, (8:19+ to fill out).
*8:19, 8:20, 8:21, 8:22, 8:23 (?)
*8:24, 8:25, 8:26, 8:27, 8:28 (?)
*8:29 (?)
*8:30 (8:31)
''9:1''
*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?.
*202 6716, Soaps, Toothpastes, Cotton Buds and Others.
*202 6717, Cans of Coca Cola, Bottles, Waters, Novo Shoes and Others.
*202 6718, Food Shopping like Upngo, Breads or Cans of Coca Cola.
*202 6719, Quichebox, Plate or Cup or Cheese Machine.
*202 6720, Cups, Milkshakes, Jug or Can of Coca Cola?.
*202 6721, Baskets, Coathangers, Chocolate Milk or Frypan?.
*202 6722, Food Shopping like Cola Bottles, Waters, Milk or Nachos?
*202 6723, Slippers, Blanket Sheets, Clothes Pair and Others.
*202 6724, Pans, Plates, Scissors or Tools.
*202 6725, Aldi Stuff, Domino's Pizza or Lynxspray.
*202 6726, Towels, Lighter or Journal Books.
*202 6727, Food Shopping like Bottles of Cola or Water, Cans or Milk.
*202 6728, Baskets, Battery Packs or Vaporizer and Others.
*202 6729, Sleep Medicines, Deep Heat or Pillows.
*202 6730, Schnitzels, Nesquiks, Milos and Others.
*202 6731, Toothpicks and Nuts and Others.
*202 6801, Food Shopping like Bottles, Cans, Waters and Others.
*202 6802, Plates, Bowls or Battery Packs.
*202 6803, Towels, Blankets, Purse or Boots.
*202 6804, M&M's, Baskets, Cloths or Coathangers.
*202 6805, Boots, Leaves, Texture and Others.
*202 6806, Food Shopping like Cans of Coca Cola, Nachos, Cheese or Milk.
*202 6807, Dressing Gowns, Glasses or Pillows.
*202 6808, Grater Cheese, Pizza, Mat or Plate.
*202 6809, Stylus, Mask, Soaps and Others.
*202 6810, Paper Towels, Staples, Lighter and Others.
*202 6811, Baskets, Cans of Coca Cola or Biskit Shapes.
*202 6812, Blackngold Cola, Blankets or Chocolatebox.
*202 6813, Smiths Chips, Cheese Mozarella or Bread.
*202 6814, Textures, Pens or Basket and Others.
*202 6815, Smoothies, Toys, Chopping Board or Box.
*202 6816, Cups like Gold, Cup of Tea, Metal Bottle and Others.
Current, 202 6817. ($#!+).
*202 6818. (Rare, Unique or Unisex Names).
''2026819''
1ioib3gpjhagtcakdc9jrwxb37xnfch
User:John Vandenberg/async test write
2
81547
759943
759777
2026-09-02T11:48:15Z
Pywikibot-test
23124
Pywikibot 11.8.0.dev0
759943
wikitext
text/x-wiki
1788349686.139544
sya8xvf0zu1ueefa4niekgikex7vf0s
User:John Vandenberg/appendtext test
2
81788
759942
759776
2026-09-02T11:48:05Z
Pywikibot-test
23124
759942
wikitext
text/x-wiki
1433650768.531433650922.331433651729.111433670166.311433675620.231434189298.391434190713.181434466819.82218051434544025.22135851434556196.60172341435173199.59346151435175699.59451271435227022.74044541435528701.75742911435530425.45590261435603389.080081437231694.72999551437247968.58793571437249806.3797741437298795.05681351437299498.54262071437301447.66920381437302227.7655441437303194.27986031437304101.72397661437310188.7074311437310950.0167771437312161.48824671437313010.34581731437313729.64502261437508795.02368621437509778.81783961437516631.40031891438256915.00195531438380338.75435851438383980.68647171438454064.30758831438457192.55998851438473558.4497151438475370.52737021438888563.82252121439048615.09364531439242551.86522051439284878.94054751439567068.00147221439645869.40761881439653355.34343361439892097.89366271439893989.92894151439937872.74017361439942911.25551271440071096.08264111440280762.25626281440718001.3262011440893319.42683861441040710.94389411441045094.56088661441367039.71286131441492543.00856571441494238.9647241443131370.03606581443212814.54482251454969098.621455143085.01455479939.331458010578.141667865282.52259731667886777.04896881667890384.16996771667891590.83226851667893076.91738251667895853.758761667903064.99619671667923005.8748951667928572.68390731667933784.59484671667953902.59001061667977923.4422121667980794.38768461667998421.35940931668010265.61172651668017452.821981668037264.28078271668060176.7066241668064765.02555161668074805.6843691668086298.94039751668146229.9122951668195362.96826151668202976.2808351668237144.36446861668334598.07503751668351702.72978881668355273.88250331668365870.03056961668380539.2045151668413384.79889971668425433.20089171668429428.62591481668429882.60904881668457667.70654341668457670.14254471668489259.42919141668489272.77256321668524787.90621761668619093.49428681668627855.24322251668715685.06132861668752284.64053461668846412.18063191668859062.45581651668861871.6680541668863624.53730581668906968.63125281668968346.827691669010411.7630731669034060.6490591669034135.1873461669111400.3310911669112565.91641261669115243.3388661669117792.36109231669147328.09415841669202489.4733361669207650.32954051669293250.78917381669293379.89944481669376126.44172071669383245.76502471669390928.33843281669456758.37305931669460552.29366331669466891.97368241669468483.16195921669507139.0193781669555832.00191161669561735.99639271669567236.94770341669575598.18926261669583250.82441161669589277.69016361669617066.74746061669623772.9824791669639778.26535651669648369.11541911669681417.00446221669694451.18411281669752632.77524021669790924.5213481669793446.41492681669806912.04391981669824036.82929231669872027.60449481669898227.71295671669898259.26809931669921155.98349361670061183.07913141670066507.8165841670077709.53290721670095550.83527471670107627.98861271670121136.95061851670138654.99623131670200104.08187131670230755.3226831670244520.57672931670244668.51782011670389975.82026081670390023.37481831670437142.29134321670474770.88995531670487246.87528041670502115.00278231670502920.1938131670847688.62029081670848465.75781231670851705.87951061671033970.25642091671040035.06844951671042864.6599261671372985.38839651671380314.9132991671397640.27274011671414714.3057121671436644.76151321671464740.28983191671471979.49879741671515351.36315011671534919.43988371671552136.73949381671567767.751751671633257.00196431671770826.36481481671831280.1013831671880464.16703251671892132.39851621671894047.95178441671895309.44157341671909181.81563191671915314.86987641671958262.78592091671964901.68418721672000091.18395731672040310.53217081672050418.50751851672064946.23232941672111553.61295031672117635.92343691672130442.62549381672242689.61853311672316734.83227941672317602.87131831672393398.53247791672410436.25166461672524792.27631931672607847.59926841672644463.87349151672646823.01231341672662689.7048611672663480.46076921672679608.50131681672683539.08552241672699544.1003541672732083.7852531672738571.41738751672756132.6532181672773164.29544851672819542.08460331672825014.19517781672905848.38628651672913462.50501871672919738.71067861672922430.75280711672923322.11899111672931497.2450511672932304.1778181672945954.7680341673031863.65857821673079844.9389911673088359.9833371673095552.19145581673097227.50064781673102532.33062361673103474.52100591673115502.80200391673170728.81979011673180084.83551031673186706.26281071673193236.3913051673204572.94682721673251372.26334931673257873.80217721673265157.1539221673268011.07930541673273333.41361331673278687.03390881673326768.0135041673336643.46683241673377550.0737211673406497.31679181673429347.03616951673442396.44323591673462031.40780231673475642.46197681673486662.78692481673494604.4536731673538992.12018081673597172.3338311673607749.57159781673612477.3083471673784155.33494331673792254.69903181673797192.45269541673805036.33327221673809787.90321951673820123.49186471673828737.7350961673845480.29922721673867388.29650971673871721.06576231673872705.55981831673881096.00600361673886092.39976671673901527.23546221673936700.1277911674024723.59655931674029565.17511731674112677.72348791674131134.36896941674131931.51858191674176788.94118571674205022.57874321674205892.4945881674207066.500241674237874.79511361674292792.7148671674300054.9405991674302649.25306581674315023.03331971674321156.4278271674330147.9499351674375033.1853471674379973.83156511674405785.2695661674460497.39998821674590174.95085531674599728.517341674918001.6330231674933771.13804131674942945.7791681674948667.64437911674994582.97465441675031208.62388441675082059.0771621675082116.2687371675107052.030031675108612.33305431675125215.25636861675257210.1793411675341484.38473531675341609.7052491675405564.5855741675453239.69066831675497461.10145021675528556.1533341675609308.2208911675687010.83857871675687111.48495861675814393.79852651675946118.90168211675946263.62637621676270319.42003041676413416.73733331676415638.60224561676550944.72917251676550988.86583191676811844.2470331676892937.27954441677156006.10806781677156012.4058921677404093.0326611677414534.3757681677422594.66884061677431827.26376751677502782.10921571677523601.2258471677532681.36643621677547559.68123271677665504.37648651677884342.66578171677941180.10126421677945698.08328151677946891.47642021678007696.49033051678013853.27689121678027514.350981678043805.73149591678052259.90557241678052643.0314441678106220.95231061678106343.42481541678133527.48043781678172110.71678571678365385.72825381678365409.99574831678764799.86219881678813325.91175081678813350.79962161679170545.65496781679450012.02785161679667672.31822281679744609.64862081679759956.30766031679761981.30153061679763749.89561941679767912.40684821679841243.24157331679932902.0535151679932917.83848141679940392.27980331679940406.82556631680053071.3510561680080183.73721581680082474.63970731680084259.96698951680086369.3228471680091872.83918521680118892.88375951680163589.5406531680163600.85161521680176046.1660681680176093.195821680203006.74859981680218432.4234941680218462.99551681680252349.87218141680259887.77778031680276784.21608421680363996.79403231680364030.12159371680461718.1685331680510128.81247231680523016.66201071680524491.84096381680535330.71197321680538614.16861461680540603.81350281680567879.27351781680584189.1618111680597522.02599571680611370.06081771680684863.62609741680702380.27745721680703768.80195071680724926.03246521680761509.16899231680781166.79312871680781181.85028271680802128.60378311680802968.58253961680810706.74496361680824056.68816421680858607.70792821680861050.77714251680866073.6807371680873834.65833931680876092.87447241680886191.0677981680893212.76874541680912955.40428971680931523.71085381680938348.89648771680946672.26258541680954488.31267331680957237.11845351680974132.6564441680981580.06852131680988103.15952011680998817.96175931681034799.03404331681040471.09055521681052004.54530671681126545.9002181681127117.2114981681132523.79209541681134369.85547611681139841.28229571681144411.1575561681148840.42879941681153937.74360161681160928.71128651681166905.73377011681187720.03183911681192405.11509941681227001.43019371681296338.53012781681298285.34920621681300548.25355361681399245.12391971681404166.32169871681450160.48757241681476226.65624211681482908.2132631681484907.63010051681488264.0226731681497922.02627541681516321.013621681550173.9751061681556873.35132771681634045.1093921681638556.73702431681643819.74579431681648142.90162351681654379.10618951681660670.91600231681663536.92180131681668105.8786741681697857.17983321681726412.36520551681728904.20325111681732377.95373061681732552.2726261681734122.47441771681739722.6026441681745392.19363141681752304.44942951681764534.25785851681834319.85117361681846787.53623871681860420.36393951681864973.31808471681875313.6030341681990891.22789741681990965.4691161682017923.75330021682021682.18149731682057250.76527521682059742.77901941682066226.93418961682076763.95251131682085198.28220251682144325.24995231682151599.1659521682171840.53873781682177076.96661421682183378.3197661682201845.24131771682207240.42407821682234649.83576371682237773.5109891682255562.43250821682256440.6314211682276533.21695041682307310.77357081682309188.4801751682327080.5300711682330112.66451981682335575.83368681682336670.2883251682364807.1775281682398596.78049471682412204.25284861682420579.50606181682438986.83246091682440038.89426971682460491.3521311682460514.15289761682486722.93688181682488779.60810041682526064.89231941682539359.5333161682594683.016191682595813.5718581682668022.43959161682669508.12358161682692147.2006271682757542.86185651682764905.5145551682772596.67823051682773643.5455011682784718.25319361682792198.62961861682846988.5308141682847360.08277031682855920.74403551682861011.37232731682866058.34553621682874046.51448271682874377.29042581682875782.05195261682880603.05094741682933872.46009541682935892.51180741682940017.87042071682941142.98671221682944638.7336221682968813.95042441683043013.224441683044388.7385881683079759.64020921683090931.4739611683122753.58097121683220168.91720751683220186.32398771683228402.15677021683229560.23437881683299138.82950661683545273.97475961683546542.5225811683639428.85272931683650636.34203671683805773.17751171683807026.16440961683929655.90975641683945251.3297731683945334.00193071683979199.57489941683989769.1559531684138199.31341811684138303.3588971684149417.94796661684150694.01225781684162796.8634221684166131.38370351684186491.90226461684251726.4504761684341513.18342381684408808.57671331684410199.48726771684489043.08548951684506392.8573881684675092.4285181684754267.71727821684755469.9380261684824482.14777731684830139.4911791684913767.22985341685013633.93379761685014938.77503231685102500.5862471685105187.50040251685186112.62153741685276024.9902461685359085.10708051685360365.34077381685452391.8990681685463350.18182641685464580.15679741685506240.55518721685507573.46218041685515091.31630541685618762.95992021685620191.40762351685686918.73273971685699127.00476841685700501.55954431685717478.4076761685734131.4306871685783480.31948381685784754.27991371685822284.17034241685826117.9924191685876410.60644561685899260.99922781685963819.95782521685965097.9749411686150851.77675581686223052.88230631686224433.3330841686232302.44289061686431729.6923871686484871.47790581686515043.2986561686569325.14197231686570601.30179381686829205.67923261686830619.36993621686858941.9247121686987477.50710231687163638.79776241687173445.39801721687174767.32710461687433296.5008811687434714.9197481687778668.3172251687780071.48142651687804721.06773691687804961.1013381687870703.48142171687880051.5818561687914862.05616451687945918.31335041687947395.06492521687953490.37763641687959324.18503831687975359.10666821687977529.40586021688005289.32374951688240380.11102061688282000.03003641688313546.3198141688475697.93261031688487946.15282921688516501.1861391688542375.87847381688542658.34382371688659572.67238471688989210.09367061689249540.64891221689516330.02128981689518572.78979041689583949.94965551689592901.34582541689607695.01970341689852040.93803671690180073.57848791690191138.51633981690321982.42092041690449914.8819191690455300.5934611690458478.94185231690465635.7540451690474689.47561761690539972.5845331690543686.42938161690568173.75836471690628964.38431071690634808.00196481690713940.84531521690740853.82095071690797462.8997041690802793.02018141690877446.66731241690889603.01329571690902576.47618631690960224.63360571690965952.47575381690985912.44080951690986558.72973781690988632.4453431691052503.35620671691059454.53480551691070774.57939621691155418.632231691252944.3855231691339134.81100341691400441.28892831691407321.69667531691432706.8650791691480503.51510481691481141.53991751691482868.38574171691653911.6456711691667067.58978751691677912.8174151691990311.52463151692012332.80747371692173850.40086171692259390.40197521692271662.9828511692354012.89279321692387939.37044841692450924.90117481692534492.76775311692541157.84960081692609941.4447311692613681.6871041692616885.06272461692862010.7047641692876369.23113751693053622.35440371693063667.55145881693149769.05626231693153142.6450571693216006.80971571693327074.38222051693400571.59087851693411769.74461581693475731.57202241693481027.00816321693491970.33835031693754058.26204921693826674.35946681694067456.52644161694086432.312941694086879.4216851694291429.4310971694431406.95781731694657927.28599861694659203.8303991694690891.68987661695036242.05242631695052511.6695451695073524.60868021695202102.93862631695206418.5803891695216347.58525681695221958.98424171695295594.74410271695320782.37095791695372272.756491695372628.97463751695378229.09218671695404004.23362351695634429.53836321695641055.01008581695761650.25719881695834309.91726141695927260.04524731695977453.164681695980141.0916121695994699.91543251696140618.86266831696336429.26674631696472860.44576241696505121.36730741696670716.8756681696689454.51658061696692541.47360921696850900.75192381697040191.60620881697097598.39965031697099236.2009691697144402.12478421697461393.63038371697527918.46235591697553804.78659531697815765.07235961697882531.84064671698051461.11684851698245633.10182791698508506.21113731698590537.26034331698771781.4928131698827472.40152741698827637.62499951698842362.84378241699091325.84301851699112379.118591699114243.11691121699184658.95015981699202708.55501941699205204.19041511699223592.85166761699283653.51198431699308697.88956881699632738.20176461699697040.08083271699706783.76506351699708540.52264861699878426.134871700605295.13594941700742428.27381941701453821.17849141701535213.18951851701596010.55240921701651782.60944631701676216.27204661701692980.01650791701786460.07426741701790394.30577541701794888.2957931701814293.08096051701829196.0474711701845925.83316681701848599.3431961701881057.82830721701954974.30711481701971095.83130741702043153.9835111702121022.79919271702122868.11675931702131140.8443211702209307.3005071702214096.37788411702297508.09620881702391057.6135691702476254.23142151702545723.33017161702556484.54818631702570523.91162061702584813.98265171702632851.84962561702767066.49533081702768384.77078131702786485.3929631702813757.61672471702976231.91704031702988046.03035161703007104.43871831703060641.49566441703061978.66786461703068432.47355061703161333.71216631703364778.24125841703400784.23487191703421297.88166571703422570.29016641703507209.10789851703681521.57480841703692553.249851703766399.7434331703852651.09494881703904819.15819121703906381.68961221703995904.11975221704121987.50157281704264435.08052851704282576.0567271704287308.40712621704298219.9210251704298836.44698121704303268.78285381704363509.4023921704370865.83305841704373191.9196831704446663.93405531704473306.82136271704556109.78341911704652663.27039841704703502.98144841705153078.2567631705171764.48118851705247919.4075471705321451.7373961705357661.07616421705461907.794251705752184.9362341705828818.60175251705830883.71437721705841015.54000781705844281.67964631705855451.01224971706185534.09338261706369476.87958551706371248.95242761706446636.12856911706448562.39597581706500837.33251021706622694.41761571706638400.31250291706643762.98329831706652657.88941431706698456.11485581706705858.3338771706775991.24169541706879091.59539581706959973.97395971706978466.78913071707041650.44565821707061227.6671281707135479.13930131707135774.83621931707138577.93408441707205349.07070681707210631.86285881707223177.35967421707234259.76761751707236462.89073851707298811.07813571707309485.17887141707324226.33939241707324395.90175751707324534.66345451707394969.43060231707473456.3788881707484017.54700971707509815.8565891707630003.67194221707650093.14672661707741016.75071951707843507.62747121707843972.63939711707891847.7828991707894042.62261721707894892.28781461708082572.46326521708270558.69651531708335825.3520781708343518.4265971708345382.65903431708346942.56566171708352754.41838361708355494.40021591708356544.03256871708357237.74094871708357678.17033841708523300.77632331708527433.11350181708597953.04801491708598048.15991881708600366.39798431708604576.4365961708610956.05604121708950178.1200671709014376.84691021709199311.14945361709209277.74335311709295953.42427751709372594.5523051709372731.93302561709372808.05139921709372973.60188251709374813.5571491709377109.42867421709484246.11830431709484785.2390241709533165.47048741709533819.17485741709534209.88706611709534926.47438381709538670.7195121709554858.88737061709556222.50437431709556406.85210971709564869.27713011709568887.47204641709573527.703281709629796.3196181709630611.95577671709630963.05990671709632191.8085871709632657.66816261709647467.98279861709660435.57397561709714867.27947381709717072.49129031709746877.2993021709805154.00563551709809459.23794721709814067.34054141709879953.99508521709884151.13086131709894214.31273981709902235.44790631709914532.75472951710159733.28755931710418921.42482541711628639.58727981711973782.74049451711974343.14418481711985794.7452041712014996.42285541712080693.69224641712155049.11888051712168399.60296921712169685.1040791712253703.75393061712502533.70237331712503293.1766331712505373.05488321712511056.70344231712511646.47766071712554342.8047431712578871.33526281712591147.02153471712593306.1449461712654643.9849731712672272.33918331712733238.39784071712773663.19977021712848308.0081541712860542.67349821713087332.46015721713121304.38284681713183849.22030931713372266.49107931713373136.88705831713417144.63786321713443071.2244371713541517.180411713541699.3184841713615294.52450591713619123.95877081713619984.8662581713620203.87909171713629353.7768171713693000.37563231713696953.16933941713701711.91550061713703518.66322571713708646.54834151713773912.73249241713776408.69481331713777146.3249111713784750.26938921713788549.0017581713803084.09800651713873378.93953251713874972.05580541713899910.39179831714006574.90925341714047778.38088851714214149.2920471714215604.62877371714218289.77900241714220302.95767071714231183.21794841714243696.78785441714305638.49526791714305731.21596931714311478.84540821714313996.51210671714485244.08302331714488946.5538881714652552.4470721714661325.34664131714665061.6320541714685108.3231281714709757.69277481714712589.13287451714717873.74175741714719260.34569121714908101.1871011714998038.7068751715004179.24228761715005017.33956381715011561.74028921715148898.65396171715244641.4409941715257241.7003561715271768.30176381715292152.86608841715330004.41626481715353713.42781571715353959.83065681715412668.46831631715421483.23257471715436334.75793931715520201.0295451715526648.21276971715527468.23268561715528972.9669821715529459.80643921715548182.89837461715602825.46457481715624287.64700171715666953.60590481715670258.04229781715681034.8107381715681373.08043051715862181.04882651715870345.8139851715870495.73219591715952418.20962721715953957.14005851716016439.23131821716026356.82077621716029493.3221591716031083.0943561716044060.71082471716107419.57978841716126517.3683791716131168.69529941716148891.67200921716149216.5821041716210413.7965631716312201.71627861716373672.36785031716374729.35419821716457578.06868461716467093.383061716559791.08338621716561161.53435441716649359.7539071716651785.40524051716723261.63200521716725596.59526781716732292.42133981716734447.8044291716738254.8956911716746654.24368071716795806.77896641716812563.0741851716892685.13354331716902147.31798151716903552.33264231716923921.77522521717066955.01724891717068917.04717661717072154.64399171717251267.23197651717259797.31061671717262953.80781751717328859.87784651717676565.94108441717861914.30391071717863020.84930681717927139.78493431717938355.69149681717953323.82942721717999765.11817811718009339.5952451718009454.02913121718009667.4100361718013654.53190851718016460.01057121718018761.15332411718020799.01913881718021245.15856621718025465.146841718026322.14862821718029950.58980631718041093.53587461718088975.1600171718098525.37702471718098991.82041171718099452.66476921718111343.16626361718114741.25173521718129965.94656441718167927.92333411718168560.61959651718170862.25188761718205019.47537661718206374.16787241718206647.1795651718208141.49481821718210905.61703281718270394.38123511718278706.33032561718287986.1937131718297994.59491591718336969.9835191718365449.34239961718449087.83051371718454283.21870951718456413.19333861718460153.46241951718462494.17207481718465987.28904911718467416.27678541718470343.79496341718477682.9318441718482373.43667821718515832.7972051718517249.02119351718517857.79042481718519972.8539831718522868.36958581718531550.47946141718536268.03831891718542101.57696131718544464.276851718619123.1634091718623185.88458681718636520.18447331718638800.48453331718731139.4622661718744170.95703461718774106.69617961718886170.088351718961712.35531521718968868.04600861718979695.67104221719060406.1220171719062040.21757941719067330.25522921719068089.06455061719076451.03764821719145795.36178421719151988.68255621719155248.8882151719162133.02871321719171629.7718651719242754.68141651719246705.8919081719255647.18871621719257347.07321881719298633.56316071719407710.83869461719491033.8175251719659127.47902351719661686.4932391719662640.99923061719664604.3216051719673418.46054081719677856.88689371719678098.51585631719678853.39937191719691556.0107241719694248.85178281719738870.07826381719739924.29021171719741111.60789011719742304.8520551719742716.78034661719745397.84074521719754662.89840941719760266.12941981719794972.6005541719825084.29679921719830253.9239311719836759.33914421719841637.71088621719842717.60566931719845321.64250181719847663.70107821719857525.72813531719993166.31000541720004409.5729961720018730.98016761720020182.87782071720076639.35904671720096106.61090231720113532.36414341720179036.01004391720265126.1817611720268654.5868861720282147.87318421720283309.32325241720286050.92650751720293539.3648961720348073.98572061720355917.47972461720362591.71961671720364407.29622911720429987.46009041720437485.89313361720441618.70600441720508195.45873951720518734.8392421720723289.42841981720871967.87330561720969642.51132971721145249.62304261721305348.6251181721379346.542811721406926.7735731721488540.2356821721496747.87938481721565527.91214751721574362.68826171721578502.43117141721580213.3311231721585283.3753051721628125.85017541721636883.68095471721651068.3836311721674353.60487581721711682.92611581721718456.25190661721736585.12386851721910443.05865841721911097.9222981721987871.73615431721989464.20908121722005684.10386231722009183.98562811722011469.2203711722014888.58855771722021975.44721461722083657.7424821722085815.53132181722096167.44949651722100696.7462071722149157.52232481722155656.36078931722163295.76613711722174676.3690631722242732.55940461722246601.0920391722252901.8107611722256046.73971531722258487.4373321722258901.9600681722263870.85462641722266409.4265291722267746.61000281722269621.92874881722269976.8815461722272080.77377251722279683.22267081722285241.02753781722286729.75908951722287985.7799481722299867.8714451722318171.4614381722346936.88357971722348798.46942781722350457.81067321722353627.2568861722357499.26558111722367575.99968431722373491.33078071722507532.24708371722515108.97734071722591849.9296011722703647.97711471722774371.71582841722860722.0833721722957642.21708731722965889.98333571722972359.45396161722984867.60560561723119754.11207841723125286.55064421723130127.51485061723134319.18638941723136059.16600351723137066.5406291723193843.56864331723198696.47698711723294038.37574581723295845.44823861723297533.78702881723303807.6631671723307181.10538461723311677.03078251723422079.64531681723457339.1525981723501078.41981941723503405.5784231723617569.60056951723639369.8436771723724588.10065871723789608.36872891723969341.08708981724070485.40928551724143436.30561071724158744.75811391724202777.0643011724301420.52415971724320167.54208281724326928.27127341724329651.45827651724339689.16775081724339990.81605431724341541.8335571724361752.17471031724675459.66274451724678562.51491741724679041.8596421724680019.75805571724740481.8159631724764160.67093681724772210.33077071724822514.46581531724931894.77922081725133285.29799841725140832.77638151725178025.79151321725179150.94023371725200755.48870351725202807.74458771725207502.73175141725208627.66635321725209216.05556461725210265.44690441725252365.3833031725281675.10662651725300399.91392231725540836.6651921725631556.60361741725822627.10982061725872571.50008231725884561.59261251726144055.4084121726302918.2109221726675560.78871441726731619.00652861726733403.45392541726734397.35323241726735635.69507741726747782.26425621726829193.35509751726830291.6796181726838130.2701831726852953.32955671726858668.94598631726904919.53113151726908011.78215241726911494.43632151726923822.73583151726924631.13999751726926654.4907061727094218.42981771727252570.93366581727281245.10181121727355214.64388871727355826.6178961727359034.26466751727360644.51546881727364225.8715341727365398.40147381727699176.51489191727760655.17109581727951236.031521727954405.64962171727957757.77329021727958178.89527631727959519.3105711728033650.33202581728045029.38966541728059516.23578881728060897.03357651728122955.8606541728129694.6456711728133522.16625431728139325.90391971728145836.68000821728194852.80935961728234083.04004381728241507.9161731728303752.22948271728337214.14192871728537254.20157051728732990.48960261728737796.45881251728739716.13933061728743550.084261728744005.3918461728745195.51385121728746301.37412671728747687.5570631728833762.35883451728835446.2922161728836591.77962781728837687.72793221728920301.63146951729092802.6129941729093469.09824441729093986.6930831729094596.3920461729096367.12394571729104951.39206271729127668.9245751729234880.59355141729257906.23548461729262780.74853061729333006.94400931729334137.91921041729336212.40924571729338537.22319481729339287.76037341729340708.85076141729342959.6031771729345579.34861141729352068.85322051729352424.3033391729355813.55383041729358559.69434331729367128.97711661729408008.7562531729410455.93828371729412778.66819211729447330.7101781729506929.79903321729550383.50321531729562047.72278021729772674.30436231729774243.54481581729788974.2966791729830363.88572481729956671.11215191729963276.13354231729964801.2759481730041059.24922511730042594.4898211730044967.31507661730052437.95801071730108706.1819951730118182.17060021730180022.8704031730203262.34906771730221702.35324031730275347.68835761730284724.74087071730285556.1908141730301942.04073381730374645.96319461730380770.90588331730404050.21319961730409146.01821851730413873.39013431730425842.61837341730477372.56358981730479560.97667481730551759.14125781730568814.75447271730572438.19093441730573549.2564731730579225.9238521730595578.01302431730646326.27951721730647944.81843971730737022.00499321730747490.06824851730807292.04786471730813368.64133481730818826.50661751730824558.75576351730832422.99776941730899305.0615351730901750.78711341730903102.00121621730971789.14266371730975168.8730961730982023.72336751731056436.06550221731059006.3753541731071324.57351161731148182.06626031731148462.44941141731155029.29867031731156907.49877831731167668.76448461731169795.64211731731171081.69893461731174489.80106231731229459.46800331731229698.89608241731233254.31718731731250434.28619031731481335.12306331731513305.40980241731593266.2619741731829257.91134291731859678.92372371731862005.49140671731922937.4808991731932247.01066061731932525.03579831731933290.09443261731935460.2790451731947768.1370441731963060.6405581731965814.97759751731997859.09550831732005512.74292661732031545.79197171732033235.34174281732036071.30061321732037983.13547731732041409.30651121732045107.55121021732263516.1040951732278310.46816371732288821.0565531732293225.38360171732383821.50968841732384069.83460351732391560.43771732433721.32781671732438713.17433931732441780.7008471732444579.79170161732451683.7766181732452619.78835271732457653.61890271732461172.61851021732467163.96287751732468839.23634151732469965.24506521732470239.99742651732470501.72090651732471055.29854061732520087.42624571732530123.6256731732536785.36732151732544673.93568091732553939.84375951732555010.63737251732562360.8003981732577912.6871631732579381.4846941732592567.86124521732594026.41688681732600123.13871861732605068.88938931732616986.9114541732619159.52321151732650631.55471561732720047.2405881732723299.8870821732728587.26730161732871729.11913281732948772.60584121732962637.1605561732975163.11275771732976290.6137441732985336.40084581732995963.96110731733080300.40849661733140107.68333481733155022.88794231733159221.4871291733168664.37563941733170027.81566981733170526.38246061733175309.14986661733219295.66059971733219681.74375251733224273.44269561733227643.3910411733228907.1991411733229826.99463961733234914.88147951733238777.20137861733242353.3587111733251189.9278881733255484.1180661733271589.04232071733293075.55299761733306828.96452671733309484.4286141733314197.22540021733315408.63991121733322593.26261733322805.56145381733333231.66890931733338012.36725621733557577.02903531733561313.32804731733565446.2815431733567333.90873651733567523.57054021733571119.16926811733573990.21949861733585274.73568651733585807.70079871733588017.7802691733593130.24049071733596018.95720121733609188.49137931733643746.43857721733650829.55517651733653518.41186571733656796.4539251733658330.072241733672789.5846831733673099.07036161733677665.48938061733732967.44802711733737559.55780841733739774.8239391733743548.28622531733743862.25829121733746858.26144361733748646.72557661733750237.3521711733761303.18399291733765178.02769851733822550.6699731733823340.01468631733826457.3003791733827822.37315151733833036.50665521733834839.1826851733836114.1890831733836604.02174851733840883.20230221733909333.22253161733909960.60128761734006546.8225221734015859.57260821734027149.3870951734036509.35217021734088813.24160461734092473.45144581734093224.58835391734159531.09753781734172373.82559251734177203.28432581734180637.15363741734189493.22910791734199074.094851734204520.1181031734215792.56901571734244208.42764541734262072.54748561734264107.63865041734268892.43243811734269365.42090751734271469.63599971734277423.22195431734290155.5247891734351728.73345951734367515.79722861734438331.95803671734439067.72983981734456547.34842541734461357.14716741734530139.5553771734588131.5415551734610976.74784561734693575.87978171734969824.56160281735013863.393161735215585.1146771735298797.99119881735300860.96658131735508440.68806081735560537.00754211735579463.11638711735594487.58908061735595948.66397571735597276.44437431735619132.0939121735711899.46031331735748282.272511735752879.14751721735771109.68907361735816480.08303861735818864.54984551735820574.48879741735845919.00464921735860298.96272641735905773.7076061735907315.48212431735920256.98129151735923066.94315771735927923.41648321735985947.44539171735987120.1806911735996630.83959561735997792.5823651735999950.93494461736005094.04602071736013959.72211721736091883.54373981736094621.82072661736109303.38124751736145589.5623011736158598.80606061736166007.97108551736240721.18058561736253866.97930461736259561.10710951736260639.09564881736326720.27908971736328441.73657161736441715.22370151736441948.95128971736448183.2816631736457756.60786081736667671.61953041736859448.04466371737053105.39502241737059294.32388951737218204.23131737230569.76234361737281191.78747031737308641.89546281737634796.05093771737661678.30621581737980414.56857161738176427.33152221738307157.1679331738509361.618441738511025.38118171738514914.97471881738516331.62643051738521441.32319571738525752.06775711738563699.85149531738565426.26452471738585137.30715081738597319.09383541738805958.55573341738865614.27569961739190092.90278551739725914.1677241739794922.60280971739988471.1611621740054329.53807951740079331.96067121740157595.89306021740220123.13252571740245134.83469081740306870.50918631740399755.20469451740424096.56160071740482149.7709031740504617.92714481740662913.58478671740698083.95707631740719951.12571741740758916.84956621740770227.28777481740838599.90834781740841180.05470851740846806.8733711740851730.32116771740864068.8188891740870144.50498751740909633.67035841740943265.17093921741538044.2799881741540280.86075281741615485.17051961742736965.52304531742812809.59154631742817938.266741742820838.3423121742833639.73128151742836382.87002781742890878.3034031742903231.48092751743006526.32749031743348943.7035481743704527.33931921744540122.66594081744542397.6184541744552562.3538921744553711.73710041745173335.05232761745238610.73597071745843195.26599981746226701.0918641746362227.3089311746371442.02811121746372752.96396041746447891.44518851746971136.59414241746972157.62861821746974457.8493371746976168.04008251747052875.46152851747480982.72086171747494506.47235631747495596.47780681747496096.58660771747501563.0468381747504104.17075041747506325.9508071747560842.93142221747572746.32942341747574020.4336941747574378.1243011747575177.46076971747579555.74680231747582533.39935111747582736.4808891747584502.74418571747590890.88166261747663855.65062121747762052.21985131748067768.55359531748070430.55718111748074382.30197071748084587.6802791748100243.06219581748262369.5918211748456997.30241161748502143.56055741748551733.06875921748559805.85630181748687418.24339271748692941.51643781748697135.5269361748702566.18927071748704892.67874261748707300.78871061748707718.06951361748710902.92918851748712630.29231881748772575.60379981748780746.9731851748787418.26495341748872035.61121321748878691.137971748896375.92971748900642.73245171749046627.53392841749098755.83221241749098959.20923261749099168.61557631749101223.54241181749119609.5599181749126667.21709511749136965.48203021749139791.37379071749205793.16769031749207480.8730421749207705.36759331749218861.07364541749271912.958471749280080.92087481749295870.75518011749309413.27836321749310948.2479821749322719.81444221749373678.24797731749375255.88597581749375475.07102351749390282.05390721749392292.0063081749411650.42451621749413965.12196371749475224.39129951749618675.85485481749622671.67921351749624056.94271451749627604.1784551749631181.01720761749632928.388051749633248.42225221749634804.01072031749635921.47261521749640795.06175831749655274.54887771749662043.67698741749712691.98407031749721876.21657251749732184.4471661749736626.7742331749739584.64724351749740402.61703251749747088.33462241749748466.53899031749750838.43557451749752305.12964371749783682.446221749811531.87015961749812424.43984911749815220.3855131749859800.50181271749861810.68900941749902117.18541221749904617.60818031749912253.1481761749913909.38116311750076587.25237131750112065.51739981750112549.35909461750113293.49248391750147068.9693321750147951.59855251750200400.22014521750319173.37273341750320656.22340271750335721.70233581750503005.99435231750505702.15230181750505889.32328081750516364.62822911750516682.09823581750520735.09064871750591072.01674371750619801.56257151750620371.7246161750622133.09173231750681332.28547381750940677.62030151751110771.93014931751115024.4489921751116291.45540211751189516.1089631751191203.62136581751197267.61229181751210591.699061751210808.46503661751286324.2863091751355187.47904781751545628.6297721751725864.76436571751730131.79488541751732922.95610931751740004.53788421751802693.42043191751853656.44941881751888514.45562741751977113.73002241751978375.45727251751980210.80578421751981578.71516081752053384.70437621752065147.01648551752066782.68813631752068878.81543951752205705.86502031752220216.62114951752246320.06772021752249909.7087711752317403.78078061752319959.82731491752406318.92591481752407259.95407271752421544.34403921752422710.55015231752425032.73874641752426826.2733981752428572.17700621752433706.0658221752470562.98645881752483585.27684041752484817.75912171752487219.72185131752581332.79816531752653249.8534491752655387.0071231752658130.9101921752659385.04600621752662426.3619591752668621.53872781752695270.23094871752755556.76991751752815643.08703021752824222.17550471752909383.60699961752912449.2338241752931172.30991841752932046.08516341752938425.21734791752979538.95104621753081962.70720271753090756.31310061753109911.16209861753527824.8208531753528157.58777211753528832.78555541753543391.409981753548006.04766771753555118.34784911753557058.28183871753607448.8085821753619533.97913721753621675.42673831753624357.04167771753628490.57589821753633928.4630891753634247.65696551753635835.1478181753637985.3761331753642657.74337051753705646.54954431753964966.3723731754036963.81071071754050075.4858231754051763.00968531754147508.76656821754147960.37546681754154766.89045071754161739.48721551754163737.6889791754210964.67577391754219537.72440741754222113.16079431754223091.64906881754223664.96145081754228602.35027861754229672.55927561754232636.3346941754233129.24810151754239954.64880471754241517.74627611754293618.73869231754310329.99401831754317864.02745131754318821.54698561754323102.69770261754326266.59494351754330431.04373651754334383.8229841754335714.09769081754394275.90666251754569461.6958781754638842.06614331754657332.2965881754661051.36486671754665334.8849631754718055.42017081754722367.38050371754836525.26578741754838348.94885041754838865.27615121754915063.0405931754922379.19625621754923244.57161741754929550.85405331754934157.59779951754989457.02608081754990760.36931751754998789.73707031755003472.47263961755091334.14983991755092562.45052361755103874.80169751755155650.49192211755157146.6223681755161682.15712331755166388.19822221755173045.7185681755174334.2213181755185779.42064291755186716.5619511755189286.1331981755242426.36476161755519872.06463531755528180.97155121755528528.62853481755528832.34833381755529449.05892421755529841.94665981755530424.19558621755531801.02439361755542591.2031921755546709.01237341755581286.38693331755683325.90864251755697406.07089071755767369.2794331755771352.36944061755779093.85620981755781792.09225491755786039.54400421755858394.51499061755864857.68235521755871908.5540961755872239.40110661755944972.05689141755963250.81905911755963438.96490861755965198.06602641755966671.70875931755967661.83248521756034035.27029371756051795.8273511756053720.38031081756062188.62394291756063534.1845211756068629.49149271756072172.11601281756125268.80325321756151453.8187271756310124.8685731756324844.69694781756482129.77022931756490613.15560961756492041.12433431756492297.4743671756513623.957081756514647.05277421756543727.9926171756545188.08750371756554689.8216321756560330.4979361756563740.7113121756565274.90660831756568027.52632161756623368.20361261756651846.51766971756657428.71791361756663741.77574421756668491.29928161756688997.64640711756705263.30104331756730683.43084431756812503.3911331756816382.50912021756880677.25349831757250586.60078881757252044.00713371757254258.84415481757315748.36797551757406692.55116631757427558.33150171757522892.84468961757593511.33569531757676782.52932741757759889.01814961757767620.0571711757769226.14481571757860829.75224731757861011.95556551757869302.40287541757870842.21012851757936618.8545211758094931.5402841758198530.53288751758272178.07883481758376917.19157841758379331.32556821758383837.43758921758384955.91952871758386059.87447021758387594.98469191758436846.8173221758444026.71285961758465789.753581758469660.50086121758470168.84960561758473722.39771131758789360.21657351758790715.03019021758803464.58468131758988044.04686881758991604.67435341759149102.85564831759492772.7183581759678936.99280551759680244.41957191759682618.7215971759997215.5191141760065958.82141760108993.57618381760110235.74441121760113550.87181661760177011.020731760181782.93854881760187005.60134651760192106.0860061760197207.4219841760199258.14967731760201985.65009261760203562.60572621760208440.80056051760260714.59390331760269934.64895941760285343.12197661760302129.65267131760328991.23364641760347755.98690061760350649.9220261760358687.67830591760362798.8370321760370432.53595111760424926.0255061760743184.63201121760744311.27082821760786622.23636051760788165.03988481760793302.1477371760793581.00444651760860182.22760991760863110.1014251760869362.4851031760869631.20522211760938861.72963521760972576.6875791761060407.88111571761060627.86563541761144889.48445651761148094.4665371761149201.68041321761219314.77552221761222483.27736571761295138.05956271761300300.05976561761311514.2513831761383799.72652271761391837.57163881761470800.4115141761501864.5615621761505443.42185241761568627.8543231761574494.27752451761580013.00882581761732663.23955371761733540.29735681761734029.47098021761736371.18000411761739191.4154661761739705.32874251761753667.99567171761756863.44928861761784016.66543271761815295.3384011761818717.73632571761828134.65532541761903405.21529581761907058.3059471761907853.07356211761916217.91197681761918750.98722891761919810.46501971761924888.20557641761931309.01599481761932455.5341991761943258.13832351761943965.9173671761998689.14334371762002422.82314631762003826.12135481762004604.3158771762010514.22436361762011210.89124921762016597.03093961762018766.23459271762020096.98681351762101868.87471441762105814.20747041762117386.51707461762172536.0202071762175528.28611851762182329.89773131762184577.847421762200953.02406841762253192.46915271762287934.7201151762422643.67606431762522533.03694341762528028.09290721762604673.09312731762616332.89323471762622168.34792021762622653.81842371762623239.4300881762685869.81218481762686662.3993391762687533.77702381762690043.77134161762690640.88656691762695418.03792051762709145.42883351763297104.580981763299241.28969961763302424.11725041763302843.86228871763303656.57493881763308095.12544541763314434.7122511763369939.32778621763382952.35389781763386880.2573951763389202.88072281763392117.76956531763546287.4585961763642087.21390341763659970.05781651763789967.2350981763795214.27324411763919897.74203251763924530.93485471763952917.04675961763987168.7900181764011135.03248621764218317.51825621764340352.97474771764360919.5237561764363105.4042141764526965.08457641765187128.96606761765355457.20101881765360544.06178261765361150.35600881765365518.7660051765557551.37651371765634926.0382451765640618.16870021765643253.3146741765643519.69737031765644942.7686081765650850.12580161765723889.33895751765725272.58981011765801621.52776551765879692.79019981765881108.2923851765890266.88562971765904510.36874341766061002.58671021766125878.0924161766175231.09851151766925374.73368381766996893.3731451767005790.16068861767008228.98308441767008524.3519591767008722.277691767009786.6732971767010541.95609551767013276.2328151767014306.68311551767015117.66693161767016373.33748561767086094.86997441767091943.21654251767092201.60667631767092814.322511767093453.33107881767270242.21536641767408827.13386231767450501.75768571767523607.15288781767524436.25480221767526671.70246891767540425.50893971767603172.05479241767608491.66707541767609798.80080491767780009.40121251767781869.36996481767783204.39632751767790049.159871767794832.20550161767797154.26203081767804637.35404421767805344.88099361767806485.79580351767862570.84585951767875104.49013021767876387.1385631767878636.14207961767880873.36738281767886064.7900161767887927.80501461767888628.77220651767894802.7501641767896425.17220471767954580.81757711767965181.28974031767970332.55244421767976705.94087121767978150.31396751767979970.38509061767982341.54357241768045908.30165961768048075.19306331768053087.31861191768053335.17539641768053645.28298431768057005.33032661768066054.97335241768079709.17248341768086210.00448131768134738.7489611768294958.7072611768308509.28162381768315525.73615461768317971.54583171768324985.50381061768384450.31180241768384903.74312451768388680.90803861768392012.94858881768393585.3805781768393995.64151621768397007.99611141768406785.83768421768407489.64632871768409265.181261768551967.76439951768562217.99268051768610315.5459591768648558.153921768750832.0425951768752477.22225881768754282.39400241768796055.877771769188973.98886591769356219.91804651769431235.54304531769520922.91533951769599853.44837931769601389.59619861769602998.44604521769608654.73905181769610587.53120471769613698.73730281769726072.5167361769754197.50043941769755012.88609891769788320.73522931769858771.11245351769880002.6400221769942094.34304521769950759.62865611770017332.54535651770029686.73525791770030911.36921741770035196.27489521770078295.91910531770155819.04716871770156062.72328571770198607.2284711770216427.27850631770217725.82147841770285886.35344841770290884.90398961770293022.25364641770293820.08989361770294246.49858431770296115.1938441770299476.89053541770304820.12695341770352845.59949111770360288.23392491770367647.6183741770375651.93329671770377722.19474721770388368.43299151770448360.88149361770474728.24455641770481662.81833741770482589.88003921770488483.83722141770547899.68135141770552992.3148081770630929.81703331770633593.05083631770639855.45341871770641556.83762381770666283.9656191770678866.937431770713538.44122551770808102.5597981770808949.6446791770809499.2195741770810416.91006471770899285.98089671771076383.70956751771153651.76371071771164919.83956381771165092.99137471771174054.22143321771175340.04150221771177045.09119531771185402.94351391771244500.35640861771600069.33150391771684144.1958011771757051.82674771771764404.84740111771780335.22727061771837797.45328641771839342.36841251771972863.80090481772004107.47609931772039629.94084841772097117.20003531772109451.20020151772125675.95705031772125857.190021772183872.96083351772280443.39041772295620.44625071772297315.33010551772298006.16521671772298862.35013271772328483.23607921772383354.17270871772383859.67349171772453976.5166041772713474.08007761772764991.76435041772787200.42355971772810020.21219421772905521.24598431772967859.26760581772984277.1005431772986433.85609721773059860.61029891773145094.80025391773145911.42583251773209770.56137851773327542.94483571773342123.46900181773389597.40498381773414356.9681911773416039.479741773416217.71348381773419126.79226261773433373.38669231773436829.7128131773496559.35769411773508591.08885051773526120.85893461773531469.85906171773532861.86214071773533352.6592681773664068.5733641773923117.08077051774116655.5106381774122638.22514531774123641.88898591774125088.17211991774165485.80263611774173634.33903151774178999.34086061774183816.01904231774191744.71987271774268550.01723621774527788.46656441774873687.7349881774875923.54350611774876751.77354171774880838.67538051774881356.113411775230959.73582771775232675.9200561775235024.41129371775242021.88784241775312892.665391775318498.7480911775319347.16049271775322263.85051471775381212.6245531775402348.91712781775462820.18094781775464128.60385511775478288.9307221775492883.68803621775494355.61733411775551100.70342451775737468.23703461776083199.4409181776342248.38125251776343741.35873751776344656.84962031776344823.2718941776494663.58264471776500579.0558131776513568.45815661776515798.23732261776521467.21749231776525755.44738361776530770.69265341776586552.67150241776602163.0317081776602999.49911571776688068.9822271776732694.04593831777121040.04677321777124071.1219561777126020.42327551777134818.39440461777287314.63329941777293598.26220231777363083.66518071777893423.46401861777895088.46678451777895860.43515851777897093.3858841777906171.800171777971134.0487721778058288.40560981778240440.64545181778329365.76004721778330451.60289481778332821.17423941778334531.54666111778342595.05410931778399875.18376181778419689.60360841778424127.0708861778487982.02455741778490235.47887951778512722.16216681778513868.5482841778514150.02312251778579208.82636931778579750.70454621778592818.33435651778593837.24621341778690465.584721778695987.13411741778697526.6658811778761332.9720331778822349.00370981778843702.19216871778918473.19561221778921342.1787031778931726.05583721778934249.29012421778934437.7146981778937818.14839361778942880.65417721778943688.6406221778945937.1907251778948525.945271779010660.48089271779012402.8849981779013545.70784571779014082.44581171779018379.58577371779019598.37050581779031500.34276341779032724.80927351779036530.4997151779039779.62068941779093071.12585621779097835.65313321779098505.47838691779100146.64374641779105919.20712781779107140.5768891779176813.17461751779177591.00395081779179103.9485821779179883.46228861779185903.12827781779188010.30328131779188332.78576521779199711.64825681779291274.87059261779375116.30314351779711775.9329841779718782.88222651779719462.58929511779720087.20665341779729556.75550171779729838.27185651779809157.15284131779811618.10328821779819147.38901331779821301.30405041779866487.12891531779872294.22598481779971079.62741731780155829.02630381780156437.50365951780156947.1906751780160264.74311021780167393.25985981780170098.30806231780172747.63186741780387294.64188241780398187.88314941780404797.27766011780815769.00067281780829125.25964361780848886.74698451780921520.99491741781093734.38310651781096055.84976481781098042.90676521781099588.2129331781102762.92132381781180914.85429571781261527.5583841781262166.32642581781262455.47228241781266268.58414151781354356.52117321781354995.9694651781355856.93816971781536853.31092361781703806.92632481781709239.78021071781709649.70756981781712321.38379761781718337.83594421781766440.45514631781770420.25207661781771329.15113041782058868.15240241782060757.39437151782114840.01730421782116626.14168121782118278.46144271782206800.38508151782208690.2186571782214986.56640481782215911.93149111782216753.3375161782217861.1438531782220507.59964751782221119.53614691782387963.94272471782391037.86762831782397174.43466951782400827.49992321782403418.57682781782407552.49232911782471685.10908841782486056.42131281782491119.7754541782492484.88775631782494767.62891581782495119.03816651782496927.16670061782502951.5276581782545134.69273971782631015.85844421782637542.97413681782647782.39912581782655816.30765841782665041.4627811782665991.96139241782667360.25157431782667581.47708061782737511.11845541782741219.0173351782808797.46143821782821919.54439121782822150.20869351782822770.9247681782827640.9542741782995600.16514921783076003.8864451783168083.37299471783169337.93949561783170232.14352231783171152.32074671783171554.32837651783174151.23807241783175503.07197071783176066.03923421783177692.68739181783179012.4248781783180240.505071783181436.92591291783278283.35669681783292257.8646151783517394.68319441783519695.6277161783678055.17990521783690220.13936731783712582.08824041783728419.41365361783729135.00310421783759453.8615671783761470.83648281783762862.82867961783766534.35036041783789595.08747321783930190.16791941783945570.6136721783954524.23125741783961828.6792711784028298.10868841784032600.80211161784036466.34077051784275841.48916361784366399.8074531784372627.88642331784374143.74483511784381186.08228351784389911.60351871784391089.69298031784392820.7430641784441094.15184241784454226.16887471784463132.38275381784464955.09228731784465761.79993341784466473.52550131784534975.79487631784608840.64008361784627943.05730491784637204.21883181784657189.48320531784657361.00413231784705158.30658131784715027.92925261784717991.8883981784733191.58883381784800377.45267271784812026.23560981784813186.95499831784814275.7592081784814470.29561351784818774.22292831784885821.62646681784901088.03214721784911607.10147881784916194.16596481784972617.54671784972803.68592141784973536.44179941784984817.86716681784986067.89907431784991877.94465471784998142.43659141785077031.5503931785084617.6083441785085343.4737631785086642.81846361785089769.95803481785137621.71359851785148601.48444631785172866.56524541785183014.3988751785218740.09921071785226243.70275641785228013.18298631785231361.67605071785240404.4484591785351675.21743441785496949.62526921785497755.40492131785677473.9457911785682237.71711851785766885.1947461785767243.61589121785772605.15616921785780183.1826661785782828.58324171785844265.65100531786268630.51386521786268947.91257071786269779.52634531786270697.67045071786277480.71831921786277724.14191751786281462.37932561786283154.36108371786283465.1903721786287166.76432871786289748.3343981786291875.15268561786293725.95022321786348241.80029181786352220.4185581786361747.21840071786366233.6671131786371555.18662381786372824.49700121786373802.18644671786377861.78411321786396710.64104411786403578.61991981786404487.37806181786404734.32843161786405449.91876441786436596.65412431786447073.79378181786447522.7193891786448405.54787921786449471.29032681786451444.1795711786452347.886241786452593.9396731786452926.5358991786456312.5733451786460743.97798971786463552.7407611786467845.41169861786474469.07857231786500206.03659271786562450.2208571786624610.81183391786686613.90171031786707650.41359851786728713.556651786729513.55272531786732847.73948051786775661.46056441786793299.49886561786793752.87393641786795187.76700571786795492.19988731786796902.2267191786864030.39654251786877454.05324031786878224.85780861786878707.51193381786880196.6659971786889576.6266361786896123.18303631786897808.01330881786959914.86220031786969834.2895571787034435.40246821787037132.78288671787041876.14791921787043670.97637461787052232.21001531787053261.528911787054828.71881531787057097.76064941787057270.45106361787080328.38963961787098382.79672071787212927.31802031787213906.47958251787391536.60465361787405049.95616221787413076.39776441787414062.51431941787415564.08572081787416411.7572251787418017.1897991787561357.46756271787562310.27913551787563996.93383121787565091.77498411787574301.54038881787588201.00754211787593104.40193721787642026.60537821787673561.52608231787674329.7224761787674711.51707051787677464.49858241787678337.43698141787681688.66121481787683130.10403851787687695.57127761787689287.68309451787690616.81437441787701810.4492311787703668.7168161787707222.34974881787708366.0833051787833483.0882821788012363.8917741788014226.56514121788014444.46203181788014831.32849721788027556.80003211788028811.14085361788029847.54328011788032884.15895151788037518.85965231788040681.6379951788076734.7216161788077227.50776861788077813.40856151788080193.68758751788083119.7505771788083817.84018371788095059.20750331788095390.66399481788097229.3971761788097679.40907861788098003.1718191788098465.73136541788102309.51320241788109877.86712551788112950.73934821788122140.83618191788172558.95067521788349675.492953
8ix0cr54yru5bu46bnebi8gp73uowb5
Template:Tabel
10
82675
759910
759809
2026-09-02T06:33:59Z
Rachmat04
26096
Reverted [[Special:Diff/759809|edit]] by Rachmat04 · [[w:id:Pengguna:Rachmat04/Tengu.js|⛩️]]
759910
wikitext
text/x-wiki
{| class="wikitable" style="margin-left: auto; margin-right: 0px; width: 40%;"
|-
|+ {{{1}}}
|-
| style="text-align: center; background: green;" | {{{2}}}
|-
| style="text-align: center; background: #353567;" | {{{3}}}
|-
| style="text-align: center;" | {{{4}}}
|}
f3ttn6i8lpam1p7wmlagrbfslyxgsmd
IOS
0
97325
759893
757492
2026-09-01T20:02:29Z
~2026-47401-05
75484
/* */
759893
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}}asdfdASA
asdf1aaS1
[[File:Dhole(Asiatic wild dog).jpg|thumb| alt=Red brown Dhole standing alert in green meadow | Brown fox2]]
[[File:June odd-eyed-cat cropped.jpg|thumb]]
[[File:Landsvale.jpg|thumb| Blue bird]]
[[File:Synchiropus splendidus 2 Luc Viatour.jpg|thumb]]
Test RS 3
Test
SdF
Test RS
Temp account edit
Test temp 6
Test TS 3
....
Sfffs
[https://eff.org http://eff.org]
I think '''animals''' are neat and very cute
temp account [[testing]] more
Test2
Testing
Testing 218
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]
57tb0f74rj8cgg2ocfgtf9sesj24gva
AVT
0
107346
759903
747067
2026-09-02T00:06:12Z
InternetArchiveBot
34092
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
759903
wikitext
text/x-wiki
{{Underlinked|date=tháng 11 năm 2016}}
{{Thông tin nhạc sĩ
| tên = Ban Kích động Nhạc AVT
| hình =
| kích thước hình =
| chú thích hình =
| phong cảnh =
| nền = group_or_band
| nghệ danh =
| nguyên quán = Sài Gòn
| thể loại =
| năm hoạt động = 1958–2008
| hãng đĩa =
| hợp tác với =
| ca khúc = <!-- Ca khúc tiêu biểu -->
| url =
| thành viên hiện tại = Lữ Liên, Thúy Liệu (1988), Hoàng Long (1992)
| thành viên cũ = Anh Linh, Vân Sơn và Tuấn Đăng, Hoàng Hải (1962), Lữ Liên (1966)
| module =
| module2 =
| module3 =
}}
'''Ban tam ca trào phúng''' '''AVT''' có tên đầy đủ là Ban Kích động Nhạc AVT nổi tiếng với những bản nhạc với những lời ca dí dỏm, châm biếm. Test.
==Ban nhạc ==
Ban AVT được thành lập năm 1958, gồm các ca nhạc sĩ Anh Linh, Vân Sơn và Tuấn Đăng. Họ là nhân viên dân chính và [[Hạ sĩ|Hạ sĩ]] Quan thuộc [[Đại đội|Đại đội]] {{Done}} Văn Nghệ (Ban Ca) [[Tiểu đoàn|Tiểu đoàn]]{{Done}} Văn Nghệ - Nha Chiến tranh Tâm lý. Vì lúc đó Thiết Quân Luật nên Ban Tam ca AVT ban đêm phải trốn ra hát thường trực tại Phòng trà Anh Vũ, đường [[Bùi Viện|Bùi Viện]]{{Done}} (Sài Gòn) (nay là [[Thành phố Hồ Chí Minh]]), từ 9 giờ tối tới 2 giờ sáng.<ref>[http://sonomavietnamese.org/html/nghethuat/amnhac/avt.html BAN KÍCH ĐỘNG NHẠC AVT] {{Webarchive|url=https://web.archive.org/web/20160321160109/http://sonomavietnamese.org/html/nghethuat/amnhac/avt.html |date=2016-03-21 |title=BAN KÍCH ĐỘNG NHẠC AVT}}, Anh Linh,sonomavietnamese, 1.2.2009</ref>
Khi Anh Linh tức Trung Sĩ Trần Đình Kế theo học Khóa 3 [[Sĩ quan|Sĩ quan]]{{Done}} đặc biệt vào [[Tháng sáu|tháng 6]] năm 1962, nhạc sĩ Hoàng Hải phải đổi tên là Anh Hải để hát thế vào chữ A. Đến năm 1966 thì [[Lữ Liên|Lữ Liên]]{{Done}} vào thế cho Anh Hải.
Nhạc hài của AVT (hầu hết do các nhạc sĩ Lữ Liên và Duy Nhượng sáng tác) phát triển trên nền âm nhạc dân tộc (đặc biệt là [[xẩm]], các làn điệu [[Dân ca|Dân ca]]{{Done}} [[Bắc Bộ Việt Nam|Bắc Bộ]]{{Done}} và [[Miền Trung (Việt Nam)|Trung Bộ]]{{Done}}) nên nghe rất gần gũi mà cũng rất vui nhộn. Ra sân khấu biểu diễn, AVT diện khăn đóng, áo gấm thụng ba màu khác nhau. Mỗi người sử dụng một nhạc cụ dân tộc: Đàn sến (Tuấn Đăng), Đàn cò (Đàn nhị) (Lữ Liên) và Trống (Vân Sơn). Khi có những câu thoại thì mỗi người nói rặt giọng của mỗi miền Bắc, Trung, Nam.
Sau ngày Việt Nam thống nhất (30/04/1975), Lữ Liên sang Hoa Kỳ lập một ban AVT mới cũng gồm 3 người, trong khi Anh Linh là sĩ quan bị tù cải tạo tại Hoàng Liên Sơn, Vĩnh Phú, Vân Sơn chết lúc chạy trốn Cộng sản khi nhảy xuống cầu [[Thị Nghè|Thị Nghè]]{{Done}} và Tuấn Đăng còn ở lại đánh đàn tại Tiếng Dương Cầm khu cư xá Sĩ Quan Chí Hoà đường Lê văn Duyệt cũ. Theo [[tin]] vào năm 2016, trước đây khi Tuấn Đăng còn khỏe, thu nhập chính của ông là kéo violon cho ca đoàn Nhà thờ Hầm Đá – quận 11, TPHCM và biểu diễn violon ở một vài tụ điểm để có tiền mua gạo mỗi ngày.<ref>[http://nld.com.vn/van-hoa-van-nghe/thanh-vien-cuoi-cung-cua-nhom-avt-dang-khon-kho-20160315112742374.htm Thành viên cuối cùng của nhóm AVT đang khốn khó ], nld, 1.2.2009</ref>
Ngoài ra, Ban nhạc AVT cũng đã góp mặt trong cuốn [[DVD|DVD]]{{Done}} Asia 10 "Gởi người một niềm vui" (ghi hình tại [[Montréal]], [[Canada]] vào năm 1996) và thu âm 2 CD, đều được [[Trung tâm Asia]] (trụ sở tại [[Hoa Kỳ]]) sản xuất và phát hành vào năm 1992
# ASIA CD 31 - Tướng Sỹ Tượng - gồm 7 bài
# ASIA CD 44 - AVT Hải Ngoại - gồm 6 bài
==Chú thích==
==Liên kết ngoài==
* [http://www.cgvdt.vn/van-hoa-nghe-thuat/nghe-si-tua-n-dang-ban-avt-vi-da-ng-cuo-c-do-i_a3006 Nghệ sĩ Tuấn Đăng (Ban AVT) – Vị đắng cuộc đời] {{Webarchive|url=https://web.archive.org/web/20200204193354/http://www.cgvdt.vn/van-hoa-nghe-thuat/nghe-si-tua-n-dang-ban-avt-vi-da-ng-cuo-c-do-i_a3006 |date=2020-02-04 }}, [[Báo Công giáo và Dân tộc]]
[[Thể loại:Văn hóa Việt Nam Cộng hòa]]
[[Thể loại:Ban nhạc Việt Nam]]
[[Thể loại:Ngâm sĩ]]
test
test
sbdvtah3kb97bzx3rzma57l3hi6jl22
User:SongVĩ.Bot II
2
124239
759885
759817
2026-09-01T17:00:24Z
SongVĩ.Bot II
52414
[[User:SongVĩ.Bot II|Task 0]]: Đã 1709 ngày...
759885
wikitext
text/x-wiki
Cập nhật lần cuối: 02-09-2026
Đã 1709 ngày...
78oluomko2dkl2ip5a2r1p4yn2zwk8d
Usuario:Mormegil/Taller/Sitelinked1
0
146803
759869
759859
2026-09-01T12:31:19Z
~2026-47710-15
75472
test
759869
wikitext
text/x-wiki
Sitelink test #1, see [[testwikidata:Q226473]]. Test
Test12345
test
test
hyolzingqo01wvtk064a26vls8qvsyz
759870
759869
2026-09-01T12:31:41Z
~2026-47710-15
75472
test
759870
wikitext
text/x-wiki
Sitelink test #1, see [[testwikidata:Q226473]]. Test
Test12345
test
test
test
tl8jz9tx3gesj00oxzvsxcql8uv8z1w
759871
759870
2026-09-01T12:32:08Z
~2026-47710-15
75472
test
759871
wikitext
text/x-wiki
Sitelink test #1, see [[testwikidata:Q226473]]. Test
Test12345
test
test
test
test
rrcw44srr8pw1cy86gf686b44js2qzs
759872
759871
2026-09-01T12:33:10Z
~2026-47710-15
75472
testsfdsfds
759872
wikitext
text/x-wiki
Sitelink test #1, see [[testwikidata:Q226473]]. Test
Test12345
test
test
test
test
t
test
ntvzq4wa0qf8ij3vnbnx5a4ajblgymu
759873
759872
2026-09-01T12:42:40Z
~2026-47710-15
75472
test
759873
wikitext
text/x-wiki
Sitelink test #1, see [[testwikidata:Q226473]]. Test
Test12345
test
test
test
test
t
test
test
2hn5jidvh5bi3gmoc9rlanwvav3swvd
759874
759873
2026-09-01T12:44:46Z
~2026-47710-15
75472
a
759874
wikitext
text/x-wiki
Sitelink test #1, see [[testwikidata:Q226473]]. Test
Test12345
test
test
test
test
t
test
test
a
n7jslkidtjhea0v922a6lebrmkerrjl
File:MP sounds-pwb.png
6
152343
759945
759781
2026-09-02T11:50:49Z
Pywikibot-test
23124
Pywikibot-test uploaded a new version of [[File:MP sounds-pwb.png]]
574679
wikitext
text/x-wiki
pywikibot test
mvex885are6ahaz42kwh4kn9swdrp8i
759947
759945
2026-09-02T11:52:59Z
Pywikibot-test
23124
Pywikibot-test uploaded a new version of [[File:MP sounds-pwb.png]]
574679
wikitext
text/x-wiki
pywikibot test
mvex885are6ahaz42kwh4kn9swdrp8i
User:Max/common.js
2
153341
759922
757662
2026-09-02T08:00:34Z
Max
57656
Installing [[User:Max/NPPChecklistProto.js]] ([[mw:Script Manager]])
759922
javascript
text/javascript
// force an ombox to show up on Twinkle preferences page. for testing a patch
//window.TwinkleConfig = true;
// mw.loader.load('https://en.wikipedia.org/wiki/MediaWiki:Gadget-Twinkle.js?action=raw');
mw.loader.load('http://127.0.0.1:5500'); // twinkle dev
window.afchSuppressDevEdits = false;
mw.loader.load('https://en.wikipedia.org/w/index.php?title=User:Novem_Linguae/AFC-submit-wizard.js&action=raw&ctype=text/javascript'); // afc submit wizard
// importScript('User:Novem Linguae/Scripts/UserRightsDiff.js'); // Backlink: [[User:Novem Linguae/Scripts/UserRightsDiff.js]]
// mw.loader.load('/w/index.php?action=raw&ctype=text/javascript&title=User:Novem%20Linguae/Scripts/UserRightsDiff.js');
//mw.loader.load('https://en.wikipedia.org/w/index.php?action=raw&ctype=text/javascript&title=User:Enterprisey/unblock-review.js');
//mw.loader.load('https://test.wikipedia.org/w/index.php?action=raw&ctype=text/javascript&title=User:Novem_Linguae/unblock-review.js');
mw.loader.load('http://localhost/Code/unblock-review/unblock-review.js');
mw.loader.load('https://test.wikipedia.org/w/index.php?action=raw&ctype=text/javascript&title=User:Novem_Linguae/delsort.js');
//mw.loader.load('https://en.wikipedia.org/w/index.php?action=raw&ctype=text/javascript&title=User:Novem_Linguae/Scripts/GANReviewTool.js');
importScript('en:User:Novem_Linguae/Scripts/GANReviewTool.js');
importScript('en:User:Novem Linguae/Scripts/CiteHighlgihter.js');
importScript('User:DreamRimmer/test.js');
/*
mw.loader.using(['ext.gadget.morebits']).then(function() {
importScript('simple:MediaWiki:Gadget-Twinkle.js');
});
*/
importScript('en:User:Novem Linguae/Scripts/anrfc-lister.js');
//importScript('en:User:Ajbura/anrfc-lister.js');
mw.loader.load('http://127.0.0.1/Code/wikipedia-scripts/User scripts/sandbox-testwiki.js');
//importScript('en:User:TheTechie/tut.js');
// Dev version of XFDcloser
var xfdcDevUrl = "http://localhost:8125/dist/loader-dev.js";
mw.loader.getScript(xfdcDevUrl).catch(function(e) {
e.message += " " + xfdcDevUrl;
console.error(e);
});
mw.loader.load('http://localhost:4444?ctype=text/javascript&title=afch-dev.js', 'text/javascript');
$(document).ready(function() {
$('body').on('click', '.mw-thanks-thank-link', function(e) {
e.preventDefault();
var targetUrl = $(this).attr('href');
$.post(targetUrl);
});
window.confirm = function() {
return true;
};
});
if (mw.config.get('wgPageName') === 'Test') {
var sourcePage = mw.config.get('wgPageName');
var userPage = mw.config.get('wgServer') + '/wiki/User:DreamRimmer';
mw.notify('You have been redirected from "' + sourcePage + '" to "' + userPage.split('/wiki/')[1] + '". If you’d like to stop this redirection, you can disable it in your common.js.');
window.location.href = userPage;
}
mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Max/NPPChecklistProto.js&action=raw&ctype=text/javascript'); // Backlink: [[User:Max/NPPChecklistProto.js]]
dn515teycavaxg4kxsxhtv06a77ksho
User:Wladek92
2
153426
759880
738754
2026-09-01T15:02:17Z
Wladek92
41245
759880
wikitext
text/x-wiki
This is the main page of -> https://'''test'''.wikipedia.org/wiki/User:Wladek92
Informations have been removed from here due to a cracking attempt.
Please request the standard user informations for more.
[[Special:LanguageStats|What to do ?]]
My bookmarks:
* https://test.wikipedia.org/wiki/Special:NewArticle créer un article
* https://test.wikipedia.org/wiki/EasyTimeline
m1zw7e928tko4qbbxmoxquqdj9gxxry
File:MP sounds-pwb-chunked.png
6
155656
759946
759780
2026-09-02T11:52:29Z
Pywikibot-test
23124
Pywikibot-test uploaded a new version of [[File:MP sounds-pwb-chunked.png]]
594044
wikitext
text/x-wiki
pywikibot test
mvex885are6ahaz42kwh4kn9swdrp8i
User:Unicodesnowman/DeleteMark
2
166403
759940
759775
2026-09-02T11:46:02Z
Pywikibot-test
23124
pywikibot unit test. Do NOT actually delete.
759940
wikitext
text/x-wiki
{{delete|1=pywikibot unit test. Do NOT actually delete.}}
Pywikibot deletion test.
dcftqsyyicveaaxsx5yic8hvklv2iue
759941
759940
2026-09-02T11:46:12Z
Pywikibot-test
23124
Pywikibot unit test
759941
wikitext
text/x-wiki
Pywikibot deletion test.
l5a6iw696mbwr7beiudqo7xxpg7k54m
User:A smart kitten/T398056/sub
2
166804
759924
664511
2026-09-02T08:20:13Z
Ziv
65531
([[c:GR|GR]]) [[File:Fox.jpg]] → [[File:Red fox in snow, Estonia.jpg]] [[c:COM:FR#FR2|Criterion 2]] · More precise and not just a meaningless one word name
759924
wikitext
text/x-wiki
[[file:Red fox in snow, Estonia.jpg|1px|class=pageimage]]
1f83enpen81fmfyggy42149qgbki5p1
Test gallery
0
166967
759925
665280
2026-09-02T08:20:14Z
Ziv
65531
([[c:GR|GR]]) [[File:Fox.jpg]] → [[File:Red fox in snow, Estonia.jpg]] [[c:COM:FR#FR2|Criterion 2]] · More precise and not just a meaningless one word name
759925
wikitext
text/x-wiki
<gallery class=notpageimage>
File:Server.jpg
File:Red fox in snow, Estonia.jpg
</gallery>
9pcll8nef9qhiv7wykh0bneaqyy2ekh
User:Chaotic Enby/common.js
2
167447
759886
759802
2026-09-01T19:27:45Z
Chaotic Enby
58843
new version
759886
javascript
text/javascript
mw.util.addPortletLink( 'p-personal', 'https://test.wikipedia.org/wiki/User:Chaotic Enby/common.js', 'Scripts', 'pt-scripts', '', null, '#pt-articles' );
/* ------------------------------------------------- */
mw.loader.load('//meta.wikimedia.org/wiki/User:Dev_Jadiya/Convocompass.js&action=raw&ctype=text/javascript');
jn5h8icdumw731x3t09kjkc3ha9q1z0
759887
759886
2026-09-01T19:36:31Z
Chaotic Enby
58843
759887
javascript
text/javascript
mw.util.addPortletLink( 'p-personal', 'https://test.wikipedia.org/wiki/User:Chaotic Enby/common.js', 'Scripts', 'pt-scripts', '', null, '#pt-articles' );
/* ------------------------------------------------- */
mw.loader.load('//meta.wikimedia.org/wiki/User:Dev_Jadiya/Convocompass.js&action=raw&ctype=text/html');
r3lr3pjuqwb7o8kejm6vozgjus8gh86
759888
759887
2026-09-01T19:37:37Z
Chaotic Enby
58843
fuck it, copying everything from https://meta.wikimedia.org/wiki/User:Dev_Jadiya/Convocompass.js if I can't load it properly
759888
javascript
text/javascript
mw.util.addPortletLink( 'p-personal', 'https://test.wikipedia.org/wiki/User:Chaotic Enby/common.js', 'Scripts', 'pt-scripts', '', null, '#pt-articles' );
/* ------------------------------------------------- */
//<nowiki>
/**
* Filename: wiki-talk-page-llm-script.js
* ConvoCompass LLM – Newcomer-oriented talk-page assistance (Wikipedia userscript)
*
* Fork of the live User:Laerdon/ConvoWizard.js (fetched 2026-08-12). Same widget
* detection, corpus extraction, token auth, mute handling, panel DOM, and
* Toolforge transport — but instead of CRAFT tension scores and threshold-
* colored alerts, the panels show:
* - Discussion Summary: a plain-language summary of the ongoing discussion
* - Suggested Reading: 1-3 Wikipedia policy/guideline links with reasons
* both are produced on toolforge (/llm/); this script only renders them.
* an optional assistant.yaml pasted in the widget is sent with start/continue
* and swaps those two panels for one guidance string (llm_response).
* links are built with DOM APIs from server-whitelisted URLs — nothing
* model-authored is ever inserted as HTML.
*/
(async function () {
'use strict';
// ===== ConvoCompass Codex styling (injected) =====
(function injectCodexStyles() {
if (document.getElementById('convocompass-codex-styles')) return;
const css = `
.cc-panel{margin:var(--spacing-50,8px) 0;padding:var(--spacing-75,12px) var(--spacing-100,16px);border-radius:var(--border-radius-base,2px);border:1px solid var(--border-color-subtle,#c8ccd1);border-inline-start:3px solid var(--border-color-progressive,#36c);background-color:var(--background-color-neutral-subtle,#f8f9fa);color:var(--color-base,#202122);font-family:var(--font-family-system,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif);font-size:14px;line-height:1.5;}
.cc-panel__header{display:flex;align-items:center;gap:var(--spacing-50,8px);font-weight:600;font-size:14px;color:var(--color-base,#202122);margin-bottom:var(--spacing-50,8px);}
.cc-panel__icon{color:var(--color-progressive,#36c);flex-shrink:0;}
.cc-panel__title{flex:1;}
.cc-panel__body{font-size:13px;color:var(--color-base,#202122);margin:0;}
.cc-link-item{margin:0 0 var(--spacing-50,8px) 0;}
.cc-link-item:last-child{margin-bottom:0;}
.cc-link{font-weight:600;color:var(--color-progressive,#36c);text-decoration:none;}
.cc-link:hover{text-decoration:underline;}
.cc-reason{color:var(--color-subtle,#54595d);}
.cc-btn{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;font-size:13px;font-weight:500;border:1px solid var(--border-color-base,#a2a9b1);border-radius:var(--border-radius-base,2px);background-color:var(--background-color-base,#fff);color:var(--color-base,#202122);cursor:pointer;line-height:1.2;font-family:var(--font-family-system,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif);}
.cc-btn:hover{background-color:var(--background-color-neutral-subtle,#f8f9fa);border-color:var(--color-progressive,#36c);}
.cc-btn--quiet{border:1px solid var(--border-color-base,#a2a9b1);background-color:var(--background-color-base,#fff);color:var(--color-subtle,#54595d);padding:4px 8px;font-size:12px;}
.cc-btn--quiet:hover{background-color:var(--background-color-neutral-subtle,#f8f9fa);border-color:var(--color-progressive,#36c);}
.cc-btn--progressive{background-color:var(--color-progressive,#36c);border-color:var(--color-progressive,#36c);color:#fff;}
.cc-btn--progressive:hover{background-color:var(--color-progressive--hover,#2a4b8d);border-color:var(--color-progressive--hover,#2a4b8d);}
.cc-btn--muted{background-color:var(--background-color-neutral-subtle,#f8f9fa);}
.cc-note{margin:var(--spacing-50,8px) 0;padding:var(--spacing-50,8px) var(--spacing-75,12px);border-radius:var(--border-radius-base,2px);border:1px solid var(--border-color-subtle,#c8ccd1);background-color:var(--background-color-neutral-subtle,#f8f9fa);color:var(--color-subtle,#54595d);font-size:12px;font-style:italic;display:flex;align-items:center;gap:6px;cursor:pointer;font-family:var(--font-family-system,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif);}
.cc-note:hover{border-color:var(--color-progressive,#36c);}
.cc-form{margin:var(--spacing-50,8px) 0;padding:var(--spacing-100,16px);border-radius:var(--border-radius-base,2px);border:1px solid var(--border-color-progressive,#36c);background-color:var(--background-color-base,#fff);font-family:var(--font-family-system,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif);}
.cc-form__title{font-weight:600;font-size:14px;color:var(--color-base,#202122);margin-bottom:var(--spacing-50,8px);}
.cc-form__desc{font-size:13px;color:var(--color-subtle,#54595d);margin-bottom:var(--spacing-75,12px);line-height:1.5;}
.cc-input{flex:1;padding:6px 8px;font-size:13px;font-family:monospace;border:1px solid var(--border-color-base,#a2a9b1);border-radius:var(--border-radius-base,2px);background-color:var(--background-color-base,#fff);color:var(--color-base,#202122);outline:none;box-sizing:border-box;}
.cc-input:focus{border-color:var(--border-color-progressive,#36c);box-shadow:inset 0 0 0 1px var(--border-color-progressive,#36c);}
.cc-textarea{width:100%;min-height:120px;resize:vertical;}
.cc-row{display:flex;gap:var(--spacing-50,8px);align-items:center;}
.cc-error{font-size:12px;color:var(--color-error,#bf3c2c);margin-top:var(--spacing-50,8px);}
`;
const el = document.createElement('style');
el.id = 'convocompass-codex-styles';
el.textContent = css;
document.head.appendChild(el);
})();
// Load core util module via ResourceLoader
await mw.loader.using(['mediawiki.util', 'mediawiki.user', 'mediawiki.api', 'mediawiki.Title']);
// /llm/ is served on toolforge (gemini lives there). /api/ still proxies
// the live craft study to cornell and is not used by this script.
const SERVER = 'https://convocompass.toolforge.org/llm/';
// ---- UI strings and thresholds ----
const NAME = 'ConvoCompass';
const DEBUG = /(?:\?|&)convowizardDebug=1(?:&|$)/.test(location.search);
const OPTION_KEY = 'userjs-convowizard-token';
const YAML_OPTION_KEY = 'userjs-convocompass-assistant-yaml';
const MAX_YAML_CHARS = 32768;
// matches MAX_ARTICLE_CHARS on toolforge; the server clips again regardless
const MAX_ARTICLE_CHARS = 16384;
const SUMMARY_PLACEHOLDER = `${NAME} is reading this discussion and will summarize it here.`;
const GUIDANCE_PLACEHOLDER = `As you write, ${NAME} will suggest Wikipedia pages here that are worth reading for this discussion.`;
const ASSISTANT_PLACEHOLDER = `${NAME} will write guidance here from your yaml.`;
// Only links whose URL passes this prefix check are ever rendered. The server
// builds URLs from its own whitelist; this is defense in depth.
const ALLOWED_LINK_PREFIX = 'https://en.wikipedia.org/wiki/Wikipedia:';
// Keep ConvoWizard logs quiet by default to reduce console noise on Wikimedia pages.
const nativeConsole = window.console;
const console = {
log: (...args) => {
if (!DEBUG && typeof args[0] === 'string' && args[0].startsWith(`[${NAME}]`)) {
return;
}
nativeConsole.log(...args);
},
warn: (...args) => nativeConsole.warn(...args),
error: (...args) => nativeConsole.error(...args)
};
const isWikipediaHost = /(^|\.)wikipedia\.org$/.test(location.hostname) || location.hostname === 'meta.wikimedia.org';
const namespaceNumber = Number(mw.config.get('wgNamespaceNumber'));
const isTalkNamespace = Number.isFinite(namespaceNumber) && namespaceNumber % 2 === 1;
const isViewAction = mw.config.get('wgAction') === 'view';
// Gadget scope guard: only run on Wikipedia talk pages in normal view mode.
if (!isWikipediaHost || !isViewAction) {
console.log(
`[${NAME}] Skipping page (host=${location.hostname}, ns=${namespaceNumber}, action=${mw.config.get('wgAction')})`
);
return;
}
// ---------- helpers ----------
function throttle(fn, waitMs) {
let last = 0, timer = 0, pendingArgs = null;
return (...args) => {
const now = Date.now();
const remaining = waitMs - (now - last);
if (remaining <= 0) {
last = now;
fn(...args);
} else {
pendingArgs = args;
clearTimeout(timer);
timer = setTimeout(() => { last = Date.now(); fn(...pendingArgs); }, remaining);
}
};
}
// Rewrite Wikipedia URL so the reddit-style backend can extract a post_id.
// Backend does: url.split("comments/")[1][:6]
// We inject "comments/<hash>" where hash is derived from the wiki page path.
function wikiUrlToPostId(href) {
try {
const pagePath = href.split('/wiki/')[1] || href;
// Simple hash to produce a stable 6-char hex id per page
let h = 0;
for (let i = 0; i < pagePath.length; i++) {
h = ((h << 5) - h) + pagePath.charCodeAt(i);
h = h & h;
}
const hex = Math.abs(h).toString(16).padStart(6, '0').slice(0, 6);
return href.split('/wiki/')[0] + '/comments/' + hex;
} catch {
return href;
}
}
async function postJson(route, body) {
try {
const res = await fetch(SERVER + route, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(body)
});
const text = await res.text();
nativeConsole.log(`[${NAME}] response from ${route}: status=${res.status}`, text);
try {
const data = JSON.parse(text);
nativeConsole.log(`[${NAME}] json from ${route}:`, data);
return data;
} catch (err) {
console.warn(`[${NAME}] non-json response from ${route}:`, text);
return {};
}
} catch (err) {
console.warn(`[${NAME}] request failed for ${route}:`, err);
return {};
}
}
function getTokenFromOptions() {
try {
if (mw.user && mw.user.options && typeof mw.user.options.get === 'function') {
const raw = mw.user.options.get(OPTION_KEY);
if (typeof raw === 'string') {
const trimmed = raw.trim();
return trimmed.length > 0 ? trimmed : null;
}
}
} catch (err) {
console.warn(`[${NAME}] Failed to read token from user options`, err);
}
return null;
}
async function persistToken(storageKey, token) {
if (!token) {
localStorage.removeItem(storageKey);
} else {
localStorage.setItem(storageKey, token);
}
if (!(mw.user && mw.user.options && typeof mw.user.options.set === 'function')) {
return;
}
try {
mw.user.options.set(OPTION_KEY, token || '');
await new mw.Api().saveOption(OPTION_KEY, token || '');
console.log(`[${NAME}] ${token ? 'Saved' : 'Cleared'} token in user options (notepad)`);
} catch (err) {
console.warn(`[${NAME}] Could not persist token to user options`, err);
}
}
async function validateToken(token, username) {
try {
const response = await postJson('claim_token', { token, username });
return response.valid === true;
} catch {
return false;
}
}
// ========== CREDENTIAL SETUP ==========
const USERNAME = mw.config.get('wgUserName');
if (!USERNAME) {
console.log(`[${NAME}] Not logged in, skipping`);
return;
}
let TOKEN = null;
const STORAGE_KEY = `ConvoWizard:token:${USERNAME}`;
// Load persisted token (options → localStorage), validate, sync stores
async function loadPersistedToken() {
let token = getTokenFromOptions();
let source = 'options';
if (!token) {
token = localStorage.getItem(STORAGE_KEY);
source = 'localStorage';
}
if (token && typeof token === 'string') {
token = token.trim();
}
if (!token) return;
const valid = await validateToken(token, USERNAME);
if (valid) {
TOKEN = token;
// Sync both stores
if (source === 'options') {
localStorage.setItem(STORAGE_KEY, token);
} else {
await persistToken(STORAGE_KEY, token);
}
console.log(`[${NAME}] Token loaded from ${source}`);
} else {
console.log(`[${NAME}] Persisted token invalid, clearing`);
await persistToken(STORAGE_KEY, null);
}
}
await loadPersistedToken();
let ASSISTANT_YAML = '';
const YAML_STORAGE_KEY = `ConvoCompass:assistantYaml:${USERNAME}`;
function getYamlFromOptions() {
try {
if (mw.user && mw.user.options && typeof mw.user.options.get === 'function') {
const raw = mw.user.options.get(YAML_OPTION_KEY);
if (typeof raw === 'string' && raw.trim()) return raw;
}
} catch (err) {
console.warn(`[${NAME}] failed to read yaml from user options`, err);
}
return null;
}
async function persistYaml(yaml) {
if (!yaml) {
localStorage.removeItem(YAML_STORAGE_KEY);
} else {
localStorage.setItem(YAML_STORAGE_KEY, yaml);
}
// user options can reject large/multiline values; localstorage is the source of truth
if (!(mw.user && mw.user.options && typeof mw.user.options.set === 'function')) {
return;
}
try {
mw.user.options.set(YAML_OPTION_KEY, yaml || '');
await new mw.Api().saveOption(YAML_OPTION_KEY, yaml || '');
} catch (err) {
console.warn(`[${NAME}] could not persist yaml to user options`, err);
}
}
function loadPersistedYaml() {
const fromOptions = getYamlFromOptions();
const fromStorage = localStorage.getItem(YAML_STORAGE_KEY);
const raw = (fromOptions || fromStorage || '').trim();
if (raw && raw.length <= MAX_YAML_CHARS) {
ASSISTANT_YAML = raw;
if (!fromOptions && fromStorage) {
persistYaml(fromStorage);
} else if (fromOptions) {
localStorage.setItem(YAML_STORAGE_KEY, fromOptions);
}
}
}
// article text for the yaml ARTICLE_PAGE block: a plaintext extract of this
// talk page's subject page, fetched once per page load and only while a yaml
// is active (the non-yaml path never uses it).
let ARTICLE_PAGE_TEXT = '';
let articlePagePromise = null;
function ensureArticlePage() {
if (!ASSISTANT_YAML || articlePagePromise) return articlePagePromise;
articlePagePromise = (async () => {
try {
const title = new mw.Title(mw.config.get('wgPageName'));
const subject = title.getSubjectPage();
// non-talk pages are their own subject page; nothing to fetch there
if (!subject || subject.getPrefixedText() === title.getPrefixedText()) return;
const resp = await new mw.Api().get({
action: 'query',
prop: 'extracts',
explaintext: 1,
exsectionformat: 'plain',
redirects: 1,
titles: subject.getPrefixedText(),
formatversion: 2
});
const page = resp && resp.query && resp.query.pages && resp.query.pages[0];
if (page && !page.missing && typeof page.extract === 'string' && page.extract.trim()) {
ARTICLE_PAGE_TEXT = page.extract.trim().slice(0, MAX_ARTICLE_CHARS);
console.log(`[${NAME}] Article extract loaded for "${subject.getPrefixedText()}" (${ARTICLE_PAGE_TEXT.length} chars)`);
} else {
console.log(`[${NAME}] No article extract available for "${subject.getPrefixedText()}"`);
}
} catch (err) {
console.warn(`[${NAME}] Failed to fetch article extract`, err);
}
})();
return articlePagePromise;
}
function llmFields() {
const fields = {};
const yaml = (ASSISTANT_YAML || '').trim();
if (yaml) {
fields.assistant_yaml = yaml;
fields.topic_name = mw.config.get('wgTitle') || '';
if (ARTICLE_PAGE_TEXT) {
fields.article_page = ARTICLE_PAGE_TEXT;
}
}
return fields;
}
loadPersistedYaml();
ensureArticlePage();
console.log(`[${NAME}] === SCRIPT LOADED SUCCESSFULLY ===`);
console.log(`[${NAME}] Server: ${SERVER}`);
console.log(`[${NAME}] User: ${USERNAME}`);
console.log(`[${NAME}] Token: ${TOKEN ? 'present' : 'none (will prompt)'}`);
console.log(`[${NAME}] Assistant yaml: ${ASSISTANT_YAML ? 'present' : 'none'}`);
console.log(`[${NAME}] Page URL: ${location.href}`);
console.log(`[${NAME}] Installing click and mutation observers...`);
// ========== TOKEN INPUT FORM ==========
function showTokenForm(widgetEl) {
// Don't add duplicate forms
if (widgetEl.querySelector('.convowizard-auth-form')) return;
const form = document.createElement('div');
form.className = 'convowizard-auth-form cc-form';
const title = document.createElement('div');
title.className = 'cc-form__title';
title.textContent = `${NAME}: Authorization Required`;
const desc = document.createElement('div');
desc.className = 'cc-form__desc';
desc.textContent = `Please paste your ${NAME} token below to activate the extension.`;
const row = document.createElement('div');
row.className = 'cc-row';
const input = document.createElement('input');
input.type = 'password';
input.placeholder = 'Paste token here';
input.autocomplete = 'off';
input.spellcheck = false;
input.className = 'cc-input';
const btn = document.createElement('button');
btn.type = 'button';
btn.textContent = 'Authorize';
btn.className = 'cc-btn cc-btn--progressive';
const errDiv = document.createElement('div');
errDiv.className = 'cc-error';
errDiv.style.display = 'none';
async function onAuthorize() {
const raw = input.value.trim();
// Input validation: 33 hex chars
if (!/^[0-9a-f]{33}$/i.test(raw)) {
errDiv.textContent = 'Invalid token format. A token is 33 hexadecimal characters.';
errDiv.style.display = 'block';
input.value = '';
input.focus();
return;
}
btn.disabled = true;
btn.textContent = 'Validating...';
errDiv.style.display = 'none';
const valid = await validateToken(raw, USERNAME);
// Clear input immediately after use
input.value = '';
if (valid) {
TOKEN = raw;
await persistToken(STORAGE_KEY, TOKEN);
// Remove all auth forms on page
document.querySelectorAll('.convowizard-auth-form').forEach(f => f.remove());
// Activate the widget
startForWidget(widgetEl);
} else {
errDiv.textContent = 'Token is invalid or expired. Please check and try again.';
errDiv.style.display = 'block';
btn.disabled = false;
btn.textContent = 'Authorize';
input.focus();
}
}
btn.addEventListener('click', onAuthorize);
input.addEventListener('keydown', (e) => {
if (e.key === 'Enter') { e.preventDefault(); onAuthorize(); }
});
row.appendChild(input);
row.appendChild(btn);
form.appendChild(title);
form.appendChild(desc);
form.appendChild(row);
form.appendChild(errDiv);
widgetEl.prepend(form);
input.focus();
}
function yamlButtonLabel() {
return ASSISTANT_YAML ? 'change yaml' : 'load yaml';
}
function syncYamlButtons() {
document.querySelectorAll('.convowizard-yaml-btn').forEach((btn) => {
btn.textContent = yamlButtonLabel();
});
}
function showYamlForm(widgetEl) {
if (widgetEl.querySelector('.convowizard-yaml-form')) return;
const form = document.createElement('div');
form.className = 'convowizard-yaml-form cc-form';
const title = document.createElement('div');
title.className = 'cc-form__title';
title.textContent = `${NAME}: assistant yaml`;
const desc = document.createElement('div');
desc.className = 'cc-form__desc';
desc.textContent = 'paste an assistant.yaml (or drag and drop the file here) to change llm behavior for you. leave empty and apply to go back to discussion summary + suggested reading.';
const textarea = document.createElement('textarea');
textarea.rows = 10;
textarea.placeholder = 'persona:\n name: ...';
textarea.spellcheck = false;
textarea.value = ASSISTANT_YAML || '';
textarea.className = 'cc-input cc-textarea';
const row = document.createElement('div');
row.className = 'cc-row';
row.style.marginTop = '8px';
const btn = document.createElement('button');
btn.type = 'button';
btn.textContent = 'Apply';
btn.className = 'cc-btn cc-btn--progressive';
const cancel = document.createElement('button');
cancel.type = 'button';
cancel.textContent = 'Close';
cancel.className = 'cc-btn';
const errDiv = document.createElement('div');
errDiv.className = 'cc-error';
errDiv.style.display = 'none';
// drag-and-drop a yaml file anywhere on the form; it fills the textarea
// (still requires Apply, so the drop can be reviewed and cancelled)
async function loadYamlFile(file) {
if (!file) return;
if (file.size > MAX_YAML_CHARS) {
errDiv.textContent = `yaml file is too long (max ${MAX_YAML_CHARS} characters).`;
errDiv.style.display = 'block';
return;
}
try {
textarea.value = await file.text();
errDiv.style.display = 'none';
textarea.focus();
} catch (err) {
console.warn(`[${NAME}] could not read dropped file`, err);
errDiv.textContent = 'could not read the dropped file.';
errDiv.style.display = 'block';
}
}
const textareaBorder = textarea.style.border;
function isFileDrag(e) {
return e.dataTransfer && Array.from(e.dataTransfer.types || []).includes('Files');
}
form.addEventListener('dragover', (e) => {
if (!isFileDrag(e)) return;
// preventDefault is what makes the form a valid drop target (and stops
// the browser from navigating to the file); stopPropagation keeps the
// reply widget's own drop handling out of it
e.preventDefault();
e.stopPropagation();
e.dataTransfer.dropEffect = 'copy';
textarea.style.border = '2px dashed #0645ad';
});
form.addEventListener('dragleave', () => {
textarea.style.border = textareaBorder;
});
form.addEventListener('drop', (e) => {
if (!isFileDrag(e)) return;
e.preventDefault();
e.stopPropagation();
textarea.style.border = textareaBorder;
loadYamlFile(e.dataTransfer.files[0]);
});
async function onApply() {
const raw = textarea.value.trim();
if (raw.length > MAX_YAML_CHARS) {
errDiv.textContent = `yaml is too long (max ${MAX_YAML_CHARS} characters).`;
errDiv.style.display = 'block';
return;
}
ASSISTANT_YAML = raw;
await persistYaml(raw || null);
await ensureArticlePage();
syncYamlButtons();
form.remove();
const st = widgetState.get(widgetEl);
if (!st || !TOKEN) return;
const existing = utterancesToExisting(st);
const draft = (st.inputEl.innerText || st.inputEl.textContent || st.inputEl.value || '');
const data = await postJson(draft.trim() ? 'continue' : 'start', {
existing,
new: draft,
reply_id: existing.length > 0 ? existing[existing.length - 1].id : null,
url: wikiUrlToPostId(location.href),
interaction_id: st.interactionId,
token: TOKEN,
username: USERNAME,
...llmFields()
});
if (data && !data.error) {
if (data.interaction_id) {
widgetState.set(widgetEl, { ...st, interactionId: data.interaction_id });
}
handleIntervention(widgetEl, st.inputEl, data);
}
}
btn.addEventListener('click', onApply);
cancel.addEventListener('click', () => form.remove());
row.appendChild(btn);
row.appendChild(cancel);
form.appendChild(title);
form.appendChild(desc);
form.appendChild(textarea);
form.appendChild(row);
form.appendChild(errDiv);
widgetEl.prepend(form);
textarea.focus();
}
function createYamlButton(widgetEl) {
const btn = document.createElement('button');
btn.type = 'button';
btn.className = 'convowizard-yaml-btn cc-btn cc-btn--quiet';
btn.textContent = yamlButtonLabel();
btn.title = 'load or change assistant yaml';
btn.addEventListener('click', (e) => {
e.preventDefault();
e.stopPropagation();
showYamlForm(widgetEl);
});
return btn;
}
// ---- state + logs ----
const widgetState = new WeakMap();
function cleanupDuplicatePanels() {
const allPanels = document.querySelectorAll('.craftDisplay, .passiveModeDisplay');
const seen = new Set();
allPanels.forEach(panel => {
const pid = panel.id;
if (pid && pid.includes('_')) {
const parts = pid.split('_');
const type = parts[0];
const wid = parts.slice(1).join('_').replace('_d', '');
const key = `${type}|${wid}`;
if (seen.has(key)) panel.remove(); else seen.add(key);
}
});
}
// ========== MUTE THREAD ==========
/**
* Generates a unique thread identifier by combining URL section, DOM position, and content hash.
* Ensures each thread on a page gets a distinct ID for per-thread mute functionality.
*/
function getThreadIdForWidget(widgetEl) {
try {
const urlHash = location.hash ? location.hash.replace('#', '') : 'root';
// Generate DOM path for widget position
const widgetPath = [];
let el = widgetEl;
for (let i = 0; i < 8 && el; i++) {
const parent = el.parentElement;
if (!parent || parent === document.body) break;
const siblings = Array.from(parent.children);
const index = siblings.indexOf(el);
widgetPath.unshift(`${parent.tagName}_${index}`);
el = parent;
}
const domPath = widgetPath.length > 0 ? widgetPath.join('_') : 'unknown';
// Get content-based hash from first comment
const context = getContextStringFor(widgetEl);
let contentHash = '';
if (context && context.length > 0) {
const firstComment = context.split('\n\n')[0] || context.substring(0, 150);
let hash = 0;
for (let i = 0; i < Math.min(firstComment.length, 150); i++) {
const char = firstComment.charCodeAt(i);
hash = ((hash << 5) - hash) + char;
hash = hash & hash;
}
contentHash = Math.abs(hash).toString(36);
} else {
const parentText = widgetEl.parentElement ?
(widgetEl.parentElement.textContent || '').substring(0, 50).trim() : '';
if (parentText) {
let hash = 0;
for (let i = 0; i < parentText.length; i++) {
hash = ((hash << 5) - hash) + parentText.charCodeAt(i);
hash = hash & hash;
}
contentHash = Math.abs(hash).toString(36);
} else {
contentHash = Math.random().toString(36).slice(2, 8);
}
}
return `thread_${urlHash}_${domPath.substring(0, 50)}_${contentHash}`;
} catch (err) {
console.warn(`[${NAME}] Error generating thread ID:`, err);
return `thread_${Date.now()}_${Math.random().toString(36).slice(2, 12)}`;
}
}
function getMutedThreads() {
try {
const storageKey = `ConvoWizard:mutedThreads:${USERNAME}`;
const stored = localStorage.getItem(storageKey);
if (!stored) return new Set();
const threads = JSON.parse(stored);
return new Set(Array.isArray(threads) ? threads : []);
} catch {
return new Set();
}
}
function saveMutedThreads(threadSet) {
try {
const storageKey = `ConvoWizard:mutedThreads:${USERNAME}`;
const threads = Array.from(threadSet);
localStorage.setItem(storageKey, JSON.stringify(threads));
} catch (err) {
console.warn(`[${NAME}] Error saving muted threads:`, err);
}
}
function isThreadMuted(threadId) {
if (!threadId) return false;
const muted = getMutedThreads();
return muted.has(threadId);
}
function toggleThreadMute(threadId) {
if (!threadId) return false;
const muted = getMutedThreads();
const wasMuted = muted.has(threadId);
if (wasMuted) {
muted.delete(threadId);
} else {
muted.add(threadId);
}
saveMutedThreads(muted);
return !wasMuted;
}
/**
* Creates an unmute indicator button that appears when a thread is muted
* Allows users to restore ConvoWizard for a muted thread
*/
function ensureUnmuteIndicator(widgetEl, threadId, widgetId) {
const existingIndicator = widgetEl.querySelector('.convowizard-unmute-indicator');
if (existingIndicator) return;
const indicator = document.createElement('div');
indicator.id = `convowizard-unmute-${widgetId}`;
indicator.className = 'convowizard-unmute-indicator cc-note';
const icon = document.createElement('span');
icon.textContent = '🔊';
icon.style.fontSize = '12px';
const text = document.createElement('span');
text.textContent = `${NAME} is muted for this thread. Click to unmute.`;
text.style.flex = '1';
indicator.appendChild(icon);
indicator.appendChild(text);
indicator.addEventListener('click', async (e) => {
e.stopPropagation();
e.preventDefault();
const newMuteState = toggleThreadMute(threadId);
// Show panels and remove indicator
const contextPanel = document.getElementById(`context_${widgetId}_d`);
const replyPanel = document.getElementById(`reply_${widgetId}_d`);
if (contextPanel) contextPanel.style.display = '';
if (replyPanel) replyPanel.style.display = '';
widgetEl.querySelectorAll('.convowizard-unmute-indicator').forEach(ind => ind.remove());
// Update mute buttons
document.querySelectorAll(`button[data-thread-id="${threadId}"]`).forEach(btn => {
btn.textContent = '🔇 Mute thread';
btn.title = 'Mute ConvoWizard for this thread';
btn.classList.remove('cc-btn--muted');
});
// Re-trigger analysis to refresh display
const st = widgetState.get(widgetEl);
if (st && st.inputEl) {
// Re-run the continue request to refresh the display
const inputText = st.inputEl.innerText || st.inputEl.textContent || st.inputEl.value || '';
if (inputText.trim().length > 0) {
const existingForContinue = utterancesToExisting(st);
const data = await postJson('continue', {
existing: existingForContinue,
new: inputText,
interaction_id: st.interactionId,
token: TOKEN,
username: USERNAME,
...llmFields()
});
if (data && !data.error) {
handleIntervention(widgetEl, st.inputEl, data);
}
} else {
const existing = utterancesToExisting(st);
const data = await postJson('start', {
existing,
reply_id: existing.length > 0 ? existing[existing.length - 1].id : null,
url: wikiUrlToPostId(location.href),
token: TOKEN,
username: USERNAME,
...llmFields()
});
if (data && !data.error && data.interaction_id) {
widgetState.set(widgetEl, { ...st, interactionId: data.interaction_id });
handleIntervention(widgetEl, st.inputEl, data);
}
}
} else {
startForWidget(widgetEl);
}
});
// Insert at the beginning of the widget
widgetEl.insertBefore(indicator, widgetEl.firstChild);
}
function createMuteButton(threadId, widgetId, isMuted) {
const btn = document.createElement('button');
btn.type = 'button';
btn.className = 'convowizard-mute-btn cc-btn cc-btn--quiet' + (isMuted ? ' cc-btn--muted' : '');
btn.setAttribute('data-thread-id', threadId);
btn.setAttribute('data-widget-id', widgetId);
btn.style.marginLeft = 'auto';
btn.textContent = isMuted
? '🔊 Unmute thread'
: '🔇 Mute thread';
btn.title = isMuted
? 'Unmute ConvoWizard for this thread'
: 'Mute ConvoWizard for this thread';
btn.addEventListener('click', (e) => {
e.stopPropagation();
e.preventDefault();
const newMuteState = toggleThreadMute(threadId);
// Update button state
btn.textContent = newMuteState
? '🔊 Unmute thread'
: '🔇 Mute thread';
btn.title = newMuteState
? 'Unmute ConvoWizard for this thread'
: 'Mute ConvoWizard for this thread';
btn.classList.toggle('cc-btn--muted', newMuteState);
// Hide/show panels and unmute indicator
const contextPanel = document.getElementById(`context_${widgetId}_d`);
const replyPanel = document.getElementById(`reply_${widgetId}_d`);
const widgetEl = contextPanel?.closest('.ext-discussiontools-ui-replyWidget') ||
replyPanel?.closest('.ext-discussiontools-ui-replyWidget') ||
contextPanel?.closest('.ext-discussiontools-ui-newTopicWidget') ||
replyPanel?.closest('.ext-discussiontools-ui-newTopicWidget');
if (contextPanel) contextPanel.style.display = newMuteState ? 'none' : '';
if (replyPanel) replyPanel.style.display = newMuteState ? 'none' : '';
// Clear textbox background when muting
if (newMuteState) {
const st = widgetState.get(widgetEl);
if (st && st.inputEl) {
st.inputEl.style.setProperty('background-color', 'transparent', 'important');
}
}
if (newMuteState && widgetEl) {
ensureUnmuteIndicator(widgetEl, threadId, widgetId);
} else if (widgetEl) {
widgetEl.querySelectorAll('.convowizard-unmute-indicator').forEach(ind => ind.remove());
}
// Update all mute buttons for this thread
document.querySelectorAll(`button[data-thread-id="${threadId}"]`).forEach(otherBtn => {
if (otherBtn !== btn) {
otherBtn.textContent = newMuteState
? '🔊 Unmute thread'
: '🔇 Mute thread';
otherBtn.title = newMuteState
? 'Unmute ConvoWizard for this thread'
: 'Mute ConvoWizard for this thread';
otherBtn.classList.toggle('cc-btn--muted', newMuteState);
}
});
});
return btn;
}
function ensurePanels(widgetEl, threadId = null) {
cleanupDuplicatePanels();
// Clean up duplicate unmute indicators
const unmuteIndicators = widgetEl.querySelectorAll('.convowizard-unmute-indicator');
if (unmuteIndicators.length > 1) {
for (let i = 1; i < unmuteIndicators.length; i++) {
unmuteIndicators[i].remove();
}
}
const widgetId = widgetEl.id || `widget_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;
if (!widgetEl.id) widgetEl.id = widgetId;
const contextId = `context_${widgetId}`;
const replyId = `reply_${widgetId}`;
const isMuted = threadId ? isThreadMuted(threadId) : false;
// Ensure Context panel
if (!document.getElementById(`${contextId}_d`)) {
const contextBox = document.createElement('div');
contextBox.id = `${contextId}_d`;
contextBox.className = 'craftDisplay cc-panel';
const cheader = document.createElement('div');
cheader.id = `${contextId}_h`;
cheader.className = 'cc-panel__header';
const iconSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
iconSvg.setAttribute('width', '16');
iconSvg.setAttribute('height', '16');
iconSvg.setAttribute('viewBox', '0 0 16 16');
iconSvg.setAttribute('fill', 'currentColor');
iconSvg.setAttribute('class', 'cc-panel__icon');
iconSvg.innerHTML = '<path d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm1 13H7v-2h2v2zm0-3H7V4h2v6z"/>';
const textSpan = document.createElement('span');
textSpan.className = 'convowizard-header-text cc-panel__title';
textSpan.textContent = ASSISTANT_YAML ? `${NAME}: Guidance` : `${NAME}: Discussion Summary`;
cheader.appendChild(iconSvg);
cheader.appendChild(textSpan);
cheader.appendChild(createYamlButton(widgetEl));
if (threadId) {
const muteBtn = createMuteButton(threadId, widgetId, isMuted);
cheader.appendChild(muteBtn);
}
const ccontent = document.createElement('div');
ccontent.id = `${contextId}_p`;
ccontent.className = 'cc-panel__body';
ccontent.textContent = ASSISTANT_YAML ? ASSISTANT_PLACEHOLDER : SUMMARY_PLACEHOLDER;
contextBox.appendChild(cheader);
contextBox.appendChild(ccontent);
if (isMuted) contextBox.style.display = 'none';
widgetEl.prepend(contextBox);
} else if (threadId) {
const existingPanel = document.getElementById(`${contextId}_d`);
if (existingPanel) {
existingPanel.style.display = isThreadMuted(threadId) ? 'none' : '';
}
}
// Show unmute indicator when muted (only if panels don't exist yet)
if (threadId && isMuted && !document.getElementById(`${contextId}_d`) && !document.getElementById(`${replyId}_d`)) {
ensureUnmuteIndicator(widgetEl, threadId, widgetId);
} else if (threadId && !isMuted) {
widgetEl.querySelectorAll('.convowizard-unmute-indicator').forEach(ind => ind.remove());
}
// Ensure Reply panel
if (!document.getElementById(`${replyId}_d`)) {
const replyBox = document.createElement('div');
replyBox.id = `${replyId}_d`;
replyBox.className = 'craftDisplay cc-panel';
const header = document.createElement('div');
header.id = `${replyId}_h`;
header.className = 'cc-panel__header';
const iconSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
iconSvg.setAttribute('width', '16');
iconSvg.setAttribute('height', '16');
iconSvg.setAttribute('viewBox', '0 0 16 16');
iconSvg.setAttribute('fill', 'currentColor');
iconSvg.setAttribute('class', 'cc-panel__icon');
iconSvg.innerHTML = '<path d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm1 13H7v-2h2v2zm0-3H7V4h2v6z"/>';
const textSpan = document.createElement('span');
textSpan.className = 'convowizard-header-text cc-panel__title';
textSpan.textContent = `${NAME}: Suggested Reading`;
header.appendChild(iconSvg);
header.appendChild(textSpan);
if (threadId) {
const muteBtn = createMuteButton(threadId, widgetId, isMuted);
header.appendChild(muteBtn);
}
const content = document.createElement('div');
content.id = `${replyId}_p`;
content.className = 'cc-panel__body';
content.textContent = GUIDANCE_PLACEHOLDER;
replyBox.appendChild(header);
replyBox.appendChild(content);
if (isMuted) replyBox.style.display = 'none';
const preview = widgetEl.querySelector('.ext-discussiontools-ui-replyWidget-preview')
|| document.querySelector('.ext-discussiontools-ui-replyWidget-preview');
if (preview && preview.parentElement) {
preview.parentElement.insertBefore(replyBox, preview.nextSibling);
} else {
widgetEl.append(replyBox);
}
} else if (threadId) {
const existingPanel = document.getElementById(`${replyId}_d`);
if (existingPanel) {
existingPanel.style.display = isThreadMuted(threadId) ? 'none' : '';
}
}
return { replyId, contextId };
}
function updateAssistantPanel(contextId, replyId, response, personaName) {
const box = document.getElementById(`${contextId}_d`);
const p = document.getElementById(`${contextId}_p`);
const h = document.getElementById(`${contextId}_h`);
if (!box || !p) return;
const muteBtn = box.querySelector('.convowizard-mute-btn');
if (muteBtn) {
const threadId = muteBtn.getAttribute('data-thread-id');
if (threadId && isThreadMuted(threadId)) {
box.style.display = 'none';
return;
}
}
if (box.style.display === 'none') box.style.display = '';
p.textContent = response || ASSISTANT_PLACEHOLDER;
if (h) {
const textSpan = h.querySelector('span.convowizard-header-text');
if (textSpan) {
const label = (personaName && String(personaName).trim()) || NAME;
textSpan.textContent = `${label}`;
}
}
const replyBox = document.getElementById(`${replyId}_d`);
if (replyBox) replyBox.style.display = 'none';
}
// Renders the server-provided discussion summary. No scores, no thresholds:
// one neutral style, and a null summary keeps the placeholder text.
function updateSummaryPanel(contextId, summary) {
console.log(`[${NAME}] updateSummaryPanel called - contextId: ${contextId}`);
const box = document.getElementById(`${contextId}_d`);
const p = document.getElementById(`${contextId}_p`);
const h = document.getElementById(`${contextId}_h`);
if (!box || !p) return;
const muteBtn = box.querySelector('.convowizard-mute-btn');
if (muteBtn) {
const threadId = muteBtn.getAttribute('data-thread-id');
if (threadId && isThreadMuted(threadId)) {
box.style.display = 'none';
return;
}
}
if (box.style.display === 'none') box.style.display = '';
p.textContent = summary || SUMMARY_PLACEHOLDER;
if (h) {
const textSpan = h.querySelector('span.convowizard-header-text');
if (textSpan) textSpan.textContent = `${NAME}: Discussion Summary`;
}
}
// Renders the suggested-reading links. Links arrive as
// {shortcut, title, url, reason} with server-whitelisted URLs; everything is
// inserted via DOM APIs (createElement/textContent), never innerHTML.
function updateGuidancePanel(replyId, links, inputEl) {
// The editor background never tints in this condition.
if (inputEl) {
inputEl.style.setProperty('background-color', 'transparent', 'important');
}
const box = document.getElementById(`${replyId}_d`);
const p = document.getElementById(`${replyId}_p`);
const h = document.getElementById(`${replyId}_h`);
if (!box || !p) return;
const muteBtn = box.querySelector('.convowizard-mute-btn');
if (muteBtn) {
const threadId = muteBtn.getAttribute('data-thread-id');
if (threadId && isThreadMuted(threadId)) {
box.style.display = 'none';
return;
}
}
if (box.style.display === 'none') box.style.display = '';
const safeLinks = (Array.isArray(links) ? links : []).filter(
(l) => l && typeof l.url === 'string' && l.url.startsWith(ALLOWED_LINK_PREFIX)
&& typeof l.title === 'string' && typeof l.reason === 'string'
);
p.textContent = '';
if (safeLinks.length === 0) {
p.textContent = GUIDANCE_PLACEHOLDER;
} else {
for (const link of safeLinks) {
const item = document.createElement('div');
item.className = 'cc-link-item';
const a = document.createElement('a');
a.href = link.url;
a.target = '_blank';
a.rel = 'noopener noreferrer';
a.className = 'cc-link';
a.textContent = link.shortcut ? `${link.title} (${link.shortcut})` : link.title;
const reason = document.createElement('span');
reason.className = 'cc-reason';
reason.textContent = ` — ${link.reason}`;
item.appendChild(a);
item.appendChild(reason);
p.appendChild(item);
}
}
if (h) {
const textSpan = h.querySelector('span.convowizard-header-text');
if (textSpan) textSpan.textContent = `${NAME}: Suggested Reading`;
}
}
// ===== Section-scoped context via DiscussionTools comment markers =====
// DiscussionTools brackets every parsed comment with
// <span data-mw-comment-start id="c-Author-<timestamp>..."></span> ... <span data-mw-comment-end="c-..."></span>
// Collecting every marked comment in the enclosing section, in document
// order, up to the reply box gives "what the user sees above the box" —
// including equal-level siblings and {{outdent}}ed threads that the legacy
// ancestor-chain walk (getContextStringFor below, kept as fallback) misses.
const MAX_CONTEXT_UTTERANCES = 12;
function parseAuthorFromCommentId(id) {
// "c-Author_name-2026-05-30T17:19:00.000Z[-...]" -> "Author name"
try {
const m = /^c-(.+?)-\d{4}-\d{2}-\d{2}T/.exec(id || '');
return m ? decodeURIComponent(m[1]).replace(/_/g, ' ') : null;
} catch {
return null;
}
}
function extractMarkedCommentText(startMarker) {
const id = startMarker.id;
let endMarker = null;
if (id) {
try {
endMarker = document.querySelector(`span[data-mw-comment-end="${CSS.escape(id)}"]`);
} catch {
endMarker = null;
}
}
try {
const range = document.createRange();
range.setStartAfter(startMarker);
if (endMarker) {
range.setEndBefore(endMarker);
} else {
// no end marker found: fall back to the containing block's content
const block = startMarker.closest('dd, li, p') || startMarker.parentElement;
if (!block) return '';
range.setEnd(block, block.childNodes.length);
}
const div = document.createElement('div');
div.appendChild(range.cloneContents());
// strip nested reply lists, our own UI, and DT chrome from the excerpt
div.querySelectorAll(
'dl, ul, ol, .ext-discussiontools-ui-replyWidget, .craftDisplay, .passiveModeDisplay, ' +
'.ext-discussiontools-init-replylink-buttons, .convowizard-yaml-form, .convowizard-auth-form, ' +
'.convowizard-unmute-indicator, [role="button"], [data-mw-comment-start], [data-mw-comment-end]'
).forEach(n => n.remove());
return (div.textContent || '').replace(/\s+/g, ' ').trim();
} catch (err) {
console.warn(`[${NAME}] Marker range extraction failed`, err);
return '';
}
}
function findSectionHeading(el) {
let node = el;
while (node && node !== document.body) {
let sib = node.previousElementSibling;
while (sib) {
if (/^H[1-6]$/.test(sib.tagName) || (sib.classList && sib.classList.contains('mw-heading'))) {
return sib;
}
sib = sib.previousElementSibling;
}
node = node.parentElement;
}
return null;
}
// Returns [{id, speaker, text}] in reading order, or null when the page has
// no DiscussionTools markers (caller falls back to the legacy DOM walk).
function collectUtterances(widgetEl) {
const markers = Array.from(document.querySelectorAll('span[data-mw-comment-start]'));
if (!markers.length) return null;
// only comments the user sees above the reply box
let inScope = markers.filter(
m => m.compareDocumentPosition(widgetEl) & Node.DOCUMENT_POSITION_FOLLOWING
);
// ...and only within the enclosing section
const heading = findSectionHeading(widgetEl);
if (heading) {
inScope = inScope.filter(
m => heading.compareDocumentPosition(m) & Node.DOCUMENT_POSITION_FOLLOWING
);
}
const utterances = [];
for (const m of inScope) {
const text = extractMarkedCommentText(m);
if (!text || text.length < 2) continue;
utterances.push({
id: m.id || `c-unknown-${utterances.length}`,
speaker: parseAuthorFromCommentId(m.id),
text
});
}
return utterances.length ? utterances : null;
}
// Single builder for the `existing` array every request sends. Prefers the
// marker-based utterances stored in widget state; falls back to splitting
// the legacy context string on signature timestamps (tolerating "(UTC-4)"
// style user-preference timezones, which the old literal split missed).
function utterancesToExisting(st) {
const key = (st && st.interactionId) || Date.now();
if (st && Array.isArray(st.utterances) && st.utterances.length) {
let list = st.utterances;
if (list.length > MAX_CONTEXT_UTTERANCES) {
list = [list[0]].concat(list.slice(-(MAX_CONTEXT_UTTERANCES - 1)));
}
return list.map((u, i) => {
const item = { id: u.id || `wiki_${key}_${i}`, text: u.text };
if (u.speaker) item.speaker = u.speaker;
return item;
});
}
return ((st && st.context) || '')
.split(/\s*\(UTC[^)]{0,9}\)\s*/)
.filter(text => text.trim().length > 0)
.map((text, index) => ({ id: `wiki_${key}_${index}`, text: text.trim() }));
}
function getContextStringFor(widgetEl) {
try {
console.log(`[${NAME}] === Extracting context for widget ===`);
// Helper to check if element is a comment container
const isCommentNode = (el) => !!el && (el.tagName === 'DD' || el.tagName === 'LI' || el.tagName === 'P');
// Extract clean comment text, removing nested replies and UI elements
// IMPORTANT: Keep timestamps (UTC) because backend splits on them!
const extractCommentText = (el) => {
if (!el) return '';
const clone = el.cloneNode(true);
// Remove nested discussion lists, widgets, and UI elements
// NOTE: DO NOT remove .ext-discussiontools-init-timestamplink - backend needs timestamps to split utterances!
clone.querySelectorAll('dl, .ext-discussiontools-ui-replyWidget, .craftDisplay, .passiveModeDisplay, .ext-discussiontools-init-replylink-buttons, [role="button"]').forEach(n => n.remove());
const text = (clone.innerText || '').trim();
return text;
};
// Wikipedia Talk pages have structure: <dd>comment text<dl><dd>reply<dl><dd>widget
// When widget appears, it's nested inside a new <dd> inside a new <dl>
// We need to find the parent <dd> that contains actual comment text
let commentDD = null;
// Strategy 1: Widget is inside <dd> → <dl> → <dd> (the target comment)
// Find the <dd> containing the widget
const widgetDD = widgetEl.closest('dd, li');
console.log(`[${NAME}] Widget container DD:`, widgetDD ? widgetDD.tagName : 'not found');
if (widgetDD) {
// Check if this DD has meaningful text (not just the widget)
const widgetDDText = extractCommentText(widgetDD);
console.log(`[${NAME}] Widget DD text length:`, widgetDDText.length);
if (widgetDDText.length > 20) {
// This DD has actual comment text
commentDD = widgetDD;
} else {
// This DD is empty/minimal - the widget was just inserted
// Go up: DD → DL → parent DD (which should have the comment)
const parentDL = widgetDD.parentElement;
console.log(`[${NAME}] Parent DL:`, parentDL ? parentDL.tagName : 'not found');
if (parentDL && (parentDL.tagName === 'DL' || parentDL.tagName === 'UL' || parentDL.tagName === 'OL')) {
// Find the parent DD/LI/P that contains this DL
commentDD = parentDL.closest('dd, li, p');
console.log(`[${NAME}] Found parent comment node:`, commentDD ? commentDD.tagName : 'not found');
}
}
}
// Strategy 2: Look for preceding paragraph with comment markers (flat structure)
if (!commentDD) {
console.log(`[${NAME}] Trying flat structure search...`);
let probe = widgetEl;
let hops = 0;
while (probe && hops++ < 10) {
probe = probe.previousElementSibling || (probe.parentElement ? probe.parentElement.previousElementSibling : null);
if (probe && probe.tagName === 'P' && probe.querySelector('[data-mw-comment-start], [data-mw-comment-end]')) {
commentDD = probe;
console.log(`[${NAME}] Found comment via flat search at hop ${hops}`);
break;
}
}
}
// Strategy 3: Last resort - traverse DOM looking for any comment node
if (!commentDD) {
console.log(`[${NAME}] Trying fallback search...`);
let probe = widgetEl;
let hops = 0;
while (probe && hops++ < 20) {
if (isCommentNode(probe) && extractCommentText(probe).length > 20) {
commentDD = probe;
console.log(`[${NAME}] Found comment via fallback at hop ${hops}`);
break;
}
probe = probe.previousElementSibling ||
(probe.parentElement ? probe.parentElement.previousElementSibling : null) ||
(probe.parentElement ? probe.parentElement.parentElement : null);
}
}
if (!commentDD) {
console.warn(`[${NAME}] Could not find any comment node!`);
return '';
}
// Now traverse up the comment chain collecting all parent comments
const texts = [];
const seen = new Set();
let current = commentDD;
let iterations = 0;
console.log(`[${NAME}] Starting comment chain traversal from:`, current.tagName);
while (current && iterations++ < 20) {
if (seen.has(current)) {
console.log(`[${NAME}] Already seen this node, breaking`);
break;
}
seen.add(current);
const text = extractCommentText(current);
if (text && text.length > 0) {
console.log(`[${NAME}] Extracted comment (${text.length} chars):`, text.substring(0, 100) + '...');
texts.unshift(text); // Add to beginning to maintain chronological order
}
// Navigate up the discussion tree
// Structure: <p>text</p><dl><dd>reply<dl><dd>reply</dd></dl></dd></dl>
// From current <dd>, go to parent element (should be <dl>)
const parentList = current.parentElement;
if (!parentList) {
console.log(`[${NAME}] No parent element, stopping`);
break;
}
console.log(`[${NAME}] Parent list:`, parentList.tagName);
// From <dl>, find the parent <dd> or <li> or <p>
if (parentList.tagName === 'DL' || parentList.tagName === 'UL' || parentList.tagName === 'OL') {
// First try to find an ancestor comment node
current = parentList.closest('dd, li, p');
if (current) {
console.log(`[${NAME}] Found ancestor comment:`, current.tagName);
} else {
// No ancestor found - the <p> might be a SIBLING of this <dl>
// This happens in flat structure: <p>comment</p><dl><dd>reply...
console.log(`[${NAME}] No ancestor, searching for previous sibling of DL...`);
let sibling = parentList.previousElementSibling;
let siblingHops = 0;
while (sibling && siblingHops++ < 10) {
console.log(`[${NAME}] Checking sibling:`, sibling.tagName);
if (isCommentNode(sibling) && !seen.has(sibling)) {
const siblingText = extractCommentText(sibling);
if (siblingText.length > 20) {
current = sibling;
console.log(`[${NAME}] Found sibling comment with text (${siblingText.length} chars)`);
break;
}
}
sibling = sibling.previousElementSibling;
}
if (!current || current === parentList.closest('dd, li, p')) {
console.log(`[${NAME}] No more comments found, stopping`);
break;
}
}
} else if (isCommentNode(parentList)) {
// Parent is itself a comment node
current = parentList;
} else {
// Try to find previous sibling comment
let sibling = current.previousElementSibling;
while (sibling && !isCommentNode(sibling)) {
sibling = sibling.previousElementSibling;
}
if (sibling && !seen.has(sibling)) {
current = sibling;
console.log(`[${NAME}] Moving to sibling:`, current.tagName);
} else {
console.log(`[${NAME}] No more siblings, stopping`);
break;
}
}
}
console.log(`[${NAME}] Extracted ${texts.length} comments, total length: ${texts.join('\n\n').length}`);
// Additional pass: Look for any <p> elements with comment markers that might have been missed
// This catches the case where the first comment in a thread is a <p> that's a sibling of the DL
if (commentDD && commentDD.tagName === 'DD') {
const topDL = commentDD.closest('dl');
if (topDL && topDL.previousElementSibling) {
let probe = topDL.previousElementSibling;
let probeHops = 0;
console.log(`[${NAME}] Scanning backwards from top DL for more context...`);
while (probe && probeHops++ < 5) {
if (probe.tagName === 'P' && !seen.has(probe)) {
const probeText = extractCommentText(probe);
if (probeText.length > 20 && (probe.querySelector('[data-mw-comment-start]') || probe.querySelector('[data-mw-comment-end]'))) {
console.log(`[${NAME}] Found additional preceding comment (${probeText.length} chars):`, probeText.substring(0, 100) + '...');
texts.unshift(probeText);
seen.add(probe);
}
}
probe = probe.previousElementSibling;
}
}
}
console.log(`[${NAME}] Final extraction: ${texts.length} comments, total length: ${texts.join('\n\n').length}`);
if (texts.length > 0) {
const fullContext = texts.join('\n\n');
console.log(`[${NAME}] Full context:`, fullContext);
return fullContext;
}
console.warn(`[${NAME}] No context found, returning empty string`);
return '';
} catch (err) {
console.error(`[${NAME}] Error extracting context:`, err);
return '';
}
}
async function startForWidget(widgetEl) {
if (!TOKEN) { showTokenForm(widgetEl); return; }
if (widgetState.has(widgetEl) || widgetEl.getAttribute('data-convowizard-processing') === 'true') return;
widgetEl.setAttribute('data-convowizard-processing', 'true');
console.log(`[${NAME}] Starting widget processing:`, widgetEl.className);
function findInput(scope) {
// Prefer DT textbox role, then VE contenteditable surface, then textarea
return (
scope.querySelector('div[role="textbox"]') ||
scope.querySelector('[contenteditable="true"]') ||
scope.querySelector('.ve-ce-surface [contenteditable="true"]') ||
scope.querySelector('.ve-ce-surface') ||
scope.querySelector('textarea')
);
}
async function waitForInput(scope, timeoutMs = 8000) {
const deadline = Date.now() + timeoutMs;
return new Promise((resolve) => {
const tick = () => {
const el = findInput(scope) || findInput(document);
if (el) return resolve(el);
if (Date.now() > deadline) return resolve(null);
setTimeout(tick, 100);
};
tick();
});
}
const inputEl = await waitForInput(widgetEl);
if (!inputEl) {
console.warn(`[${NAME}] No input element found in widget (after waiting)`);
return;
}
console.log(`[${NAME}] Input element found:`, inputEl.tagName, inputEl.getAttribute('role') || (inputEl.getAttribute('contenteditable') ? 'contenteditable' : ''));
// DiscussionTools markers (real per-comment boundaries + authors).
// We fall back to a legacy ancestor-chain DOM walk.
const dtUtterances = collectUtterances(widgetEl);
let context = '';
if (dtUtterances) {
console.log(`[${NAME}] Context via DT markers: ${dtUtterances.length} comments in section`);
} else {
context = getContextStringFor(widgetEl);
console.log(`[${NAME}] Context via legacy walk (no DT markers), length: ${context.length} chars`);
}
const seedState = { interactionId: Date.now(), inputEl, context, utterances: dtUtterances };
const existing = utterancesToExisting(seedState);
console.log(`[${NAME}] Created ${existing.length} utterances`);
existing.forEach((utt, i) => {
console.log(`[${NAME}] ${i}: ID=${utt.id}${utt.speaker ? ` speaker=${utt.speaker}` : ''}, text=${utt.text.substring(0, 60)}...`);
});
const data = await postJson('start', {
existing, // Send as array like Reddit, not context string!
reply_id: existing.length > 0 ? existing[existing.length - 1].id : null,
url: wikiUrlToPostId(location.href),
token: TOKEN,
username: USERNAME,
...llmFields()
});
console.log(`[${NAME}] Received response from /start:`, data);
// Handle invalid token - clear and show auth form
if (data && data.error === 'Invalid Token') {
TOKEN = null;
await persistToken(STORAGE_KEY, null);
showTokenForm(widgetEl);
return;
}
if (!data || !data.interaction_id) return;
widgetState.set(widgetEl, { interactionId: data.interaction_id, inputEl, context, utterances: dtUtterances });
handleIntervention(widgetEl, inputEl, data);
const sendContinue = throttle(async () => {
const st = widgetState.get(widgetEl);
if (!st) return;
// Check if thread is muted
const threadId = getThreadIdForWidget(widgetEl);
if (threadId && isThreadMuted(threadId)) {
// Clear input background if muted
if (st.inputEl) {
st.inputEl.style.setProperty('background-color', 'transparent', 'important');
}
return;
}
const widgetId = widgetEl.id;
const headerId = ASSISTANT_YAML ? `context_${widgetId}_h` : `reply_${widgetId}_h`;
const h = document.getElementById(headerId);
if (h) {
// Update the SVG icon
const existingSvg = h.querySelector('svg:not(.convowizard-mute-btn svg)');
if (existingSvg) {
const temp = document.createElement('div');
temp.innerHTML = `
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
<path d="M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm1 13H7v-2h2v2zm0-3H7V4h2v6z"/>
</svg>
`;
const newSvg = temp.querySelector('svg');
if (newSvg) {
existingSvg.replaceWith(newSvg);
}
}
// Update text span with processing indicator
const textSpan = h.querySelector('span.convowizard-header-text');
if (textSpan) {
textSpan.textContent = ASSISTANT_YAML
? `${NAME}: Guidance (Processing...)`
: `${NAME}: Suggested Reading (Processing...)`;
}
}
// Recreate existing array from cached state for continue requests
const existingForContinue = utterancesToExisting(st);
const data2 = await postJson('continue', {
existing: existingForContinue,
new: (st.inputEl.innerText || st.inputEl.textContent || st.inputEl.value || ''),
interaction_id: st.interactionId,
token: TOKEN,
username: USERNAME,
...llmFields()
});
// Handle invalid token on continue
if (data2 && data2.error === 'Invalid Token') {
TOKEN = null;
await persistToken(STORAGE_KEY, null);
showTokenForm(widgetEl);
return;
}
handleIntervention(widgetEl, st.inputEl, data2);
}, 6000);
inputEl.addEventListener('input', sendContinue);
inputEl.addEventListener('keyup', sendContinue);
inputEl.addEventListener('paste', sendContinue);
let postBtn = widgetEl.querySelector(".oo-ui-buttonElement-button[title*='Reply']");
if (!postBtn) {
postBtn = Array.from(widgetEl.querySelectorAll('.oo-ui-buttonElement-button'))
.find(b => /reply/i.test((b.title || b.innerText || '').trim()));
}
if (postBtn) {
postBtn.addEventListener('click', async () => {
const st = widgetState.get(widgetEl);
if (!st) return;
try {
// Recreate existing array from cached state for submit
const existingForSubmit = utterancesToExisting(st);
await postJson('submit', {
existing: existingForSubmit,
new: (st.inputEl.innerText || st.inputEl.textContent || st.inputEl.value || ''),
interaction_id: st.interactionId,
submitted_id: null,
token: TOKEN,
username: USERNAME
});
} finally {
widgetState.delete(widgetEl);
}
});
}
}
function handleIntervention(widgetEl, inputEl, data) {
if (!data) {
console.warn(`[${NAME}] handleIntervention called with no data`);
return;
}
console.log(`[${NAME}] handleIntervention called with data:`, data);
if (data.error) {
return;
}
const interactionId = data.interaction_id;
if (!interactionId) {
console.warn(`[${NAME}] No interaction_id in data`);
return;
}
const threadId = getThreadIdForWidget(widgetEl);
// Skip display if thread is muted
if (threadId && isThreadMuted(threadId)) {
const widgetId = widgetEl.id || `widget_${Date.now()}`;
if (!widgetEl.id) widgetEl.id = widgetId;
ensureUnmuteIndicator(widgetEl, threadId, widgetId);
return;
}
const { replyId, contextId } = ensurePanels(widgetEl, threadId);
const showScores = Object.prototype.hasOwnProperty.call(data, 'show_scores');
console.log(`[${NAME}] Panel IDs - context: ${contextId}, reply: ${replyId}`);
console.log(`[${NAME}] Show scores: ${showScores}`);
const which = data.which || '';
console.log(`[${NAME}] Response type (which): ${which}`);
// Clear any "(Processing...)" header state no matter which condition the
// backend served — otherwise a non-llm response leaves it stuck.
const replyHeader = document.getElementById(`${replyId}_h`);
if (replyHeader) {
const procSpan = replyHeader.querySelector('span.convowizard-header-text');
if (procSpan) procSpan.textContent = `${NAME}: Suggested Reading`;
}
if (which.startsWith('llm')) {
if (which === 'llm_assistant' || data.llm_response != null) {
console.log(`[${NAME}] LLM assistant mode - response:`, data.llm_response != null);
updateAssistantPanel(contextId, replyId, data.llm_response, data.llm_persona_name);
} else {
console.log(`[${NAME}] LLM mode - summary:`, data.llm_summary != null);
console.log(`[${NAME}] LLM mode - links:`, (data.llm_links || []).length);
const replyBox = document.getElementById(`${replyId}_d`);
if (replyBox) replyBox.style.display = '';
updateSummaryPanel(contextId, data.llm_summary);
updateGuidancePanel(replyId, data.llm_links, inputEl);
}
} else {
const noteId = `passivenote${interactionId}_d`;
if (!data.message && !document.getElementById(noteId)) {
const box = document.createElement('div');
box.id = noteId;
box.className = 'passiveModeDisplay cc-note';
const content = document.createElement('div');
content.id = `passivenote${interactionId}_p`;
content.textContent = `${NAME} is currently not active on this thread.`;
box.appendChild(content);
widgetEl.prepend(box);
}
}
}
function installClickDelegation() {
document.addEventListener('click', (e) => {
console.log(`[${NAME}] Click detected on:`, e.target.tagName, e.target.className);
// Match reply buttons and links (both old and new DiscussionTools formats)
// Need to check the actual clicked element AND traverse up
const link = e.target.closest && (
e.target.closest('.ext-discussiontools-init-replybutton') ||
e.target.closest('.ext-discussiontools-init-replylink-reply') ||
e.target.closest('a.ext-discussiontools-init-replylink') ||
e.target.closest('.ext-discussiontools-init-replylink-buttons') ||
e.target.closest('[class*="ext-discussiontools-init-"][class*="reply"]')
);
if (!link) return;
console.log(`[${NAME}] Reply link clicked:`, link.className);
// For flat discussion structures (like Research talk pages), the widget may be inserted
// outside the immediate parent. Search more broadly.
const anchorScope = link.closest('dd, li, p, div, section') || document.body;
const broadScope = anchorScope.closest('#mw-content-text, .mw-parser-output, #content') || document.body;
console.log(`[${NAME}] Anchor scope:`, anchorScope.tagName, anchorScope.className);
console.log(`[${NAME}] Broad scope:`, broadScope.tagName, broadScope.className);
const timeoutAt = Date.now() + 8000;
let attempts = 0;
const poll = setInterval(() => {
attempts++;
// Try multiple search strategies:
// 1. In immediate anchor scope (for nested structures like dd/li)
// 2. As sibling to anchor scope (for flat structures like p)
// 3. In broader content scope
// 4. Document-wide fallback
const widget = anchorScope.querySelector('.ext-discussiontools-ui-replyWidget')
|| anchorScope.querySelector('.ext-discussiontools-ui-newTopicWidget')
|| (anchorScope.nextElementSibling && (
anchorScope.nextElementSibling.classList.contains('ext-discussiontools-ui-replyWidget') ||
anchorScope.nextElementSibling.classList.contains('ext-discussiontools-ui-newTopicWidget')
) ? anchorScope.nextElementSibling : null)
|| (anchorScope.parentElement && anchorScope.parentElement.querySelector('.ext-discussiontools-ui-replyWidget:last-child'))
|| (anchorScope.parentElement && anchorScope.parentElement.querySelector('.ext-discussiontools-ui-newTopicWidget:last-child'))
|| broadScope.querySelector('.ext-discussiontools-ui-replyWidget')
|| broadScope.querySelector('.ext-discussiontools-ui-newTopicWidget')
|| document.querySelector('.ext-discussiontools-ui-replyWidget')
|| document.querySelector('.ext-discussiontools-ui-newTopicWidget');
if (widget) {
console.log(`[${NAME}] Widget found after ${attempts} attempts:`, widget.className);
clearInterval(poll);
startForWidget(widget);
}
else if (Date.now() > timeoutAt) {
console.log(`[${NAME}] Widget timeout after ${attempts} attempts - no widget found`);
console.log(`[${NAME}] Searched in anchorScope:`, anchorScope);
console.log(`[${NAME}] Searched in broadScope:`, broadScope);
clearInterval(poll);
} else if (attempts % 10 === 0) {
console.log(`[${NAME}] Still searching for widget, attempt ${attempts}...`);
}
}, 100);
});
}
function installWidgetObserver() {
const root = document.getElementById('content') || document.body;
console.log(`[${NAME}] Setting up mutation observer on:`, root.id || root.tagName);
const obs = new MutationObserver((mutations) => {
for (const m of mutations) {
for (const n of m.addedNodes) {
if (!(n instanceof HTMLElement)) continue;
// Log all significant additions for debugging
if (n.className && typeof n.className === 'string' && n.className.includes('ext-discussiontools')) {
console.log(`[${NAME}] DOM addition detected:`, n.tagName, n.className);
}
// Match specific DiscussionTools widgets
if (n.matches('.ext-discussiontools-ui-replyWidget') || n.matches('.ext-discussiontools-ui-newTopicWidget')) {
console.log(`[${NAME}] *** Widget detected via observer ***:`, n.className);
startForWidget(n);
} else {
const nested = n.querySelector && (
n.querySelector('.ext-discussiontools-ui-replyWidget') ||
n.querySelector('.ext-discussiontools-ui-newTopicWidget')
);
if (nested) {
console.log(`[${NAME}] *** Nested widget detected ***:`, nested.className);
startForWidget(nested);
}
}
}
}
});
obs.observe(root, { childList: true, subtree: true });
console.log(`[${NAME}] Mutation observer is now watching for widget creation`);
// Check for existing widgets on page load
const existingWidgets = document.querySelectorAll('.ext-discussiontools-ui-replyWidget, .ext-discussiontools-ui-newTopicWidget');
if (existingWidgets.length > 0) {
console.log(`[${NAME}] Found ${existingWidgets.length} existing widget(s) on page load`);
existingWidgets.forEach(w => {
console.log(`[${NAME}] Processing existing widget:`, w.className);
startForWidget(w);
});
} else {
console.log(`[${NAME}] No existing widgets found on page load`);
}
}
// kick off
installClickDelegation();
installWidgetObserver();
console.log(`[${NAME}] === INITIALIZATION COMPLETE ===`);
console.log(`[${NAME}] Click delegation: ACTIVE`);
console.log(`[${NAME}] Mutation observer: ACTIVE`);
console.log(`[${NAME}] Waiting for user interaction...`);
})();
//</nowiki>
sbve5obfux9wda00p30moyhz8fvbi2j
User:কমলেশ মন্ডল/common.js
2
171554
759875
759868
2026-09-01T12:47:16Z
কমলেশ মন্ডল
72403
759875
javascript
text/javascript
/**
* তালিকা থেকে টেবিল তৈরির সরঞ্জাম
*
* ব্যবহারের নিয়ম:
* ১. যেকোনো পাতা উৎস সম্পাদনা মোডে খুলুন।
* ২. এক বা একাধিক লাইন নির্বাচন করুন এই ফরম্যাটে:
* পাঠ।পাঠ ← দাড়ির (।) বাম ও ডান পাশ যথাক্রমে টেবিলের দুই কলামে আসবে
* যেমন: মরিচ।১ চামচ
* তবে দাড়ির ডান ও বাম পাশে একটি করে অথবা যেকোনো পাশে একটি স্পেস থাকলেও কাজ করবে
* ৩. টুলবারে তালিকা→টেবিল বোতামে ক্লিক করুন (সিনট্যাক্স বোতামের পাশের আইকনে)।
* ৪. পপআপে:
* • উপকরণ উৎস হিসেবে বাম বা ডান বেছে নিন। ডিফল্ট হিসেবে ডান সিলেক্ট করা থাকবে।
* • চাইলে কলামের নামও বদলানো যাবে।
* ৫. করুন বোতামে ক্লিক করুন — নির্বাচিত টেক্সটের জায়গায় উইকিটেবিল আসবে।
*
* ডিফল্ট আচরণ (ডান নির্বাচিত থাকলে):
* উৎস লাইন: মরিচ।১ চামচ
* ↑ বাম ↑ ডান
*
* তৈরি হওয়া টেবিল:
* | উপকরণ | পরিমাণ |
* | ১ চামচ | মরিচ | ← বাম পাশের টেক্সট → পরিমাণ কলামে (ডানে)
* ডান পাশের টেক্সট → উপকরণ কলামে (বামে)
*
* উৎস টেক্সটে উপকরণের নাম বামে ও পরিমাণ ডানে থাকলে বাম বেছে নিন।
*/
( function () {
'use strict';
if ( ![ 'edit', 'submit' ].includes( mw.config.get( 'wgAction' ) ) ) {
return;
}
var BASE_SEP_RE = buildSepRegex( '।:' );
var CUSTOM_SEP_RE = null;
var DEFAULT_COL_UK = 'উপকরণ';
var DEFAULT_COL_POR = 'পরিমাণ';
function buildSepRegex( chars ) {
var cleaned = ( chars || '' ).replace( /\s+/g, '' );
if ( !cleaned ) return null;
var escaped = cleaned.replace( /[.*+?^${}()|[\]\\-]/g, '\\$&' );
return new RegExp( '[ \\t]*[' + escaped + '][ \\t]*' );
}
function findMatchingSep( s ) {
if ( CUSTOM_SEP_RE && CUSTOM_SEP_RE.test( s ) ) return CUSTOM_SEP_RE;
if ( BASE_SEP_RE.test( s ) ) return BASE_SEP_RE;
return null;
}
var SEP_SUGGEST_CANDIDATES = [ '-', '–', '/', ':', '।', '|', '=', '~' ];
var SEP_SUGGEST_THRESHOLD = 0.6;
function suggestSeparator( rawText ) {
var lines = rawText.split( '\n' )
.map( function ( l ) { return l.trim(); } )
.filter( Boolean );
if ( !lines.length ) return null;
var counts = {};
SEP_SUGGEST_CANDIDATES.forEach( function ( ch ) { counts[ ch ] = 0; } );
lines.forEach( function ( l ) {
SEP_SUGGEST_CANDIDATES.forEach( function ( ch ) {
if ( l.indexOf( ch ) !== -1 ) counts[ ch ]++;
} );
} );
var best = null, bestRatio = 0;
SEP_SUGGEST_CANDIDATES.forEach( function ( ch ) {
var ratio = counts[ ch ] / lines.length;
if ( ratio >= SEP_SUGGEST_THRESHOLD && ratio > bestRatio ) {
bestRatio = ratio;
best = ch;
}
} );
return best;
}
function getSelection( $ta ) {
var el = $ta[ 0 ];
return el.value.substring( el.selectionStart, el.selectionEnd );
}
function replaceSelection( $ta, newText ) {
var el = $ta[ 0 ];
var start = el.selectionStart;
var end = el.selectionEnd;
el.value = el.value.substring( 0, start ) + newText + el.value.substring( end );
el.selectionStart = start;
el.selectionEnd = start + newText.length;
el.focus();
$( el ).trigger( 'input' );
}
function parseLines( rawText ) {
var parsed = { rows: [], skippedLines: [] };
var lines = rawText.split( '\n' );
var numPart = '(?:[\\d০-৯]+\\/[\\d০-৯]+|[\\d০-৯]+(?:[\\s–-]+[\\d০-৯]+)?|আধ|আধা|হাফ|কোয়ার্টার|দেড়|আড়াই|সোয়া|পৌনে|পোয়া|পোয়াটাক|সিকি|অর্ধেক|এক|দুই|দু|তিন|চার|পাঁচ|ছয়|সাত|আট|নয়|দশ|এগারো|বারো|কয়েক)';
var unitPart = '(?:কেজি|গ্রাম|কিলোগ্রাম|কাপ|টেবিল[\\s–-]*চামচ|চা[\\s–-]*চামচ|চামচ|টুকরা|টুকরো|মিলি|লিটার|মিলিলিটার|কোয়া|আঁটি|চিমটি|মুঠো|ফোঁটা|প্যাকেট|স্টিক|পিস|চিমটে|চিলতে)';
var suffixPart = '(?:টি|টা|টো|খানা|খানি)';
var abstractPart = '(?:পরিমাণমতো|পরিমাণমত|স্বাদমতো|স্বাদমত|সামান্য|ইচ্ছামতো|ইচ্ছামত|ইচ্ছেমতো|ইচ্ছেমত|ঐচ্ছিক|অল্প|অল্প পরিমাণ)';
var qtyPattern = '(?:' + numPart + '[\\s–-]+' + unitPart + '|' + numPart + '\\s*' + suffixPart + '|' + abstractPart + ')';
var SMART_QTY_END = new RegExp( '(' + qtyPattern + ')$' );
var SMART_QTY_START = new RegExp( '^(' + qtyPattern + ')[\\s–-]+' );
function hasQty( s ) {
return !!findMatchingSep( s ) || !!s.match( SMART_QTY_END ) || !!s.match( SMART_QTY_START );
}
function tryParse( trimmed, target ) {
var sep = findMatchingSep( trimmed );
if ( sep ) {
var p = trimmed.split( sep );
var left = p[ 0 ].trim();
if ( !left ) return false;
target.push( { left: left, right: ( p[ 1 ] || '' ).trim() } );
return true;
}
var matchEnd = trimmed.match( SMART_QTY_END );
if ( matchEnd ) {
var qty = matchEnd[ 1 ].trim();
var item = trimmed.substring( 0, trimmed.length - matchEnd[ 0 ].length ).replace( /[,–-]+$/, '' ).trim();
if ( !item ) return false;
target.push( { left: item, right: qty } );
return true;
}
var matchStart = trimmed.match( SMART_QTY_START );
if ( matchStart ) {
qty = matchStart[ 1 ].trim();
item = trimmed.substring( matchStart[ 0 ].length ).replace( /^[,–-]+/, '' ).trim();
if ( !item ) return false;
target.push( { left: item, right: qty } );
return true;
}
return false;
}
function applySharedQty( parts, note, target ) {
var names, sharedQty;
var last = parts[ parts.length - 1 ];
var sep = findMatchingSep( last );
if ( sep ) {
var lastParts = last.split( sep );
sharedQty = ( lastParts[ 1 ] || '' ).trim();
names = parts.slice( 0, -1 ).concat( lastParts[ 0 ].trim() );
} else {
var lastQtyMatch = last.match( SMART_QTY_END );
if ( !lastQtyMatch ) return false;
sharedQty = lastQtyMatch[ 1 ].trim();
var lastItem = last.substring( 0, last.length - lastQtyMatch[ 0 ].length ).replace( /[,–-]+$/, '' ).trim();
names = parts.slice( 0, -1 ).concat( lastItem );
}
names = names.filter( Boolean );
if ( !names.length ) return false;
names.forEach( function ( name ) {
target.push( { left: name, right: sharedQty + note } );
} );
return true;
}
lines.forEach( function ( l, lineIdx ) {
var realIndex = lineIdx + 1;
var trimmed = l.trim().replace( /[।,]+$/, '' ).trim().normalize( 'NFC' );
if ( !trimmed ) return;
var trailingNote = '';
var noteMatch = trimmed.match( /\s*(\([^)]*\))$/ );
if ( noteMatch ) {
trailingNote = ' ' + noteMatch[ 1 ];
trimmed = trimmed.substring( 0, trimmed.length - noteMatch[ 0 ].length ).trim();
}
if ( !trimmed.includes( ',' ) ) {
var temp = [];
if ( tryParse( trimmed, temp ) ) {
temp.forEach( function ( r ) { parsed.rows.push( { left: r.left, right: r.right + trailingNote } ); } );
return;
}
if ( /[ \t]ও[ \t]/.test( trimmed ) && !findMatchingSep( trimmed ) ) {
var oParts = trimmed.split( /[ \t]ও[ \t]/ ).map( function ( s ) { return s.trim(); } ).filter( Boolean );
var othersHaveQty = oParts.slice( 0, -1 ).some( hasQty );
if ( !othersHaveQty && oParts[ oParts.length - 1 ].match( SMART_QTY_END ) ) {
var oTemp = [];
if ( applySharedQty( oParts, trailingNote, oTemp ) ) {
oTemp.forEach( function ( r ) { parsed.rows.push( r ); } );
return;
}
}
}
parsed.skippedLines.push( realIndex );
return;
}
var subParts = trimmed.split( ',' ).map( function ( s ) { return s.trim(); } ).filter( Boolean );
if ( subParts.every( hasQty ) ) {
var subTemp = [];
var anyFailed = false;
subParts.forEach( function ( part ) {
if ( !tryParse( part, subTemp ) ) anyFailed = true;
} );
if ( !anyFailed ) {
subTemp.forEach( function ( r ) { parsed.rows.push( { left: r.left, right: r.right + trailingNote } ); } );
} else {
parsed.skippedLines.push( realIndex );
}
return;
}
var last = subParts[ subParts.length - 1 ];
var subOthersHaveQty = subParts.slice( 0, -1 ).some( hasQty );
if ( !subOthersHaveQty && hasQty( last ) ) {
var sharedTemp = [];
if ( applySharedQty( subParts, trailingNote, sharedTemp ) ) {
sharedTemp.forEach( function ( r ) { parsed.rows.push( r ); } );
return;
}
}
parsed.skippedLines.push( realIndex );
} );
return parsed;
}
function buildTable( rows, ukFromLeft, colUk, colPor ) {
var lh = ( colUk || DEFAULT_COL_UK ).trim() || DEFAULT_COL_UK;
var rh = ( colPor || DEFAULT_COL_POR ).trim() || DEFAULT_COL_POR;
var lines = [
'{| class="wikitable"',
'|-',
'! ' + lh + ' !! ' + rh
];
rows.forEach( function ( row ) {
var leftCell = ukFromLeft ? row.left : row.right;
var rightCell = ukFromLeft ? row.right : row.left;
lines.push( '|-' );
lines.push( '| ' + leftCell + ' || ' + rightCell );
} );
lines.push( '|}' );
return lines.join( '\n' );
}
function injectStyles() {
if ( $( '#btg-css' ).length ) { return; }
$( '<style id="btg-css">' ).text( [
'#btg-ov{',
'position:fixed;inset:0;',
'background:rgba(0,0,0,.54);',
'z-index:10000;',
'display:flex;align-items:center;justify-content:center;',
'animation:btg-fadein .15s ease;}',
'@keyframes btg-fadein{from{opacity:0}to{opacity:1}}',
'#btg-dlg{',
'background:#ffffff;',
'border-radius:8px;',
'padding:24px 26px 20px;',
'width:400px;max-width:96vw;',
'box-shadow:0 8px 36px rgba(0,0,0,.32);',
'font-family:"Noto Serif Bengali","SolaimanLipi","Kalpurush",serif;',
'animation:btg-slidein .17s cubic-bezier(.22,.61,.36,1);}',
'@keyframes btg-slidein{from{transform:translateY(12px);opacity:0}',
'to{transform:translateY(0);opacity:1}}',
'#btg-dlg h4{',
'margin:0 0 4px;font-size:1.08em;font-weight:700;',
'color:#1a1a2e;letter-spacing:.01em;}',
'.btg-info{font-size:.78em;color:#72777d;margin:0 0 16px}',
'.btg-div{border:none;border-top:1px solid #eaecf0;margin:0 0 16px}',
'.btg-r{display:flex;align-items:center;gap:12px;margin-bottom:14px}',
'.btg-r .lbl{',
'font-size:.88em;font-weight:600;color:#3c4043;',
'min-width:88px;flex-shrink:0;}',
'.btg-tgl{',
'display:flex;',
'border:1.5px solid #c8ccd1;',
'border-radius:20px;overflow:hidden;',
'background:#f8f9fa;}',
'.btg-tgl button{',
'padding:5px 22px;border:none;background:transparent;',
'cursor:pointer;font-size:.84em;',
'font-family:inherit;color:#555;',
'transition:background .15s,color .15s,transform .1s;}',
'.btg-tgl button.on{',
'background:#3366cc;color:#fff;',
'border-radius:20px;',
'box-shadow:0 1px 4px rgba(51,102,204,.4);}',
'.btg-tgl button:hover:not(.on){background:#e0e7ff;color:#3366cc}',
'.btg-inp{',
'padding:5px 9px;',
'border:1.5px solid #c8ccd1;',
'border-radius:5px;',
'font-size:.86em;',
'font-family:inherit;',
'width:100px;',
'color:#202122;',
'transition:border-color .15s,box-shadow .15s;}',
'.btg-inp:focus{',
'outline:none;',
'border-color:#3366cc;',
'box-shadow:0 0 0 2.5px rgba(51,102,204,.2);}',
'.btg-pv-lbl{font-size:.76em;color:#888;margin-bottom:5px;letter-spacing:.03em}',
'.btg-pv{',
'background:#f5f6f7;',
'border:1px solid #dde1e4;',
'border-radius:5px;',
'padding:9px 12px;',
'max-height:128px;overflow:auto;',
'margin-bottom:16px;}',
'.btg-pv pre{',
'margin:0;font-size:.73em;color:#3c4043;',
'font-family:"Courier New",Courier,monospace;',
'white-space:pre;line-height:1.55;}',
'.btg-acts{display:flex;gap:10px;justify-content:flex-end}',
'.btg-acts button{',
'padding:7px 22px;border-radius:6px;cursor:pointer;',
'font-size:.88em;font-family:inherit;',
'font-weight:600;letter-spacing:.02em;',
'border:1.5px solid transparent;',
'transition:background .14s,transform .1s,box-shadow .14s;}',
'.btg-acts button:active{transform:scale(.97)}',
'.btg-acts button:focus,.btg-tgl button:focus{outline:none}',
'.btg-acts button:focus-visible,.btg-tgl button:focus-visible{',
'outline:2px solid #3366cc;outline-offset:2px;}',
'.btg-acts button:disabled{',
'opacity:.45;cursor:not-allowed;box-shadow:none;transform:none;}',
'.btg-ok{',
'background:#3366cc;color:#fff;',
'border-color:#3366cc !important;',
'box-shadow:0 2px 6px rgba(51,102,204,.35);}',
'.btg-ok:hover{background:#2a55b0;box-shadow:0 3px 10px rgba(51,102,204,.45)}',
'.btg-cl{',
'background:#f8f9fa;color:#3c4043;',
'border-color:#c8ccd1 !important;}',
'.btg-cl:hover{background:#eaecf0}'
].join( '' ) ).appendTo( 'head' );
}
function openDialog( $textarea, rawText, rows, skippedLines ) {
injectStyles();
$( '#btg-ov' ).remove();
var ukFromLeft = false;
var $ov = $( '<div id="btg-ov">' );
var $dlg = $( '<div id="btg-dlg">' );
$dlg.append( $( '<h4>' ).html( 'তালিকা → উইকিটেবিল' ) );
var suggested = suggestSeparator( rawText );
if ( suggested ) {
CUSTOM_SEP_RE = buildSepRegex( suggested );
var reparsedInit = parseLines( rawText );
rows = reparsedInit.rows;
skippedLines = reparsedInit.skippedLines;
} else {
CUSTOM_SEP_RE = null;
}
var $info = $( '<p class="btg-info">' ).text( rows.length + 'টি সারি পাওয়া গেছে' );
$dlg.append( $info );
var $skipInfo = $( '<p style="color:#d33; font-size:.8em; margin:-10px 0 16px;">' );
if ( skippedLines && skippedLines.length > 0 ) {
$skipInfo.text( 'বাদ পড়া লাইন নম্বর: ' + skippedLines.join( ', ' ) );
} else {
$skipInfo.hide();
}
$dlg.append( $skipInfo );
var $sepInput = $( '<input class="btg-inp" style="width:64px">' )
.val( suggested || '' )
.attr( 'placeholder', 'যেমন - বা /' )
.attr( 'title', 'এখানে দেওয়া চিহ্ন সবার আগে চেষ্টা করা হবে; যেসব লাইনে এটি মেলে না, সেগুলোতে ডিফল্ট । ও : স্বয়ংক্রিয়ভাবে কাজ করবে' );
$dlg.append(
$( '<div class="btg-r">' )
.append( $( '<span class="lbl">' ).text( 'অতিরিক্ত বিভাজক' ) )
.append( $sepInput )
);
var $sepNote = $( '<p style="font-size:.74em;color:#888;margin:-10px 0 14px;">' )
.text( 'ডিফল্ট । ও : সবসময় কাজ করে। এখানে অন্য কোনো চিহ্ন দিলে সেটি আগে চেষ্টা হবে।' );
if ( suggested ) {
$sepNote.text( 'সাজেশন: বেশিরভাগ লাইনে "' + suggested + '" চিহ্নটি পাওয়া গেছে, তাই এটি বসানো হয়েছে। চাইলে বদলে দিন বা খালি করে দিন।' );
}
$dlg.append( $sepNote );
$sepInput.on( 'input', function () {
CUSTOM_SEP_RE = buildSepRegex( $sepInput.val() );
var reparsed = parseLines( rawText );
rows = reparsed.rows;
skippedLines = reparsed.skippedLines;
$info.text( rows.length ? ( rows.length + 'টি সারি পাওয়া গেছে' ) : 'এই বিভাজক দিয়ে কোনো সারি পাওয়া যায়নি' );
if ( skippedLines.length > 0 ) {
$skipInfo.text( 'বাদ পড়া লাইন নম্বর: ' + skippedLines.join( ', ' ) ).show();
} else {
$skipInfo.hide();
}
refresh();
} );
$dlg.append( $( '<hr class="btg-div">' ) );
var $bam = $( '<button>' ).text( 'বাম' );
var $dan = $( '<button>' ).text( 'ডান' ).addClass( 'on' );
$dlg.append(
$( '<div class="btg-r">' )
.append( $( '<span class="lbl">' ).text( 'উপকরণ উৎস' ) )
.append( $( '<div class="btg-tgl">' ).append( $bam ).append( $dan ) )
);
var $ukName = $( '<input class="btg-inp">' )
.val( DEFAULT_COL_UK )
.attr( 'placeholder', DEFAULT_COL_UK )
.attr( 'title', 'উপকরণ কলামের নাম পরিবর্তন করুন' );
var $porName = $( '<input class="btg-inp">' )
.val( DEFAULT_COL_POR )
.attr( 'placeholder', DEFAULT_COL_POR )
.attr( 'title', 'পরিমাণ কলামের নাম পরিবর্তন করুন' );
$dlg.append(
$( '<div class="btg-r">' )
.append( $( '<span class="lbl">' ).text( 'কলামের নাম' ) )
.append( $ukName )
.append( $porName )
);
var $pre = $( '<pre>' );
var $ins = $( '<button class="btg-ok">' ).text( 'করুন' );
function refresh() {
$pre.text( rows.length ? buildTable( rows, ukFromLeft, $ukName.val(), $porName.val() ) : '' );
$ins.prop( 'disabled', !rows.length );
}
refresh();
$dlg.append( $( '<p class="btg-pv-lbl">' ).text( 'প্রিভিউ (উইকিটেক্সট):' ) );
$dlg.append( $( '<div class="btg-pv">' ).append( $pre ) );
$bam.on( 'click', function () {
ukFromLeft = true;
$bam.addClass( 'on' );
$dan.removeClass( 'on' );
refresh();
} );
$dan.on( 'click', function () {
ukFromLeft = false;
$dan.addClass( 'on' );
$bam.removeClass( 'on' );
refresh();
} );
$ukName.add( $porName ).on( 'input', refresh );
var $cls = $( '<button class="btg-cl">' ).text( 'বাতিল' );
$ins.on( 'click', function () {
var table = buildTable( rows, ukFromLeft, $ukName.val(), $porName.val() );
replaceSelection( $textarea, table );
$ov.remove();
mw.notify( 'সফলভাবে টেবিল যোগ করা হয়েছে', { type: 'success' } );
} );
$cls.on( 'click', function () { $ov.remove(); } );
$dlg.append( $( '<div class="btg-acts">' ).append( $cls ).append( $ins ) );
$ov.append( $dlg );
$ov.on( 'click', function ( e ) {
if ( e.target === this ) { $ov.remove(); }
} );
$( document ).one( 'keydown.btg', function ( e ) {
if ( e.key === 'Escape' ) { $ov.remove(); }
} );
$( 'body' ).append( $ov );
setTimeout( function () { $bam.trigger( 'focus' ); }, 50 );
}
var ICON_SVG = 'data:image/svg+xml;utf8,' + encodeURIComponent( [
'<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 22 22">',
'<rect x="1.5" y="1.5" width="19" height="19" rx="2.5"',
' fill="none" stroke="#555" stroke-width="1.4"/>',
'<rect x="2" y="2" width="18" height="5.5" rx="1.5" fill="#cde"/>',
'<line x1="2" y1="7.5" x2="20" y2="7.5" stroke="#888" stroke-width=".9"/>',
'<line x1="2" y1="13" x2="20" y2="13" stroke="#ccc" stroke-width=".7"/>',
'<line x1="11" y1="7.5" x2="11" y2="20" stroke="#888" stroke-width=".9"/>',
'</svg>'
].join( '' ) );
function addToolbarButton( $textarea ) {
try {
$textarea.wikiEditor( 'addToToolbar', {
section: 'main',
group: 'insert',
tools: {
'btg-list-to-table': {
label: 'তালিকা → টেবিল',
type: 'button',
icon: ICON_SVG,
action: {
type: 'callback',
execute: function ( context ) {
var $ta = context.$textarea;
var sel = getSelection( $ta );
if ( !sel.trim() ) {
mw.notify(
'প্রথমে টেক্সট নির্বাচন করুন। (ফরম্যাট: পাঠ।পাঠ)',
{ type: 'warn' }
);
return;
}
CUSTOM_SEP_RE = null;
var parsed = parseLines( sel );
var rows = parsed.rows;
var skippedLines = parsed.skippedLines;
if ( !rows.length ) {
mw.notify(
'নির্বাচিত টেক্সটে বৈধ বিভাজক (দাড়ি) পাওয়া যায়নি।',
{ type: 'error' }
);
return;
}
openDialog( $ta, sel, rows, skippedLines );
}
}
}
}
} );
} catch ( err ) {
mw.log.warn( '[BTG] টুলবার বোতাম যোগ করা যায়নি:', err );
}
}
mw.loader.using( 'ext.wikiEditor', function () {
mw.hook( 'wikiEditor.toolbarReady' ).add( function ( $textarea ) {
addToolbarButton( $textarea );
} );
} );
}() );
0sjwrdgodf3ferz7a1pfo9uaeaas4if
759926
759875
2026-09-02T09:11:59Z
কমলেশ মন্ডল
72403
759926
javascript
text/javascript
/**
* তালিকা থেকে টেবিল তৈরির সরঞ্জাম
*
* ব্যবহারের নিয়ম:
* ১. যেকোনো পাতা উৎস সম্পাদনা মোডে খুলুন।
* ২. এক বা একাধিক লাইন নির্বাচন করুন এই ফরম্যাটে:
* পাঠ।পাঠ ← দাড়ির (।) বাম ও ডান পাশ যথাক্রমে টেবিলের দুই কলামে আসবে
* যেমন: মরিচ।১ চামচ
* তবে দাড়ির ডান ও বাম পাশে একটি করে অথবা যেকোনো পাশে একটি স্পেস থাকলেও কাজ করবে
* ৩. টুলবারে তালিকা→টেবিল বোতামে ক্লিক করুন (সিনট্যাক্স বোতামের পাশের আইকনে)।
* ৪. পপআপে:
* • উপকরণ উৎস হিসেবে বাম বা ডান বেছে নিন। ডিফল্ট হিসেবে বাম সিলেক্ট করা থাকবে।
* • চাইলে কলামের নামও বদলানো যাবে।
* ৫. করুন বোতামে ক্লিক করুন — নির্বাচিত টেক্সটের জায়গায় উইকিটেবিল আসবে।
*
* ডিফল্ট আচরণ (বাম নির্বাচিত থাকলে):
* উৎস লাইন: মরিচ।১ চামচ
* ↑ বাম ↑ ডান
*
* তৈরি হওয়া টেবিল:
* | উপকরণ | পরিমাণ |
* | মরিচ | ১ চামচ | ← বাম পাশের টেক্সট → উপকরণ কলামে (বামে)
* ডান পাশের টেক্সট → পরিমাণ কলামে (ডানে)
*
* উৎস টেক্সটে উপকরণের নাম ডানে ও পরিমাণ বামে থাকলে ডান বেছে নিন।
*/
( function () {
'use strict';
if ( ![ 'edit', 'submit' ].includes( mw.config.get( 'wgAction' ) ) ) {
return;
}
var BASE_SEP_RE = buildSepRegex( '।;' );
var CUSTOM_SEP_RE = null;
var DEFAULT_COL_UK = 'উপকরণ';
var DEFAULT_COL_POR = 'পরিমাণ';
function buildSepRegex( chars ) {
var cleaned = ( chars || '' ).replace( /\s+/g, '' );
if ( !cleaned ) return null;
var escaped = cleaned.replace( /[.*+?^${}()|[\]\\-]/g, '\\$&' );
return new RegExp( '[ \\t]*[' + escaped + '][ \\t]*' );
}
var DIGIT_CLASS = '[\\d০-৯]';
var PROTECT_PATTERNS = [
[ new RegExp( DIGIT_CLASS + '\\s*-\\s*' + DIGIT_CLASS, 'g' ), '-', '\uE000' ],
[ new RegExp( DIGIT_CLASS + '\\s*–\\s*' + DIGIT_CLASS, 'g' ), '–', '\uE001' ],
[ /(?:চা|টেবিল)\s*-\s*চামচ/g, '-', '\uE000' ],
[ /(?:চা|টেবিল)\s*–\s*চামচ/g, '–', '\uE001' ]
];
function protectInternalSeparators( s ) {
PROTECT_PATTERNS.forEach( function ( p ) {
s = s.replace( p[ 0 ], function ( m ) { return m.split( p[ 1 ] ).join( p[ 2 ] ); } );
} );
return s;
}
function restoreProtectedSeparators( s ) {
return s.replace( /\uE000/g, '-' ).replace( /\uE001/g, '–' );
}
function findMatchingSep( s ) {
var p = protectInternalSeparators( s );
if ( CUSTOM_SEP_RE && CUSTOM_SEP_RE.test( p ) ) return CUSTOM_SEP_RE;
if ( BASE_SEP_RE.test( p ) ) return BASE_SEP_RE;
return null;
}
function lastMatchSplit( str, re ) {
var g = new RegExp( re.source, re.flags.indexOf( 'g' ) === -1 ? re.flags + 'g' : re.flags );
var m, last = null;
while ( ( m = g.exec( str ) ) !== null ) {
last = m;
if ( m.index === g.lastIndex ) g.lastIndex++;
}
if ( !last ) return null;
return { left: str.slice( 0, last.index ), right: str.slice( last.index + last[ 0 ].length ) };
}
function splitBySep( s ) {
var p = protectInternalSeparators( s );
var sep = null;
if ( CUSTOM_SEP_RE && CUSTOM_SEP_RE.test( p ) ) sep = CUSTOM_SEP_RE;
else if ( BASE_SEP_RE.test( p ) ) sep = BASE_SEP_RE;
if ( !sep ) return null;
var res = lastMatchSplit( p, sep );
if ( !res ) return null;
return {
left: restoreProtectedSeparators( res.left ).trim(),
right: restoreProtectedSeparators( res.right ).trim()
};
}
var SEP_SUGGEST_CANDIDATES = [ '-', '–', '/', ':', '।', '|', '=', '~' ];
var SEP_SUGGEST_THRESHOLD = 0.6;
function suggestSeparator( rawText ) {
var segments = [];
rawText.split( '\n' ).forEach( function ( l ) {
l.split( ',' ).forEach( function ( seg ) {
seg = protectInternalSeparators( seg.trim() );
if ( seg ) segments.push( seg );
} );
} );
if ( !segments.length ) return null;
var counts = {};
SEP_SUGGEST_CANDIDATES.forEach( function ( ch ) { counts[ ch ] = 0; } );
segments.forEach( function ( seg ) {
SEP_SUGGEST_CANDIDATES.forEach( function ( ch ) {
if ( seg.indexOf( ch ) !== -1 ) counts[ ch ]++;
} );
} );
var best = null, bestRatio = 0;
SEP_SUGGEST_CANDIDATES.forEach( function ( ch ) {
var ratio = counts[ ch ] / segments.length;
if ( ratio >= SEP_SUGGEST_THRESHOLD && ratio > bestRatio ) {
bestRatio = ratio;
best = ch;
}
} );
return best;
}
function getSelection( $ta ) {
var el = $ta[ 0 ];
return el.value.substring( el.selectionStart, el.selectionEnd );
}
function replaceSelection( $ta, newText ) {
var el = $ta[ 0 ];
var start = el.selectionStart;
var end = el.selectionEnd;
el.value = el.value.substring( 0, start ) + newText + el.value.substring( end );
el.selectionStart = start;
el.selectionEnd = start + newText.length;
el.focus();
$( el ).trigger( 'input' );
}
function parseLines( rawText ) {
var parsed = { rows: [], skippedLines: [] };
var lines = rawText.split( '\n' );
var numPart = '(?:[\\d০-৯]+\\/[\\d০-৯]+|[\\d০-৯]+(?:[\\s–-]+[\\d০-৯]+)?|আধ|আধা|হাফ|কোয়ার্টার|দেড়|আড়াই|সোয়া|পৌনে|পোয়া|পোয়াটাক|সিকি|অর্ধেক|এক|দুই|দু|তিন|চার|পাঁচ|ছয়|সাত|আট|নয়|দশ|এগারো|বারো|কয়েক)';
var unitPart = '(?:কেজি|গ্রাম|কিলোগ্রাম|কাপ|টেবিল[\\s–-]*চামচ|চা[\\s–-]*চামচ|চামচ|টুকরা|টুকরো|মিলি|লিটার|মিলিলিটার|কোয়া|আঁটি|চিমটি|মুঠো|ফোঁটা|প্যাকেট|স্টিক|পিস|চিমটে|চিলতে)';
var suffixPart = '(?:টি|টা|টো)';
var abstractPart = '(?:পরিমাণমতো|পরিমাণমত|পরিমাণ মত|স্বাদমতো|স্বাদমত|সামান্য|ইচ্ছামতো|ইচ্ছামত|ইচ্ছেমতো|ইচ্ছেমত|ঐচ্ছিক|অল্প|অল্প পরিমাণ)';
var qtyPattern = '(?:' + numPart + '[\\s–-]*' + unitPart + '|' + numPart + '\\s*' + suffixPart + '|' + abstractPart + ')';
var SMART_QTY_END = new RegExp( '(' + qtyPattern + ')$' );
var SMART_QTY_START = new RegExp( '^(' + qtyPattern + ')[\\s–-]+' );
var SMART_QTY_ANY = new RegExp( qtyPattern );
function hasQty( s ) {
return !!findMatchingSep( s ) || !!s.match( SMART_QTY_END ) || !!s.match( SMART_QTY_START );
}
function tryParse( trimmed, target ) {
var sp = splitBySep( trimmed );
if ( sp ) {
if ( !sp.left ) return false;
target.push( { left: sp.left, right: sp.right } );
return true;
}
var matchEnd = trimmed.match( SMART_QTY_END );
if ( matchEnd ) {
var qty = matchEnd[ 1 ].trim();
var item = trimmed.substring( 0, trimmed.length - matchEnd[ 0 ].length ).replace( /[,–-]+$/, '' ).trim();
if ( !item ) return false;
target.push( { left: item, right: qty } );
return true;
}
var matchStart = trimmed.match( SMART_QTY_START );
if ( matchStart ) {
qty = matchStart[ 1 ].trim();
item = trimmed.substring( matchStart[ 0 ].length ).replace( /^[,–-]+/, '' ).trim();
if ( !item ) return false;
target.push( { left: item, right: qty } );
return true;
}
return false;
}
function applySharedQty( parts, note, target ) {
var names, sharedQty;
var last = parts[ parts.length - 1 ];
var sp = splitBySep( last );
if ( sp ) {
sharedQty = sp.right;
names = parts.slice( 0, -1 ).concat( sp.left );
} else {
var lastQtyMatch = last.match( SMART_QTY_END );
if ( !lastQtyMatch ) return false;
sharedQty = lastQtyMatch[ 1 ].trim();
var lastItem = last.substring( 0, last.length - lastQtyMatch[ 0 ].length ).replace( /[,–-]+$/, '' ).trim();
names = parts.slice( 0, -1 ).concat( lastItem );
}
names = names.filter( Boolean );
if ( !names.length ) return false;
var qtyOnly = sharedQty.match( SMART_QTY_ANY );
if ( qtyOnly ) sharedQty = qtyOnly[ 0 ].trim();
names.forEach( function ( name ) {
target.push( { left: name, right: sharedQty + note } );
} );
return true;
}
function stripTrailingNote( s ) {
var m = s.match( /\s*(\([^)]*\))$/ );
if ( !m ) return { text: s, note: '' };
return { text: s.substring( 0, s.length - m[ 0 ].length ).trim(), note: ' ' + m[ 1 ] };
}
var JOINER_MID_RE = /[ \t](?:ও|এবং)[ \t]/;
function splitJoinerChunks( chunk ) {
var result = [];
var remaining = chunk;
var m;
while ( ( m = JOINER_MID_RE.exec( remaining ) ) !== null ) {
var left = remaining.slice( 0, m.index ).trim();
var right = remaining.slice( m.index + m[ 0 ].length ).trim();
if ( left && right && hasQty( left ) && hasQty( right ) ) {
result.push( left );
remaining = right;
} else {
break;
}
}
result.push( remaining.trim() );
return result;
}
function absorbLeadingEbong( chunks ) {
var out = [];
chunks.forEach( function ( raw ) {
var c = raw.trim();
var m = c.match( /^এবং[ \t]+([\s\S]*)$/ );
if ( m && out.length ) {
var prev = out[ out.length - 1 ];
var rest = m[ 1 ].trim();
if ( hasQty( prev ) && hasQty( rest ) ) {
out.push( rest );
return;
}
}
out.push( c );
} );
return out;
}
function expandJoiners( trimmed ) {
var expanded = [];
trimmed.split( ',' ).forEach( function ( chunk ) {
expanded = expanded.concat( splitJoinerChunks( chunk ) );
} );
return absorbLeadingEbong( expanded ).join( ',' );
}
var realIndex = 0;
lines.forEach( function ( l ) {
var trimmed = l.trim().replace( /[।,]+$/, '' ).trim().normalize( 'NFC' );
if ( !trimmed ) return;
realIndex++;
trimmed = expandJoiners( trimmed );
if ( !trimmed.includes( ',' ) ) {
var info = stripTrailingNote( trimmed );
var temp = [];
if ( tryParse( info.text, temp ) ) {
temp.forEach( function ( r ) { parsed.rows.push( { left: r.left, right: r.right + info.note } ); } );
return;
}
parsed.skippedLines.push( realIndex );
return;
}
var subParts = trimmed.split( ',' ).map( function ( s ) { return s.trim(); } ).filter( Boolean );
var subInfo = subParts.map( stripTrailingNote );
if ( subInfo.every( function ( info ) { return hasQty( info.text ); } ) ) {
var subTemp = [];
var anyFailed = false;
subInfo.forEach( function ( info ) {
var t = [];
if ( tryParse( info.text, t ) ) {
t.forEach( function ( r ) { subTemp.push( { left: r.left, right: r.right + info.note } ); } );
} else {
anyFailed = true;
}
} );
if ( !anyFailed ) {
subTemp.forEach( function ( r ) { parsed.rows.push( r ); } );
} else {
parsed.skippedLines.push( realIndex );
}
return;
}
var lastInfo = subInfo[ subInfo.length - 1 ];
var subOthersHaveQty = subInfo.slice( 0, -1 ).some( function ( info ) { return hasQty( info.text ); } );
if ( !subOthersHaveQty && hasQty( lastInfo.text ) ) {
var sharedTemp = [];
var partsForShare = subParts.slice( 0, -1 ).concat( lastInfo.text );
if ( applySharedQty( partsForShare, lastInfo.note, sharedTemp ) ) {
sharedTemp.forEach( function ( r ) { parsed.rows.push( r ); } );
return;
}
}
parsed.skippedLines.push( realIndex );
} );
return parsed;
}
function buildTable( rows, ukFromLeft, colUk, colPor ) {
var lh = ( colUk || DEFAULT_COL_UK ).trim() || DEFAULT_COL_UK;
var rh = ( colPor || DEFAULT_COL_POR ).trim() || DEFAULT_COL_POR;
var lines = [
'{| class="wikitable"',
'|-',
'! ' + lh + ' !! ' + rh
];
rows.forEach( function ( row ) {
var leftCell = ukFromLeft ? row.left : row.right;
var rightCell = ukFromLeft ? row.right : row.left;
lines.push( '|-' );
lines.push( '| ' + leftCell + ' || ' + rightCell );
} );
lines.push( '|}' );
return lines.join( '\n' );
}
function injectStyles() {
if ( $( '#btg-css' ).length ) { return; }
$( '<style id="btg-css">' ).text( [
'#btg-ov{',
'position:fixed;inset:0;',
'background:rgba(0,0,0,.54);',
'z-index:10000;',
'display:flex;align-items:center;justify-content:center;',
'animation:btg-fadein .15s ease;}',
'@keyframes btg-fadein{from{opacity:0}to{opacity:1}}',
'#btg-dlg{',
'background:#ffffff;',
'border-radius:8px;',
'padding:24px 26px 20px;',
'width:400px;max-width:96vw;',
'box-shadow:0 8px 36px rgba(0,0,0,.32);',
'font-family:"Noto Serif Bengali","SolaimanLipi","Kalpurush",serif;',
'animation:btg-slidein .17s cubic-bezier(.22,.61,.36,1);}',
'@keyframes btg-slidein{from{transform:translateY(12px);opacity:0}',
'to{transform:translateY(0);opacity:1}}',
'#btg-dlg h4{',
'margin:0 0 4px;font-size:1.08em;font-weight:700;',
'color:#1a1a2e;letter-spacing:.01em;}',
'.btg-info{font-size:.78em;color:#72777d;margin:0 0 16px}',
'.btg-div{border:none;border-top:1px solid #eaecf0;margin:0 0 16px}',
'.btg-r{display:flex;align-items:center;gap:12px;margin-bottom:14px}',
'.btg-r .lbl{',
'font-size:.88em;font-weight:600;color:#3c4043;',
'min-width:88px;flex-shrink:0;}',
'.btg-tgl{',
'display:flex;',
'border:1.5px solid #c8ccd1;',
'border-radius:20px;overflow:hidden;',
'background:#f8f9fa;}',
'.btg-tgl button{',
'padding:5px 22px;border:none;background:transparent;',
'cursor:pointer;font-size:.84em;',
'font-family:inherit;color:#555;',
'-webkit-tap-highlight-color:transparent;',
'transition:background .15s,color .15s,transform .1s;}',
'.btg-tgl button.on{',
'background:#3366cc;color:#fff;',
'border-radius:20px;',
'box-shadow:0 1px 4px rgba(51,102,204,.4);}',
'.btg-tgl button:hover:not(.on){background:#e0e7ff;color:#3366cc}',
'.btg-inp{',
'padding:5px 9px;',
'border:1.5px solid #c8ccd1;',
'border-radius:5px;',
'font-size:.86em;',
'font-family:inherit;',
'width:100px;',
'color:#202122;',
'transition:border-color .15s,box-shadow .15s;}',
'.btg-inp:focus{',
'outline:none;',
'border-color:#3366cc;',
'box-shadow:0 0 0 2.5px rgba(51,102,204,.2);}',
'.btg-pv-lbl{font-size:.76em;color:#888;margin-bottom:5px;letter-spacing:.03em}',
'.btg-pv{',
'background:#f5f6f7;',
'border:1px solid #dde1e4;',
'border-radius:5px;',
'padding:9px 12px;',
'max-height:128px;overflow:auto;',
'margin-bottom:16px;}',
'.btg-pv pre{',
'margin:0;font-size:.73em;color:#3c4043;',
'font-family:"Courier New",Courier,monospace;',
'white-space:pre;line-height:1.55;}',
'.btg-acts{display:flex;gap:10px;justify-content:flex-end}',
'.btg-acts button{',
'padding:7px 22px;border-radius:6px;cursor:pointer;',
'font-size:.88em;font-family:inherit;',
'font-weight:600;letter-spacing:.02em;',
'border:1.5px solid transparent;',
'-webkit-tap-highlight-color:transparent;',
'transition:background .14s,transform .1s,box-shadow .14s;}',
'.btg-acts button:active{transform:scale(.97)}',
'.btg-acts button:focus,.btg-tgl button:focus{outline:none}',
'.btg-acts button:focus-visible,.btg-tgl button:focus-visible{',
'outline:2px solid #3366cc;outline-offset:2px;}',
'.btg-acts button:disabled{',
'opacity:.45;cursor:not-allowed;box-shadow:none;transform:none;}',
'.btg-ok{',
'background:#3366cc;color:#fff;',
'border-color:#3366cc !important;',
'box-shadow:0 2px 6px rgba(51,102,204,.35);}',
'.btg-ok:hover{background:#2a55b0;box-shadow:0 3px 10px rgba(51,102,204,.45)}',
'.btg-cl{',
'background:#f8f9fa;color:#3c4043;',
'border-color:#c8ccd1 !important;}',
'.btg-cl:hover{background:#eaecf0}'
].join( '' ) ).appendTo( 'head' );
}
function openDialog( $textarea, rawText, rows, skippedLines ) {
injectStyles();
$( '#btg-ov' ).remove();
var ukFromLeft = true;
var $ov = $( '<div id="btg-ov">' );
var $dlg = $( '<div id="btg-dlg">' );
$dlg.append( $( '<h4>' ).html( 'তালিকা → উইকিটেবিল' ) );
var suggested = suggestSeparator( rawText );
if ( suggested ) {
CUSTOM_SEP_RE = buildSepRegex( suggested );
var reparsedInit = parseLines( rawText );
rows = reparsedInit.rows;
skippedLines = reparsedInit.skippedLines;
} else {
CUSTOM_SEP_RE = null;
}
var $info = $( '<p class="btg-info">' ).text( rows.length + 'টি সারি পাওয়া গেছে' );
$dlg.append( $info );
var $skipInfo = $( '<p style="color:#d33; font-size:.8em; margin:-10px 0 16px;">' );
if ( skippedLines && skippedLines.length > 0 ) {
$skipInfo.text( 'বাদ পড়া লাইন নম্বর: ' + skippedLines.join( ', ' ) );
} else {
$skipInfo.hide();
}
$dlg.append( $skipInfo );
var $sepInput = $( '<input class="btg-inp" style="width:64px">' )
.val( suggested || '' )
.attr( 'placeholder', 'যেমন /' )
.attr( 'title', 'ব্যবহৃত বিভাজক না পাওয়া গেলে ডিফল্ট । ও ; স্বয়ংক্রিয়ভাবে কাজ করবে' );
$dlg.append(
$( '<div class="btg-r">' )
.append( $( '<span class="lbl">' ).text( 'বিভাজক' ) )
.append( $sepInput )
);
var $sepNote = $( '<p style="font-size:.74em;color:#888;margin:-10px 0 14px;">' )
.text( 'ব্যবহৃত বিভাজক প্রায়োরিটি পাবে।' );
if ( suggested ) {
$sepNote.text( 'সাজেশন: অধিকাংশ লাইনে "' + suggested + '" পাওয়া গেছে, তাই একে স্বয়ংক্রিয়ভাবে বিভাজক হিসেবে ধরা হয়েছে।' );
}
$dlg.append( $sepNote );
$sepInput.on( 'input', function () {
CUSTOM_SEP_RE = buildSepRegex( $sepInput.val() );
var reparsed = parseLines( rawText );
rows = reparsed.rows;
skippedLines = reparsed.skippedLines;
$info.text( rows.length ? ( rows.length + 'টি সারি পাওয়া গেছে' ) : 'কোনো সারিতে এই বিভাজক পাওয়া যায়নি' );
if ( skippedLines.length > 0 ) {
$skipInfo.text( 'বাদ পড়া লাইন নম্বর: ' + skippedLines.join( ', ' ) ).show();
} else {
$skipInfo.hide();
}
refresh();
} );
$dlg.append( $( '<hr class="btg-div">' ) );
var $bam = $( '<button>' ).text( 'বাম' ).addClass( 'on' );
var $dan = $( '<button>' ).text( 'ডান' );
$dlg.append(
$( '<div class="btg-r">' )
.append( $( '<span class="lbl">' ).text( 'উপকরণ উৎস' ) )
.append( $( '<div class="btg-tgl">' ).append( $bam ).append( $dan ) )
);
var $ukName = $( '<input class="btg-inp">' )
.val( DEFAULT_COL_UK )
.attr( 'placeholder', DEFAULT_COL_UK )
.attr( 'title', 'উপকরণ কলামের নাম পরিবর্তন করুন' );
var $porName = $( '<input class="btg-inp">' )
.val( DEFAULT_COL_POR )
.attr( 'placeholder', DEFAULT_COL_POR )
.attr( 'title', 'পরিমাণ কলামের নাম পরিবর্তন করুন' );
$dlg.append(
$( '<div class="btg-r">' )
.append( $( '<span class="lbl">' ).text( 'কলামের নাম' ) )
.append( $ukName )
.append( $porName )
);
var $pre = $( '<pre>' );
var $ins = $( '<button class="btg-ok">' ).text( 'করুন' );
function refresh() {
$pre.text( rows.length ? buildTable( rows, ukFromLeft, $ukName.val(), $porName.val() ) : '' );
$ins.prop( 'disabled', !rows.length );
}
refresh();
$dlg.append( $( '<p class="btg-pv-lbl">' ).text( 'প্রিভিউ (উইকিটেক্সট):' ) );
$dlg.append( $( '<div class="btg-pv">' ).append( $pre ) );
$bam.on( 'click', function () {
ukFromLeft = true;
$bam.addClass( 'on' );
$dan.removeClass( 'on' );
refresh();
} );
$dan.on( 'click', function () {
ukFromLeft = false;
$dan.addClass( 'on' );
$bam.removeClass( 'on' );
refresh();
} );
$ukName.add( $porName ).on( 'input', refresh );
var $cls = $( '<button class="btg-cl">' ).text( 'বাতিল' );
$ins.on( 'click', function () {
var table = buildTable( rows, ukFromLeft, $ukName.val(), $porName.val() );
replaceSelection( $textarea, table );
$ov.remove();
mw.notify( 'সফলভাবে টেবিল যোগ করা হয়েছে', { type: 'success' } );
} );
$cls.on( 'click', function () { $ov.remove(); } );
$dlg.append( $( '<div class="btg-acts">' ).append( $cls ).append( $ins ) );
$ov.append( $dlg );
$ov.on( 'click', function ( e ) {
if ( e.target === this ) { $ov.remove(); }
} );
$( document ).one( 'keydown.btg', function ( e ) {
if ( e.key === 'Escape' ) { $ov.remove(); }
} );
$( 'body' ).append( $ov );
setTimeout( function () { $bam.trigger( 'focus' ); }, 50 );
}
var ICON_SVG = 'data:image/svg+xml;utf8,' + encodeURIComponent( [
'<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 22 22">',
'<rect x="1.5" y="1.5" width="19" height="19" rx="2.5"',
' fill="none" stroke="#555" stroke-width="1.4"/>',
'<rect x="2" y="2" width="18" height="5.5" rx="1.5" fill="#cde"/>',
'<line x1="2" y1="7.5" x2="20" y2="7.5" stroke="#888" stroke-width=".9"/>',
'<line x1="2" y1="13" x2="20" y2="13" stroke="#ccc" stroke-width=".7"/>',
'<line x1="11" y1="7.5" x2="11" y2="20" stroke="#888" stroke-width=".9"/>',
'</svg>'
].join( '' ) );
function addToolbarButton( $textarea ) {
try {
$textarea.wikiEditor( 'addToToolbar', {
section: 'main',
group: 'insert',
tools: {
'btg-list-to-table': {
label: 'তালিকা থেকে টেবিল',
type: 'button',
icon: ICON_SVG,
action: {
type: 'callback',
execute: function ( context ) {
var $ta = context.$textarea;
var sel = getSelection( $ta );
if ( !sel.trim() ) {
mw.notify(
'প্রথমে টেক্সট নির্বাচন করুন। (ফরম্যাট: পাঠ।পাঠ)',
{ type: 'warn' }
);
return;
}
CUSTOM_SEP_RE = null;
var parsed = parseLines( sel );
if ( !parsed.rows.length ) {
var guess = suggestSeparator( sel );
if ( guess ) {
CUSTOM_SEP_RE = buildSepRegex( guess );
parsed = parseLines( sel );
}
}
var rows = parsed.rows;
var skippedLines = parsed.skippedLines;
if ( !rows.length ) {
mw.notify(
'নির্বাচিত টেক্সটে বৈধ বিভাজক (দাড়ি, সেমিকোলন) পাওয়া যায়নি।',
{ type: 'error' }
);
return;
}
openDialog( $ta, sel, rows, skippedLines );
}
}
}
}
} );
} catch ( err ) {
mw.log.warn( '[BTG] টুলবার বোতাম যোগ করা যায়নি:', err );
}
}
mw.loader.using( 'ext.wikiEditor', function () {
mw.hook( 'wikiEditor.toolbarReady' ).add( function ( $textarea ) {
addToolbarButton( $textarea );
} );
} );
}() );
2c8si9f769m13oy8hdchbzqak849qwr
759927
759926
2026-09-02T09:33:10Z
কমলেশ মন্ডল
72403
759927
javascript
text/javascript
/**
* তালিকা থেকে টেবিল তৈরির সরঞ্জাম
*
* ব্যবহারের নিয়ম:
* ১. যেকোনো পাতা উৎস সম্পাদনা মোডে খুলুন।
* ২. এক বা একাধিক লাইন নির্বাচন করুন এই ফরম্যাটে:
* পাঠ।পাঠ ← দাড়ির (।) বাম ও ডান পাশ যথাক্রমে টেবিলের দুই কলামে আসবে
* যেমন: মরিচ।১ চামচ
* তবে দাড়ির ডান ও বাম পাশে একটি করে অথবা যেকোনো পাশে একটি স্পেস থাকলেও কাজ করবে
* ৩. টুলবারে তালিকা→টেবিল বোতামে ক্লিক করুন (সিনট্যাক্স বোতামের পাশের আইকনে)।
* ৪. পপআপে:
* • উপকরণ উৎস হিসেবে বাম বা ডান বেছে নিন। ডিফল্ট হিসেবে বাম সিলেক্ট করা থাকবে।
* • চাইলে কলামের নামও বদলানো যাবে।
* ৫. করুন বোতামে ক্লিক করুন — নির্বাচিত টেক্সটের জায়গায় উইকিটেবিল আসবে।
*
* ডিফল্ট আচরণ (বাম নির্বাচিত থাকলে):
* উৎস লাইন: মরিচ।১ চামচ
* ↑ বাম ↑ ডান
*
* তৈরি হওয়া টেবিল:
* | উপকরণ | পরিমাণ |
* | মরিচ | ১ চামচ | ← বাম পাশের টেক্সট → উপকরণ কলামে (বামে)
* ডান পাশের টেক্সট → পরিমাণ কলামে (ডানে)
*
* উৎস টেক্সটে উপকরণের নাম ডানে ও পরিমাণ বামে থাকলে ডান বেছে নিন।
*/
( function () {
'use strict';
if ( ![ 'edit', 'submit' ].includes( mw.config.get( 'wgAction' ) ) ) {
return;
}
var BASE_SEP_RE = buildSepRegex( '।;' );
var CUSTOM_SEP_RE = null;
var DEFAULT_COL_UK = 'উপকরণ';
var DEFAULT_COL_POR = 'পরিমাণ';
function buildSepRegex( chars ) {
var cleaned = ( chars || '' ).replace( /\s+/g, '' );
if ( !cleaned ) return null;
var escaped = cleaned.replace( /[.*+?^${}()|[\]\\-]/g, '\\$&' );
return new RegExp( '[ \\t]*[' + escaped + '][ \\t]*' );
}
var DIGIT_CLASS = '[\\d০-৯]';
var PROTECT_PATTERNS = [
[ new RegExp( DIGIT_CLASS + '\\s*-\\s*' + DIGIT_CLASS, 'g' ), '-', '\uE000' ],
[ new RegExp( DIGIT_CLASS + '\\s*–\\s*' + DIGIT_CLASS, 'g' ), '–', '\uE001' ],
[ /(?:চা|টেবিল)\s*-\s*চামচ/g, '-', '\uE000' ],
[ /(?:চা|টেবিল)\s*–\s*চামচ/g, '–', '\uE001' ]
];
function protectInternalSeparators( s ) {
PROTECT_PATTERNS.forEach( function ( p ) {
s = s.replace( p[ 0 ], function ( m ) { return m.split( p[ 1 ] ).join( p[ 2 ] ); } );
} );
return s;
}
function restoreProtectedSeparators( s ) {
return s.replace( /\uE000/g, '-' ).replace( /\uE001/g, '–' );
}
function findMatchingSep( s ) {
var p = protectInternalSeparators( s );
if ( CUSTOM_SEP_RE && CUSTOM_SEP_RE.test( p ) ) return CUSTOM_SEP_RE;
if ( BASE_SEP_RE.test( p ) ) return BASE_SEP_RE;
return null;
}
function lastMatchSplit( str, re ) {
var g = new RegExp( re.source, re.flags.indexOf( 'g' ) === -1 ? re.flags + 'g' : re.flags );
var m, last = null;
while ( ( m = g.exec( str ) ) !== null ) {
last = m;
if ( m.index === g.lastIndex ) g.lastIndex++;
}
if ( !last ) return null;
return { left: str.slice( 0, last.index ), right: str.slice( last.index + last[ 0 ].length ) };
}
function splitBySep( s ) {
var p = protectInternalSeparators( s );
var sep = null;
if ( CUSTOM_SEP_RE && CUSTOM_SEP_RE.test( p ) ) sep = CUSTOM_SEP_RE;
else if ( BASE_SEP_RE.test( p ) ) sep = BASE_SEP_RE;
if ( !sep ) return null;
var res = lastMatchSplit( p, sep );
if ( !res ) return null;
return {
left: restoreProtectedSeparators( res.left ).trim(),
right: restoreProtectedSeparators( res.right ).trim()
};
}
var SEP_SUGGEST_CANDIDATES = [ '-', '–', '/', ':', '।', '|', '=', '~' ];
var SEP_SUGGEST_THRESHOLD = 0.6;
function suggestSeparator( rawText ) {
var segments = [];
rawText.split( '\n' ).forEach( function ( l ) {
l.split( ',' ).forEach( function ( seg ) {
seg = protectInternalSeparators( seg.trim() );
if ( seg ) segments.push( seg );
} );
} );
if ( !segments.length ) return null;
var counts = {};
SEP_SUGGEST_CANDIDATES.forEach( function ( ch ) { counts[ ch ] = 0; } );
segments.forEach( function ( seg ) {
SEP_SUGGEST_CANDIDATES.forEach( function ( ch ) {
if ( seg.indexOf( ch ) !== -1 ) counts[ ch ]++;
} );
} );
var best = null, bestRatio = 0;
SEP_SUGGEST_CANDIDATES.forEach( function ( ch ) {
var ratio = counts[ ch ] / segments.length;
if ( ratio >= SEP_SUGGEST_THRESHOLD && ratio > bestRatio ) {
bestRatio = ratio;
best = ch;
}
} );
return best;
}
function getSelection( $ta ) {
var el = $ta[ 0 ];
return el.value.substring( el.selectionStart, el.selectionEnd );
}
function replaceSelection( $ta, newText ) {
var el = $ta[ 0 ];
var start = el.selectionStart;
var end = el.selectionEnd;
el.value = el.value.substring( 0, start ) + newText + el.value.substring( end );
el.selectionStart = start;
el.selectionEnd = start + newText.length;
el.focus();
$( el ).trigger( 'input' );
}
function parseLines( rawText ) {
var parsed = { rows: [], skippedLines: [] };
var lines = rawText.split( '\n' );
var numPart = '(?:[\\d০-৯]+\\/[\\d০-৯]+|[\\d০-৯]+(?:[\\s–-]+[\\d০-৯]+)?|আধ|আধা|হাফ|কোয়ার্টার|দেড়|আড়াই|সোয়া|পৌনে|পোয়া|পোয়াটাক|সিকি|অর্ধেক|এক|দুই|দু|তিন|চার|পাঁচ|ছয়|সাত|আট|নয়|দশ|এগারো|বারো|কয়েক)';
var unitPart = '(?:কেজি|গ্রাম|কিলোগ্রাম|কাপ|টেবিল[\\s–-]*চামচ|চা[\\s–-]*চামচ|চামচ|টুকরা|টুকরো|মিলি|লিটার|মিলিলিটার|কোয়া|আঁটি|চিমটি|মুঠো|ফোঁটা|প্যাকেট|স্টিক|পিস|চিমটে|চিলতে)';
var suffixPart = '(?:টি|টা|টো)';
var abstractPart = '(?:পরিমাণমতো|পরিমাণমত|পরিমাণ মত|পরিমাণ মতো|স্বাদমতো|স্বাদমত|সামান্য|ইচ্ছামতো|ইচ্ছামত|ইচ্ছেমতো|ইচ্ছেমত|ঐচ্ছিক|অল্প|অল্প পরিমাণ)';
var qtyPattern = '(?:' + numPart + '[\\s–-]*' + unitPart + '|' + numPart + '\\s*' + suffixPart + '|' + abstractPart + ')';
var SMART_QTY_END = new RegExp( '(' + qtyPattern + ')$' );
var SMART_QTY_START = new RegExp( '^(' + qtyPattern + ')[\\s–-]+' );
var SMART_QTY_ANY = new RegExp( qtyPattern );
function hasQty( s ) {
return !!findMatchingSep( s ) || !!s.match( SMART_QTY_END ) || !!s.match( SMART_QTY_START );
}
function tryParse( trimmed, target ) {
var sp = splitBySep( trimmed );
if ( sp ) {
if ( !sp.left ) return false;
target.push( { left: sp.left, right: sp.right } );
return true;
}
var matchEnd = trimmed.match( SMART_QTY_END );
if ( matchEnd ) {
var qty = matchEnd[ 1 ].trim();
var item = trimmed.substring( 0, trimmed.length - matchEnd[ 0 ].length ).replace( /[,–-]+$/, '' ).trim();
if ( !item ) return false;
target.push( { left: item, right: qty } );
return true;
}
var matchStart = trimmed.match( SMART_QTY_START );
if ( matchStart ) {
qty = matchStart[ 1 ].trim();
item = trimmed.substring( matchStart[ 0 ].length ).replace( /^[,–-]+/, '' ).trim();
if ( !item ) return false;
target.push( { left: item, right: qty } );
return true;
}
return false;
}
function applySharedQty( parts, note, target ) {
var names, sharedQty;
var last = parts[ parts.length - 1 ];
var sp = splitBySep( last );
if ( sp ) {
sharedQty = sp.right;
names = parts.slice( 0, -1 ).concat( sp.left );
} else {
var lastQtyMatch = last.match( SMART_QTY_END );
if ( !lastQtyMatch ) return false;
sharedQty = lastQtyMatch[ 1 ].trim();
var lastItem = last.substring( 0, last.length - lastQtyMatch[ 0 ].length ).replace( /[,–-]+$/, '' ).trim();
names = parts.slice( 0, -1 ).concat( lastItem );
}
names = names.filter( Boolean );
if ( !names.length ) return false;
var qtyOnly = sharedQty.match( SMART_QTY_ANY );
if ( qtyOnly ) sharedQty = qtyOnly[ 0 ].trim();
names.forEach( function ( name ) {
target.push( { left: name, right: sharedQty + note } );
} );
return true;
}
function stripTrailingNote( s ) {
var m = s.match( /\s*(\([^)]*\))$/ );
if ( !m ) return { text: s, note: '' };
return { text: s.substring( 0, s.length - m[ 0 ].length ).trim(), note: ' ' + m[ 1 ] };
}
var JOINER_MID_RE = /[ \t](?:ও|এবং)[ \t]/;
function splitJoinerChunks( chunk ) {
var result = [];
var remaining = chunk;
var m;
while ( ( m = JOINER_MID_RE.exec( remaining ) ) !== null ) {
var left = remaining.slice( 0, m.index ).trim();
var right = remaining.slice( m.index + m[ 0 ].length ).trim();
if ( left && right && hasQty( left ) && hasQty( right ) ) {
result.push( left );
remaining = right;
} else {
break;
}
}
result.push( remaining.trim() );
return result;
}
function absorbLeadingEbong( chunks ) {
var out = [];
chunks.forEach( function ( raw ) {
var c = raw.trim();
var m = c.match( /^এবং[ \t]+([\s\S]*)$/ );
if ( m && out.length ) {
var prev = out[ out.length - 1 ];
var rest = m[ 1 ].trim();
if ( hasQty( prev ) && hasQty( rest ) ) {
out.push( rest );
return;
}
}
out.push( c );
} );
return out;
}
function expandJoiners( trimmed ) {
var expanded = [];
trimmed.split( ',' ).forEach( function ( chunk ) {
expanded = expanded.concat( splitJoinerChunks( chunk ) );
} );
return absorbLeadingEbong( expanded ).join( ',' );
}
var realIndex = 0;
lines.forEach( function ( l ) {
var trimmed = l.trim().replace( /[।,]+$/, '' ).trim().normalize( 'NFC' );
if ( !trimmed ) return;
realIndex++;
trimmed = expandJoiners( trimmed );
if ( !trimmed.includes( ',' ) ) {
var info = stripTrailingNote( trimmed );
var temp = [];
if ( tryParse( info.text, temp ) ) {
temp.forEach( function ( r ) { parsed.rows.push( { left: r.left, right: r.right + info.note } ); } );
return;
}
parsed.skippedLines.push( realIndex );
return;
}
var subParts = trimmed.split( ',' ).map( function ( s ) { return s.trim(); } ).filter( Boolean );
var subInfo = subParts.map( stripTrailingNote );
if ( subInfo.every( function ( info ) { return hasQty( info.text ); } ) ) {
var subTemp = [];
var anyFailed = false;
subInfo.forEach( function ( info ) {
var t = [];
if ( tryParse( info.text, t ) ) {
t.forEach( function ( r ) { subTemp.push( { left: r.left, right: r.right + info.note } ); } );
} else {
anyFailed = true;
}
} );
if ( !anyFailed ) {
subTemp.forEach( function ( r ) { parsed.rows.push( r ); } );
} else {
parsed.skippedLines.push( realIndex );
}
return;
}
var lastInfo = subInfo[ subInfo.length - 1 ];
var subOthersHaveQty = subInfo.slice( 0, -1 ).some( function ( info ) { return hasQty( info.text ); } );
if ( !subOthersHaveQty && hasQty( lastInfo.text ) ) {
var sharedTemp = [];
var partsForShare = subParts.slice( 0, -1 ).concat( lastInfo.text );
if ( applySharedQty( partsForShare, lastInfo.note, sharedTemp ) ) {
sharedTemp.forEach( function ( r ) { parsed.rows.push( r ); } );
return;
}
}
parsed.skippedLines.push( realIndex );
} );
return parsed;
}
function buildTable( rows, ukFromLeft, colUk, colPor ) {
var lh = ( colUk || DEFAULT_COL_UK ).trim() || DEFAULT_COL_UK;
var rh = ( colPor || DEFAULT_COL_POR ).trim() || DEFAULT_COL_POR;
var lines = [
'{| class="wikitable"',
'|-',
'! ' + lh + ' !! ' + rh
];
rows.forEach( function ( row ) {
var leftCell = ukFromLeft ? row.left : row.right;
var rightCell = ukFromLeft ? row.right : row.left;
lines.push( '|-' );
lines.push( '| ' + leftCell + ' || ' + rightCell );
} );
lines.push( '|}' );
return lines.join( '\n' );
}
function injectStyles() {
if ( $( '#btg-css' ).length ) { return; }
$( '<style id="btg-css">' ).text( [
'#btg-ov{',
'position:fixed;inset:0;',
'background:rgba(0,0,0,.54);',
'z-index:10000;',
'display:flex;align-items:center;justify-content:center;',
'animation:btg-fadein .15s ease;}',
'@keyframes btg-fadein{from{opacity:0}to{opacity:1}}',
'#btg-dlg{',
'background:#ffffff;',
'border-radius:8px;',
'padding:24px 26px 20px;',
'width:400px;max-width:96vw;',
'box-shadow:0 8px 36px rgba(0,0,0,.32);',
'font-family:"Noto Serif Bengali","SolaimanLipi","Kalpurush",serif;',
'animation:btg-slidein .17s cubic-bezier(.22,.61,.36,1);}',
'@keyframes btg-slidein{from{transform:translateY(12px);opacity:0}',
'to{transform:translateY(0);opacity:1}}',
'#btg-dlg h4{',
'margin:0 0 4px;font-size:1.08em;font-weight:700;',
'color:#1a1a2e;letter-spacing:.01em;}',
'.btg-info{font-size:.78em;color:#72777d;margin:0 0 16px}',
'.btg-div{border:none;border-top:1px solid #eaecf0;margin:0 0 16px}',
'.btg-r{display:flex;align-items:center;gap:12px;margin-bottom:14px}',
'.btg-r .lbl{',
'font-size:.88em;font-weight:600;color:#3c4043;',
'min-width:88px;flex-shrink:0;}',
'.btg-tgl{',
'display:flex;',
'border:1.5px solid #c8ccd1;',
'border-radius:20px;overflow:hidden;',
'background:#f8f9fa;}',
'.btg-tgl button{',
'padding:5px 22px;border:none;background:transparent;',
'cursor:pointer;font-size:.84em;',
'font-family:inherit;color:#555;',
'-webkit-tap-highlight-color:transparent;',
'transition:background .15s,color .15s,transform .1s;}',
'.btg-tgl button.on{',
'background:#3366cc;color:#fff;',
'border-radius:20px;',
'box-shadow:0 1px 4px rgba(51,102,204,.4);}',
'.btg-tgl button:hover:not(.on){background:#e0e7ff;color:#3366cc}',
'.btg-inp{',
'padding:5px 9px;',
'border:1.5px solid #c8ccd1;',
'border-radius:5px;',
'font-size:.86em;',
'font-family:inherit;',
'width:100px;',
'color:#202122;',
'transition:border-color .15s,box-shadow .15s;}',
'.btg-inp:focus{',
'outline:none;',
'border-color:#3366cc;',
'box-shadow:0 0 0 2.5px rgba(51,102,204,.2);}',
'.btg-pv-lbl{font-size:.76em;color:#888;margin-bottom:5px;letter-spacing:.03em}',
'.btg-pv{',
'background:#f5f6f7;',
'border:1px solid #dde1e4;',
'border-radius:5px;',
'padding:9px 12px;',
'max-height:128px;overflow:auto;',
'margin-bottom:16px;}',
'.btg-pv pre{',
'margin:0;font-size:.73em;color:#3c4043;',
'font-family:"Courier New",Courier,monospace;',
'white-space:pre;line-height:1.55;}',
'.btg-acts{display:flex;gap:10px;justify-content:flex-end}',
'.btg-acts button{',
'padding:7px 22px;border-radius:6px;cursor:pointer;',
'font-size:.88em;font-family:inherit;',
'font-weight:600;letter-spacing:.02em;',
'border:1.5px solid transparent;',
'-webkit-tap-highlight-color:transparent;',
'transition:background .14s,transform .1s,box-shadow .14s;}',
'.btg-acts button:active{transform:scale(.97)}',
'.btg-acts button:focus,.btg-tgl button:focus{outline:none}',
'.btg-acts button:focus-visible,.btg-tgl button:focus-visible{',
'outline:2px solid #3366cc;outline-offset:2px;}',
'.btg-acts button:disabled{',
'opacity:.45;cursor:not-allowed;box-shadow:none;transform:none;}',
'.btg-ok{',
'background:#3366cc;color:#fff;',
'border-color:#3366cc !important;',
'box-shadow:0 2px 6px rgba(51,102,204,.35);}',
'.btg-ok:hover{background:#2a55b0;box-shadow:0 3px 10px rgba(51,102,204,.45)}',
'.btg-cl{',
'background:#f8f9fa;color:#3c4043;',
'border-color:#c8ccd1 !important;}',
'.btg-cl:hover{background:#eaecf0}'
].join( '' ) ).appendTo( 'head' );
}
function openDialog( $textarea, rawText, rows, skippedLines ) {
injectStyles();
$( '#btg-ov' ).remove();
var ukFromLeft = true;
var $ov = $( '<div id="btg-ov">' );
var $dlg = $( '<div id="btg-dlg">' );
$dlg.append( $( '<h4>' ).html( 'তালিকা → উইকিটেবিল' ) );
var suggested = suggestSeparator( rawText );
if ( suggested ) {
CUSTOM_SEP_RE = buildSepRegex( suggested );
var reparsedInit = parseLines( rawText );
rows = reparsedInit.rows;
skippedLines = reparsedInit.skippedLines;
} else {
CUSTOM_SEP_RE = null;
}
var $info = $( '<p class="btg-info">' ).text( rows.length + 'টি সারি পাওয়া গেছে' );
$dlg.append( $info );
var $skipInfo = $( '<p style="color:#d33; font-size:.8em; margin:-10px 0 16px;">' );
if ( skippedLines && skippedLines.length > 0 ) {
$skipInfo.text( 'বাদ পড়া লাইন নম্বর: ' + skippedLines.join( ', ' ) );
} else {
$skipInfo.hide();
}
$dlg.append( $skipInfo );
var $sepInput = $( '<input class="btg-inp" style="width:64px">' )
.val( suggested || '' )
.attr( 'placeholder', 'যেমন /' )
.attr( 'title', 'ব্যবহৃত বিভাজক না পাওয়া গেলে ডিফল্ট । ও ; স্বয়ংক্রিয়ভাবে কাজ করবে' );
$dlg.append(
$( '<div class="btg-r">' )
.append( $( '<span class="lbl">' ).text( 'বিভাজক' ) )
.append( $sepInput )
);
var $sepNote = $( '<p style="font-size:.74em;color:#888;margin:-10px 0 14px;">' )
.text( 'ব্যবহৃত বিভাজক প্রায়োরিটি পাবে।' );
if ( suggested ) {
$sepNote.text( 'সাজেশন: অধিকাংশ লাইনে "' + suggested + '" পাওয়া গেছে, তাই একে স্বয়ংক্রিয়ভাবে বিভাজক হিসেবে ধরা হয়েছে।' );
}
$dlg.append( $sepNote );
$sepInput.on( 'input', function () {
CUSTOM_SEP_RE = buildSepRegex( $sepInput.val() );
var reparsed = parseLines( rawText );
rows = reparsed.rows;
skippedLines = reparsed.skippedLines;
$info.text( rows.length ? ( rows.length + 'টি সারি পাওয়া গেছে' ) : 'কোনো সারিতে এই বিভাজক পাওয়া যায়নি' );
if ( skippedLines.length > 0 ) {
$skipInfo.text( 'বাদ পড়া লাইন নম্বর: ' + skippedLines.join( ', ' ) ).show();
} else {
$skipInfo.hide();
}
refresh();
} );
$dlg.append( $( '<hr class="btg-div">' ) );
var $bam = $( '<button>' ).text( 'বাম' ).addClass( 'on' );
var $dan = $( '<button>' ).text( 'ডান' );
$dlg.append(
$( '<div class="btg-r">' )
.append( $( '<span class="lbl">' ).text( 'উপকরণ উৎস' ) )
.append( $( '<div class="btg-tgl">' ).append( $bam ).append( $dan ) )
);
var $ukName = $( '<input class="btg-inp">' )
.val( DEFAULT_COL_UK )
.attr( 'placeholder', DEFAULT_COL_UK )
.attr( 'title', 'উপকরণ কলামের নাম পরিবর্তন করুন' );
var $porName = $( '<input class="btg-inp">' )
.val( DEFAULT_COL_POR )
.attr( 'placeholder', DEFAULT_COL_POR )
.attr( 'title', 'পরিমাণ কলামের নাম পরিবর্তন করুন' );
$dlg.append(
$( '<div class="btg-r">' )
.append( $( '<span class="lbl">' ).text( 'কলামের নাম' ) )
.append( $ukName )
.append( $porName )
);
var $pre = $( '<pre>' );
var $ins = $( '<button class="btg-ok">' ).text( 'করুন' );
function refresh() {
$pre.text( rows.length ? buildTable( rows, ukFromLeft, $ukName.val(), $porName.val() ) : '' );
$ins.prop( 'disabled', !rows.length );
}
refresh();
$dlg.append( $( '<p class="btg-pv-lbl">' ).text( 'প্রিভিউ (উইকিটেক্সট):' ) );
$dlg.append( $( '<div class="btg-pv">' ).append( $pre ) );
$bam.on( 'click', function () {
ukFromLeft = true;
$bam.addClass( 'on' );
$dan.removeClass( 'on' );
refresh();
} );
$dan.on( 'click', function () {
ukFromLeft = false;
$dan.addClass( 'on' );
$bam.removeClass( 'on' );
refresh();
} );
$ukName.add( $porName ).on( 'input', refresh );
var $cls = $( '<button class="btg-cl">' ).text( 'বাতিল' );
$ins.on( 'click', function () {
var table = buildTable( rows, ukFromLeft, $ukName.val(), $porName.val() );
replaceSelection( $textarea, table );
$ov.remove();
mw.notify( 'সফলভাবে টেবিল যোগ করা হয়েছে', { type: 'success' } );
} );
$cls.on( 'click', function () { $ov.remove(); } );
$dlg.append( $( '<div class="btg-acts">' ).append( $cls ).append( $ins ) );
$ov.append( $dlg );
$ov.on( 'click', function ( e ) {
if ( e.target === this ) { $ov.remove(); }
} );
$( document ).one( 'keydown.btg', function ( e ) {
if ( e.key === 'Escape' ) { $ov.remove(); }
} );
$( 'body' ).append( $ov );
setTimeout( function () { $bam.trigger( 'focus' ); }, 50 );
}
var ICON_SVG = 'data:image/svg+xml;utf8,' + encodeURIComponent( [
'<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 22 22">',
'<rect x="1.5" y="1.5" width="19" height="19" rx="2.5"',
' fill="none" stroke="#555" stroke-width="1.4"/>',
'<rect x="2" y="2" width="18" height="5.5" rx="1.5" fill="#cde"/>',
'<line x1="2" y1="7.5" x2="20" y2="7.5" stroke="#888" stroke-width=".9"/>',
'<line x1="2" y1="13" x2="20" y2="13" stroke="#ccc" stroke-width=".7"/>',
'<line x1="11" y1="7.5" x2="11" y2="20" stroke="#888" stroke-width=".9"/>',
'</svg>'
].join( '' ) );
function addToolbarButton( $textarea ) {
try {
$textarea.wikiEditor( 'addToToolbar', {
section: 'main',
group: 'insert',
tools: {
'btg-list-to-table': {
label: 'তালিকা থেকে টেবিল',
type: 'button',
icon: ICON_SVG,
action: {
type: 'callback',
execute: function ( context ) {
var $ta = context.$textarea;
var sel = getSelection( $ta );
if ( !sel.trim() ) {
mw.notify(
'প্রথমে টেক্সট নির্বাচন করুন। (ফরম্যাট: পাঠ।পাঠ)',
{ type: 'warn' }
);
return;
}
CUSTOM_SEP_RE = null;
var parsed = parseLines( sel );
if ( !parsed.rows.length ) {
var guess = suggestSeparator( sel );
if ( guess ) {
CUSTOM_SEP_RE = buildSepRegex( guess );
parsed = parseLines( sel );
}
}
var rows = parsed.rows;
var skippedLines = parsed.skippedLines;
if ( !rows.length ) {
mw.notify(
'নির্বাচিত টেক্সটে বৈধ বিভাজক (দাড়ি, সেমিকোলন) পাওয়া যায়নি।',
{ type: 'error' }
);
return;
}
openDialog( $ta, sel, rows, skippedLines );
}
}
}
}
} );
} catch ( err ) {
mw.log.warn( '[BTG] টুলবার বোতাম যোগ করা যায়নি:', err );
}
}
mw.loader.using( 'ext.wikiEditor', function () {
mw.hook( 'wikiEditor.toolbarReady' ).add( function ( $textarea ) {
addToolbarButton( $textarea );
} );
} );
}() );
hfg6q4c4efaclg872edetbnuaheg2lj
User:Ponor/wAwB-worker.js
2
171632
759908
750891
2026-09-02T04:20:43Z
Ponor
47975
almost all protections OFF; stop URLs at | as well
759908
javascript
text/javascript
/*
* wAwB – An in-browser application for automated editing of wiki pages.
* Features: customizable regex or JavaScript search-and-replace rules,
* custom JavaScript pre/post-processing functions and function libraries,
* granular protection or targeting of different parts of wikitext,
* a full-fledged CodeMirror editor, and options to move, delete, and protect pages.
* Author: [[User:Ponor]]
* Documentation: [[User:Ponor/wAwB]]
* License: GNU General Public License (GPL)
*/
//<nowiki>
mw.loader.using([
'oojs-ui-core',
'oojs-ui-widgets',
'oojs-ui-windows',
'mediawiki.api',
'mediawiki.diff.styles',
'mediawiki.util',
'mediawiki.page.gallery.styles',
'oojs-ui.styles.icons-content',
'oojs-ui.styles.icons-interactions',
'oojs-ui.styles.icons-movement',
'oojs-ui.styles.icons-moderation',
'oojs-ui.styles.icons-editing-core',
'oojs-ui.styles.icons-editing-advanced'
]).then(function() {
// =====================================================================
// 1. STATE & CONFIGURATION
// =====================================================================
var SCRIPT_TIMEOUT_MS = window.wa_timeout || 5000;
var FETCH_SAFETY_LIMIT = window.wa_fetchLimit || 10000;
var APP_NAME = "wAwB";
var DO_TAG = false;
var SUMMARY_SUFFIX = window.wa_suffix || " [[:w:en:User:Ponor/wAwB| #wAwB]]";
var APP_VERSION = "0.7";
var DOC_URL = window.wa_docUrl || "https://en.wikipedia.org/wiki/User:Ponor/wAwB";
document.title = window.wa_editIn || "Edit in wAwB";
var PERMS = {
canSave: false,
allowBot: false,
saveDelay: 0
};
var IS_ADMIN = mw.config.get('wgUserGroups').includes('sysop');
var CAN_MOVE = IS_ADMIN || mw.config.get('wgUserGroups').includes('extendedmover') || mw.config.get('wgUserGroups').includes('filemover') || mw.config.get('wgUserGroups').includes('pagemover');
var WIKI = mw.config.get('wgDBname');
var ON_NOTIFY = window.wa_onNotification || 'warn'; // warn, stop, nothing
var ON_NOTIFY_FREQ = 30 * 1000; // every 30s
var SAVED_RUN = 0;
var SAVED_SESSION = 0;
var currentPageExists = false;
var isRunning = false;
var isFetching = false;
var currentTitle = null;
var currentVars = {};
var currentLibrary = {
name: null,
code: null
};
var originalWikitext = "";
var currentPageSummaryAppend = "";
var currentPageSummaryOverride = null;
var baseRevId = 0;
var currentViewMode = 'diff';
var viewScroll = resetViewScroll();
var autoSaveTimer = null;
var propNamesLoaded = false;
var hasNewSources = false;
var currentHeightMode = 1; // 0=25%, 1=45% (default), 2=72%
var heightValues = ['25%', '45%', '72%'];
// EXTERNAL RULES STATE
var wikiTypos = [];
var localTypos = [];
// LOADING FLAG
var isLoadingProject = false;
// NAMESPACE ALIASES
var nsIds = mw.config.get('wgNamespaceIds');
var catAliases = [],
fileAliases = [];
for (var key in nsIds) {
if (nsIds[key] === 14) catAliases.push(key.replace(/_/g, ' '));
if (nsIds[key] === 6) fileAliases.push(key.replace(/_/g, ' '));
}
catAliases.sort((a, b) => b.length - a.length);
fileAliases.sort((a, b) => b.length - a.length);
var REGEX_CAT_PFX = catAliases.map(mw.util.escapeRegExp).join('|');
var REGEX_FILE_PFX = fileAliases.map(mw.util.escapeRegExp).join('|');
// MASTER PROTECTION DEFINITIONS
var PROTECTION_DEFS = [{
id: 'nowiki',
isOn: false,
label: 'Nowiki: <nowiki>',
regex: /<nowiki>[\s\S]*?<\/nowiki>|<nowiki\s*\/>/gi
},
{
id: 'comments',
isOn: true,
label: 'Comments: <!' + '-- -->',
regex: new RegExp('<!' + '--[\\s\\S]*?--' + '>', 'g')
},
{
id: 'headers',
isOn: false,
label: 'Headers: == Title ==',
regex: /^==+[\s\S]+?==+\s*$/gm
},
{
id: 'templates',
isOn: false,
label: 'Templates: {{...}}',
open: '{{',
close: '}}',
species: null,
regex: null
},
{
id: 'tables',
isOn: false,
label: 'Tables: {|...|}',
open: '\n{|',
close: '\n|}',
regex: null
},
{
id: 'images',
isOn: false,
label: 'Images: [[File:...|...|...]]',
open: '[[',
close: ']]',
species: '(?:' + REGEX_FILE_PFX + ')\\s*:',
regex: null
},
{
id: 'refs',
isOn: false,
label: 'Refs: <ref...',
regex: /<ref[^>]*?\/>|<ref[^>]*?(?<!\/)>[\s\S]*?<\/ref>/gi
},
{
id: 'blocks',
isOn: false,
label: 'Blocks: math, gallery...',
regex: null
},
{
id: 'categories',
isOn: false,
label: 'Categories: [[Category:...]]',
regex: new RegExp('\\[\\[\\s*(' + REGEX_CAT_PFX + ')\\s*:[^\\]]+\\]\\]', 'giu')
},
{
id: 'files',
isOn: false,
label: 'File names: File:...',
regex: new RegExp('(?<=\\[\\[\\s*:?(:?' + REGEX_FILE_PFX + ')\\s*:)[^|\\]]+' + '|^\\s*(?:' + REGEX_FILE_PFX + ')\\s*:([^\\][}{|\\n]{1,150}\\.(?:svg|png|jpe?g|gif|tiff|webp|xcf|mp3|midi|ogg|webm|flac|wav|mpe?g|pdf|djv))', 'gmiu')
},
{
id: 'targets',
isOn: false,
label: 'Targets of [[...|',
regex: /(?<=\[\[:?)[^|\]]+?(?=\||\]\])/g
},
{
id: 'extlinks',
isOn: false,
label: 'External links: [...]',
regex: /(?<=\[)(https?:\/\/|ftps?:\/\/|mailto:)[^\]]+(?=\])/gi
},
{
id: 'urls',
isOn: false,
label: 'URLs: http...',
regex: /https?:\/\/[^\s<>[\]"'`|()]+/gi
}
];
// =====================================================================
// 2. CSS STYLES
// =====================================================================
var styles = `
* { box-sizing: border-box; }
#wa-root { font-family: sans-serif; height: 100vh; width: 100vw; overflow: hidden; display: flex; font-size: 14px; }
#wa-left-panel { width: 400px; min-width: 400px; max-width: 400px; background: var(--background-color-base, #fff); border-right: 1px solid #c8ccd1; display: flex; flex-direction: column; z-index: 10; overflow-x: hidden; }
#wa-left-panel h3 { color: #3f6fcf; text-align: center; margin: 12px 0 0 0; }
#wa-username { color: #3f6fcf; text-align: center; margin: 2px 0; font-size: 92%; }
#wa-content-area { flex: 1; padding: 10px 10px 100px 10px; overflow-y: auto; overflow-x: hidden; }
#wa-right-panel { flex: 1; display: flex; flex-direction: column; height: 100%; background: var(--background-color-interactive, #eaecf0); overflow: hidden; }
#wa-visual-output { flex: 0 0 45%; min-height: 0; overflow-y: auto; background: var(--background-color-base, #fff); padding: 20px; border-bottom: 1px solid #c8ccd1; }
.wa-editor-header { flex: 0 0 40px; min-height: 40px; padding: 0 10px; background: var(--background-color-interactive-subtle, #f8f9fa); border-bottom: 1px solid #c8ccd1; display: flex; gap: 25px; justify-content: space-between; align-items: center; z-index: 10; }
.wa-editor-header.wa-dirty { background: var(--background-color-warning-subtle, #fdf2d5); border-bottom: 1px solid #e6a700; }
@keyframes wa-header-pulse { 0% { background-color: var(--background-color-destructive-subtle, #fee7e6); } 50% { background-color: var(--background-color-interactive-subtle, transparent); } 100% { background-color: var(--background-color-destructive-subtle, #fee7e6); } }
.wa-editor-header.wa-header-alert { border-bottom: 2px solid var(--border-color-destructive, #b32424) !important; animation: wa-header-pulse 1s 60 ease-in-out forwards !important; }
.wa-header-left { flex: 1; display: flex; align-items: center; gap: 5px; min-width: 0; overflow: hidden; }
.wa-header-right { flex: 0 0 auto; display: flex; justify-content: flex-end; align-items: center; gap: 8px; color: var(--color-placeholder, #72777d); font-size: 0.9em; }
.wa-title-link { font-weight: bold; font-size: 1.1em; color: var(--color-progressive--focus, #36c) !important; text-decoration: none; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; flex-shrink: 0; max-width: 40%; }
.wa-title-link:hover { text-decoration: underline; }
#wa-status-indicator { flex: 0 0 auto; width: 10px; height: 10px; border-radius: 50%; background-color: #00af89; cursor: help; transition: background-color 0.2s; margin-right: 2px; }
#wa-status-indicator.wa-status-working { background-color: #36c; animation: wa-pulse-blue 1.5s infinite; }
#wa-status-indicator.wa-status-error { background-color: #bf3c2c; }
@keyframes wa-pulse-blue { 0% { opacity: 1; } 50% { opacity: 0.4; } 100% { opacity: 1; } }
.wa-header-sep { border-left: 1px solid #ccc; height: 16px; flex-shrink: 0; margin: 0 2px; }
#wa-summary-preview { flex-grow: 1; color: #d00; font-style: italic; white-space: nowrap; text-overflow: ellipsis; overflow-x: auto; background: transparent; border: none; outline: none; box-shadow: none; min-width: 50px; padding: 2px 5px; scrollbar-width: none; -ms-overflow-style: none; font-size: 1em; }
#wa-summary-preview::-webkit-scrollbar { display: none; }
#wa-summary-preview:hover { background: rgba(0, 0, 0, 0.05); cursor: text; }
#wa-summary-preview:focus { background: #fff; }
.wa-info-container { margin-right: 10px; }
.wa-tools-container { display: flex; align-items: center; gap: 2px; }
.wa-resize-container { display: flex; flex-direction: column; justify-content: center; height: 100%; margin-left: 10px; padding-left: 5px; border-left: 1px solid #ccc; }
.wa-resize-btn { cursor: pointer; color: #72777d; user-select: none; width: 20px; height: 14px; display: flex; align-items: center; justify-content: center; transition: color 0.1s ease-in-out; }
.wa-resize-btn:hover { color: #36c; }
.wa-resize-btn.wa-resize-disabled { color: #ccc; cursor: default; }
#wa-proc-header { margin-top: 15px !important; border-bottom: none !important; cursor: default; }
#wa-proc-title { font-weight: bold; padding: 10px; display: block; }
#wa-proc-content { padding: 0 10px 15px 10px; }
#wa-editor-area { flex: 1; min-height: 0; display: flex; flex-direction: column; background: var(--background-color-base, #fff); position: relative; overflow: hidden; }
#wa-editor-textarea { flex: 1; height: 100%; font-family: monospace; font-size: 13px; border: none; outline: none; padding: 10px; resize: none; width: 100%; }
.cm-editor { height: 100% !important; flex: 1; }
.wa-section-header { margin-top: 12px; border-bottom: 1px solid #eee; width: 100%; display: block; margin-left: 0 !important; }
#wa-content-area .wa-section-header:first-child, #wa-content-area .wa-section-header.oo-ui-buttonElement-frameless:first-child { margin-top: 0; margin-left: 0 !important; }
.wa-section-header > .oo-ui-buttonElement-button { text-align: left; padding: 10px 10px !important; margin: 0 !important; display: block; width: 100%; position: relative; border-left: 3px solid #3f6fcf !important; border-radius: 3px !important; background-color: transparent !important; }
.wa-section-header > .oo-ui-buttonElement-button:focus { outline: none !important; }
.wa-section-header .oo-ui-labelElement-label { font-weight: bold; padding-left: 0 !important; margin-left: 0 !important; color: var(--color-base, #202122); }
.wa-section-header .oo-ui-indicatorElement-indicator { position: absolute; right: 10px !important; top: 50%; margin-top: -10px; left: auto !important; width: 20px; }
.wa-foldable-content { display: none; padding: 10px 0; }
.wa-source-options { background: var(--background-color-interactive-subtle, #f8f9fa); border: 1px solid #c8ccd1; border-top: none; padding: 8px; margin-bottom: 10px; font-size: 0.9em; }
.wa-opt-row { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 5px; }
.wa-opt-label { font-weight: bold; width: 100%; margin-bottom: 5px; color: var(--color-base, #202122); }
.wa-opt-row > div { margin-top: 8px !important; margin-bottom: 8px !important; }
.wa-rule-row { background: var(--background-color-interactive-subtle, #f8f9fa); border: 1px solid #c8ccd1; padding: 8px; margin-bottom: 8px; border-radius: 4px; display: flex; align-items: stretch; transition: background-color 0.3s; }
.wa-rule-row.wa-highlight { background-color: var(--background-color-interactive, #eaecf0); border-color: #36c; }
.wa-rule-controls { display: flex; flex-direction: column; justify-content: center; gap: 0px; padding-right: 4px; border-right: 1px solid #eee; margin-right: 8px; }
.wa-rule-btn { margin: 0 !important; margin-right: 0 !important; margin-left: 0 !important; }
.wa-rule-btn > .oo-ui-buttonElement-button { margin: 0 !important; }
.wa-rule-content { flex: 1; min-width: 0; }
.wa-rule-opt-row { display: flex; justify-content: space-between; align-items: center; margin-top: 5px; }
#wa-ns-selector { width: 100%; margin-bottom: 10px; font-family: sans-serif; font-size: 0.9em; border: 1px solid #a2a9b1; }
.wa-lib-dialog > .oo-ui-window-frame { width: 80vw !important; max-width: none !important; height: 80vh !important; max-height: none !important; }
.wa-lib-editorwrapper { height: 100%; border: 1px solid #c8ccd1; position: relative; boxSizing: border-box; }
.wa-page-list-raw textarea { font-family: monospace; font-size: 0.9em; white-space: pre; overflow-x: auto; }
.wa-list-running textarea { background-color: var(--background-color-neutral-subtle, #f8f8f8) !important; color: var(--color-base, #202122) !important; }
.wa-grid-container { display: flex; gap: 6px; margin-bottom: 10px; }
.wa-grid-col { flex: 1; display: flex; flex-direction: column; gap: 6px; }
.wa-grid-col .oo-ui-buttonWidget { width: 100%; }
.wa-grid-col .oo-ui-buttonWidget .oo-ui-buttonElement-button { width: 100%; text-align: center; justify-content: center; }
.wa-toolbar { display: flex; justify-content: flex-end; align-items: center; gap: 4px; border-bottom: 1px solid #eee; padding-bottom: 4px; margin-bottom: 4px; }
.wa-list-counter { margin-right: auto; font-weight: bold; color: var(--color-subtle, #54595d); font-size: 0.9em; padding-left: 5px; }
.wa-project-bar { display: flex; flex-wrap: wrap; gap: 8px; padding: 0 10px; margin: 8px 0; justify-content: center; }
.wa-project-bar .oo-ui-buttonElement-button { padding-left: 36px !important; padding-right: 12px !important; font-size: 0.9em; }
.wa-project-bar .oo-ui-iconElement-icon { left: 10px !important; }
.wa-settings-header { font-weight: bold; color: var(--color-subtle, #54595d); margin-bottom: 8px; display: block; text-transform: uppercase; font-size: 0.9em; }
.wa-setting-row { display: flex; align-items: center; margin-bottom: 6px; }
.wa-bot-row { background: var(--background-color-success-subtle, #dff2eb); border: 1px solid #a5d6a7; padding: 8px; margin-bottom: 10px; border-radius: 4px; display: flex; align-items: center; justify-content: flex-start; gap: 15px; }
table.diff { width: 100%; font-family: "Adwaita Mono", "Courier New", monospace }
table.diff td { vertical-align: top; }
table.diff tr:hover td { background-color: var(--background-color-progressive-subtle--hover, #d9e2ff); cursor: pointer; }
.wa-flash-success { background-color: #d5fdf4 !important; transition: background-color 0.4s ease-out; }
@keyframes wa-pulse-red { 0% { box-shadow: 0 0 0 0 rgba(255, 0, 0, 0.4); border-color: #ff0000; } 70% { box-shadow: 0 0 0 6px rgba(255, 0, 0, 0); border-color: #ff0000; } 100% { box-shadow: 0 0 0 0 rgba(255, 0, 0, 0); border-color: #ff0000; } }
.wa-summary-warning input { animation: wa-pulse-red 1s infinite; border-color: #ff0000 !important; }
`;
$('<style>').text(styles).appendTo('head');
$('body').empty();
// =====================================================================
// 3. HELPER FUNCTIONS
// =====================================================================
function checkPermissions() {
return new Promise(function(resolve) {
var api = new mw.Api();
var projectNs = mw.config.get('wgFormattedNamespaces')[4];
var checkTitles = {
'permissions': projectNs + ':AutoWikiBrowser/CheckPageJSON',
'tag': 'MediaWiki:Tag-wAwB'
};
api.get({
action: 'query',
prop: 'revisions',
titles: Object.values(checkTitles).join('|'),
rvprop: 'content',
rvslots: 'main',
formatversion: 2
}).then(function(data) {
var pagePerms = data.query.pages.find(p => p.title === checkTitles['permissions']);
var pageTag = data.query.pages.find(p => p.title === checkTitles['tag']);
DO_TAG = pageTag.missing === undefined;
var userName = mw.config.get('wgUserName');
var userGroups = mw.config.get('wgUserGroups');
var isSysop = userGroups.includes('sysop');
if (!pagePerms.missing) {
try {
var content = pagePerms.revisions[0].slots.main.content;
var json = JSON.parse(content);
var inEnabledUsers = json.enabledusers && json.enabledusers.includes(userName);
var inEnabledBots = json.enabledbots && json.enabledbots.includes(userName);
var isBotGroup = userGroups.includes('bot');
var canSave = inEnabledUsers || inEnabledBots || isSysop;
var allowBot = inEnabledBots && isBotGroup;
resolve({
canSave: canSave,
allowBot: allowBot,
saveDelay: 0
});
} catch (e) {
resolve({
canSave: false,
allowBot: false,
saveDelay: 0
});
}
} else {
var editCount = mw.config.get('wgUserEditCount');
if (editCount > 500) resolve({
canSave: true,
allowBot: false,
saveDelay: 20000
});
else resolve({
canSave: false,
allowBot: false,
saveDelay: 0
});
}
}).catch(function() {
resolve({
canSave: false,
allowBot: false,
saveDelay: 0
});
});
});
}
function getUserCode(widget, globalName) {
var val = widget.getValue().trim();
if (!val || val.startsWith('// Enter')) {
if (window[globalName] && typeof window[globalName] === 'function') {
var s = window[globalName].toString();
return s.substring(s.indexOf('{') + 1, s.lastIndexOf('}'));
}
return "";
}
if (val.startsWith('function')) {
return val.substring(val.indexOf('{') + 1, val.lastIndexOf('}'));
}
return val;
}
function normalizeLine(line) {
if (!line) return null;
// Pass through comments/STOP commands (trimmed)
if (line.trim().startsWith('####')) return line.trim();
// Handle Title|Variables
var parts = line.split('|');
var title = parts[0].trim();
if (!title) return null; // Skip if title is empty
// Reassemble: Clean Title + Original Variables (preserving whitespace)
var rest = parts.length > 1 ? parts.slice(1).join('|') : null;
return title + (rest !== null ? '|' + rest : '');
}
function getNormalizedList(text) {
if (!text) return [];
return text.split('\n')
.map(normalizeLine)
.filter(function(l) {
return l !== null;
});
}
function getDeduplicatedList(text) {
if (!text) return [];
var seen = new Set();
var out = [];
var lines = text.split('\n');
for (var i = 0; i < lines.length; i++) {
var clean = normalizeLine(lines[i]);
if (clean && !seen.has(clean)) {
seen.add(clean);
out.push(clean);
}
}
return out;
}
function parseTypoContent(content) {
if (!content) return [];
try {
var $wrapper = $('<body>').html(content);
var rules = [];
$wrapper.find('Typo:not([disabled])').each(function() {
var $t = $(this);
var find = $t.attr('find');
var replace = $t.attr('replace');
if (find && replace !== undefined) {
rules.push({
find: find,
replace: replace,
regex: true,
flags: 'gmu',
enabled: true,
isFunc: false
});
}
});
return rules;
} catch (e) {
return [];
}
}
function updateSummaryPreview(baseText) {
var base = currentPageSummaryOverride !== null ? currentPageSummaryOverride : (baseText || "");
var finalSum = base + (currentPageSummaryAppend || "");
var previewText = finalSum ? injectVars(finalSum) : '';
$('#wa-summary-preview').val(previewText);
}
function injectVars(text) {
if (!text) return "";
return text.replace(/\$x([A-Z]|x)/g, function(match) {
return currentVars[match] || match; // Swap it, or leave it alone if undefined
});
}
function resetViewScroll() {
return {diffTop: 0, diffIsBottom: false, previewTop: 0, previewIsBottom: false, page: '', mode: '' };
}
function captureViewScroll() {
var $container = $('#wa-visual-output');
var mode = viewScroll.mode;
if (!$container.length || !mode) return;
var scrollTop = $container.scrollTop();
var innerHeight = $container.innerHeight();
var scrollHeight = $container[0].scrollHeight;
var hasScrollbar = scrollHeight > (innerHeight + 4);
if (hasScrollbar) {
viewScroll[mode + 'Top'] = scrollTop;
viewScroll[mode + 'IsBottom'] = (scrollTop + innerHeight >= scrollHeight - 10);
}
}
function restoreViewScroll(targetPage, targetMode) {
var $container = $('#wa-visual-output');
if (!$container.length) return;
if (viewScroll.page !== '' && viewScroll.page !== targetPage) {
viewScroll.diffTop = 0;
viewScroll.previewTop = 0;
}
var isBottom = viewScroll[targetMode + 'IsBottom'];
var top = viewScroll[targetMode + 'Top'];
if (isBottom) {
$container.scrollTop($container[0].scrollHeight);
setTimeout(function() {
$container.scrollTop($container[0].scrollHeight);
}, 150);
} else {
$container.scrollTop(top);
}
viewScroll.page = targetPage;
viewScroll.mode = targetMode;
}
// =====================================================================
// 4. UI CONSTRUCTION
// =====================================================================
checkPermissions().then(function(pState) {
PERMS = pState;
var $main = $('<div>').attr('id', 'wa-root').appendTo('body');
var $left = $('<div>').attr('id', 'wa-left-panel').appendTo($main);
$left.append($('<h3>').append($('<a>').attr('href', DOC_URL).attr('target', '_blank').text(APP_NAME).css({
'text-decoration': 'none',
'color': 'inherit'
})));
$left.append($('<div>').attr('id', 'wa-username').append($('<a>').attr('href', mw.util.getUrl('Special:Contributions/' + mw.config.get('wgUserName'))).attr('target', '_blank').text('User: ' + mw.config.get('wgUserName')).css({
'text-decoration': 'none',
'color': 'inherit'
})));
var btnSaveProj = new OO.ui.ButtonWidget({
icon: 'download',
label: 'Save project',
framed: false,
flags: 'progressive'
});
var btnLoadProj = new OO.ui.ButtonWidget({
icon: 'upload',
label: 'Load project',
framed: false
});
var $projBar = $('<div>').addClass('wa-project-bar').append(btnSaveProj.$element, btnLoadProj.$element);
$left.append($projBar);
var $fileInput = $('<input type="file" accept=".json">').hide().appendTo('body');
var $content = $('<div>').attr('id', 'wa-content-area').appendTo($left);
var $right = $('<div>').attr('id', 'wa-right-panel').appendTo($main);
var $editorHeader = $('<div>').addClass('wa-editor-header').appendTo($right);
var $headerLeft = $('<div>').addClass('wa-header-left').appendTo($editorHeader);
var $statusIndicator = $('<span>').attr('id', 'wa-status-indicator').attr('title', 'Ready').appendTo($headerLeft);
var $titleLink = $('<a>').addClass('wa-title-link').text('Page content').attr('target', '_blank').appendTo($headerLeft);
$('<span>').addClass('wa-header-sep').appendTo($headerLeft);
var $summaryPreview = $('<input type="text">').attr('id', 'wa-summary-preview').attr('autocomplete', 'off').appendTo($headerLeft);
var $headerRight = $('<div>').addClass('wa-header-right').appendTo($editorHeader);
var $infoContainer = $('<span>').addClass('wa-info-container').appendTo($headerRight);
var $toolsContainer = $('<div>').addClass('wa-tools-container').appendTo($headerRight);
var $resizeContainer = $('<div>').addClass('wa-resize-container').appendTo($headerRight);
var $adminTools = $('<div>').addClass('wa-admin-tools').hide().appendTo($toolsContainer);
// Wide chevron SVGs
var svgUp = '<svg xmlns="http://www.w3.org/2000/svg" width="14" height="8" viewBox="0 0 24 12"><path d="M2 10 L12 2 L22 10" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/></svg>';
var svgDown = '<svg xmlns="http://www.w3.org/2000/svg" width="14" height="8" viewBox="0 0 24 12"><path d="M2 2 L12 10 L22 2" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/></svg>';
var $btnSizeUp = $('<div>').addClass('wa-resize-btn').html(svgUp).attr('title', 'Decrease view size');
var $btnSizeDown = $('<div>').addClass('wa-resize-btn').html(svgDown).attr('title', 'Increase view size');
$resizeContainer.append($btnSizeUp, $btnSizeDown);
function setPanelHeight(modeIndex) {
currentHeightMode = modeIndex;
if (currentHeightMode < 0) currentHeightMode = 0;
if (currentHeightMode > 2) currentHeightMode = 2;
$('#wa-visual-output').css('flex-basis', heightValues[currentHeightMode]);
$btnSizeUp.toggleClass('wa-resize-disabled', currentHeightMode === 0);
$btnSizeDown.toggleClass('wa-resize-disabled', currentHeightMode === 2);
}
$btnSizeUp.on('click', function() {
if (!$(this).hasClass('wa-resize-disabled')) setPanelHeight(currentHeightMode - 1);
});
$btnSizeDown.on('click', function() {
if (!$(this).hasClass('wa-resize-disabled')) setPanelHeight(currentHeightMode + 1);
});
setPanelHeight(1);
if (CAN_MOVE) {
var btnAdminMove = new OO.ui.ButtonWidget({
icon: 'move',
title: 'Move page to $xA',
disabled: true,
framed: false
});
$adminTools.append(btnAdminMove.$element).show();
}
if (IS_ADMIN) {
var btnAdminDel = new OO.ui.ButtonWidget({
icon: 'trash',
title: 'Delete page',
disabled: true,
framed: false
});
var btnAdminProt = new OO.ui.ButtonWidget({
icon: 'lock',
title: 'Protect page',
disabled: true,
framed: false
});
$adminTools.append(btnAdminDel.$element, btnAdminProt.$element).show();
}
var btnManualEdit = new OO.ui.ButtonWidget({
icon: 'edit',
title: 'Open in manual editor',
framed: false,
disabled: true
});
var btnWatch = new OO.ui.ButtonWidget({
icon: 'star',
title: 'Watch this page',
framed: false,
disabled: true,
accessKey: 'w'
});
$toolsContainer.append(btnManualEdit.$element, btnWatch.$element);
var $visualOut = $('<div>').attr('id', 'wa-visual-output').html('<div style="color:#aaa; text-align:center; margin-top:50px;">Ready to start...</div>').prependTo($right);
var $editorArea = $('<div>').attr('id', 'wa-editor-area').appendTo($right);
var $textArea = $('<textarea>').attr('id', 'wa-editor-textarea').attr('placeholder', 'Page text will appear here...').appendTo($editorArea);
function setStatus(msg, type) {
if (!msg) msg = "Ready";
$statusIndicator.attr('title', msg).removeClass('wa-status-error wa-status-working');
if (type === 'error') $statusIndicator.addClass('wa-status-error');
if (type === 'working') $statusIndicator.addClass('wa-status-working');
}
// EDITOR OBJECT
var Editor = {
mode: 'textarea',
cmInstance: null,
_stickyBottom: false,
init: function() {
var self = this;
mw.loader.using(['ext.CodeMirror', 'ext.CodeMirror.mode.mediawiki']).then(function(require) {
try {
self.cmInstance = new(require('ext.CodeMirror'))($textArea[0], (require('ext.CodeMirror.mode.mediawiki')).mediawiki());
self.cmInstance.initialize();
self.mode = 'codemirror';
} catch (e) {
console.error("CM Error", e);
}
}).catch(function(err) {
console.error("CM Load Error:", err);
});
$textArea.on('input', updateDirtyState);
},
getValue: function() {
return (this.mode === 'codemirror' && this.cmInstance) ? this.cmInstance.view.state.doc.toString() : $textArea.val();
},
setValue: function(text) {
if (this.mode === 'codemirror' && this.cmInstance) {
var view = this.cmInstance.view;
var dom = view.scrollDOM; //$("#wa-editor-area").find('.cm-scroller')[0]
// Capture scroll
if (dom) {
var hasScrollbar = dom.scrollHeight > (dom.clientHeight + 10);
if (hasScrollbar) {
this._stickyBottom = (dom.scrollTop + dom.clientHeight >= dom.scrollHeight - 10);
}
}
// Update native area
$textArea.val(text);
// Bundle the codemirror transaction
var transaction = {
changes: {
from: 0,
to: view.state.doc.length,
insert: text
}
};
// If sticky bottom is true, add your scrolling effect to the transaction!
if (this._stickyBottom) {
// We use text.length because that is the very end of the NEW document
transaction.effects = view.constructor.scrollIntoView(text.length, {
y: 'end'
});
}
// Dispatch both at once
view.dispatch(transaction);
} else {
$textArea.val(text);
$textArea[0].dispatchEvent(new Event('input'));
}
},
setDisabled: function(d) {
$textArea.prop('disabled', d);
if (this.mode === 'codemirror' && this.cmInstance) {
this.cmInstance.view.contentDOM.contentEditable = !d;
$($textArea).parent().find('.cm-editor').css('opacity', d ? 0.5 : 1);
}
},
scrollToLine: function(n, selectWholeLine) {
if (isNaN(n)) return;
if (this.mode === 'codemirror' && this.cmInstance) {
var v = this.cmInstance.view;
var l = v.state.doc.line(n);
// Base selection: drop the cursor at the start of the line
var sel = { anchor: l.from };
// If they asked to select the text, extend the selection to the end
if (selectWholeLine) {
sel.head = l.to;
}
v.dispatch({
effects: v.constructor.scrollIntoView(l.from, {
y: 'center'
}),
selection: sel
});
v.focus();
}
}
};
var WorkerEngine = {
activeWorker: null,
workerURL: null,
currentLibCode: null,
timeoutTimer: null,
initWorker: function(libCode) {
this.destroy(); // Clean up existing if any
this.currentLibCode = libCode || "";
var scriptContent = this.currentLibCode + "\n\n" + `
self.onmessage = async function(e) {
try {
var data = e.data;
var inputs = data.texts || [data.text];
var vars = data.vars;
var outputs = [];
// Helper to construct async functions dynamically
var AsyncFunction = Object.getPrototypeOf(async function(){}).constructor;
function inject(str) {
if (!str) return "";
return str.replace(/\\$x([A-Z]|x)/g, function(m) { return vars[m] || ""; });
}
// Returns a Promise and handles 'await' inside user code
async function execUserFunc(code, currentText, currentVars, sharedObj) {
if (!code || code.trim() === "") return currentText;
try {
var func = new AsyncFunction('text', 'vars', 'shared', code);
var res = await func(currentText, currentVars, sharedObj);
if (res && typeof res === 'object' && res.skip) {
return { _skipSignal: true, reason: res.reason || 'Script-requested skip' };
}
return (res !== undefined) ? res : currentText;
} catch (err) {
throw err; // or: return currentText
}
}
var shared = {}; // Shared context for this page
for (var i = 0; i < inputs.length; i++) {
var text = inputs[i];
// 1. Pre-Process
var preRes;
if (data.preCode && data.preCode.trim() !== "") {
preRes = await execUserFunc(data.preCode, text, vars, shared);
} else if (typeof wAwB_Pre === 'function') {
try {
preRes = await wAwB_Pre(text, vars, shared);
if (preRes && typeof preRes === 'object' && preRes.skip) {
preRes = { _skipSignal: true, reason: preRes.reason || 'Script-requested skip' };
}
} catch (err) { preRes = text; }
} else {
preRes = text;
}
if (preRes && preRes._skipSignal) {
self.postMessage({ skipped: true, reason: preRes.reason });
return;
}
text = (preRes !== undefined) ? preRes : text;
// 2. Rules Processing
if (data.rules && data.rules.length > 0) {
data.rules.forEach(function(rule) {
var findStr = inject(rule.find);
if (!findStr) return;
if (rule.isFunc) {
try {
var userFunc = new Function('match', 'groups', 'vars', 'shared', rule.replace);
text = text.replace(new RegExp(findStr, (rule.flags || 'gmu').replace(/[^gimsuvy]/g, '')), function(...args) {
var match = args[0];
var groups = args.slice(1, -2);
try {
var res = userFunc(match, groups, vars, shared);
return res !== undefined ? res : match;
} catch (err) { return match; }
});
} catch (e) {}
} else {
var repStr = inject(rule.replace).replace(/\\\\n/g, "\\n").replace(/\\\\t/g, "\\t").replace(/\\\\r/g, "\\r");
if (rule.regex) {
try {
var flags = (rule.flags || 'gmu').replace(/[^gimsuvy]/g, '');
text = text.replace(new RegExp(findStr, flags), repStr);
} catch (e) {}
} else {
var finalFind = findStr.replace(/\\\\n/g, "\\n").replace(/\\\\t/g, "\\t").replace(/\\\\r/g, "\\r");
text = text.split(finalFind).join(repStr);
}
}
});
}
// 3. Post-Process
var postRes;
if (data.postCode && data.postCode.trim() !== "") {
postRes = await execUserFunc(data.postCode, text, vars, shared);
} else if (typeof wAwB_Post === 'function') {
try {
postRes = await wAwB_Post(text, vars, shared);
if (postRes && typeof postRes === 'object' && postRes.skip) {
postRes = { _skipSignal: true, reason: postRes.reason || 'Script-requested skip' };
}
} catch (err) { postRes = text; }
} else {
postRes = text;
}
if (postRes && postRes._skipSignal) {
self.postMessage({ skipped: true, reason: postRes.reason });
return;
}
text = (postRes !== undefined) ? postRes : text;
outputs.push(text);
}
self.postMessage({ success: true, texts: outputs, summaryAppend: shared.summaryAppend, summaryOverride: shared.summaryOverride });
} catch (err) { self.postMessage({ success: false, error: err.toString() }); }
};
`;
var blob = new Blob([scriptContent], {
type: 'application/javascript'
});
this.workerURL = URL.createObjectURL(blob);
this.activeWorker = new Worker(this.workerURL);
},
run: function(payload) {
var self = this;
return new Promise(function(resolve, reject) {
// Re-init if no worker exists, or if the user changed the library code
if (!self.activeWorker || self.currentLibCode !== (payload.libraryCode || "")) {
self.initWorker(payload.libraryCode);
}
if (self.timeoutTimer) clearTimeout(self.timeoutTimer);
self.timeoutTimer = setTimeout(function() {
self.destroy(); // Assassinate the stuck worker
reject("Script timed out (" + SCRIPT_TIMEOUT_MS + "ms).");
}, SCRIPT_TIMEOUT_MS);
self.activeWorker.onmessage = function(e) {
clearTimeout(self.timeoutTimer);
if (e.data.skipped) resolve({
skipped: true,
reason: e.data.reason
});
else if (e.data.success) resolve({
success: true,
texts: e.data.texts,
summaryAppend: e.data.summaryAppend,
summaryOverride: e.data.summaryOverride
});
else reject(e.data.error);
};
self.activeWorker.postMessage(payload);
});
},
destroy: function() {
if (this.activeWorker) {
this.activeWorker.terminate();
this.activeWorker = null;
}
if (this.workerURL) {
URL.revokeObjectURL(this.workerURL);
this.workerURL = null;
}
if (this.timeoutTimer) {
clearTimeout(this.timeoutTimer);
this.timeoutTimer = null;
}
}
};
var PageProtector = {
store: [],
getKey: function() {
var id = this.store.length.toString();
var p = "";
for (var i = 0; i < id.length; i++) {
p += String.fromCharCode(0xE010 + parseInt(id[i]));
}
return '\uE000' + p + '\uE001';
},
protect: function(text, mode, config, templateSpecies = null) {
this.store = [];
var self = this;
var safeRep = function(t, r) {
return t.replace(r, function(m) {
if (!m) return m;
var key = self.getKey();
self.store.push(m);
return key;
});
};
var shouldProcess = function(id) {
if (mode === 'target') return config === id;
return config[id] === true;
};
var matchedBrackets = function(text, op, cl, species = '') {
var newText = "",
depth = 0,
start = 0,
cursor = 0;
var speciesRegex = species ? new RegExp(species, 'iu') : null;
for (var i = 0; i < text.length; i++) {
if (text[i] === op[0] && text.slice(i, i + op.length) === op) {
if (depth === 0) start = i;
depth++;
i += op.length - 1;
} else if (text[i] === cl[0] && text.slice(i, i + cl.length) === cl) {
if (depth > 0) {
depth--;
if (depth === 0) {
var chunk = text.substring(start, i + cl.length);
if (!speciesRegex || speciesRegex.test(chunk)) {
var key = self.getKey();
self.store.push(chunk);
newText += text.substring(cursor, start) + key;
} else {
newText += text.substring(cursor, i + cl.length);
}
cursor = i + cl.length;
}
i += cl.length - 1;
}
}
}
newText += text.substring(cursor);
return newText;
};
PROTECTION_DEFS.forEach(function(def) {
if (shouldProcess(def.id)) {
if (def.id === 'blocks') {
['math', 'pre', 'source', 'syntaxhighlight', 'code', 'gallery'].forEach(t => text = safeRep(text, new RegExp('<' + t + '[^>]*?>[\\s\\S]*?<\\/' + t + '>|<' + t + '[^>]*?/>', 'gi')));
} else if (['templates', 'tables', 'images'].includes(def.id)) {
var activeSpecies = (def.id === 'templates') ? templateSpecies : def.species;
text = matchedBrackets(text, def.open, def.close, activeSpecies || '');
} else if (def.regex) {
text = safeRep(text, def.regex);
}
}
});
return text;
},
restore: function(text) {
var self = this;
var loop = 100;
while (/(\uE000[\uE010-\uE019]+\uE001)/.test(text) && loop > 0) {
text = text.replace(/\uE000([\uE010-\uE019]+)\uE001/g, function(m, d) {
var id = "";
for (var i = 0; i < d.length; i++) id += (d.charCodeAt(i) - 0xE010).toString();
return self.store[parseInt(id, 10)] || m;
});
loop--;
}
return text;
}
};
var accordionRegistry = [];
function addSection(title, $inner) {
var btn = new OO.ui.ButtonWidget({
label: title,
indicator: 'down',
framed: false,
classes: ['wa-section-header']
});
var box = $('<div>').addClass('wa-foldable-content').append($inner);
var sectionObj = {
btn: btn,
box: box,
label: title
};
accordionRegistry.push(sectionObj);
btn.on('click', function() {
var isOpening = !box.is(':visible');
if (isOpening) {
accordionRegistry.forEach(function(sec) {
if (sec !== sectionObj) {
sec.box.hide();
sec.btn.setIndicator('down');
}
});
}
box.toggle();
btn.setIndicator(box.is(':visible') ? 'up' : 'down');
});
$content.append(btn.$element, box);
return sectionObj;
}
// WIDGETS
var srcSelect = new OO.ui.DropdownInputWidget({
options: [{
data: 'cat',
label: 'Category'
}, {
data: 'linksto',
label: 'Pages linking to...'
}, {
data: 'linkson',
label: 'Links on page...'
}, {
data: 'prefix',
label: 'Pages with prefix...'
}, {
data: 'watchlist',
label: 'Watchlist'
}, {
data: 'search',
label: 'Wiki search'
}, {
data: 'usercontribs',
label: 'User contributions'
}, {
data: 'pageswithprop',
label: 'Pages with property'
}]
});
var srcInput = new OO.ui.TextInputWidget({
placeholder: 'Category...'
});
var now = new Date();
var today = now.toISOString().split('T')[0];
var srcInputUser = new OO.ui.TextInputWidget({
placeholder: 'Username'
});
var srcInputStartDate = new OO.ui.TextInputWidget({
value: today + 'T00:00:00',
placeholder: 'ISO start date'
});
var srcInputEndDate = new OO.ui.TextInputWidget({
value: today + 'T23:59:59',
placeholder: 'ISO end date'
});
var srcDropProp = new OO.ui.DropdownInputWidget({
options: []
});
var $optContainer = $('<div>').addClass('wa-source-options').hide();
var $optCat = $('<div>').hide();
var $optUser = $('<div>').hide();
var $optProp = $('<div>').hide();
var chkCatPages = new OO.ui.CheckboxInputWidget({
selected: true
});
var chkCatSub = new OO.ui.CheckboxInputWidget({
selected: false
});
var chkCatFile = new OO.ui.CheckboxInputWidget({
selected: false
});
$optCat.append($('<div>').addClass('wa-opt-label').text('Include:'), new OO.ui.FieldLayout(chkCatPages, {
label: 'Pages',
align: 'inline'
}).$element, new OO.ui.FieldLayout(chkCatSub, {
label: 'Subcats',
align: 'inline'
}).$element, new OO.ui.FieldLayout(chkCatFile, {
label: 'Files',
align: 'inline'
}).$element);
$optUser.append(new OO.ui.FieldLayout(srcInputUser, {
label: 'User',
align: 'top'
}).$element, new OO.ui.FieldLayout(srcInputStartDate, {
label: 'Start (Older)',
align: 'top'
}).$element, new OO.ui.FieldLayout(srcInputEndDate, {
label: 'End (Newer)',
align: 'top'
}).$element);
$optProp.append(new OO.ui.FieldLayout(srcDropProp, {
label: 'Property',
align: 'top'
}).$element);
var $optLinks = $('<div>').hide();
var chkLinkWiki = new OO.ui.CheckboxInputWidget({
selected: true
});
var chkLinkTrans = new OO.ui.CheckboxInputWidget({
selected: false
});
var chkLinkImg = new OO.ui.CheckboxInputWidget({
selected: false
});
var dropLinkRedir = new OO.ui.DropdownInputWidget({
options: [{
data: 'nonredirects',
label: 'No redirects'
}, {
data: 'all',
label: 'Both'
}, {
data: 'redirects',
label: 'Redirects only'
}]
});
var chkLinkToRedir = new OO.ui.CheckboxInputWidget({
selected: false
});
$optLinks.append($('<div>').addClass('wa-opt-label').text('What to include:'), $('<div>').addClass('wa-opt-row').append(new OO.ui.FieldLayout(chkLinkWiki, {
label: 'Wikilinks',
align: 'inline'
}).$element, new OO.ui.FieldLayout(chkLinkTrans, {
label: 'Transclusions',
align: 'inline'
}).$element, new OO.ui.FieldLayout(chkLinkImg, {
label: 'File usage',
align: 'inline'
}).$element), $('<div>').addClass('wa-opt-label').text('Redirects:'), dropLinkRedir.$element, new OO.ui.FieldLayout(chkLinkToRedir, {
label: 'Include links to redirects',
align: 'inline'
}).$element);
$optContainer.append($optCat, $optLinks, $optUser, $optProp);
var queryCache = {};
var lastMode = 'cat';
srcSelect.on('change', function(newMode) {
if (!isLoadingProject) {
if (lastMode !== 'watchlist' && lastMode !== 'usercontribs' && lastMode !== 'pageswithprop') {
queryCache[lastMode] = srcInput.getValue();
}
}
$optContainer.hide();
$optCat.hide();
$optLinks.hide();
$optUser.hide();
$optProp.hide();
srcInput.setDisabled(false).$element.show();
if (newMode === 'cat') {
$optContainer.show();
$optCat.show();
} else if (newMode === 'linksto') {
$optContainer.show();
$optLinks.show();
} else if (newMode === 'usercontribs') {
$optContainer.show();
$optUser.show();
srcInput.setDisabled(true).$element.hide();
} else if (newMode === 'pageswithprop') {
$optContainer.show();
$optProp.show();
srcInput.setDisabled(true).$element.hide();
if (!propNamesLoaded) {
new mw.Api().get({
action: 'query',
list: 'pagepropnames',
ppnlimit: 'max'
}).then(function(d) {
if (d.query && d.query.pagepropnames) {
srcDropProp.setOptions(d.query.pagepropnames.map(p => ({
data: p.propname,
label: p.propname
})));
propNamesLoaded = true;
}
});
}
}
if (newMode === 'watchlist') {
srcInput.setValue('');
srcInput.setDisabled(true);
srcInput.$input.attr('placeholder', '(No query needed)');
} else if (newMode !== 'usercontribs' && newMode !== 'pageswithprop') {
srcInput.setValue(queryCache[newMode] || '');
var ph = 'Query...';
if (newMode === 'cat') ph = 'Category name';
if (newMode === 'search') ph = 'Search query...';
if (newMode === 'prefix') ph = 'Page prefix...';
if (newMode === 'linksto') ph = 'Pages linking to this title...';
if (newMode === 'linkson') ph = 'Get links from this page...';
srcInput.$input.attr('placeholder', ph);
}
lastMode = newMode;
});
srcSelect.emit('change', srcSelect.getValue());
var $nsSelect = $('<select>').attr('id', 'wa-ns-selector').attr('multiple', 'multiple').attr('size', '8');
var nsMap = mw.config.get('wgFormattedNamespaces');
for (var id in nsMap) {
if (parseInt(id) >= 0) $nsSelect.append($('<option>').val(id).text(id + ': ' + (nsMap[id] || '(Main)')));
}
$nsSelect.val(['0']);
var btnAdd = new OO.ui.ButtonWidget({
label: 'Add to list',
icon: 'add',
flags: ['primary', 'progressive']
});
var $btnRow = $('<div>').css({
'display': 'flex',
'justify-content': 'flex-end',
'margin-top': '10px'
});
var $fetchStatus = $('<span>').css({
'margin-right': '10px',
'color': '#888',
'font-size': '0.9em',
'align-self': 'center'
}).hide();
$btnRow.append($fetchStatus, btnAdd.$element);
addSection('Source', $('<div>').append(new OO.ui.FieldLayout(srcSelect, {
label: 'Mode',
align: 'top'
}).$element, new OO.ui.FieldLayout(srcInput, {
label: 'Query',
align: 'top'
}).$element, $optContainer, $('<div>').text('Namespaces:').css({
'font-weight': 'bold',
'margin-top': '5px'
}), $nsSelect, $btnRow));
var redirMode = new OO.ui.RadioSelectWidget({
items: [new OO.ui.RadioOptionWidget({
data: 'edit',
label: 'Edit the redirect page (Default)'
}), new OO.ui.RadioOptionWidget({
data: 'follow',
label: 'Follow redirect (Edit target)'
}), new OO.ui.RadioOptionWidget({
data: 'skip',
label: 'Skip redirects'
})]
});
redirMode.selectItemByData('edit');
var radSkipExist = new OO.ui.RadioSelectWidget({
items: [new OO.ui.RadioOptionWidget({
data: 'none',
label: 'Process all'
}), new OO.ui.RadioOptionWidget({
data: 'missing',
label: 'Skip if page does not exist'
}), new OO.ui.RadioOptionWidget({
data: 'exists',
label: 'Skip if page exists'
})]
});
radSkipExist.selectItemByData('none');
var chkSkipNoChange = new OO.ui.CheckboxInputWidget({
selected: false
});
var inpSkipContains = new OO.ui.TextInputWidget({
placeholder: 'Text/Regex for Skip if FOUND'
});
var togSkipContainsRegex = new OO.ui.ToggleSwitchWidget({
value: false,
title: 'Use regex'
});
var inpSkipNotContains = new OO.ui.TextInputWidget({
placeholder: 'Text/Regex for Skip if MISSING'
});
var togSkipNotContainsRegex = new OO.ui.ToggleSwitchWidget({
value: false,
title: 'Use regex'
});
var inpSkipCategories = new OO.ui.TextInputWidget({
placeholder: 'Skip if in: Category1|Category2'
});
var inpSkipNotCategories = new OO.ui.TextInputWidget({
placeholder: 'Skip if NOT in: Category1|Category2'
});
var $settingsPanel = $('<div>')
.append($('<span>').addClass('wa-settings-header').text('Redirects'))
.append(redirMode.$element)
.append($('<hr>').css('border-top', '1px solid #eee'))
.append($('<span>').addClass('wa-settings-header').text('Skip logic'))
.append(new OO.ui.FieldLayout(chkSkipNoChange, {
label: 'Skip if no changes made',
align: 'inline'
}).$element.css('margin-bottom', '8px'))
.append(radSkipExist.$element)
.append($('<hr>').css('border-top', '1px solid #eee'))
.append($('<span>').addClass('wa-settings-header').text('Content filters'))
.append($('<div>').addClass('wa-setting-row').append(inpSkipContains.$element.css('flex', 1), togSkipContainsRegex.$element.css('margin-left', '5px')))
.append($('<div>').addClass('wa-setting-row').append(inpSkipNotContains.$element.css('flex', 1), togSkipNotContainsRegex.$element.css('margin-left', '5px')))
.append($('<hr>').css('border-top', '1px solid #eee'))
.append($('<span>').addClass('wa-settings-header').text('Category filters'))
.append(new OO.ui.FieldLayout(inpSkipCategories, {
label: 'Blacklist',
align: 'top'
}).$element)
.append(new OO.ui.FieldLayout(inpSkipNotCategories, {
label: 'Whitelist',
align: 'top'
}).$element);
addSection('Skip', $settingsPanel);
var dropProtMode = new OO.ui.DropdownInputWidget({
options: [{
data: 'protect',
label: 'Protect (Exclude)'
}, {
data: 'target',
label: 'Target (Edit Matches Only)'
}]
});
var inpTemplateFilter = new OO.ui.TextInputWidget({
placeholder: 'Regex: infobox rail line|railway'
});
var $templateFilterLayout = new OO.ui.FieldLayout(inpTemplateFilter, {
label: 'Template filter',
align: 'top'
});
var $protList = $('<div>');
var protCheckboxes = {};
PROTECTION_DEFS.forEach(function(def) {
var chk = new OO.ui.CheckboxInputWidget({
selected: def.isOn
});
protCheckboxes[def.id] = chk;
$protList.append(new OO.ui.FieldLayout(chk, {
label: def.label,
align: 'inline'
}).$element);
});
var targetRadioItems = PROTECTION_DEFS.map(function(def) {
return new OO.ui.RadioOptionWidget({
data: def.id,
label: def.label
});
});
var radTargetSet = new OO.ui.RadioSelectWidget({
items: targetRadioItems
});
var $targetList = $('<div>').hide().append(radTargetSet.$element);
dropProtMode.on('change', function(mode) {
if (mode === 'protect') {
$protList.show();
$targetList.hide();
} else {
$protList.hide();
$targetList.show();
}
});
addSection('Protection', $('<div>').addClass('wa-source-options')
.append(new OO.ui.FieldLayout(dropProtMode, {
label: 'Mode',
align: 'top'
}).$element)
.append($('<hr>').css('border-top', '1px solid #eee'))
.append($protList).append($targetList)
.append($('<div style="margin-top:10px;">').append($templateFilterLayout.$element))
);
var $rulesList = $('<div>');
var btnAddRule = new OO.ui.ButtonWidget({
label: 'Add rule',
icon: 'add'
});
var rulesRegistry = [];
addSection('Rules', $('<div>').append($rulesList, btnAddRule.$element));
var togWikiTypos = new OO.ui.ToggleSwitchWidget({
value: false
});
var lblWikiStatus = $('<div>').css({
'font-size': '0.9em',
'color': '#888',
'margin-top': '2px'
});
var btnLoadLocal = new OO.ui.ButtonWidget({
icon: 'upload',
label: 'Load file',
framed: false
});
var btnClearLocal = new OO.ui.ButtonWidget({
icon: 'trash',
title: 'Clear local',
framed: false,
flags: 'destructive',
disabled: true
});
var lblLocalStatus = $('<div>').text('No local rules').css({
'font-size': '0.9em',
'color': '#888',
'margin-top': '2px'
});
var $typoInput = $('<input type="file">').hide().appendTo('body');
var $extRulesPanel = $('<div>').addClass('wa-source-options');
$extRulesPanel.append(
$('<div>').css({
'display': 'flex',
'align-items': 'center',
'justify-content': 'space-between'
}).append($('<span>').text('Project:AutoWikiBrowser/Typos').css('font-weight', 'bold'), togWikiTypos.$element),
$('<div>').css('margin-bottom', '10px').append(lblWikiStatus),
$('<hr>').css('border-top', '1px solid #eee'),
$('<div>').append($('<div>').css({
'display': 'flex',
'align-items': 'center'
}).append($('<span>').text('Local rules (session only)').css({
'font-weight': 'bold'
}), $('<div>').css('flex', '1'), btnLoadLocal.$element, btnClearLocal.$element), lblLocalStatus)
);
addSection('External rules', $extRulesPanel);
var txtPreScript = new OO.ui.MultilineTextInputWidget({
rows: 6,
value: '',
placeholder: '// Enter JavaScript function body here.\n// Available variables: text, vars, shared\nreturn text;'
});
var txtPostScript = new OO.ui.MultilineTextInputWidget({
rows: 6,
value: '',
placeholder: '// Enter JavaScript function body here.\n// Available variables: text, vars, shared\nreturn text;'
});
var btnLoadLib = new OO.ui.ButtonWidget({
icon: 'upload',
title: 'Load library (.js)',
framed: false
});
var btnRemoveLib = new OO.ui.ButtonWidget({
icon: 'trash',
title: 'Remove library',
framed: false,
flags: 'destructive'
});
var txtLibStatus = new OO.ui.TextInputWidget({
value: '(No library loaded)',
readOnly: true
});
var $libInput = $('<input type="file" accept=".js">').hide().appendTo('body');
var btnEditLib = new OO.ui.ButtonWidget({
icon: 'edit',
label: 'Edit project library',
framed: false
});
var $scriptPanel = $('<div>').append(
$('<div>').css({
'display': 'flex',
'align-items': 'center',
'gap': '5px',
'margin-bottom': '10px'
}).append($('<span>').text('JS library:').css({
'font-weight': 'bold',
'white-space': 'nowrap'
}), txtLibStatus.$element.css('flex', '1'), btnLoadLib.$element, btnRemoveLib.$element),
$('<div>').css({
'display': 'flex',
'justify-content': 'flex-end',
'margin-bottom': '10px'
}).append(btnEditLib.$element),
new OO.ui.FieldLayout(txtPreScript, {
label: 'Pre-Process',
align: 'top'
}).$element,
new OO.ui.FieldLayout(txtPostScript, {
label: 'Post-Process',
align: 'top'
}).$element
);
addSection('Scripts', $scriptPanel);
function updateLibUI() {
if (currentLibrary.code) {
txtLibStatus.setValue(currentLibrary.name);
btnRemoveLib.setDisabled(false);
} else {
txtLibStatus.setValue('(No library loaded)');
btnRemoveLib.setDisabled(true);
}
}
updateLibUI();
function LibraryEditorDialog(config) {
LibraryEditorDialog.super.call(this, config);
}
OO.inheritClass(LibraryEditorDialog, OO.ui.ProcessDialog);
LibraryEditorDialog.static.name = 'libraryEditor';
LibraryEditorDialog.static.title = 'Edit project library';
LibraryEditorDialog.static.actions = [{
action: 'save',
label: 'Save',
flags: ['primary', 'progressive']
},
{
label: 'Cancel',
flags: 'safe'
}
];
LibraryEditorDialog.prototype.initialize = function() {
LibraryEditorDialog.super.prototype.initialize.call(this);
this.$element.addClass('wa-lib-dialog'); // Attach our custom CSS override class
this.panel = new OO.ui.PanelLayout({
padded: true,
expanded: true
});
this.$editorWrapper = $('<div>').addClass('wa-lib-editorwrapper');
this.panel.$element.append(this.$editorWrapper);
this.$body.append(this.panel.$element);
};
LibraryEditorDialog.prototype.getSetupProcess = function(data) {
data = data || {};
return LibraryEditorDialog.super.prototype.getSetupProcess.call(this, data)
.next(function() {
var self = this;
self.$editorWrapper.empty();
// Create a textarea for the MediaWiki CM wrapper to properly bind to
var $libTextArea = $('<textarea>').appendTo(self.$editorWrapper);
var initCode = currentLibrary.code || "// All custom library functions defined here will be passed to the worker.\n// Special functions:\n// function wAwB_Pre(text, vars, shared) { return text; }\n// function wAwB_Post(text, vars, shared) { return text; }\n";
return mw.loader.using(['ext.CodeMirror', 'ext.CodeMirror.modes']).then(function(require) {
var CM = require('ext.CodeMirror');
var modes = require('ext.CodeMirror.modes');
self.cmInstance = new CM($libTextArea[0], modes.javascript());
self.cmInstance.initialize();
self.cmInstance.view.dispatch({
changes: {
from: 0,
insert: initCode
}
});
// Force CodeMirror to fill the wrapper
self.$editorWrapper.find('.cm-editor').css({
height: '100%'
});
}).catch(function(err) {
console.error("wAwB CM Init Error:", err);
});
}, this);
};
LibraryEditorDialog.prototype.getActionProcess = function(action) {
var dialog = this;
if (action === 'save') {
return new OO.ui.Process(function() {
var newCode = "";
if (dialog.cmInstance) {
newCode = dialog.cmInstance.view.state.doc.toString();
}
if (newCode.trim() === "") {
currentLibrary = {
name: null,
code: null
};
} else {
currentLibrary.code = newCode;
currentLibrary.name = "custom code";
}
updateLibUI();
dialog.close({
action: action
});
});
}
if (action === 'cancel' || !action) {
return new OO.ui.Process(function() {
dialog.close({
action: action
});
});
}
return LibraryEditorDialog.super.prototype.getActionProcess.call(this, action);
};
LibraryEditorDialog.prototype.getTeardownProcess = function(data) {
return LibraryEditorDialog.super.prototype.getTeardownProcess.call(this, data)
.next(function() {
if (this.cmInstance) {
try {
this.cmInstance.view.destroy();
} catch (e) {}
this.cmInstance = null;
}
}, this);
};
var windowManager = new OO.ui.WindowManager();
$('body').append(windowManager.$element);
var libDialog = new LibraryEditorDialog();
windowManager.addWindows([libDialog]);
btnEditLib.on('click', function() {
windowManager.openWindow(libDialog);
});
var togAdminEnable = new OO.ui.ToggleSwitchWidget({
value: false
});
var chkMovRedirect = new OO.ui.CheckboxInputWidget({
selected: false
});
var chkMovTalk = new OO.ui.CheckboxInputWidget({
selected: true
});
var chkMovSub = new OO.ui.CheckboxInputWidget({
selected: false
});
var chkDelTalk = new OO.ui.CheckboxInputWidget({
selected: true
});
var dropProtEdit = new OO.ui.DropdownInputWidget({
options: [{
data: '',
label: '(No Change)'
}, {
data: 'all',
label: 'All'
}, {
data: 'autoconfirmed',
label: 'Autoconfirmed'
}, {
data: 'sysop',
label: 'Sysop'
}]
});
var dropProtMove = new OO.ui.DropdownInputWidget({
options: [{
data: '',
label: '(No Change)'
}, {
data: 'all',
label: 'All'
}, {
data: 'autoconfirmed',
label: 'Autoconfirmed'
}, {
data: 'sysop',
label: 'Sysop'
}]
});
var inpProtExpiry = new OO.ui.TextInputWidget({
placeholder: 'infinite / 2 days / 12 hours'
});
if (CAN_MOVE || IS_ADMIN) {
var $adminPanel = $('<div>').append(
$('<div>').css({
'display': 'flex',
'align-items': 'center',
'justify-content': 'flex-start',
'gap': '10px'
}).append($('<span>').text('Enable page actions').css('font-weight', 'bold'), togAdminEnable.$element),
$('<hr>')
);
if (CAN_MOVE) {
$adminPanel.append(
$('<strong>').text('Move options:'), new OO.ui.FieldLayout(chkMovRedirect, {
label: 'Do not create redirect',
align: 'inline'
}).$element, new OO.ui.FieldLayout(chkMovTalk, {
label: 'Move talk page',
align: 'inline'
}).$element, new OO.ui.FieldLayout(chkMovSub, {
label: 'Move subpages',
align: 'inline'
}).$element, $('<br>')
);
}
if (IS_ADMIN) {
$adminPanel.append(
$('<strong>').text('Delete options:'), new OO.ui.FieldLayout(chkDelTalk, {
label: 'Delete talk page',
align: 'inline'
}).$element, $('<br>'),
$('<strong>').text('Protect options:'), new OO.ui.FieldLayout(dropProtEdit, {
label: 'Edit level',
align: 'top'
}).$element, new OO.ui.FieldLayout(dropProtMove, {
label: 'Move level',
align: 'top'
}).$element, new OO.ui.FieldLayout(inpProtExpiry, {
label: 'Expiry',
align: 'top'
}).$element
);
}
addSection('Page actions', $adminPanel);
}
var btnPower = new OO.ui.ButtonWidget({
label: 'Start',
icon: 'power',
flags: ['primary', 'progressive'],
title: 'Start editing',
accessKey: 'a'
});
var btnDiff = new OO.ui.ButtonWidget({
label: 'Diff',
icon: 'update',
title: 'Show diff',
accessKey: 'd'
});
var btnSkip = new OO.ui.ButtonWidget({
label: 'Next',
icon: 'next',
title: 'Skip to next page',
accessKey: 'n',
disabled: true
});
var btnPreview = new OO.ui.ButtonWidget({
label: 'Preview',
icon: 'article',
title: 'Preview page',
accessKey: 'p'
});
var btnSave = new OO.ui.ButtonWidget({
label: 'Save',
icon: 'upload',
flags: 'progressive',
title: 'Save edit',
accessKey: 's',
disabled: true
});
var inputSummary = new OO.ui.TextInputWidget({
placeholder: '',
value: '',
title: 'Enter edit summary',
accessKey: 'b'
});
var $sumLayout = new OO.ui.FieldLayout(inputSummary, {
label: 'Edit summary',
align: 'top'
}).$element;
$sumLayout.css('margin-bottom', '6px');
var listTextarea = new OO.ui.MultilineTextInputWidget({
rows: 15,
classes: ['wa-page-list-raw']
});
var btnSort = new OO.ui.ButtonWidget({
icon: 'sortVertical',
title: 'Sort list',
framed: false
});
var btnDedup = new OO.ui.ButtonWidget({
icon: 'funnel',
title: 'Remove duplicates',
framed: false
});
var btnClear = new OO.ui.ButtonWidget({
icon: 'trash',
title: 'Clear list',
framed: false
});
var btnPreParse = new OO.ui.ButtonWidget({
label: 'Pre-parse',
title: 'Process list in background',
icon: 'robot',
framed: false
});
var $listCounter = $('<span>').addClass('wa-list-counter').text('0 pages');
var togAutoSave = new OO.ui.ToggleSwitchWidget({
value: false
});
var txtAutoDelay = new OO.ui.TextInputWidget({
value: '10'
});
var $botRow = $('<div>').addClass('wa-bot-row').hide();
if (PERMS.allowBot) {
$botRow.show().append($('<span>').css('font-weight', 'bold').text('Bot mode: '), togAutoSave.$element, $('<span>').text('Delay (s):'), txtAutoDelay.$element.css('max-width', '40px'));
togAutoSave.on('change', function(v) {
if (v) txtAutoDelay.setValue('10');
});
}
var sortAsc = true;
var $procHeader = $('<div>').addClass('wa-section-header').attr('id', 'wa-proc-header').css({
'display': 'flex',
'justify-content': 'space-between',
'align-items': 'center'
});
var $procTitle = $('<span>').attr('id', 'wa-proc-title').text('Processing');
var chkMinor = new OO.ui.CheckboxInputWidget({
selected: true,
title: 'Minor edit'
});
var $minorLayout = new OO.ui.FieldLayout(chkMinor, {
label: 'm',
align: 'inline',
title: 'Minor edit'
});
$minorLayout.$element.css({
'margin-right': '15px',
'font-weight': 'normal'
});
$procHeader.append($procTitle, $minorLayout.$element);
var $procContent = $('<div>').attr('id', 'wa-proc-content').append(
$sumLayout, $botRow,
$('<div>').addClass('wa-grid-container').append(
$('<div>').addClass('wa-grid-col').append(btnPower.$element),
$('<div>').addClass('wa-grid-col').append(btnDiff.$element, btnSkip.$element),
$('<div>').addClass('wa-grid-col').append(btnPreview.$element, btnSave.$element)
),
$('<div>').addClass('wa-toolbar').append($listCounter, btnSort.$element, btnDedup.$element, btnClear.$element),
listTextarea.$element,
$('<div>').css({
'margin-top': '5px'
}).append(btnPreParse.$element)
);
$content.append($procHeader, $procContent);
var configWidgets = [
srcSelect, srcInput, srcInputUser, srcInputStartDate, srcInputEndDate, srcDropProp,
chkCatPages, chkCatSub, chkCatFile, chkLinkWiki, chkLinkTrans, chkLinkImg, dropLinkRedir, chkLinkToRedir,
btnAdd, redirMode, chkSkipNoChange, radSkipExist,
inpSkipContains, togSkipContainsRegex, inpSkipNotContains, togSkipNotContainsRegex, inpSkipCategories, inpSkipNotCategories,
dropProtMode, radTargetSet, inpTemplateFilter, btnAddRule,
txtPreScript, txtPostScript, chkMovRedirect, chkMovTalk, chkMovSub, chkDelTalk, dropProtEdit, dropProtMove, inpProtExpiry,
togWikiTypos, btnLoadLocal, btnClearLocal, btnPreParse
];
// =====================================================================
// 5. FUNCTION DEFINITIONS (Core Logic)
// =====================================================================
function checkSummaryWarning() {
var val = inputSummary.getValue();
var isBlank = !val || val.trim() === "";
if (isBlank || hasNewSources) inputSummary.$element.addClass('wa-summary-warning');
else inputSummary.$element.removeClass('wa-summary-warning');
}
function renderCurrentView() {
if (currentViewMode === 'preview') renderPreview();
else renderDiff();
}
function toggleConfig(isLocked) {
configWidgets.forEach(function(w) {
if (w instanceof OO.ui.TextInputWidget || w instanceof OO.ui.MultilineTextInputWidget) {
w.setReadOnly(isLocked);
w.$element.css('opacity', isLocked ? 0.8 : 1);
} else {
w.setDisabled(isLocked);
}
});
$nsSelect.prop('disabled', isLocked);
for (var key in protCheckboxes) protCheckboxes[key].setDisabled(isLocked);
rulesRegistry.forEach(function(r) {
r.find.setReadOnly(isLocked);
r.rep.setReadOnly(isLocked);
r.regex.setDisabled(isLocked);
r.flags.setReadOnly(isLocked);
r.enable.setDisabled(isLocked);
r.del.setDisabled(isLocked);
r.btnFunc.setDisabled(isLocked || !r.regex.getValue());
r.btnUp.setDisabled(isLocked || rulesRegistry.indexOf(r) === 0);
r.btnDown.setDisabled(isLocked || rulesRegistry.indexOf(r) === rulesRegistry.length - 1);
});
if (CAN_MOVE || IS_ADMIN) togAdminEnable.setDisabled(isLocked);
btnLoadLib.setDisabled(isLocked);
btnRemoveLib.setDisabled(isLocked || !currentLibrary.code);
btnEditLib.setDisabled(isLocked);
btnLoadLocal.setDisabled(isLocked);
btnClearLocal.setDisabled(isLocked || localTypos.length === 0);
}
function updateListCount() {
var val = listTextarea.getValue();
var count = val.trim() ? val.split('\n').filter(function(l) {
var line = l.trim();
return line !== "" && !line.startsWith("####");
}).length : 0;
$listCounter.text(count + ' pages');
}
listTextarea.on('change', updateListCount);
function updateDirtyState() {
if (isRunning && currentTitle && Editor.getValue() !== originalWikitext) $editorHeader.addClass('wa-dirty');
else $editorHeader.removeClass('wa-dirty');
}
var notificationWatermark = 0;
var lastNotifCheck = 0;
function checkNotifications(notifList) {
if ((ON_NOTIFY !== "warn" && ON_NOTIFY !== "stop")|| !notifList || notifList.length === 0) return false;
var triggerFound = false;
var newWatermark = notificationWatermark;
for (var i = 0; i < notifList.length; i++) {
var n = notifList[i];
var currentId = parseInt(n.id, 10) || 0;
if (currentId > newWatermark) {
newWatermark = currentId;
}
if (currentId > notificationWatermark && (n.type === 'edit-user-talk' || n.type === 'reverted')) {
triggerFound = true;
}
}
notificationWatermark = newWatermark;
if (triggerFound) {
$('.wa-editor-header').addClass('wa-header-alert');
if (ON_NOTIFY === "stop") {
var halt = confirm("A new talk page message or revert was detected!\n\nClick OK to stop the processing queue.\nClick Cancel to acknowledge and continue.");
if (halt) {
btnPower.emit('click');
return true; // Signals the save loop to halt
} else {
$('.wa-editor-header').removeClass('wa-header-alert');
}
}
}
return false;
}
function removeTopLine() {
var l = listTextarea.getValue().split('\n');
l.shift();
listTextarea.setValue(l.join('\n'));
updateListCount();
}
function updateInterfaceMode() {
var isAdminMode = togAdminEnable.getValue();
var pageLoaded = !!currentTitle;
btnSave.setDisabled(isAdminMode || !pageLoaded || !PERMS.canSave);
btnSkip.setDisabled(!pageLoaded);
btnPreview.setDisabled(!pageLoaded);
btnDiff.setDisabled(isAdminMode || !pageLoaded);
Editor.setDisabled(isAdminMode || !pageLoaded);
if (CAN_MOVE) {
var allowAdmin = isAdminMode && currentPageExists;
btnAdminMove.setDisabled(!(allowAdmin && currentVars['$xA']));
if (currentVars['$xA']) btnAdminMove.setTitle('Move page to ' + currentVars['$xA']);
else btnAdminMove.setTitle('Move page to $xA (Variable not set)');
}
if (IS_ADMIN) {
var allowAdmin = isAdminMode && currentPageExists;
btnAdminDel.setDisabled(!allowAdmin);
btnAdminProt.setDisabled(!allowAdmin);
}
}
function renderDiff() {
captureViewScroll();
$visualOut.css('opacity', '0.7');
var currentText = Editor.getValue();
new mw.Api().post({
'action': 'compare',
fromtitle: currentTitle,
toslots: 'main',
'totext-main': currentText,
slots: 'main',
topst: window.wa_diffPST ? true : undefined,
prop: 'diff',
formatversion: 2
}).then(function(data) {
var diffBody = data.compare && data.compare.bodies && data.compare.bodies.main;
if (diffBody) {
$visualOut.html('<h4>Diff: ' + currentTitle + '</h4><table class="diff"><colgroup><col class="diff-marker"><col class="diff-content"><col class="diff-marker"><col class="diff-content"></colgroup><tbody>' + diffBody + '</tbody></table>');
processDiffTable();
} else {
$visualOut.html('<div style="color:green; text-align:center; padding-top:20px;">No Changes detected</div>');
}
restoreViewScroll(currentTitle, 'diff');
$visualOut.css('opacity', '1');
});
}
function processDiffTable() {
var rightLineNum = 0;
$visualOut.find('table.diff tr').each(function() {
var $tr = $(this);
var $linenos = $tr.find('td.diff-lineno');
if ($linenos.length > 0) {
var txt = $linenos.last().text();
var m = txt.match(/(\d+)/);
if (m) rightLineNum = parseInt(m[1]);
return;
}
if ($tr.find('.diff-addedline').length > 0 || $tr.find('.diff-context').length > 0) {
$tr.attr('data-line', rightLineNum);
$tr.css('cursor', 'pointer').attr('title', 'Ctrl+click:COPY | Click:JUMP | Double click:SELECT');
rightLineNum++;
}
});
// Single click: jump. Ctrl+click: copy
$visualOut.on('click', 'tr[data-line]', function(e) {
var $row = $(this);
// copy
if (e.ctrlKey || e.metaKey) {
e.preventDefault();
var $clickedTd = $(e.target).closest('td');
var cellIndex = $clickedTd.index(); // 0-1 left side, 2-3 right side
var $targetCell;
if (cellIndex <= 1) {
$targetCell = $row.find('td.diff-deletedline, td.diff-context').first(); // left half
} else {
$targetCell = $row.find('td.diff-addedline, td.diff-context').last(); // right half
}
if ($targetCell.length === 0 || $.trim($targetCell.text()) === '') return;
var plainText = $targetCell.text();
navigator.clipboard.writeText(plainText).then(function() {
// Flash the cell green
$targetCell.addClass('wa-flash-success');
setTimeout(function() {
$targetCell.removeClass('wa-flash-success');
}, 400);
});
return; // Exit early, prevent jump
}
// jump
var lineNum = parseInt($row.attr('data-line'));
Editor.scrollToLine(lineNum);
});
// Double click: jump and select
$visualOut.on('dblclick', 'tr[data-line]', function(e) {
if (e.ctrlKey || e.metaKey) return;
if (window.getSelection) {
window.getSelection().removeAllRanges();
}
var $row = $(this);
var lineNum = parseInt($row.attr('data-line'));
Editor.scrollToLine(lineNum, true);
});
}
function renderPreview() {
captureViewScroll();
$visualOut.css('opacity', '0.7');
new mw.Api().post({
action: 'parse',
title: currentTitle,
text: Editor.getValue(),
prop: 'text|categorieshtml|modules|jsconfigvars',
useskin: mw.config.get('skin'),
disablelimitreport: true,
pst: true,
contentmodel: 'wikitext'
}).then(function(data) {
if (data.parse && data.parse.text) {
var $prev = $('<div>').html(data.parse.text['*']);
if (data.parse.categorieshtml) $prev.append(data.parse.categorieshtml['*']);
$prev.find('a').attr('target', '_blank');
$visualOut.empty().append($prev);
mw.loader.using(data.parse.modules.concat(data.parse.modulestyles, data.parse.modulescripts), function() {
mw.hook('wikipage.content').fire($('.wa-visual-output .mw-parser-output'));
});
restoreViewScroll(currentTitle, 'preview');
$visualOut.css('opacity', '1');
}
}).catch(function(err) {
$visualOut.html('Error generating preview.');
alert("Preview failed: " + err);
});
}
async function transformPageText(rawText, title, config) {
var filters = config.filters;
if (filters) {
var check = function(text, rule) {
if (!rule || !rule.val) return false;
if (rule.regex) {
try {
return new RegExp(rule.val, 'mu').test(text);
} catch (e) {
return false;
}
}
return text.indexOf(rule.val) !== -1;
};
if (filters.skipContains && filters.skipContains.val && check(rawText, filters.skipContains)) {
return {
skipped: true,
reason: 'Contains: ' + filters.skipContains.val
};
}
if (filters.skipNotContains && filters.skipNotContains.val && !check(rawText, filters.skipNotContains)) {
return {
skipped: true,
reason: 'Missing: ' + filters.skipNotContains.val
};
}
}
var mode = config.mode;
var inputs = [];
var compiledSpecies = null;
if (config.templateFilter) {
var tFilter = config.templateFilter;
if (tFilter[0] === "^") tFilter = "^\\{\\{\\s*" + tFilter.slice(1);
else tFilter = "\\{\\{\\s*" + tFilter;
compiledSpecies = tFilter + "(?=\\s*[|}\\n])";
}
var skeleton = PageProtector.protect(rawText, mode, config.excludes, compiledSpecies);
if (mode === 'target') inputs = PageProtector.store;
else inputs = [skeleton];
var combinedRules = rulesRegistry.filter(r => r.isActive()).map(r => ({
find: r.find.getValue(),
replace: r.rep.getValue(),
regex: r.regex.getValue(),
flags: r.flags.getValue(),
enabled: r.isActive(),
isFunc: r.isFunc()
}));
if (togWikiTypos.getValue()) combinedRules = combinedRules.concat(wikiTypos);
if (localTypos.length > 0) combinedRules = combinedRules.concat(localTypos);
var payload = {
texts: inputs,
vars: config.vars,
preCode: getUserCode(txtPreScript, 'wAwB_Pre'),
libraryCode: currentLibrary.code,
rules: combinedRules,
postCode: getUserCode(txtPostScript, 'wAwB_Post')
};
var result = await WorkerEngine.run(payload);
if (result.skipped) return {
skipped: true,
reason: result.reason
};
var finalText = "";
if (mode === 'target') {
PageProtector.store = result.texts;
finalText = PageProtector.restore(skeleton);
} else {
finalText = PageProtector.restore(result.texts[0]);
}
return {
skipped: false,
text: finalText,
summaryAppend: result.summaryAppend,
summaryOverride: result.summaryOverride
};
}
async function processPageContent() {
try {
setStatus('Processing...', 'working');
var mode = dropProtMode.getValue();
var activeConfig = {
mode: mode,
excludes: {},
templateFilter: inpTemplateFilter.getValue().trim(),
vars: currentVars,
filters: {
skipContains: {
val: inpSkipContains.getValue(),
regex: togSkipContainsRegex.getValue()
},
skipNotContains: {
val: inpSkipNotContains.getValue(),
regex: togSkipNotContainsRegex.getValue()
}
}
};
if (mode === 'protect') {
for (var k in protCheckboxes) activeConfig.excludes[k] = protCheckboxes[k].isSelected();
} else {
var sel = radTargetSet.findSelectedItem();
activeConfig.excludes = sel ? sel.getData() : null;
}
var res = await transformPageText(originalWikitext, currentTitle, activeConfig);
if (res.skipped) {
removeTopLine();
loadNextPage();
return;
}
currentPageSummaryAppend = res.summaryAppend || "";
currentPageSummaryOverride = res.summaryOverride || null;
updateSummaryPreview(inputSummary.getValue());
if (chkSkipNoChange.isSelected() && res.text === originalWikitext) {
removeTopLine();
loadNextPage();
return;
}
setStatus('Ready');
Editor.setValue(res.text);
if (CAN_MOVE || IS_ADMIN) updateInterfaceMode();
else {
Editor.setDisabled(false);
btnSave.setDisabled(!PERMS.canSave);
btnSkip.setDisabled(false);
btnPreview.setDisabled(false);
btnDiff.setDisabled(false);
}
updateDirtyState();
renderCurrentView();
if (PERMS.allowBot && togAutoSave.getValue()) {
var delay = Math.max(0, parseInt(txtAutoDelay.getValue(), 10) || 0) * 1000;
setStatus('Auto-save in ' + (delay / 1000) + 's...', 'working');
if (autoSaveTimer) clearTimeout(autoSaveTimer);
autoSaveTimer = setTimeout(function() {
if (isRunning && PERMS.canSave) {
btnSave.emit('click');
}
}, delay);
}
} catch (e) {
setStatus('Error', 'error');
alert(e);
btnPower.emit('click');
}
}
async function runPreParseBatch() {
// 1. Toggle / Stop Logic
if (isRunning) {
isRunning = false;
setStatus('Stopping...', 'working');
btnPreParse.setLabel('Pre-parse');
return;
}
// 2. Start & Deduplicate
var currentVal = listTextarea.getValue();
var cleanVal = getDeduplicatedList(currentVal).join('\n');
listTextarea.setValue(cleanVal);
updateListCount();
isRunning = true;
toggleUI(true);
// 3. Lock UI
toggleUI(true);
btnSkip.setDisabled(true);
btnDiff.setDisabled(true);
btnPreview.setDisabled(true);
btnSave.setDisabled(true);
Editor.setDisabled(true);
btnPreParse.setLabel('Stop pre-parse');
// Inject STOP marker if not present
var currentList = listTextarea.getValue().split('\n');
if (!currentList.includes('####STOP')) {
currentList.push('####STOP');
listTextarea.setValue(currentList.join('\n'));
}
// Gather Config
var activeConfig = {
mode: dropProtMode.getValue(),
excludes: {},
templateFilter: inpTemplateFilter.getValue().trim(),
vars: {},
filters: {
skipContains: {
val: inpSkipContains.getValue(),
regex: togSkipContainsRegex.getValue()
},
skipNotContains: {
val: inpSkipNotContains.getValue(),
regex: togSkipNotContainsRegex.getValue()
}
}
};
if (activeConfig.mode === 'protect') {
for (var k in protCheckboxes) activeConfig.excludes[k] = protCheckboxes[k].isSelected();
} else {
var sel = radTargetSet.findSelectedItem();
activeConfig.excludes = sel ? sel.getData() : null;
}
setStatus('Pre-parsing...', 'working');
while (isRunning) {
var lines = listTextarea.getValue().split('\n');
var batchTitles = [];
var stopFound = false;
for (var i = 0; i < lines.length; i++) {
var line = lines[i];
if (line === '####STOP') {
stopFound = true;
break;
}
if (line && !line.startsWith('####')) {
var parts = line.split('|');
batchTitles.push({
fullLine: line,
title: parts[0],
vars: parts.slice(1)
});
}
if (batchTitles.length >= 50) break;
}
if (batchTitles.length === 0) {
if (stopFound) setStatus('Pre-parse complete');
else setStatus('List empty');
break;
}
$listCounter.text('Fetching ' + batchTitles.length + '...');
var badCats = inpSkipCategories.getValue().split('|').map(s => s.trim()).filter(s => s);
var reqCats = inpSkipNotCategories.getValue().split('|').map(s => s.trim()).filter(s => s);
var api = new mw.Api();
try {
var data = await api.get({
action: 'query',
prop: 'revisions' + (badCats.length + reqCats.length > 0 ? '|categories' : ''),
titles: batchTitles.map(t => t.title).join('|'),
rvprop: 'content',
rvslots: 'main',
redirects: 1,
cllimit: 'max'
});
var pageMap = {};
if (data.query && data.query.pages) Object.values(data.query.pages).forEach(p => pageMap[p.title] = p);
var redirMap = {};
if (data.query && data.query.redirects) data.query.redirects.forEach(r => redirMap[r.from] = r.to);
var keptLines = [];
for (var k = 0; k < batchTitles.length; k++) {
var item = batchTitles[k];
var lookupTitle = redirMap[item.title] || item.title;
var page = pageMap[lookupTitle];
if (!page || page.missing || page.invalid || !page.revisions || !page.revisions[0]) {
console.warn("Skipping invalid/missing page:", item.title);
continue;
}
var pageCats = new Set((page.categories || []).map(c => c.title.replace(/^[^:]+:/, '').trim()));
if (badCats.some(c => pageCats.has(c))) continue; // Skip
if (reqCats.length > 0 && !reqCats.some(c => pageCats.has(c))) continue; // Skip
var rawText = page.revisions[0].slots.main['*'];
activeConfig.vars = {
'$xx': item.title
};
item.vars.forEach((v, idx) => activeConfig.vars['$x' + String.fromCharCode(65 + idx)] = v);
var res = await transformPageText(rawText, item.title, activeConfig);
// UPDATED LOGIC: Respect "Skip if no change" checkbox
if (!res.skipped && (!chkSkipNoChange.isSelected() || res.text !== rawText)) {
keptLines.push(item.fullLine);
}
}
var freshLines = listTextarea.getValue().split('\n');
var stopIndex = -1;
for (var x = 0; x < freshLines.length; x++) {
if (freshLines[x] === '####STOP') {
stopIndex = x;
break;
}
}
if (stopIndex > -1) {
var topChunk = freshLines.slice(0, stopIndex);
var botChunk = freshLines.slice(stopIndex + 1);
var processedSet = new Set(batchTitles.map(t => t.fullLine));
var newTop = topChunk.filter(l => !processedSet.has(l));
var newList = newTop.concat(['####STOP']).concat(botChunk).concat(keptLines);
listTextarea.setValue(newList.join('\n'));
updateListCount();
}
} catch (e) {
console.error(e);
setStatus('Batch error: ' + e, 'error');
break;
}
}
isRunning = false;
toggleUI(false);
WorkerEngine.destroy();
btnPreParse.setLabel('Pre-parse');
if (listTextarea.getValue().startsWith('####STOP')) setStatus('Pre-parse done!');
else setStatus('Stopped');
}
btnPreParse.on('click', runPreParseBatch);
function loadNextPage() {
if (!isRunning) return;
var allLines = listTextarea.getValue().split('\n');
var listChanged = false;
var stopCommand = false;
while (allLines.length > 0) {
var line = allLines[0];
if (line === '####STOP') {
stopCommand = true;
break;
}
if (line.startsWith('####') || line === "") {
allLines.shift();
listChanged = true;
} else {
break;
}
}
if (listChanged) {
listTextarea.setValue(allLines.join('\n'));
updateListCount();
}
if (stopCommand) {
btnPower.emit('click');
setStatus("Stopped by ####STOP");
return;
}
if (allLines.length === 0) {
btnPower.emit('click');
setStatus("Done!");
return;
}
var raw = allLines[0];
var parts = raw.split('|');
currentTitle = parts[0].trim();
baseRevId = 0;
originalWikitext = "";
if (!currentTitle) {
removeTopLine();
loadNextPage();
return;
}
currentVars = {};
currentVars['$xx'] = currentTitle;
for (var i = 1; i < parts.length; i++) currentVars['$x' + String.fromCharCode(64 + i)] = parts[i];
currentPageSummaryAppend = "";
currentPageSummaryOverride = null;
updateSummaryPreview(inputSummary.getValue());
setStatus('Loading...', 'working');
btnSave.setDisabled(true);
btnPreview.setDisabled(true);
btnDiff.setDisabled(true);
btnSkip.setDisabled(true);
Editor.setDisabled(true);
$titleLink.attr('href', mw.util.getUrl(currentTitle)).text(currentTitle);
$editorHeader.removeClass('wa-dirty');
Editor.setValue('Loading...');
$infoContainer.empty();
currentPageExists = false;
btnWatch.setDisabled(true);
btnManualEdit.setDisabled(true);
if (CAN_MOVE || IS_ADMIN) updateInterfaceMode();
var badCats = inpSkipCategories.getValue().split('|').map(s => s.trim()).filter(s => s);
var reqCats = inpSkipNotCategories.getValue().split('|').map(s => s.trim()).filter(s => s);
var api = new mw.Api();
var params = {
action: 'query',
prop: 'revisions|info' + (badCats.length + reqCats.length > 0 ? '|categories' : ''),
titles: currentTitle,
rvprop: 'content|timestamp|ids',
rvslots: 'main',
inprop: 'watched',
cllimit: 'max'
};
var now = Date.now();
var shouldCheckNotifs = (ON_NOTIFY === "warn" || ON_NOTIFY === "stop") && (now - lastNotifCheck > ON_NOTIFY_FREQ);
if (shouldCheckNotifs) {
params.meta = 'notifications';
params.notprop = 'list';
params.notsections = 'alert';
params.notlimit = 4;
lastNotifCheck = now;
}
var rMode = redirMode.findSelectedItem().getData();
if (rMode === 'follow') params.redirects = 1;
return api.get(params).then(async function(data) {
// piggyback notification check
if (data.query && data.query.notifications && data.query.notifications.list) {
var stopped = checkNotifications(data.query.notifications.list);
if (stopped) return; // exit before loading the page content
}
var pid = Object.keys(data.query.pages)[0];
var page = data.query.pages[pid];
currentPageExists = !page.missing && !page.invalid;
var pageCats = new Set((page.categories || []).map(c => c.title.replace(/^[^:]+:/, '').trim()));
if (badCats.some(c => pageCats.has(c))) {
setStatus('Skip: cat blacklist');
removeTopLine();
loadNextPage();
return;
}
if (reqCats.length > 0 && !reqCats.some(c => pageCats.has(c))) {
setStatus('Skip: cat whitelist');
removeTopLine();
loadNextPage();
return;
}
if (rMode === 'follow' && data.query.redirects) {
currentTitle = page.title;
$titleLink.attr('href', mw.util.getUrl(currentTitle)).text(currentTitle);
mw.notify('Redirect followed to: ' + currentTitle);
}
if (rMode === 'skip' && page.redirect !== undefined) {
removeTopLine();
loadNextPage();
return;
}
var skipMode = radSkipExist.findSelectedItem().getData();
if (pid === "-1") {
if (skipMode === 'missing') {
removeTopLine();
loadNextPage();
return;
}
originalWikitext = "";
baseRevId = 0;
} else {
if (skipMode === 'exists') {
removeTopLine();
loadNextPage();
return;
}
originalWikitext = page.revisions[0].slots.main['*'];
baseRevId = page.revisions[0].revid;
}
if (page.revisions && page.revisions.length > 0) {
var rev = page.revisions[0];
var ts = new Date(rev.timestamp).toISOString().replace('T', ' ').substring(0, 16);
$infoContainer.empty().append('Last edit: ' + ts + ' | ', $('<a>').attr('href', mw.util.getUrl(currentTitle, {
action: 'history'
})).attr('target', '_blank').text('history'));
}
btnWatch.setDisabled(!currentPageExists);
btnManualEdit.setDisabled(!currentPageExists);
if (page.watched !== undefined) btnWatch.setIcon('unStar');
else btnWatch.setIcon('star');
if (CAN_MOVE || IS_ADMIN) {
updateInterfaceMode();
if (togAdminEnable.getValue()) {
Editor.setValue(originalWikitext);
renderCurrentView();
setStatus('Ready (Page actions)');
return;
}
}
processPageContent();
}).catch(function(e) {
setStatus('API error', 'error');
alert('Load error: ' + e);
btnPower.emit('click');
});
}
async function fetchWithContinue(api, params) {
var allTitles = new Set();
var continueToken = {};
var safetyLimit = FETCH_SAFETY_LIMIT;
var count = 0;
isFetching = true;
btnAdd.setLabel('Cancel fetch');
$fetchStatus.text('Fetching...').show();
try {
while (isFetching && count < safetyLimit) {
var merged = Object.assign({}, params, continueToken);
var data = await api.get(merged);
var batch = [];
if (data.watchlistraw) batch = data.watchlistraw;
else if (data.query) {
if (data.query.pages) batch = Object.values(data.query.pages);
else if (data.query.categorymembers) batch = data.query.categorymembers;
else if (data.query.backlinks) batch = data.query.backlinks;
else if (data.query.embeddedin) batch = data.query.embeddedin;
else if (data.query.imageusage) batch = data.query.imageusage;
else if (data.query.search) batch = data.query.search;
else if (data.query.allpages) batch = data.query.allpages;
else if (data.query.usercontribs) batch = data.query.usercontribs;
else if (data.query.pageswithprop) batch = data.query.pageswithprop;
}
if (batch.length > 0) {
batch.forEach(item => {
if (item.title) allTitles.add(item.title);
});
count = allTitles.size;
$fetchStatus.text('Fetched ' + count + '...');
}
if (data.continue) continueToken = data.continue;
else break;
}
} catch (e) {
alert("Fetch interrupted: " + e);
}
isFetching = false;
btnAdd.setLabel('Add to list').setDisabled(false);
$fetchStatus.text('Added ' + allTitles.size + ' pages').delay(3000).fadeOut();
if (allTitles.size > 0) {
hasNewSources = true;
checkSummaryWarning();
}
return Array.from(allTitles);
}
function toggleUI(d) {
if (d) {
btnPower.setLabel('Stop').setIcon('power').setFlags(['destructive']);
} else {
btnPower.setLabel('Start').setIcon('power').clearFlags().setFlags(['primary', 'progressive']);
if (PERMS.allowBot) togAutoSave.setValue(false);
}
toggleConfig(d);
btnSort.setDisabled(d);
btnDedup.setDisabled(d);
btnClear.setDisabled(d);
btnSaveProj.setDisabled(d);
btnLoadProj.setDisabled(d);
btnSkip.setDisabled(!d);
btnSave.setDisabled(true);
listTextarea.setReadOnly(d);
if (d) listTextarea.$element.addClass('wa-list-running');
else listTextarea.$element.removeClass('wa-list-running');
}
function resetPanels() {
Editor.setValue('');
$titleLink.text('Page content').removeAttr('href');
$editorHeader.removeClass('wa-dirty');
setStatus('Ready');
$('#wa-summary-preview').val('');
currentTitle = null;
$visualOut.empty();
$infoContainer.empty();
btnWatch.setDisabled(true);
btnManualEdit.setDisabled(true);
Editor.setDisabled(true);
currentPageExists = false;
if (CAN_MOVE || IS_ADMIN) updateInterfaceMode();
toggleUI(false);
updateListCount();
if (autoSaveTimer) clearTimeout(autoSaveTimer);
}
function arrayMove(arr, old_index, new_index) {
if (new_index >= arr.length) {
var k = new_index - arr.length + 1;
while (k--) arr.push(undefined);
}
arr.splice(new_index, 0, arr.splice(old_index, 1)[0]);
}
function updateRuleButtons() {
rulesRegistry.forEach(function(item, idx) {
item.btnUp.setDisabled(idx === 0);
item.btnDown.setDisabled(idx === rulesRegistry.length - 1);
});
}
function addRule() {
var row = $('<div>').addClass('wa-rule-row');
var controls = $('<div>').addClass('wa-rule-controls');
var btnUp = new OO.ui.ButtonWidget({
icon: 'collapse',
framed: false,
title: 'Move up',
classes: ['wa-rule-btn']
});
var btnDown = new OO.ui.ButtonWidget({
icon: 'expand',
framed: false,
title: 'Move down',
classes: ['wa-rule-btn']
});
controls.append(btnUp.$element, btnDown.$element);
var contentDiv = $('<div>').addClass('wa-rule-content');
var f = new OO.ui.TextInputWidget({
placeholder: 'Find'
});
var r = new OO.ui.TextInputWidget({
placeholder: 'Replace'
});
var reg = new OO.ui.ToggleSwitchWidget();
var fl = new OO.ui.TextInputWidget({
value: 'gmu',
disabled: true
}).toggle(false);
var btnEnable = new OO.ui.ButtonWidget({
icon: 'power',
framed: false,
title: 'Toggle rule',
flags: ['progressive']
});
var isRuleActive = true;
var btnFunc = new OO.ui.ButtonWidget({
icon: 'code',
framed: false,
title: 'Toggle JS mode',
disabled: true
});
var isRuleFunc = false;
var toggleRule = function(forceVal) {
var val = (forceVal !== undefined) ? forceVal : !isRuleActive;
isRuleActive = val;
row.css('opacity', isRuleActive ? 1 : 0.6);
if (isRuleActive) btnEnable.setFlags(['progressive']);
else btnEnable.clearFlags();
};
btnEnable.on('click', function() {
toggleRule();
});
var toggleFunc = function(forceVal) {
var val = (forceVal !== undefined) ? forceVal : !isRuleFunc;
isRuleFunc = val;
if (isRuleFunc) {
btnFunc.setFlags(['progressive']);
r.$input.attr('placeholder', 'return match.toUpperCase();');
} else {
btnFunc.clearFlags();
r.$input.attr('placeholder', 'Replace');
}
};
btnFunc.on('click', function() {
toggleFunc();
});
btnFunc.toggle(false);
reg.on('change', function(v) {
fl.setDisabled(!v);
fl.toggle(v);
btnFunc.setDisabled(!v);
if (!v) {
btnFunc.toggle(false);
if (isRuleFunc) toggleFunc(false);
} else btnFunc.toggle(true);
});
var del = new OO.ui.ButtonWidget({
icon: 'trash',
flags: 'destructive',
framed: false,
title: 'Delete rule',
});
del.on('click', function() {
row.fadeOut(200, function() {
row.remove();
rulesRegistry = rulesRegistry.filter(x => x.row !== row);
updateRuleButtons();
});
});
contentDiv.append(f.$element, $('<div>').css('margin-top', '3px').append(r.$element), $('<div>').addClass('wa-rule-opt-row').append($('<div>').css({
'display': 'flex',
'align-items': 'center'
}).append($('<div>').css({
'display': 'flex',
'align-items': 'center'
}).append($('<span>').text('Regex: ').css({
'font-size': '0.8em',
'margin-right': '4px'
}), reg.$element, fl.$element.css({
'width': '50px',
'margin-left': '5px'
})), btnFunc.$element.css('margin-left', '10px')), $('<div>').css('display', 'flex').append(btnEnable.$element, del.$element)));
row.append(controls, contentDiv);
$rulesList.append(row);
var ruleItem = {
row: row,
find: f,
rep: r,
regex: reg,
flags: fl,
btnUp: btnUp,
btnDown: btnDown,
enable: btnEnable,
del: del,
btnFunc: btnFunc,
isActive: function() {
return isRuleActive;
},
setActive: toggleRule,
isFunc: function() {
return isRuleFunc;
},
setFunc: toggleFunc
};
rulesRegistry.push(ruleItem);
btnUp.on('click', function() {
var idx = rulesRegistry.indexOf(ruleItem);
if (idx > 0) {
var prevRow = rulesRegistry[idx - 1].row;
row.fadeOut(150, function() {
row.insertBefore(prevRow).fadeIn(150).addClass('wa-highlight');
setTimeout(function() {
row.removeClass('wa-highlight');
}, 500);
});
arrayMove(rulesRegistry, idx, idx - 1);
updateRuleButtons();
}
});
btnDown.on('click', function() {
var idx = rulesRegistry.indexOf(ruleItem);
if (idx < rulesRegistry.length - 1) {
var nextRow = rulesRegistry[idx + 1].row;
row.fadeOut(150, function() {
row.insertAfter(nextRow).fadeIn(150).addClass('wa-highlight');
setTimeout(function() {
row.removeClass('wa-highlight');
}, 500);
});
arrayMove(rulesRegistry, idx, idx + 1);
updateRuleButtons();
}
});
updateRuleButtons();
}
btnAddRule.on('click', addRule);
addRule();
togWikiTypos.on('change', function(v) {
if (v) {
if (wikiTypos.length > 0) lblWikiStatus.text(wikiTypos.length + ' rules loaded (Cached)');
else {
lblWikiStatus.text('Fetching...');
togWikiTypos.setDisabled(true);
new mw.Api().get({
action: 'query',
prop: 'revisions',
titles: mw.config.get('wgFormattedNamespaces')[4] + ':AutoWikiBrowser/Typos',
rvprop: 'content',
rvslots: 'main',
formatversion: 2
}).then(function(d) {
var page = d.query.pages[0];
if (!page.missing) {
wikiTypos = parseTypoContent(page.revisions[0].slots.main.content);
lblWikiStatus.text(wikiTypos.length + ' rules loaded');
} else {
lblWikiStatus.text('Page not found');
togWikiTypos.setValue(false);
}
}).catch(function() {
lblWikiStatus.text('Error');
togWikiTypos.setValue(false);
}).always(function() {
togWikiTypos.setDisabled(false);
});
}
} else lblWikiStatus.text('Rules inactive');
});
btnLoadLocal.on('click', function() {
$typoInput.click();
});
$typoInput.on('change', function(e) {
var file = e.target.files[0];
if (!file) return;
var reader = new FileReader();
reader.onload = function(evt) {
localTypos = parseTypoContent(evt.target.result);
lblLocalStatus.text(localTypos.length + ' local rules loaded');
btnClearLocal.setDisabled(false);
};
reader.readAsText(file);
$typoInput.val('');
});
btnClearLocal.on('click', function() {
localTypos = [];
lblLocalStatus.text('No local rules');
btnClearLocal.setDisabled(true);
});
btnLoadLib.on('click', function() {
$libInput.click();
});
btnRemoveLib.on('click', function() {
currentLibrary = {
name: null,
code: null
};
updateLibUI();
});
$libInput.on('change', function(e) {
var file = e.target.files[0];
if (!file) return;
var reader = new FileReader();
reader.onload = function(evt) {
currentLibrary = {
name: file.name,
code: evt.target.result
};
updateLibUI();
};
reader.readAsText(file);
$libInput.val('');
});
btnPower.on('click', async function() {
hasNewSources = false;
checkSummaryWarning();
$('.wa-editor-header').removeClass('wa-header-alert');
if (!isRunning) {
viewScroll = resetViewScroll();
if (ON_NOTIFY === "warn" || ON_NOTIFY === "stop") {
setStatus('Setting watermark...', 'working');
try {
var notifData = await new mw.Api().get({
action: 'query',
meta: 'notifications',
notprop: 'list',
notsections: 'alert',
notlimit: 1,
formatversion: 2
});
if (notifData.query && notifData.query.notifications && notifData.query.notifications.list.length > 0) {
notificationWatermark = parseInt(notifData.query.notifications.list[0].id, 10) || 0;
} else {
notificationWatermark = 0;
}
} catch (e) {
console.warn("wAwB: Failed to fetch notification watermark", e);
}
}
if (SAVED_SESSION === 0) mw.track('stats.mediawiki_gadget_wAwB_total');
isRunning = true;
toggleUI(true);
loadNextPage();
} else {
if (SAVED_RUN > 0) {
mw.track('stats.mediawiki_gadget_wAwB_saved_total', SAVED_RUN, {
wiki: WIKI
});
SAVED_SESSION += SAVED_RUN;
SAVED_RUN = 0;
}
isRunning = false;
toggleUI(false);
WorkerEngine.destroy();
resetPanels();
}
});
inputSummary.on('change', function() {
checkSummaryWarning();
if (currentTitle) {
updateSummaryPreview(inputSummary.getValue());
}
});
btnSkip.on('click', function() {
if (Editor.getValue() === 'Loading...') return;
removeTopLine();
loadNextPage();
});
btnDiff.on('click', function() {
currentViewMode = 'diff';
updateDirtyState();
if (currentTitle) renderDiff();
});
btnPreview.on('click', function() {
currentViewMode = 'preview';
updateDirtyState();
if (currentTitle) renderPreview();
});
btnSave.on('click', function() {
if (Editor.getValue() === 'Loading...' || !currentTitle) return;
if (autoSaveTimer) clearTimeout(autoSaveTimer);
btnSave.setDisabled(true);
setStatus('Saving...', 'working');
var effectiveDelay = PERMS.saveDelay || 0;
if (effectiveDelay > 0) setStatus('Throttling (' + (effectiveDelay / 1000) + 's)...', 'working');
setTimeout(function() {
if (effectiveDelay > 0) setStatus('Saving...', 'working');
var finalSum = $('#wa-summary-preview').val().trim();
var summary = finalSum + SUMMARY_SUFFIX;
new mw.Api().postWithToken('csrf', {
action: 'edit',
assert: 'user', //throw 'assertuserfailed' when logged-out
title: currentTitle,
text: Editor.getValue(),
summary: summary,
minor: chkMinor.isSelected(),
baserevid: baseRevId,
bot: PERMS.allowBot,
watchlist: 'nochange',
tags: DO_TAG ? APP_NAME : undefined
}).then(function() {
SAVED_RUN += 1;
removeTopLine();
loadNextPage();
}).catch(function(c) {
btnSave.setDisabled(false);
setStatus('Save error', 'error');
alert('Save failed: ' + c);
});
}, effectiveDelay);
});
btnManualEdit.on('click', function() {
if (Editor.getValue() === 'Loading...' || !currentTitle) return;
// Calculate the final injected summary
var base = currentPageSummaryOverride !== null ? currentPageSummaryOverride : inputSummary.getValue();
var finalSum = base + (currentPageSummaryAppend || "");
var translatedSummary = injectVars(finalSum);
var summary = translatedSummary; // no SUMMARY_SUFFIX
// Create an invisible form targeting a new tab
var $form = $('<form>').attr({
method: 'POST',
action: mw.util.getUrl(currentTitle, { action: 'edit' }),
target: '_blank'
}).hide();
// Populate it with MediaWiki's native input names
$('<textarea>').attr('name', 'wpTextbox1').val(Editor.getValue()).appendTo($form);
$('<input>').attr('name', 'wpSummary').val(summary).appendTo($form);
if (chkMinor.isSelected()) {
$('<input>').attr('name', 'wpMinoredit').val('1').appendTo($form);
}
// Append, fire, and destroy
$form.appendTo('body').submit().remove();
});
btnWatch.on('click', function() {
var isWatched = btnWatch.getIcon() === 'unStar';
new mw.Api()[isWatched ? 'unwatch' : 'watch'](currentTitle).then(function() {
btnWatch.setIcon(isWatched ? 'star' : 'unStar');
mw.notify(isWatched ? 'Unwatched' : 'Watched');
});
});
btnAdd.on('click', function() {
if (isFetching) {
isFetching = false;
btnAdd.setDisabled(true).setLabel('Cancelling...');
return;
}
try {
var mode = srcSelect.getValue(),
q = srcInput.getValue().trim();
if (mode !== 'watchlist' && mode !== 'usercontribs' && mode !== 'pageswithprop' && !q) {
alert('Query empty');
return;
}
var nsIds = ($nsSelect.val() || []).map(v => parseInt(v));
var nsStr = nsIds.join('|');
var api = new mw.Api(),
promises = [];
if (mode === 'cat') promises.push(fetchWithContinue(api, {
action: 'query',
list: 'categorymembers',
cmtitle: mw.Title.newFromText(q, 14) ? mw.Title.newFromText(q, 14).getPrefixedText() : 'Category:' + q,
cmnamespace: nsStr,
cmtype: (chkCatPages.isSelected() ? 'page|' : '') + (chkCatSub.isSelected() ? 'subcat|' : '') + (chkCatFile.isSelected() ? 'file' : ''),
cmlimit: 'max'
}));
else if (mode === 'linksto') {
if (chkLinkWiki.isSelected()) promises.push(fetchWithContinue(api, {
action: 'query',
list: 'backlinks',
bltitle: q,
blnamespace: nsStr,
bllimit: 'max',
blfilterredir: dropLinkRedir.getValue(),
blredirect: chkLinkToRedir.isSelected()
}));
if (chkLinkTrans.isSelected()) promises.push(fetchWithContinue(api, {
action: 'query',
list: 'embeddedin',
eititle: q,
einamespace: nsStr,
eilimit: 'max',
eifilterredir: dropLinkRedir.getValue()
}));
if (chkLinkImg.isSelected()) promises.push(fetchWithContinue(api, {
action: 'query',
list: 'imageusage',
iutitle: q,
iunamespace: nsStr,
iulimit: 'max',
iufilterredir: dropLinkRedir.getValue()
}));
} else if (mode === 'linkson') promises.push(fetchWithContinue(api, {
action: 'query',
generator: 'links',
titles: q,
gplnamespace: nsStr,
gpllimit: 'max',
prop: 'info'
}));
else if (mode === 'prefix') promises.push(fetchWithContinue(api, {
action: 'query',
list: 'allpages',
apprefix: q,
apnamespace: nsIds[0] || 0,
aplimit: 'max'
}));
else if (mode === 'watchlist') promises.push(fetchWithContinue(api, {
action: 'query',
list: 'watchlistraw',
wrnamespace: nsStr,
wrlimit: 'max'
}));
else if (mode === 'search') promises.push(fetchWithContinue(api, {
action: 'query',
list: 'search',
srsearch: q,
srnamespace: nsStr,
srlimit: 'max'
}));
else if (mode === 'usercontribs') promises.push(fetchWithContinue(api, {
action: 'query',
list: 'usercontribs',
ucuser: srcInputUser.getValue(),
ucstart: srcInputStartDate.getValue(),
ucend: srcInputEndDate.getValue(),
ucdir: 'newer',
uclimit: 'max',
ucnamespace: nsStr,
ucprop: 'title'
}));
else if (mode === 'pageswithprop') promises.push(fetchWithContinue(api, {
action: 'query',
list: 'pageswithprop',
pwppropname: srcDropProp.getValue(),
pwplimit: 'max'
}));
Promise.all(promises).then(function(res) {
var list = new Set();
res.forEach(titles => titles.forEach(t => list.add(t)));
var currentVal = listTextarea.getValue();
var newVal = Array.from(list).join('\n');
listTextarea.setValue(currentVal ? currentVal + '\n' + newVal : newVal);
mw.notify('Added ' + list.size + ' pages');
}).catch(e => alert('Error: ' + e));
} catch (e) {
alert("Fetch error: " + e);
}
});
btnSort.on('click', function() {
var v = listTextarea.getValue();
if (v) {
var lines = getNormalizedList(v);
lines.sort((a, b) => sortAsc ? a.localeCompare(b) : b.localeCompare(a));
listTextarea.setValue(lines.join('\n'));
sortAsc = !sortAsc;
}
});
btnDedup.on('click', function() {
var v = listTextarea.getValue();
if (v) listTextarea.setValue(getDeduplicatedList(v).join('\n'));
});
btnClear.on('click', function() {
listTextarea.setValue('');
});
btnSaveProj.on('click', function() {
try {
var currentMode = srcSelect.getValue();
if (['watchlist', 'usercontribs', 'pageswithprop'].indexOf(currentMode) === -1) queryCache[currentMode] = srcInput.getValue();
var saveExcludes = {};
for (var k in protCheckboxes) saveExcludes[k] = protCheckboxes[k].isSelected();
var data = {
version: APP_VERSION,
library: currentLibrary,
source: {
activeMode: currentMode,
namespaces: ($nsSelect.val() || []).map(v => parseInt(v)),
modes: {
cat: {
query: queryCache['cat'] || '',
options: {
pages: chkCatPages.isSelected(),
sub: chkCatSub.isSelected(),
file: chkCatFile.isSelected()
}
},
linksto: {
query: queryCache['linksto'] || '',
options: {
wiki: chkLinkWiki.isSelected(),
trans: chkLinkTrans.isSelected(),
img: chkLinkImg.isSelected(),
redir: dropLinkRedir.getValue(),
toRedir: chkLinkToRedir.isSelected()
}
},
linkson: {
query: queryCache['linkson'] || ''
},
prefix: {
query: queryCache['prefix'] || ''
},
watchlist: {
query: ''
},
search: {
query: queryCache['search'] || ''
},
usercontribs: {
options: {
user: srcInputUser.getValue(),
start: srcInputStartDate.getValue(),
end: srcInputEndDate.getValue()
}
},
pageswithprop: {
options: {
prop: srcDropProp.getValue()
}
}
}
},
settings: {
redir: redirMode.findSelectedItem().getData(),
skipLogic: radSkipExist.findSelectedItem().getData(),
skipNoChange: chkSkipNoChange.isSelected(),
minor: chkMinor.isSelected()
},
filters: {
contains: {
val: inpSkipContains.getValue(),
regex: togSkipContainsRegex.getValue()
},
notContains: {
val: inpSkipNotContains.getValue(),
regex: togSkipNotContainsRegex.getValue()
},
categories: {
skip: inpSkipCategories.getValue(),
require: inpSkipNotCategories.getValue()
}
},
rules: rulesRegistry.map(r => ({
find: r.find.getValue(),
replace: r.rep.getValue(),
regex: r.regex.getValue(),
flags: r.flags.getValue(),
enabled: r.isActive(),
isFunc: r.isFunc()
})),
scripts: {
pre: txtPreScript.getValue(),
post: txtPostScript.getValue()
},
processing: {
summary: inputSummary.getValue(),
list: listTextarea.getValue()
},
protection: {
mode: dropProtMode.getValue(),
excludes: saveExcludes,
target: (radTargetSet.findSelectedItem() || {
getData: () => null
}).getData(),
templateFilter: inpTemplateFilter.getValue()
}
};
var a = document.createElement('a');
a.href = URL.createObjectURL(new Blob([JSON.stringify(data, null, 1)], {
type: "application/json"
}));
a.download = "wawb_project.json";
a.click();
} catch (e) {
alert("Save error: " + e);
}
});
btnLoadProj.on('click', function() {
$fileInput.click();
});
function applyIf(val, action) {
if (val !== undefined && val !== null) action(val);
}
$fileInput.on('change', function(e) {
var file = e.target.files[0];
if (!file) return;
var reader = new FileReader();
reader.onload = function(evt) {
try {
var data = JSON.parse(evt.target.result);
isLoadingProject = true;
// --- 1. SOURCE SETTINGS ---
applyIf(data?.source?.namespaces, v => $nsSelect.val(v.map(String)));
if (data?.source?.modes) {
var m = data.source.modes;
// Merge into queryCache instead of wiping it
for (var key in m) {
if (m[key]?.query !== undefined) queryCache[key] = m[key].query;
}
applyIf(m?.cat?.options?.pages, v => chkCatPages.setSelected(v));
applyIf(m?.cat?.options?.sub, v => chkCatSub.setSelected(v));
applyIf(m?.cat?.options?.file, v => chkCatFile.setSelected(v));
applyIf(m?.linksto?.options?.wiki, v => chkLinkWiki.setSelected(v));
applyIf(m?.linksto?.options?.trans, v => chkLinkTrans.setSelected(v));
applyIf(m?.linksto?.options?.img, v => chkLinkImg.setSelected(v));
applyIf(m?.linksto?.options?.redir, v => dropLinkRedir.setValue(v));
applyIf(m?.linksto?.options?.toRedir, v => chkLinkToRedir.setSelected(v));
applyIf(m?.usercontribs?.options?.user, v => srcInputUser.setValue(v));
applyIf(m?.usercontribs?.options?.start, v => srcInputStartDate.setValue(v));
applyIf(m?.usercontribs?.options?.end, v => srcInputEndDate.setValue(v));
applyIf(m?.pageswithprop?.options?.prop, v => srcDropProp.setValue(v));
}
// --- 2. SETTINGS & SKIP LOGIC ---
applyIf(data?.settings?.redir, v => redirMode.selectItemByData(v));
applyIf(data?.settings?.skipLogic, v => radSkipExist.selectItemByData(v));
applyIf(data?.settings?.skipNoChange, v => chkSkipNoChange.setSelected(v));
applyIf(data?.settings?.minor, v => chkMinor.setSelected(v));
// --- 3. PROTECTION ---
applyIf(data?.protection?.mode, v => dropProtMode.setValue(v));
applyIf(data?.protection?.target, v => radTargetSet.selectItemByData(v));
applyIf(data?.protection?.templateFilter, v => inpTemplateFilter.setValue(v));
if (data?.protection?.excludes) {
for (var k in data.protection.excludes) {
if (protCheckboxes[k]) applyIf(data.protection.excludes[k], v => protCheckboxes[k].setSelected(v));
}
}
// --- 4. LIBRARY ---
applyIf(data?.library?.name, v => currentLibrary.name = v);
applyIf(data?.library?.code, v => currentLibrary.code = v);
if (data?.library?.name || data?.library?.code) updateLibUI();
// --- 5. FILTERS ---
applyIf(data?.filters?.contains?.val, v => inpSkipContains.setValue(v));
applyIf(data?.filters?.contains?.regex, v => togSkipContainsRegex.setValue(v));
applyIf(data?.filters?.notContains?.val, v => inpSkipNotContains.setValue(v));
applyIf(data?.filters?.notContains?.regex, v => togSkipNotContainsRegex.setValue(v));
applyIf(data?.filters?.categories?.skip, v => inpSkipCategories.setValue(v));
applyIf(data?.filters?.categories?.require, v => inpSkipNotCategories.setValue(v));
// --- 6. SCRIPTS & PROCESSING ---
applyIf(data?.scripts?.pre, v => txtPreScript.setValue(v));
applyIf(data?.scripts?.post, v => txtPostScript.setValue(v));
applyIf(data?.processing?.summary, v => inputSummary.setValue(v));
applyIf(data?.processing?.list, v => listTextarea.setValue(v));
// --- 7. DYNAMIC RULES ARRAY ---
if (data?.rules && Array.isArray(data.rules)) {
rulesRegistry.forEach(r => r.row.remove());
rulesRegistry = [];
$rulesList.empty();
data.rules.forEach(r => {
addRule();
var last = rulesRegistry[rulesRegistry.length - 1];
applyIf(r.find, v => last.find.setValue(v));
applyIf(r.replace, v => last.rep.setValue(v));
applyIf(r.regex, v => {
last.regex.setValue(v);
last.flags.setDisabled(!v);
});
applyIf(r.flags, v => last.flags.setValue(v));
applyIf(r.enabled, v => last.setActive(v));
applyIf(r.isFunc, v => last.setFunc(v));
});
if (rulesRegistry.length === 0) addRule();
}
// --- 8. TRIGGER UI UPDATES ---
applyIf(data?.source?.activeMode, v => {
isLoadingProject = false;
srcSelect.setValue(v);
srcSelect.emit('change', v);
isLoadingProject = true;
});
isLoadingProject = false;
setStatus('Project loaded');
} catch (err) {
alert("Load Error: " + err);
}
$fileInput.val('');
};
reader.readAsText(file);
});
if (CAN_MOVE || IS_ADMIN) {
togAdminEnable.on('change', function(val) {
if (!currentTitle) {
updateInterfaceMode();
return;
}
if (val) {
Editor.setValue(originalWikitext);
updateInterfaceMode();
renderDiff();
setStatus('Ready (Page actions)');
} else processPageContent();
});
}
if (CAN_MOVE) {
btnAdminMove.on('click', function() {
if (!currentVars['$xA']) {
mw.notify('Variable $xA not set', {
type: 'error'
});
return;
}
new mw.Api().postWithToken('csrf', {
action: 'move',
assert: 'user', //throw 'assertuserfailed' when logged-out
from: currentTitle,
to: currentVars['$xA'],
reason: inputSummary.getValue() + SUMMARY_SUFFIX,
movetalk: chkMovTalk.isSelected(),
movesubpages: chkMovSub.isSelected(),
noredirect: chkMovRedirect.isSelected()
}).then(function() {
removeTopLine();
loadNextPage();
}).catch(e => alert('Move failed: ' + e));
});
}
if (IS_ADMIN) {
btnAdminDel.on('click', function() {
new mw.Api().postWithToken('csrf', {
action: 'delete',
assert: 'user', //throw 'assertuserfailed' when logged-out
title: currentTitle,
reason: inputSummary.getValue() + SUMMARY_SUFFIX
}).then(function() {
if (chkDelTalk.isSelected()) new mw.Api().postWithToken('csrf', {
action: 'delete',
title: mw.Title.newFromText(currentTitle).getTalkPage().getPrefixedText(),
reason: 'Talk page of deleted page'
});
removeTopLine();
loadNextPage();
}).catch(e => alert('Delete failed: ' + e));
});
btnAdminProt.on('click', function() {
var protections = [];
if (dropProtEdit.getValue()) protections.push('edit=' + dropProtEdit.getValue());
if (dropProtMove.getValue()) protections.push('move=' + dropProtMove.getValue());
new mw.Api().postWithToken('csrf', {
action: 'protect',
assert: 'user', //throw 'assertuserfailed' when logged-out
title: currentTitle,
protections: protections.join('|'),
expiry: inpProtExpiry.getValue() || 'infinite',
reason: inputSummary.getValue() + SUMMARY_SUFFIX
}).then(function() {
removeTopLine();
loadNextPage();
}).catch(e => alert('Protect failed: ' + e));
});
}
Editor.init();
resetPanels();
});
$(window).on('beforeunload', function() {
return "You have unsaved work.";
});
}).catch(e => console.error("wAwB Loader Error:", e));
//</nowiki>
phh4b5uuk667393u1cqblz0ikgjgaxo
User:Enbi/common.js
2
172174
759939
758151
2026-09-02T11:41:53Z
Enbi
72574
Uninstalling [[User:Enbi/testScript2.js]] ([[User:Enterprisey/script-installer|script-installer]])
759939
javascript
text/javascript
importScript('User:Enbi/UnnamedScript.js');
importScript('User:Enbi/testScript.js');
importScript('User:Enbi/simul.js');
importScript('User:Enbi/newUserFilter.js');
importScript('User:Enbi/new.js');
importScript('User:Enbi/wikiCMD.js');
importScript('User:enbi/LTA-undo.js');
importScript('User:Enbi/LACsuppresssed.js');
importScript('w:en:MediaWiki:Gadget-script-installer.js')
importScript('User:Enbi/highlightUsernamePatterns.js'); // Backlink: [[User:Enbi/highlightUsernamePatterns.js]]
importScript('User:Enbi/editAlert.js'); // Backlink: [[User:Enbi/editAlert.js]]
importScript('User:Enbi/searchReplace.js'); // Backlink: [[User:Enbi/searchReplace.js]]
importScript('User:Enbi/LACSRG.js'); // Backlink: [[User:Enbi/LACSRG.js]]
importScript('User:Enbi/test2.js'); // Backlink: [[User:Enbi/test2.js]]
if (mw.config.get('wgPageName') === 'User:Enbi/Gateway/run') {
importScript('User:Enbi/Gateway.js');
}
importScript('User:Enbi/test3.js'); // Backlink: [[User:Enbi/test3.js]]
importScript('User:Enbi/vuetest.js'); // Backlink: [[User:Enbi/vuetest.js]]
importScript('User:Enbi/oo.js'); // Backlink: [[User:Enbi/oo.js]]
importScript('User:Enbi/EFFPRH.js'); // Backlink: [[User:Enbi/EFFPRH.js]]
0hog481m9djw16coa73e79vzvvq22tr
1955–56 Austrian football championship
0
174422
759881
736660
2026-09-01T15:11:07Z
BursaSamar
75480
tidy whitespace (Wiki Assisted Editor)
759881
wikitext
text/x-wiki
{{Infobox football league season
| competition = [[Austrian Bundesliga|Staatsliga A]]
| season = 1955-56
| dates = 27 August 1955 - 10 June 1956
| winners = [[SK Rapid Wien]]
| relegated = [[FC Wien]], [[ESV Austria Graz]]
|promoted = [[Wiener AC]], [[Kremser SC]]
| matches =
| total goals = 814 (4,74 per match)
| league topscorer = [[Hans Buzek]] First Vienna FC (32 goals)
| prevseason = [[1954-55 Austrian football championship|1954-55]]
| nextseason = [[1956-57 Austrian football championship|1956-57]]
}}
The '''1955-56 Austrian football championship''' was organized was organized by the [[Austrian Football Association]]. The Staatsliga B served as the lower tier of the Staatsliga A. It only included clubs from [[Vienna]], [[Lower Austria]], [[Burgenland]], [[Upper Austria]] and [[Styria]]. For clubs from western Austria the Tauernliga Nord ([[Salzburgerland|Salzburg]]), the Tauernliga Süd ([[Carinthia]]) and the Arlbergliga ([[Tyrol (state)|Tyrol]], [[Vorarlberg]]) were organized. This leagues were Amateur leagues. The respective regional leagues of the federal states served as the third level.
The championship in the State League was contested by 14 teams. They met twice throughout the season. [[SK Rapid Wien|Rapid Wien]] won the Austrian football championship for the 20th time . Defending champions Vienna finished third. [[Wiener AC]] as champion of the Staatsliga B and [[Kremser SC]] after relegationmatches were promoted to the Staatsliga A for the 1956-57 season.
==Final table==
Table mode (in case of equal points): 1st criterion goal quotient.
{| class="wikitable"
|-
!Pl.
! Name
!M
! W
! D
! L
! P
|-
|1.
|'''SK Rapid Wien'''
|26
| 20
|3
|3
| 43
|-
|2.
|'''SC Wacker Wien'''
|26
| 19
|3
| 4
| 41
|-
|3.
|'''First Vienna FC'''
|26
| 18
|4
| 4
|40
|-
|4.
|'''FK Austria Wien'''
|26
| 16
|3
| 7
| 35
|-
|5.
|'''Wiener Sport-Club'''
|26
| 12
|5
|9
|29
|-
|6.
|'''1. Simmeringer SC'''
|26
| 10
|8
| 8
| 28
|-
|7.
|'''Grazer AK'''
|26
| 11
|5
| 10
| 27
|-
|8.
|'''SV Austria Salzburg'''
|26
| 9
|5
|12
| 23
|-
|9.
| '''SK Admira Wien'''
|26
| 7
|4
| 15
| 18<ref>0,89</ref>
|-
|10.
|'''SK Sturm Graz'''
|26
|5
|8
| 13
| 18<ref>0,63</ref>
|-
|11.
|'''Kapfenberger SV'''
|26
|7
|3
| 16
| 17
|-
|12.
|'''FC Stadlau'''
|26
|5
|5
| 16
| 15<ref>0,58</ref>
|-
|13.
|'''FC Wien'''
|26
|5
|5
| 16
| 15<ref>0,46</ref>
|-
|14.
|'''ESV Austria Graz'''
|26
|7
|1
| 18
| 15<ref>0,32</ref>
|}
<ref name="ref1">[http://www.austriasoccer.at/data/nat/1950_59/o1__staatsliga_a__1955_56.htm Austria Soccer] </ref>
==Matches ==
<ref name="ref1"/>
===Round 1===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 27 August 1955
| SK Admira Wien
| '''Wiener Sport-Club'''
|1-3
|-
| 27 August 1955
| FC Wien
|'''SC Wacker Wien'''
| 3-5
|-
| 28 August 1955
|FK Austria Wien
|'''KapfenbergerSV'''
|2-3
|-
| 28 August 1955
| FC Stadlau
| '''SV Austria Salzburg'''
|2-3
|-
| 28 August 1955
| Grazer AK
|'''ESV Austria Graz'''
|1-2
|-
| 28 August 1955
| '''SK Rapid Wien'''
|1. Simmeringer SC
|4-2
|-
| 28 August 1955
| '''First Vienna FC'''
|SK Sturm Graz
|7-1
|}
===Round 2===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 3 September 1955
|1. Simmeringer SC
|'''Grazer AK'''
|0-1
|-
| 3 September 1955
|Wiener Sport-Club
|SK Rapid Wien
| 2-2
|-
| 4 September 1955
|SV Austria Salzburg
| '''FK Austria Wien '''
|0-2
|-
| 4 September 1955
|'''Kapfenberger SV'''
| FC Wien
|2-1
|-
| 4 September 1955
| SK Sturm Graz
|'''ESV Austria Graz'''
|0-1
|-
| 4 September 1955
| '''First Vienna FC'''
|FC Stadlau
|8-1
|-
| 4 September 1955
| SC Wacker Wien
|SK Admira Wien
|1-1
|}
===Round 3===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 10 September 1955
|'''SK Admira Wien'''
|Kapfenberger SV
|5-2
|-
| 10 September 1955
|ESV Austria Graz
|'''1. Simmeringer SC '''
| 1-6
|-
| 10 September 1955
|FC Stadlau
| SK Sturm Graz
|3-3
|-
| 10 September 1955
|'''FC Wien '''
| SV Austria Salzburg
|2-0
|-
| 11 September 1955
|FK Austria Wien
|First Vienna FC
|1-1
|-
| 11 September 1955
| Grazer AK
|''' Wiener Sport-Club '''
|3-4
|-
| 11 September 1955
| SC Wacker Wien
|SK Rapid Wien
|3-3
|}
===Round 4===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 17 September 1955
|''' Wiener Sport-Club '''
|ESV Austria Graz
|2-1
|-
| 18 September 1955
|'''SV Austria Salzburg'''
|SK Admira Wien
|2-1
|-
| 18 September 1955
|FC Stadlau
|'''FK Austria Wien'''
|1-2
|-
| 18 September 1955
|Kapfenberger SV
| '''SK Rapid Wien '''
|0-1
|-
| 18 September 1955
| SK Sturm Graz
|1. Simmeringer SC
|3-3
|-
| 18 September 1955
|'''First Vienna FC'''
|FC Wien
|3-0
|-
| 18 September 1955
| SC Wacker Wien
|'''Grazer AK'''
|2-4
|}
===Round 5===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 24 September 1955
|1. Simmeringer SC
|Wiener Sport-Club
|4-4
|-
| 24 September 1955
|ESV Austria Graz
|'''SC Wacker Wien'''
|0-1
|-
| 25 September 1955
|'''FK Austria Wien'''
|SK Sturm Graz
|3-1
|-
| 25 September 1955
|FC Wien
| FC Stadlau
|1-1
|-
| 25 September 1955
| Grazer AK
|Kapfenberger SV
|1-1
|-
| 25 September 1955
|'''SK Rapid Wien '''
|SV Austria Salzburg
|5-2
|-
| 25 September 1955
| '''First Vienna FC'''
|SK Admira Wien
|1-0
|}
===Round 6===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 1 October 1955
|'''SV Austria Salzburg'''
|Grazer AK
|3-0
|-
| 1 October 1955
|'''SC Wacker Wien'''
| 1. Simmeringer SC
|4-1
|-
| 2 October 1955
|'''FK Austria Wien'''
|FC Wien
|4-1
|-
| 2 October 1955
|'''FC Stadlau '''
| SK Admira Wien
|2-1
|-
| 2 October 1955
| '''Kapfenberger SV '''
|ESV Austria Graz
|1-0
|-
| 2 October 1955
|SK Sturm Graz
|''' Wiener Sport-Club '''
|0-1
|-
| 2 October 1955
| '''First Vienna FC'''
|SK Rapid Wien
|4-1
|}
===Round 7===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 8 October 1955
| '''1. Simmeringer SC '''
|Kapfenberger SV
|2-0
|-
| 8 October 1955
|ESV Austria Graz
| '''SV Austria Salzburg'''
|0-2
|-
| 8 October 1955
| '''SK Rapid Wien '''
|FC Stadlau
|4-0
|-
| 9 October 1955
|SK Admira Wien
| '''FK Austria Wien'''
|0-2
|-
| 9 October 1955
| FC Wien
|'''SK Sturm Graz'''
|0-1
|-
| 9 October 1955
| Grazer AK
|First Vienna FC
|3-3
|-
| 9 October 1955
| Wiener Sport-Club
|'''SC Wacker Wien'''
|0-3
|}
===Round 8===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 22 October 1955
|FC Stadlau
| Grazer AK
|2-2
|-
| 22 October 1955
|FC Wien
|'''SK Admira Wien'''
|0-3
|-
| 23 October 1955
|'''SV Austria Salzburg'''
|1. Simmeringer SC
|2-0
|-
| 23 October 1955
|FK Austria Wien
| '''SK Rapid Wien '''
|1-3
|-
| 23 October 1955
| Kapfenberger SV
|Wiener Sport-Club
|1-1
|-
| 23 October 1955
| SK Sturm Graz
|'''SC Wacker Wien'''
|0-1
|-
| 23 October 1955
| '''First Vienna FC '''
|ESV Austria Graz
|9-2
|}
===Round 9===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 5 November 1955
|ESV Austria Graz
|'''FC Stadlau '''
|1-2
|-
| 5 November 1955
|'''SC Wacker Wien'''
|Kapfenberger SV
|6-0
|-
| 6 November 1955
| '''1. Simmeringer SC '''
|First Vienna FC
|3-2
|-
| 6 November 1955
|'''SK Admira Wien'''
|SK Sturm Graz
|1-0
|-
| 6 November 1955
| Grazer AK
|'''FK Austria Wien'''
|1-4
|-
| 6 November 1955
| '''SK Rapid Wien '''
|FC Wien
|2-1
|-
| 6 November 1955
| Wiener Sport-Club
|SV Austria Salzburg
|3-3
|}
===Round 10===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 12 November 1955
|FC Wien
| '''Grazer AK '''
|1-4
|-
| 13 November 1955
|SK Admira Wien
| '''SK Rapid Wien '''
|3-5
|-
| 13 November 1955
|SV Austria Salzburg
|'''SC Wacker Wien'''
|0-1
|-
| 13 November 1955
|'''FK Austria Wien'''
|ESV Austria Graz
|9-1
|-
| 13 November 1955
| FC Stadlau
|'''1. Simmeringer SC '''
|2-4
|-
| 13 November 1955
|SK Sturm Graz
| Kapfenberger SV
|3-3
|-
| 13 November 1955
| '''First Vienna FC '''
|Wiener Sport-Club
|2-0
|}
===Round 11===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 26 November 1955
|1. Simmeringer SC
|FK Austria Wien
|0-0
|-
| 26 November 1955
|'''ESV Austria Graz '''
|FC Wien
|2-1
|-
| 26 November 1955
|'''SK Rapid Wien '''
|SK Sturm Graz
|7-1
|-
| 27 November 1955
|'''Grazer AK '''
|SK Admira Wien
|4-1
|-
| 27 November 1955
|'''Kapfenberger SV '''
|SV Austria Salzburg
|5-0
|-
| 27 November 1955
|'''SC Wacker Wien'''
| First Vienna FC
|3-1
|-
| 27 November 1955
| '''Wiener Sport-Club '''
|FC Stadlau
|1-0
|}
===Round 12===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 3 December 1955
|'''SK Admira Wien'''
|ESV Austria Graz
|5-1
|-
| 3 December 1955
|FC Wien
|'''1. Simmeringer SC '''
|1-6
|-
| 4 December 1955
| '''FK Austria Wien '''
|Wiener Sport-Club
|6-2
|-
| 4 December 1955
|FC Stadlau
|'''SC Wacker Wien'''
|2-3
|-
| 4 December 1955
|'''SK Rapid Wien '''
|Grazer AK
|5-1
|-
| 4 December 1955
|SK Sturm Graz
|SV Austria Salzburg
|4-4
|-
| 4 December 1955
| '''First Vienna FC '''
|Kapfenberger SV
|5-1
|}
===Round 13===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 10 December 1955
|'''1. Simmeringer SC '''
|SK Admira Wien
|2-1
|-
| 10 December 1955
|ESV Austria Graz
|'''SK Rapid Wien '''
|0-1
|-
| 10 December 1955
|'''Wiener Sport-Club '''
|FC Wien
|3-1
|-
| 11 December 1955
|'''SV Austria Salzburg '''
|First Vienna FC
|6-4
|-
| 11 December 1955
| '''Grazer AK '''
|SK Sturm Graz
|2-0
|-
| 11 December 1955
|Kapfenberger SV
|'''FC Stadlau '''
|0-1
|-
| 11 December 1955
| '''SC Wacker Wien'''
|FK Austria Wien
|3-1
|}
===Round 14===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 25 February 1956
|ESV Austria Graz
|'''Grazer AK '''
|0-2
|-
| 26 February 1956
|SV Austria Salzburg
|FC Stadlau
|2-2
|-
|6 March 1956
| '''SC Wacker Wien'''
| FC Wien
|8-1
|-
| 7 March 1956
|1. Simmeringer SC
|'''SK Rapid Wien '''
|1-4
|-
| 7 March 1956
| Kapfenberger SV
|'''FK Austria Wien '''
|2-3
|-
| 7 March 1956
|'''Wiener Sport-Club '''
|SK Admira Wien
|3-2
|-
| 17 May 1956
| SK Sturm Graz
|First Vienna FC
|2-2
|}
===Round 15===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 4 March 1956
|ESV Austria Graz
| '''SK Sturm Graz '''
|0-5
|-
| 4 March 1956
|FC Stadlau
|First Vienna FC
|3-3
|-
|25 March 1956
|'''FC Wien '''
| Kapfenberger SV
|2-1
|-
| 12 April 1956
|Grazer AK
|1. Simmeringer SC
|0-0 <ref>1st floodlit game of the Staatsliga A. </ref>
|-
| 18 April 1956
| SK Admira Wien
|'''SC Wacker Wien'''
|2-7
|-
| 18 April 1956
|'''FK Austria Wien '''
| SV Austria Salzburg
|4-2
|-
| 18 April 1956
| '''SK Rapid Wien '''
|Wiener Sport-Club
|6-0
|}
===Round 16===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 10 March 1956
|'''1. Simmeringer SC '''
|ESV Austria Graz
|7-1
|-
| 10 March 1956
|'''Wiener Sport-Club '''
|Grazer AK
|3-1
|-
|11 March 1956
|'''SV Austria Salzburg'''
|FC Wien
|3-0
|-
| 11 March 1956
|''' Kapfenberger SV '''
|SK Admira Wien
|4-3
|-
| 11 March 1956
| SK Rapid Wien
|'''SC Wacker Wien'''
|0-2
|-
| 11 March 1956
| SK Sturm Graz
| '''FC Stadlau'''
|0-2
|-
| 11 March 1956
| '''First Vienna FC'''
|FK Austria Wien
|6-0
|}
===Round 17===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 17 March 1956
|'''1. Simmeringer SC '''
|SK Sturm Graz
|8-3
|-
| 18 March 1956
|''' ESV Austria Graz '''
|Wiener Sport-Club
|2-1
|-
| 18 March 1956
|'''SK Admira Wien '''
|SV Austria Salzburg
|4-2
|-
| 18 March 1956
| '''FK Austria Wien '''
|FC Stadlau
|6-2
|-
| 18 March 1956
|FC Wien
|'''First Vienna FC'''
|2-3
|-
| 18 March 1956
| Grazer AK
| '''SC Wacker Wien'''
|0-7
|-
| 18 March 1956
| '''SK Rapid Wien '''
|Kapfenberger SV
|6-0
|}
===Round 18===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 7 April 1956
|''' Wiener Sport-Club '''
|1. Simmeringer SC
|5-1
|-
| 8 April 1956
|SK Admira Wien
|'''First Vienna FC'''
|1-2
|-
| 8 April 1956
|SV Austria Salzburg
|'''SK Rapid Wien '''
|0-4
|-
| 8 April 1956
|FC Stadlau
|'''FC Wien '''
|0-1
|-
| 8 April 1956
| Kapfenberger SV
| '''Grazer AK '''
|1-2
|-
| 8 April 1956
| '''SK Sturm Graz '''
|FK Austria Wien
|2-1
|-
| 8 April 1956
| '''SC Wacker Wien'''
|ESV Austria Graz
|3-0
|}
===Round 19===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 21 April 1956
|1. Simmeringer SC
|SC Wacker Wien
|1-1
|-
| 21 April 1956
|'''ESV Austria Graz '''
|Kapfenberger SV
|2-1
|-
| 21 April 1956
|'''FC Wien '''
|FK Austria Wien
|3-0
|-
| 22 April 1956
|'''SK Admira Wien'''
|FC Stadlau
|2-0
|-
| 22 April 1956
| '''Grazer AK '''
| SV Austria Salzburg
|4-3
|-
| 22 April 1956
|SK Rapid Wien
| '''First Vienna FC'''
|1-5
|-
| 22 April 1956
| Wiener Sport-Club
|'''SK Sturm Graz '''
|1-2
|}
===Round 20===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 5 May 1956
|'''SC Wacker Wien'''
|Wiener Sport-Club
|3-0
|-
| 6 May 1956
|''' SV Austria Salzburg '''
|ESV Austria Graz
|3-2
|-
| 6 May 1956
| '''FK Austria Wien '''
|SK Admira Wien
|4-3
|-
| 6 May 1956
|FC Stadlau
|'''SK Rapid Wien '''
|1-2
|-
| 6 May 1956
|Kapfenberger SV
| '''1. Simmeringer SC '''
|2-5
|-
| 6 May 1956
|SK Sturm Graz
|FC Wien
|1-1
|-
| 6 May 1956
| '''First Vienna FC'''
|Grazer AK
|6-1
|}
===Round 21===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 10 May 1956
|1. Simmeringer SC
|SV Austria Salzburg
|2-2
|-
| 10 May 1956
|''' SK Admira Wien '''
|FC Wien
|7-1
|-
| 10 May 1956
| ESV Austria Graz
| '''First Vienna FC'''
|0-4
|-
| 10 May 1956
|'''Grazer AK '''
|FC Stadlau
|6-1
|-
| 10 May 1956
|'''SK Rapid Wien '''
| FK Austria Wien
|5-3
|-
| 10 May 1956
|'''SC Wacker Wien'''
| SK Sturm Graz
|4-2
|-
| 10 May 1956
|'''Wiener Sport-Club '''
|Kapfenberger SV
|1-0
|}
===Round 22===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 12 May 1956
|FC Wien
|SK Rapid Wien
|2-2
|-
| 13 May 1956
|SV Austria Salzburg
|'''Wiener Sport-Club '''
|1-2
|-
| 13 May 1956
|'''FK Austria Wien '''
|Grazer AK
|4-3
|-
| 13 May 1956
|FC Stadlau
|'''ESV Austria Graz '''
|0-1
|-
| 13 May 1956
|'''Kapfenberger SV '''
| SC Wacker Wien
|2-1
|-
| 13 May 1956
|SK Sturm Graz
| SK Admira Wien
|2-2
|-
| 13 May 1956
|'''First Vienna FC'''
|1. Simmeringer SC
|1-0
|}
===Round 23===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 26 May 1956
|'''1. Simmeringer SC'''
|FC Stadlau
|5-3
|-
| 26 May 1956
|'''SC Wacker Wien'''
|SV Austria Salzburg
|4-1
|-
| 26 May 1956
|Wiener Sport-Club
|'''First Vienna FC'''
|0-1
|-
| 27 May 1956
| ESV Austria Graz
|'''FK Austria Wien '''
|1-3
|-
| 27 May 1956
|'''Grazer AK '''
| FC Wien
|5-1
|-
| 27 May 1956
|Kapfenberger SV
|'''SK Sturm Graz '''
|2-3
|-
| 27 May 1956
|'''SK Rapid Wien '''
|SK Admira Wien
|4-0
|}
===Round 24===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 31 May 1956
|SK Admira Wien
|Grazer AK
|2-2
|-
| 31 May 1956
| '''SV Austria Salzburg '''
|Kapfenberger SV
|2-1
|-
| 31 May 1956
|'''FK Austria Wien '''
|1. Simmeringer SC
|6-1
|-
| 31 May 1956
|FC Stadlau
|'''Wiener Sport-Club'''
|0-5
|-
| 31 May 1956
|FC Wien
| ESV Austria Graz
|0-0
|-
| 31 May 1956
|SK Sturm Graz
|'''SK Rapid Wien '''
|2-3
|-
| 31 May 1956
|'''First Vienna FC'''
|SC Wacker Wien
|3-2
|}
===Round 25===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 2 June 1956
|Wiener Sport-Club
|FK Austria Wien
|2-2
|-
| 3 June 1956
|1. Simmeringer SC
|FC Wien
|1-1
|-
| 3 June 1956
|SV Austria Salzburg
|SK Sturm Graz
|1-1
|-
| 3 June 1956
|''' ESV Austria Graz '''
|SK Admira Wien
|4-2
|-
| 3 June 1956
|Grazer AK
|'''SK Rapid Wien '''
|1-6
|-
| 3 June 1956
|'''Kapfenberger SV '''
|First Vienna FC
|2-1
|-
| 3 June 1956
|'''SC Wacker Wien'''
|FC Stadlau
|6-2
|}
===Round 26===
{| class="wikitable"
|-
!Date
! Team 1
!Team2
!
|-
| 21 May 1956
|SK Admira Wien
|1. Simmeringer SC
|1-1
|-
| 9 June 1956
|'''SK Rapid Wien '''
| ESV Austria Graz
|7-0
|-
| 10 June 1956
|'''FK Austria Wien '''
|SC Wacker Wien
|3-1
|-
| 10 June 1956
|''' FC Stadlau '''
| Kapfenberger SV
|8-2
|-
| 10 June 1956
|'''FC Wien '''
| Wiener Sport-Club
|3-1
|-
| 10 June 1956
|SK Sturm Graz
|'''Grazer AK '''
|1-5
|-
| 10 June 1956
|'''First Vienna FC'''
| SV Austria Salzburg
|6-1
|}
== Champion squad ==
{| class="wikitable" style="text-align:left; background:#E8E8E8; width:90%;"
|-
| style="text-align:center; background:#00794c" | <span style="color:#FFFFFF;">'''SK Rapid Wien'''</span>
|-
|
* '''Goalkeepersː'''[[Herbert Gartner]], [[Walter Zeman]], [[Dieter Pflug]]
* '''Defendersː''' [[Paul Halla]], [[Robert Kaffka]], [[Franz Golobic]], [[Lothar Bilek]]
* '''Midfieldersː''' [[Josef Höltl]], [[Lambert Lenzinger]], [[Gerhard Hanappi]], [[Karl Giesser]]
* '''Forwardsː''' [[Robert Dienst]], [[Johann Riegler]], [[Alfred Körner]], [[Josef Bertalan]], [[Erich Probst]], [[Bruno Mehsarosch]], [[Robert Körner]], [[Milan Nikolić]]
* '''Coach:''' [[Franz Wagner]]
|}
<ref name="ref1"/>
==Top scorer==
{| class="wikitable"
|-
! Name
! Club
! Goals
|-
|[[Hans Buzek]]
|First Vienna FC
|32
|-
| [[Richard Brousek]]
|SC Wacker Wien
|27
|-
| [[Gerhard Hanappi]]
|SK Rapid Wien
|25
|}
<ref name="ref1"/>
{{Austrian Bundesliga seasons}}
== References ==
{{reflist}}
{{DEFAULTSORT:1955-56 Austrian football championship}}
[[Category:Football in Austria]]
[[Category:Football seasons]]
[[Category:1955 in Europe]]
[[Category:1955–56 in association football]]
5gbjy6kvvfn0k3jzgc6usmm6gf6u5wf
User:Plantaest/sandbox
2
174741
759889
759807
2026-09-01T19:38:50Z
Plantaest
37055
759889
wikitext
text/x-wiki
Nâng cấp Citron là dự án nhằm cải thiện [[Thành viên:Plantaest/Citron|Citron]], một công cụ đã được sử dụng tại Wikipedia tiếng Việt để phát hiện các tên miền bên ngoài có khả năng liên quan đến spam, quảng cáo hoặc những hình thức liên kết không phù hợp khác.
Đây là bản mô tả định hướng của dự án, tập trung vào những vấn đề cần giải quyết và những thay đổi chính dự kiến thực hiện. Các chi tiết kỹ thuật cụ thể sẽ được xác định trong quá trình phát triển và thử nghiệm.
== Bối cảnh ==
Citron hiện theo dõi các sửa đổi mới trên Wikipedia tiếng Việt, phát hiện những tên miền bên ngoài vừa được thêm vào, sử dụng một mô hình máy học để ước tính mức độ đáng chú ý và tạo báo cáo để tuần tra viên, bảo quản viên kiểm tra. Người dùng sau đó có thể đánh giá tên miền là nên bỏ qua, nên xem xét chặn hoặc chưa thể kết luận.
Cách làm này đã hỗ trợ phát hiện nhiều trường hợp spam trong gần hai năm vận hành, nhưng phần việc khó nhất vẫn chủ yếu do con người thực hiện. Điểm số của Citron chỉ là một chỉ dấu ban đầu: có lúc hệ thống nhận diện đúng những website đáng ngờ, nhưng cũng có những website bình thường bị đánh giá cao hoặc những trường hợp xấu không được xếp vào nhóm nổi bật. Đặc biệt, mô hình hiện tại chủ yếu dựa vào một số thông tin về tên miền mà chưa thực sự đọc nội dung website. Vì vậy, để đánh giá một trường hợp, người dùng thường vẫn phải tự mở website, xác định đó là trang gì, xem nội dung có mang tính quảng cáo, tự xuất bản hoặc spam hay không, rồi kiểm tra liên kết được thêm vào bài nào và trong hoàn cảnh nào.
Khối lượng công việc này trở nên đáng kể khi một báo cáo có hàng chục hoặc hàng trăm tên miền. Những tên miền được Citron đánh giá là có khả năng xấu cao thường được chú ý trước, trong khi nhóm chưa chắc chắn có thể rất lớn và dễ bị bỏ qua, dù đôi khi vẫn chứa những trường hợp cần xử lý.
Cách tổ chức báo cáo hiện tại cũng tạo ra một số bất tiện. Citron tạo báo cáo theo từng ngày nên dữ liệu dần bị chia thành nhiều báo cáo nhỏ; cùng một tên miền có thể xuất hiện qua nhiều ngày; báo cáo cũ khó được quay lại xử lý; và khi muốn điều tra lịch sử của một tên miền, bài viết hoặc tài khoản, người dùng phải lần lại nhiều dữ liệu khác nhau. Việc Citron liên tục đăng những báo cáo tương đối lớn tại [[Wikipedia:Tin nhắn cho bảo quản viên]] cũng khiến khu vực này trở nên chật và mang nhiều tính thông báo tự động.
Các góp ý của người sử dụng Citron thời gian qua còn cho thấy một nhu cầu khác: người đánh giá không chỉ cần nút “nên bỏ qua” hay “nên chặn”, mà còn cần biết '''vì sao''' một người khác đưa ra đánh giá đó, có thể xử lý lại các báo cáo cũ, tìm nhanh những trường hợp đã được đánh dấu và giảm bớt các bước thủ công khi một bảo quản viên quyết định thực hiện việc chặn.
== Mục tiêu ==
Mục tiêu chính của đợt nâng cấp là làm cho Citron trở thành một công cụ '''chuẩn bị thông tin cho con người''', thay vì chủ yếu đưa ra một danh sách tên miền cùng điểm số rồi để người sử dụng tự điều tra từ đầu.
Citron mới được kỳ vọng có thể tự thu thập và phân tích trước những thông tin cần thiết về website, cho biết vì sao một trường hợp đáng chú ý, tập hợp những tên miền còn cần đánh giá thay vì buộc người dùng phải lần theo từng báo cáo ngày, đồng thời cho phép tra cứu thuận tiện dữ liệu Citron đã thu thập trong quá khứ. Phần lớn các trường hợp thông thường vì thế có thể được xem xét nhanh hơn, để thời gian của tuần tra viên và bảo quản viên được dành cho những trường hợp thực sự cần phán đoán.
Citron vẫn chỉ là công cụ hỗ trợ. Điểm số máy học, phân tích bằng AI hay bất kỳ tín hiệu tự động nào đều không được xem là kết luận cuối cùng. Việc đánh giá một tên miền và quyết định thực hiện hành động quản trị vẫn thuộc về con người và các quy trình của cộng đồng Wikipedia.
== Những thay đổi dự kiến ==
'''Cải thiện khả năng phân tích tên miền.''' Mô hình máy học hiện tại sẽ được cập nhật bằng dữ liệu mới và được đánh giá lại dựa trên những trường hợp Citron thực sự gặp trong quá trình vận hành. Thay vì chỉ dựa vào điểm số này, Citron dự kiến bổ sung một lớp phân tích nội dung bằng mô hình ngôn ngữ (LLM). Hệ thống có thể đọc một lượng nội dung phù hợp từ website và xem xét ngữ cảnh liên kết trên Wikipedia để nhận diện những đặc điểm như website thương mại, quảng cáo, nội dung tự xuất bản, SEO, báo chí, tổ chức chính thức hoặc những dấu hiệu bất thường khác. Kết quả này sẽ được trình bày dưới dạng nhận định và lý do ngắn gọn để người dùng kiểm chứng, chứ không được dùng để tự động chặn tên miền.
Việc phân tích nội dung cũng nhằm khắc phục một hạn chế của cách xếp hạng hiện tại: một tên miền không nên bị bỏ qua chỉ vì điểm máy học thấp. Citron cần có khả năng tìm ra những trường hợp đáng chú ý ngay cả trong nhóm trước đây được xem là “chưa chắc chắn”.
'''Làm lại giao diện đánh giá Citron.''' Giao diện hỗ trợ đánh giá sẽ được thiết kế lại để tập trung các thông tin cần thiết vào một nơi: điểm đánh giá hiện có, phân tích nội dung, các lần xuất hiện của tên miền, bài viết và sửa đổi liên quan, cũng như những đánh giá trước đó của cộng đồng. Người dùng vẫn có thể mở website hoặc bản sửa đổi để kiểm tra sâu hơn khi cần, nhưng không nên phải làm việc đó cho mọi tên miền chỉ để biết trường hợp đang nói đến là gì.
Bên cạnh việc xem báo cáo hiện tại, giao diện mới dự kiến cho phép xem '''những tên miền còn cần đánh giá xuyên qua nhiều báo cáo'''. Nhờ đó, một báo cáo cũ không bị mất giá trị chỉ vì đã qua ngày; những trường hợp chưa được xử lý có thể tiếp tục được xem xét về sau, còn các tên miền đã được đánh giá phù hợp có thể được hạ ưu tiên hoặc loại khỏi luồng chính. Giao diện cũng có thể ghi nhớ những trường hợp một người đã xem để hạn chế việc phải kiểm tra đi kiểm tra lại cùng một nội dung.
'''Bổ sung lý do cho đánh giá của người dùng.''' Khi lựa chọn “nên bỏ qua”, “nên chặn” hoặc một đánh giá tương tự, người dùng có thể chọn thêm một hoặc một số lý do ngắn được chuẩn hóa, chẳng hạn quảng cáo, website tự xuất bản, nguồn chính thức, trang thông tin điện tử hoặc các nhóm phù hợp khác. Những lý do này sẽ được hiển thị cho những người đánh giá sau, giúp họ hiểu một nhận định được đưa ra trên cơ sở nào.
Các trao đổi dài hơn hoặc trường hợp có tranh luận không nhất thiết phải được lưu trong cơ sở dữ liệu riêng của Citron. Wikipedia vẫn có thể cung cấp không gian thảo luận như hiện nay để thành viên giải thích thêm hoặc trao đổi khi cần.
'''Rút ngắn quy trình xử lý.''' Giao diện sẽ có thêm các bộ lọc cần thiết, chẳng hạn chỉ xem những tên miền đã được thành viên đánh dấu hoặc những trường hợp vẫn còn cần xử lý. Đối với bảo quản viên, khi đã xác định một tên miền cần chặn, Citron cũng có thể cung cấp đường dẫn hoặc thao tác trực tiếp thuận tiện hơn tới hệ thống [[Đặc biệt:CommunityConfiguration/BlockedDomain|BlockedExternalDomains]], thay vì để các bước đánh giá và thực thi hoàn toàn tách rời như hiện nay. Quyết định chặn vẫn do bảo quản viên thực hiện.
'''Cải tổ cách trình bày báo cáo.''' Đợt nâng cấp sẽ xem xét giảm sự phụ thuộc vào việc đăng một báo cáo lớn riêng biệt mỗi ngày tại Tin nhắn cho bảo quản viên. Một hướng tương đối an toàn là chỉ để một thông báo Citron nhỏ gọn tại đây và mở giao diện đánh giá khi người dùng cần; về lâu dài, các báo cáo có thể được tập hợp trong một giao diện thống nhất hơn thay vì nằm rải rác theo từng ngày.
Cách trình bày cuối cùng sẽ được thử nghiệm và lấy thêm ý kiến cộng đồng. Việc thay đổi này không nhằm loại bỏ không gian thảo luận hiện có hoặc chuyển hoạt động quản trị ra khỏi Wikipedia, mà chủ yếu nhằm giảm sự lặp lại và giúp việc quay lại xem dữ liệu cũ thuận tiện hơn.
'''Xây dựng Citron Console.''' Một giao diện tra cứu riêng tại Toolforge dự kiến được xây dựng để tận dụng tốt hơn dữ liệu lịch sử mà Citron đã thu thập. Người dùng có thể tìm một tên miền để xem nó từng xuất hiện khi nào, trong những bài nào, do những tài khoản nào thêm vào và trước đây đã được Citron hoặc cộng đồng đánh giá ra sao. Tương tự, có thể tra cứu theo bài viết, bản sửa đổi hoặc người sửa đổi để hỗ trợ việc điều tra những chuỗi hành vi đáng ngờ.
Citron Console chủ yếu là công cụ tìm kiếm và tra cứu. Nó không thay thế Wikipedia, không phải nơi đưa ra quyết định quản trị và không nhằm trở thành một hệ thống quản trị Wikipedia riêng biệt.
Ngoài các thay đổi trực tiếp đối với người dùng, dự án cũng sẽ chuẩn hóa lại một số phần đã tích tụ trong quá trình phát triển: thống nhất tên gọi từ “Citron/Spam” thành “Citron”, cập nhật tài liệu, làm rõ thuật ngữ và cải thiện cấu trúc phần mềm để Citron dễ bảo trì hơn. Hệ thống có thể được chuẩn bị cho khả năng sử dụng tại những dự án Wikimedia khác trong tương lai, nhưng đợt nâng cấp này trước hết vẫn tập trung vào nhu cầu của Wikipedia tiếng Việt.
Nếu tóm tắt trong một câu, hướng thay đổi mong muốn là:
:''Citron hiện nay phát hiện tên miền và cung cấp điểm số để con người tự kiểm tra; Citron sau khi nâng cấp sẽ cố gắng thu thập và phân tích trước thông tin cần thiết, chỉ ra những trường hợp đáng chú ý và giải thích lý do, để con người tập trung vào việc kiểm chứng và đưa ra quyết định cuối cùng.''
ew93y0im4ojelk0s0en9phwxczvlax1
759890
759889
2026-09-01T19:49:29Z
Plantaest
37055
759890
wikitext
text/x-wiki
'''Nâng cấp Citron''' là dự án nhằm cải thiện [[Thành viên:Plantaest/Citron|Citron]], một công cụ đã được sử dụng tại Wikipedia tiếng Việt khoảng 2 năm nay để phát hiện các tên miền bên ngoài có khả năng liên quan đến spam, quảng cáo hoặc những hình thức liên kết không phù hợp khác.
Đây là bản mô tả định hướng của dự án, tập trung vào những vấn đề cần giải quyết và những thay đổi chính dự kiến thực hiện. Các chi tiết kỹ thuật cụ thể sẽ được xác định trong quá trình phát triển và thử nghiệm.
== Bối cảnh ==
Citron hiện theo dõi các sửa đổi mới trên Wikipedia tiếng Việt, phát hiện những tên miền bên ngoài vừa được thêm vào, sử dụng một mô hình máy học để ước tính mức độ đáng chú ý và tạo báo cáo để tuần tra viên, bảo quản viên kiểm tra. Người dùng sau đó có thể đánh giá tên miền là nên bỏ qua, nên xem xét chặn hoặc chưa thể kết luận.
Cách làm này đã hỗ trợ phát hiện nhiều trường hợp spam trong gần hai năm vận hành, nhưng phần việc khó nhất vẫn chủ yếu do con người thực hiện. Điểm số của Citron chỉ là một chỉ dấu ban đầu: có lúc hệ thống nhận diện đúng những website đáng ngờ, nhưng cũng có những website bình thường bị đánh giá cao hoặc những trường hợp xấu không được xếp vào nhóm nổi bật. Đặc biệt, mô hình hiện tại chủ yếu dựa vào một số thông tin về tên miền mà chưa thực sự đọc nội dung website. Vì vậy, để đánh giá một trường hợp, người dùng thường vẫn phải tự mở website, xác định đó là trang gì, xem nội dung có mang tính quảng cáo, tự xuất bản hoặc spam hay không, rồi kiểm tra liên kết được thêm vào bài nào và trong hoàn cảnh nào.
Khối lượng công việc này trở nên đáng kể khi một báo cáo có hàng chục hoặc hàng trăm tên miền. Những tên miền được Citron đánh giá là có khả năng xấu cao thường được chú ý trước, trong khi nhóm chưa chắc chắn có thể rất lớn và dễ bị bỏ qua, dù đôi khi vẫn chứa những trường hợp cần xử lý.
Cách tổ chức báo cáo hiện tại cũng tạo ra một số bất tiện. Citron tạo báo cáo theo từng ngày nên dữ liệu dần bị chia thành nhiều báo cáo nhỏ; cùng một tên miền có thể xuất hiện qua nhiều ngày; báo cáo cũ khó được quay lại xử lý; và khi muốn điều tra lịch sử của một tên miền, bài viết hoặc tài khoản, người dùng phải lần lại nhiều dữ liệu khác nhau. Việc Citron liên tục đăng những báo cáo tương đối lớn tại [[Wikipedia:Tin nhắn cho bảo quản viên]] cũng khiến khu vực này trở nên chật và mang nhiều tính thông báo tự động.
Các góp ý của người sử dụng Citron thời gian qua còn cho thấy một nhu cầu khác: người đánh giá không chỉ cần nút "nên bỏ qua" hay "nên chặn", mà còn cần biết '''vì sao''' một người khác đưa ra đánh giá đó, có thể xử lý lại các báo cáo cũ, tìm nhanh những trường hợp đã được đánh dấu và giảm bớt các bước thủ công khi một bảo quản viên quyết định thực hiện việc chặn.
== Mục tiêu ==
Mục tiêu chính của đợt nâng cấp là làm cho Citron trở thành một công cụ '''chuẩn bị thông tin cho con người''', thay vì chủ yếu đưa ra một danh sách tên miền cùng điểm số rồi để người sử dụng tự điều tra từ đầu.
Citron phiên bản mới được kỳ vọng có thể tự thu thập và phân tích trước những thông tin cần thiết về website, cho biết vì sao một trường hợp đáng chú ý, tập hợp những tên miền còn cần đánh giá thay vì buộc người dùng phải lần theo từng báo cáo ngày, đồng thời cho phép tra cứu thuận tiện dữ liệu Citron đã thu thập trong quá khứ. Phần lớn các trường hợp thông thường vì thế có thể được xem xét nhanh hơn, để thời gian của tuần tra viên và bảo quản viên được dành cho những trường hợp thực sự cần phán đoán.
Citron vẫn chỉ là công cụ hỗ trợ. Điểm số máy học, phân tích bằng AI hay bất kỳ tín hiệu tự động nào đều không được xem là kết luận cuối cùng. Việc đánh giá một tên miền và quyết định thực hiện hành động quản trị vẫn thuộc về con người và các quy trình của cộng đồng Wikipedia.
== Những thay đổi dự kiến ==
=== '''Cải thiện khả năng phân tích tên miền''' ===
Mô hình máy học hiện tại sẽ được cập nhật bằng dữ liệu mới và được đánh giá lại dựa trên những trường hợp Citron thực sự gặp trong quá trình vận hành. Thay vì chỉ dựa vào điểm số này, Citron dự kiến bổ sung một lớp phân tích nội dung bằng mô hình ngôn ngữ (LLM). Hệ thống có thể đọc một lượng nội dung phù hợp từ website và xem xét ngữ cảnh liên kết trên Wikipedia để nhận diện những đặc điểm như website thương mại, quảng cáo, nội dung tự xuất bản, SEO, báo chí, tổ chức chính thức hoặc những dấu hiệu bất thường khác. Kết quả này sẽ được trình bày dưới dạng nhận định và lý do ngắn gọn để người dùng kiểm chứng, chứ không được dùng để tự động chặn tên miền.
Việc phân tích nội dung cũng nhằm khắc phục một hạn chế của cách xếp hạng hiện tại: một tên miền không nên bị bỏ qua chỉ vì điểm máy học thấp. Citron cần có khả năng tìm ra những trường hợp đáng chú ý ngay cả trong nhóm trước đây được xem là "chưa chắc chắn".
=== '''Làm lại giao diện đánh giá Citron''' ===
Giao diện hỗ trợ đánh giá sẽ được thiết kế lại để tập trung các thông tin cần thiết vào một nơi: điểm đánh giá hiện có, phân tích nội dung, các lần xuất hiện của tên miền, bài viết và sửa đổi liên quan, cũng như những đánh giá trước đó của cộng đồng. Người dùng vẫn có thể mở website hoặc bản sửa đổi để kiểm tra sâu hơn khi cần, nhưng không nên phải làm việc đó cho mọi tên miền chỉ để biết trường hợp đang nói đến là gì.
Bên cạnh việc xem báo cáo hiện tại, giao diện mới dự kiến cho phép xem '''những tên miền còn cần đánh giá xuyên qua nhiều báo cáo'''. Nhờ đó, một báo cáo cũ không bị mất giá trị chỉ vì đã qua ngày; những trường hợp chưa được xử lý có thể tiếp tục được xem xét về sau, còn các tên miền đã được đánh giá phù hợp có thể được hạ ưu tiên hoặc loại khỏi luồng chính. Giao diện cũng có thể ghi nhớ những trường hợp một người đã xem để hạn chế việc phải kiểm tra đi kiểm tra lại cùng một nội dung.
=== '''Bổ sung lý do cho đánh giá của người dùng''' ===
Khi lựa chọn "nên bỏ qua", "nên chặn" hoặc một đánh giá tương tự, người dùng có thể chọn thêm một hoặc một số lý do ngắn được chuẩn hóa, chẳng hạn quảng cáo, website tự xuất bản, nguồn chính thức, trang thông tin điện tử hoặc các nhóm phù hợp khác. Những lý do này sẽ được hiển thị cho những người đánh giá sau, giúp họ hiểu một nhận định được đưa ra trên cơ sở nào. Các trao đổi dài hơn hoặc trường hợp có tranh luận không nhất thiết phải được lưu trong cơ sở dữ liệu riêng của Citron. Wikipedia vẫn có thể cung cấp không gian thảo luận như hiện nay để thành viên giải thích thêm hoặc trao đổi khi cần.
=== '''Rút ngắn quy trình xử lý''' ===
Giao diện sẽ có thêm các bộ lọc cần thiết, chẳng hạn chỉ xem những tên miền đã được thành viên đánh dấu hoặc những trường hợp vẫn còn cần xử lý. Đối với bảo quản viên, khi đã xác định một tên miền cần chặn, Citron cũng có thể cung cấp đường dẫn hoặc thao tác trực tiếp thuận tiện hơn tới hệ thống [[mw:Help:BlockedExternalDomains|BlockedExternalDomains]], thay vì để các bước đánh giá và thực thi hoàn toàn tách rời như hiện nay. Quyết định chặn vẫn do bảo quản viên thực hiện.
=== '''Cải tổ cách trình bày báo cáo''' ===
Đợt nâng cấp sẽ xem xét giảm sự phụ thuộc vào việc đăng một báo cáo lớn riêng biệt mỗi ngày tại Tin nhắn cho bảo quản viên. Một hướng tương đối an toàn là chỉ để một thông báo Citron nhỏ gọn tại đây và mở giao diện đánh giá khi người dùng cần; về lâu dài, các báo cáo có thể được tập hợp trong một giao diện thống nhất hơn thay vì nằm rải rác theo từng ngày. Cách trình bày cuối cùng sẽ được thử nghiệm và lấy thêm ý kiến cộng đồng. Việc thay đổi này không nhằm loại bỏ không gian thảo luận hiện có hoặc chuyển hoạt động quản trị ra khỏi Wikipedia, mà chủ yếu nhằm giảm sự lặp lại và giúp việc quay lại xem dữ liệu cũ thuận tiện hơn.
=== '''Xây dựng Citron Console''' ===
Một giao diện tra cứu riêng tại Toolforge dự kiến được xây dựng để tận dụng tốt hơn dữ liệu lịch sử mà Citron đã thu thập. Người dùng có thể tìm một tên miền để xem nó từng xuất hiện khi nào, trong những bài nào, do những tài khoản nào thêm vào và trước đây đã được Citron hoặc cộng đồng đánh giá ra sao. Tương tự, có thể tra cứu theo bài viết, bản sửa đổi hoặc người sửa đổi để hỗ trợ việc điều tra những chuỗi hành vi đáng ngờ.
Citron Console chủ yếu là công cụ tìm kiếm và tra cứu. Nó không thay thế Wikipedia, không phải nơi đưa ra quyết định quản trị và không nhằm trở thành một hệ thống quản trị Wikipedia riêng biệt.
Ngoài các thay đổi trực tiếp đối với người dùng, dự án cũng sẽ chuẩn hóa lại một số phần đã tích tụ trong quá trình phát triển: thống nhất tên gọi từ "Citron/Spam" thành "Citron", cập nhật tài liệu, làm rõ thuật ngữ và cải thiện cấu trúc phần mềm để Citron dễ bảo trì hơn. Hệ thống có thể được chuẩn bị cho khả năng sử dụng tại những dự án Wikimedia khác trong tương lai, nhưng đợt nâng cấp này trước hết vẫn tập trung vào nhu cầu của Wikipedia tiếng Việt.
:
e12tlh81qb81lqk9gdetq5x3jlw2qwz
759891
759890
2026-09-01T19:51:39Z
Plantaest
37055
759891
wikitext
text/x-wiki
'''Nâng cấp Citron''' là dự án nhằm cải thiện [[Thành viên:Plantaest/Citron|Citron]], một công cụ đã được sử dụng tại Wikipedia tiếng Việt khoảng 2 năm nay để phát hiện các tên miền bên ngoài có khả năng liên quan đến spam, quảng cáo hoặc những hình thức liên kết không phù hợp khác.
Đây là bản mô tả định hướng của dự án, tập trung vào những vấn đề cần giải quyết và những thay đổi chính dự kiến thực hiện. Các chi tiết kỹ thuật cụ thể sẽ được xác định trong quá trình phát triển và thử nghiệm.
== Bối cảnh ==
Citron hiện theo dõi các sửa đổi mới trên Wikipedia tiếng Việt, phát hiện những tên miền bên ngoài vừa được thêm vào, sử dụng một mô hình máy học để ước tính mức độ đáng chú ý và tạo báo cáo để tuần tra viên, bảo quản viên kiểm tra. Người dùng sau đó có thể đánh giá tên miền là nên bỏ qua, nên xem xét chặn hoặc chưa thể kết luận.
Cách làm này đã hỗ trợ phát hiện nhiều trường hợp spam trong gần hai năm vận hành, nhưng phần việc khó nhất vẫn chủ yếu do con người thực hiện. Điểm số của Citron chỉ là một chỉ dấu ban đầu: có lúc hệ thống nhận diện đúng những website đáng ngờ, nhưng cũng có những website bình thường bị đánh giá cao hoặc những trường hợp xấu không được xếp vào nhóm nổi bật. Đặc biệt, mô hình hiện tại chủ yếu dựa vào một số thông tin về tên miền mà chưa thực sự đọc nội dung website. Vì vậy, để đánh giá một trường hợp, người dùng thường vẫn phải tự mở website, xác định đó là trang gì, xem nội dung có mang tính quảng cáo, tự xuất bản hoặc spam hay không, rồi kiểm tra liên kết được thêm vào bài nào và trong hoàn cảnh nào.
Khối lượng công việc này trở nên đáng kể khi một báo cáo có hàng chục hoặc hàng trăm tên miền. Những tên miền được Citron đánh giá là có khả năng xấu cao thường được chú ý trước, trong khi nhóm chưa chắc chắn có thể rất lớn và dễ bị bỏ qua, dù đôi khi vẫn chứa những trường hợp cần xử lý.
Cách tổ chức báo cáo hiện tại cũng tạo ra một số bất tiện. Citron tạo báo cáo theo từng ngày nên dữ liệu dần bị chia thành nhiều báo cáo nhỏ; cùng một tên miền có thể xuất hiện qua nhiều ngày; báo cáo cũ khó được quay lại xử lý; và khi muốn điều tra lịch sử của một tên miền, bài viết hoặc tài khoản, người dùng phải lần lại nhiều dữ liệu khác nhau. Việc Citron liên tục đăng những báo cáo tương đối lớn tại [[Wikipedia:Tin nhắn cho bảo quản viên]] cũng khiến khu vực này trở nên chật và mang nhiều tính thông báo tự động.
Các góp ý của người sử dụng Citron thời gian qua còn cho thấy một nhu cầu khác: người đánh giá không chỉ cần nút "nên bỏ qua" hay "nên chặn", mà còn cần biết '''vì sao''' một người khác đưa ra đánh giá đó, có thể xử lý lại các báo cáo cũ, tìm nhanh những trường hợp đã được đánh dấu và giảm bớt các bước thủ công khi một bảo quản viên quyết định thực hiện việc chặn.
== Mục tiêu ==
Mục tiêu chính của đợt nâng cấp là làm cho Citron trở thành một công cụ '''chuẩn bị thông tin cho con người''', thay vì chủ yếu đưa ra một danh sách tên miền cùng điểm số rồi để người sử dụng tự điều tra từ đầu.
Citron phiên bản mới được kỳ vọng có thể tự thu thập và phân tích trước những thông tin cần thiết về website, cho biết vì sao một trường hợp đáng chú ý, tập hợp những tên miền còn cần đánh giá thay vì buộc người dùng phải lần theo từng báo cáo ngày, đồng thời cho phép tra cứu thuận tiện dữ liệu Citron đã thu thập trong quá khứ. Phần lớn các trường hợp thông thường vì thế có thể được xem xét nhanh hơn, để thời gian của tuần tra viên và bảo quản viên được dành cho những trường hợp thực sự cần phán đoán.
Citron vẫn chỉ là công cụ hỗ trợ. Điểm số máy học, phân tích bằng AI hay bất kỳ tín hiệu tự động nào đều không được xem là kết luận cuối cùng. Việc đánh giá một tên miền và quyết định thực hiện hành động quản trị vẫn thuộc về con người và các quy trình của cộng đồng Wikipedia.
== Những thay đổi dự kiến ==
=== Cải thiện khả năng phân tích tên miền ===
Mô hình máy học hiện tại sẽ được cập nhật bằng dữ liệu mới và được đánh giá lại dựa trên những trường hợp Citron thực sự gặp trong quá trình vận hành. Thay vì chỉ dựa vào điểm số này, Citron dự kiến bổ sung một lớp phân tích nội dung bằng mô hình ngôn ngữ (LLM). Hệ thống có thể đọc một lượng nội dung phù hợp từ website và xem xét ngữ cảnh liên kết trên Wikipedia để nhận diện những đặc điểm như website thương mại, quảng cáo, nội dung tự xuất bản, SEO, báo chí, tổ chức chính thức hoặc những dấu hiệu bất thường khác. Kết quả này sẽ được trình bày dưới dạng nhận định và lý do ngắn gọn để người dùng kiểm chứng, chứ không được dùng để tự động chặn tên miền.
Việc phân tích nội dung cũng nhằm khắc phục một hạn chế của cách xếp hạng hiện tại: một tên miền không nên bị bỏ qua chỉ vì điểm máy học thấp. Citron cần có khả năng tìm ra những trường hợp đáng chú ý ngay cả trong nhóm trước đây được xem là "chưa chắc chắn".
=== Làm lại giao diện đánh giá Citron ===
Giao diện hỗ trợ đánh giá sẽ được thiết kế lại để tập trung các thông tin cần thiết vào một nơi: điểm đánh giá hiện có, phân tích nội dung, các lần xuất hiện của tên miền, bài viết và sửa đổi liên quan, cũng như những đánh giá trước đó của cộng đồng. Người dùng vẫn có thể mở website hoặc bản sửa đổi để kiểm tra sâu hơn khi cần, nhưng không nên phải làm việc đó cho mọi tên miền chỉ để biết trường hợp đang nói đến là gì.
Bên cạnh việc xem báo cáo hiện tại, giao diện mới dự kiến cho phép xem '''những tên miền còn cần đánh giá xuyên qua nhiều báo cáo'''. Nhờ đó, một báo cáo cũ không bị mất giá trị chỉ vì đã qua ngày; những trường hợp chưa được xử lý có thể tiếp tục được xem xét về sau, còn các tên miền đã được đánh giá phù hợp có thể được hạ ưu tiên hoặc loại khỏi luồng chính. Giao diện cũng có thể ghi nhớ những trường hợp một người đã xem để hạn chế việc phải kiểm tra đi kiểm tra lại cùng một nội dung.
=== Bổ sung lý do cho đánh giá của người dùng ===
Khi lựa chọn "nên bỏ qua", "nên chặn" hoặc một đánh giá tương tự, người dùng có thể chọn thêm một hoặc một số lý do ngắn được chuẩn hóa, chẳng hạn quảng cáo, website tự xuất bản, nguồn chính thức, trang thông tin điện tử hoặc các nhóm phù hợp khác. Những lý do này sẽ được hiển thị cho những người đánh giá sau, giúp họ hiểu một nhận định được đưa ra trên cơ sở nào. Các trao đổi dài hơn hoặc trường hợp có tranh luận không nhất thiết phải được lưu trong cơ sở dữ liệu riêng của Citron. Wikipedia vẫn có thể cung cấp không gian thảo luận như hiện nay để thành viên giải thích thêm hoặc trao đổi khi cần.
=== Rút ngắn quy trình xử lý ===
Giao diện sẽ có thêm các bộ lọc cần thiết, chẳng hạn chỉ xem những tên miền đã được thành viên đánh dấu hoặc những trường hợp vẫn còn cần xử lý. Đối với bảo quản viên, khi đã xác định một tên miền cần chặn, Citron cũng có thể cung cấp đường dẫn hoặc thao tác trực tiếp thuận tiện hơn tới hệ thống [[mw:Help:BlockedExternalDomains|BlockedExternalDomains]], thay vì để các bước đánh giá và thực thi hoàn toàn tách rời như hiện nay. Quyết định chặn vẫn do bảo quản viên thực hiện.
=== Cải tổ cách trình bày báo cáo ===
Đợt nâng cấp sẽ xem xét giảm sự phụ thuộc vào việc đăng một báo cáo lớn riêng biệt mỗi ngày tại Tin nhắn cho bảo quản viên. Một hướng tương đối an toàn là chỉ để một thông báo Citron nhỏ gọn tại đây và mở giao diện đánh giá khi người dùng cần; về lâu dài, các báo cáo có thể được tập hợp trong một giao diện thống nhất hơn thay vì nằm rải rác theo từng ngày. Cách trình bày cuối cùng sẽ được thử nghiệm và lấy thêm ý kiến cộng đồng. Việc thay đổi này không nhằm loại bỏ không gian thảo luận hiện có hoặc chuyển hoạt động quản trị ra khỏi Wikipedia, mà chủ yếu nhằm giảm sự lặp lại và giúp việc quay lại xem dữ liệu cũ thuận tiện hơn.
=== Xây dựng Citron Console ===
Một giao diện tra cứu riêng tại Toolforge dự kiến được xây dựng để tận dụng tốt hơn dữ liệu lịch sử mà Citron đã thu thập. Người dùng có thể tìm một tên miền để xem nó từng xuất hiện khi nào, trong những bài nào, do những tài khoản nào thêm vào và trước đây đã được Citron hoặc cộng đồng đánh giá ra sao. Tương tự, có thể tra cứu theo bài viết, bản sửa đổi hoặc người sửa đổi để hỗ trợ việc điều tra những chuỗi hành vi đáng ngờ.
Citron Console chủ yếu là công cụ tìm kiếm và tra cứu. Nó không thay thế Wikipedia, không phải nơi đưa ra quyết định quản trị và không nhằm trở thành một hệ thống quản trị Wikipedia riêng biệt.
Ngoài các thay đổi trực tiếp đối với người dùng, dự án cũng sẽ chuẩn hóa lại một số phần đã tích tụ trong quá trình phát triển: thống nhất tên gọi từ "Citron/Spam" thành "Citron", cập nhật tài liệu, làm rõ thuật ngữ và cải thiện cấu trúc phần mềm để Citron dễ bảo trì hơn. Hệ thống có thể được chuẩn bị cho khả năng sử dụng tại những dự án Wikimedia khác trong tương lai, nhưng đợt nâng cấp này trước hết vẫn tập trung vào nhu cầu của Wikipedia tiếng Việt.
:
njs6o3dyy7fafktlva6sz9x8qui0z5f
759892
759891
2026-09-01T19:54:34Z
Plantaest
37055
759892
wikitext
text/x-wiki
'''Nâng cấp Citron''' là dự án nhằm cải thiện [[Thành viên:Plantaest/Citron|Citron]], một công cụ đã được sử dụng tại Wikipedia tiếng Việt khoảng 2 năm nay để phát hiện các tên miền bên ngoài có khả năng liên quan đến spam, quảng cáo hoặc những hình thức liên kết không phù hợp khác.
Đây là bản mô tả định hướng của dự án, tập trung vào những vấn đề cần giải quyết và những thay đổi chính dự kiến thực hiện. Các chi tiết kỹ thuật cụ thể sẽ được xác định trong quá trình phát triển và thử nghiệm.
Một số thảo luận dẫn đến bản thảo này:
* [[Thảo luận Thành viên:ThiênĐế98/Lưu 22#Wikipedia:Biểu quyết đánh giá bài viết dịch thuật/Lưu 4%23Loạt bài của Ptthnhan (tháng KHTN 9/2019) - lần 2|Thảo luận giữa Plantaest và ThiênĐế98 (06-2026)]] – góp ý thêm nút "Đã thêm"
* [[Thảo luận Thành viên:P. ĐĂNG#Nguồn vatvostudio.vn|Thảo luận giữa Hiyuune và P. ĐĂNG (02-2026)]] – về vấn đề điều tra dữ liệu của Citron
* [[Thảo luận Thành viên:ThiênĐế98/Lưu 21#c-Plantaest-20260528053800-Plantaest-20260525151600|Bình luận của Plantaest (05-2026)]] – nói về việc tự động hóa gần như hoàn toàn Citron
* [[Thảo luận Thành viên:Plantaest/Nâng cấp Citron]] – thảo luận góp ý của chính bản thảo này
== Bối cảnh ==
Citron hiện theo dõi các sửa đổi mới trên Wikipedia tiếng Việt, phát hiện những tên miền bên ngoài vừa được thêm vào, sử dụng một mô hình máy học để ước tính mức độ đáng chú ý và tạo báo cáo để tuần tra viên, bảo quản viên kiểm tra. Người dùng sau đó có thể đánh giá tên miền là nên bỏ qua, nên xem xét chặn hoặc chưa thể kết luận.
Cách làm này đã hỗ trợ phát hiện nhiều trường hợp spam trong gần hai năm vận hành, nhưng phần việc khó nhất vẫn chủ yếu do con người thực hiện. Điểm số của Citron chỉ là một chỉ dấu ban đầu: có lúc hệ thống nhận diện đúng những website đáng ngờ, nhưng cũng có những website bình thường bị đánh giá cao hoặc những trường hợp xấu không được xếp vào nhóm nổi bật. Đặc biệt, mô hình hiện tại chủ yếu dựa vào một số thông tin về tên miền mà chưa thực sự đọc nội dung website. Vì vậy, để đánh giá một trường hợp, người dùng thường vẫn phải tự mở website, xác định đó là trang gì, xem nội dung có mang tính quảng cáo, tự xuất bản hoặc spam hay không, rồi kiểm tra liên kết được thêm vào bài nào và trong hoàn cảnh nào.
Khối lượng công việc này trở nên đáng kể khi một báo cáo có hàng chục hoặc hàng trăm tên miền. Những tên miền được Citron đánh giá là có khả năng xấu cao thường được chú ý trước, trong khi nhóm chưa chắc chắn có thể rất lớn và dễ bị bỏ qua, dù đôi khi vẫn chứa những trường hợp cần xử lý.
Cách tổ chức báo cáo hiện tại cũng tạo ra một số bất tiện. Citron tạo báo cáo theo từng ngày nên dữ liệu dần bị chia thành nhiều báo cáo nhỏ; cùng một tên miền có thể xuất hiện qua nhiều ngày; báo cáo cũ khó được quay lại xử lý; và khi muốn điều tra lịch sử của một tên miền, bài viết hoặc tài khoản, người dùng phải lần lại nhiều dữ liệu khác nhau. Việc Citron liên tục đăng những báo cáo tương đối lớn tại [[Wikipedia:Tin nhắn cho bảo quản viên]] cũng khiến khu vực này trở nên chật và mang nhiều tính thông báo tự động.
Các góp ý của người sử dụng Citron thời gian qua còn cho thấy một nhu cầu khác: người đánh giá không chỉ cần nút "nên bỏ qua" hay "nên chặn", mà còn cần biết '''vì sao''' một người khác đưa ra đánh giá đó, có thể xử lý lại các báo cáo cũ, tìm nhanh những trường hợp đã được đánh dấu và giảm bớt các bước thủ công khi một bảo quản viên quyết định thực hiện việc chặn.
== Mục tiêu ==
Mục tiêu chính của đợt nâng cấp là làm cho Citron trở thành một công cụ '''chuẩn bị thông tin cho con người''', thay vì chủ yếu đưa ra một danh sách tên miền cùng điểm số rồi để người sử dụng tự điều tra từ đầu.
Citron phiên bản mới được kỳ vọng có thể tự thu thập và phân tích trước những thông tin cần thiết về website, cho biết vì sao một trường hợp đáng chú ý, tập hợp những tên miền còn cần đánh giá thay vì buộc người dùng phải lần theo từng báo cáo ngày, đồng thời cho phép tra cứu thuận tiện dữ liệu Citron đã thu thập trong quá khứ. Phần lớn các trường hợp thông thường vì thế có thể được xem xét nhanh hơn, để thời gian của tuần tra viên và bảo quản viên được dành cho những trường hợp thực sự cần phán đoán.
Citron vẫn chỉ là công cụ hỗ trợ. Điểm số máy học, phân tích bằng AI hay bất kỳ tín hiệu tự động nào đều không được xem là kết luận cuối cùng. Việc đánh giá một tên miền và quyết định thực hiện hành động quản trị vẫn thuộc về con người và các quy trình của cộng đồng Wikipedia.
== Những thay đổi dự kiến ==
=== Cải thiện khả năng phân tích tên miền ===
Mô hình máy học hiện tại sẽ được cập nhật bằng dữ liệu mới và được đánh giá lại dựa trên những trường hợp Citron thực sự gặp trong quá trình vận hành. Thay vì chỉ dựa vào điểm số này, Citron dự kiến bổ sung một lớp phân tích nội dung bằng mô hình ngôn ngữ (LLM). Hệ thống có thể đọc một lượng nội dung phù hợp từ website và xem xét ngữ cảnh liên kết trên Wikipedia để nhận diện những đặc điểm như website thương mại, quảng cáo, nội dung tự xuất bản, SEO, báo chí, tổ chức chính thức hoặc những dấu hiệu bất thường khác. Kết quả này sẽ được trình bày dưới dạng nhận định và lý do ngắn gọn để người dùng kiểm chứng, chứ không được dùng để tự động chặn tên miền.
Việc phân tích nội dung cũng nhằm khắc phục một hạn chế của cách xếp hạng hiện tại: một tên miền không nên bị bỏ qua chỉ vì điểm máy học thấp. Citron cần có khả năng tìm ra những trường hợp đáng chú ý ngay cả trong nhóm trước đây được xem là "chưa chắc chắn".
=== Làm lại giao diện đánh giá Citron ===
Giao diện hỗ trợ đánh giá sẽ được thiết kế lại để tập trung các thông tin cần thiết vào một nơi: điểm đánh giá hiện có, phân tích nội dung, các lần xuất hiện của tên miền, bài viết và sửa đổi liên quan, cũng như những đánh giá trước đó của cộng đồng. Người dùng vẫn có thể mở website hoặc bản sửa đổi để kiểm tra sâu hơn khi cần, nhưng không nên phải làm việc đó cho mọi tên miền chỉ để biết trường hợp đang nói đến là gì.
Bên cạnh việc xem báo cáo hiện tại, giao diện mới dự kiến cho phép xem '''những tên miền còn cần đánh giá xuyên qua nhiều báo cáo'''. Nhờ đó, một báo cáo cũ không bị mất giá trị chỉ vì đã qua ngày; những trường hợp chưa được xử lý có thể tiếp tục được xem xét về sau, còn các tên miền đã được đánh giá phù hợp có thể được hạ ưu tiên hoặc loại khỏi luồng chính. Giao diện cũng có thể ghi nhớ những trường hợp một người đã xem để hạn chế việc phải kiểm tra đi kiểm tra lại cùng một nội dung.
=== Bổ sung lý do cho đánh giá của người dùng ===
Khi lựa chọn "nên bỏ qua", "nên chặn" hoặc một đánh giá tương tự, người dùng có thể chọn thêm một hoặc một số lý do ngắn được chuẩn hóa, chẳng hạn quảng cáo, website tự xuất bản, nguồn chính thức, trang thông tin điện tử hoặc các nhóm phù hợp khác. Những lý do này sẽ được hiển thị cho những người đánh giá sau, giúp họ hiểu một nhận định được đưa ra trên cơ sở nào. Các trao đổi dài hơn hoặc trường hợp có tranh luận không nhất thiết phải được lưu trong cơ sở dữ liệu riêng của Citron. Wikipedia vẫn có thể cung cấp không gian thảo luận như hiện nay để thành viên giải thích thêm hoặc trao đổi khi cần.
=== Rút ngắn quy trình xử lý ===
Giao diện sẽ có thêm các bộ lọc cần thiết, chẳng hạn chỉ xem những tên miền đã được thành viên đánh dấu hoặc những trường hợp vẫn còn cần xử lý. Đối với bảo quản viên, khi đã xác định một tên miền cần chặn, Citron cũng có thể cung cấp đường dẫn hoặc thao tác trực tiếp thuận tiện hơn tới hệ thống [[mw:Help:BlockedExternalDomains|BlockedExternalDomains]], thay vì để các bước đánh giá và thực thi hoàn toàn tách rời như hiện nay. Quyết định chặn vẫn do bảo quản viên thực hiện.
=== Cải tổ cách trình bày báo cáo ===
Đợt nâng cấp sẽ xem xét giảm sự phụ thuộc vào việc đăng một báo cáo lớn riêng biệt mỗi ngày tại Tin nhắn cho bảo quản viên. Một hướng tương đối an toàn là chỉ để một thông báo Citron nhỏ gọn tại đây và mở giao diện đánh giá khi người dùng cần; về lâu dài, các báo cáo có thể được tập hợp trong một giao diện thống nhất hơn thay vì nằm rải rác theo từng ngày. Cách trình bày cuối cùng sẽ được thử nghiệm và lấy thêm ý kiến cộng đồng. Việc thay đổi này không nhằm loại bỏ không gian thảo luận hiện có hoặc chuyển hoạt động quản trị ra khỏi Wikipedia, mà chủ yếu nhằm giảm sự lặp lại và giúp việc quay lại xem dữ liệu cũ thuận tiện hơn.
=== Xây dựng Citron Console ===
Một giao diện tra cứu riêng tại Toolforge dự kiến được xây dựng để tận dụng tốt hơn dữ liệu lịch sử mà Citron đã thu thập. Người dùng có thể tìm một tên miền để xem nó từng xuất hiện khi nào, trong những bài nào, do những tài khoản nào thêm vào và trước đây đã được Citron hoặc cộng đồng đánh giá ra sao. Tương tự, có thể tra cứu theo bài viết, bản sửa đổi hoặc người sửa đổi để hỗ trợ việc điều tra những chuỗi hành vi đáng ngờ.
Citron Console chủ yếu là công cụ tìm kiếm và tra cứu. Nó không thay thế Wikipedia, không phải nơi đưa ra quyết định quản trị và không nhằm trở thành một hệ thống quản trị Wikipedia riêng biệt.
Ngoài các thay đổi trực tiếp đối với người dùng, dự án cũng sẽ chuẩn hóa lại một số phần đã tích tụ trong quá trình phát triển: thống nhất tên gọi từ "Citron/Spam" thành "Citron", cập nhật tài liệu, làm rõ thuật ngữ và cải thiện cấu trúc phần mềm để Citron dễ bảo trì hơn. Hệ thống có thể được chuẩn bị cho khả năng sử dụng tại những dự án Wikimedia khác trong tương lai, nhưng đợt nâng cấp này trước hết vẫn tập trung vào nhu cầu của Wikipedia tiếng Việt.
:
avyd76ge0jivfsxaqs5a9610ij69ji9
759894
759892
2026-09-01T20:19:19Z
Plantaest
37055
759894
wikitext
text/x-wiki
'''Nâng cấp Citron''' là dự án nhằm cải thiện [[Thành viên:Plantaest/Citron|Citron]], một công cụ đã được sử dụng tại Wikipedia tiếng Việt khoảng hai năm nay để phát hiện các tên miền bên ngoài có khả năng liên quan đến spam, quảng cáo hoặc những hình thức liên kết không phù hợp khác.
Đây là bản mô tả định hướng của dự án, tập trung vào những vấn đề cần giải quyết và những thay đổi chính dự kiến thực hiện. Các chi tiết kỹ thuật cụ thể sẽ được xác định trong quá trình phát triển và thử nghiệm.
Một số thảo luận dẫn đến bản thảo này:
* [[Thảo luận Thành viên:ThiênĐế98/Lưu 22#Wikipedia:Biểu quyết đánh giá bài viết dịch thuật/Lưu 4%23Loạt bài của Ptthnhan (tháng KHTN 9/2019) - lần 2|Thảo luận giữa Plantaest và ThiênĐế98 (06-2026)]] – góp ý thêm nút "Đã thêm"
* [[Thảo luận Thành viên:P. ĐĂNG#Nguồn vatvostudio.vn|Thảo luận giữa Hiyuune và P. ĐĂNG (02-2026)]] – về vấn đề điều tra dữ liệu của Citron
* [[Thảo luận Thành viên:ThiênĐế98/Lưu 21#c-Plantaest-20260528053800-Plantaest-20260525151600|Bình luận của Plantaest (05-2026)]] – nói về việc tự động hóa gần như hoàn toàn Citron
* [[Thảo luận Thành viên:Plantaest/Nâng cấp Citron]] – thảo luận góp ý của chính dự án này
== Bối cảnh ==
Citron hiện theo dõi các sửa đổi mới trên Wikipedia tiếng Việt, phát hiện những tên miền bên ngoài vừa được thêm vào, sử dụng một mô hình máy học để ước tính mức độ đáng chú ý và tạo báo cáo để tuần tra viên, bảo quản viên kiểm tra. Người dùng sau đó có thể đánh giá tên miền là nên bỏ qua, nên xem xét chặn hoặc chưa thể kết luận.
Cách làm này đã hỗ trợ phát hiện nhiều trường hợp spam trong gần hai năm vận hành, nhưng phần việc khó nhất vẫn chủ yếu do con người thực hiện. Điểm số của Citron chỉ là một chỉ dấu ban đầu: có lúc hệ thống nhận diện đúng những website đáng ngờ, nhưng cũng có những website bình thường bị đánh giá cao hoặc những trường hợp xấu không được xếp vào nhóm nổi bật. Đặc biệt, mô hình hiện tại chủ yếu dựa vào một số thông tin về tên miền mà chưa thực sự đọc nội dung website. Vì vậy, để đánh giá một trường hợp, người dùng thường vẫn phải tự mở website, xác định đó là trang gì, xem nội dung có mang tính quảng cáo, tự xuất bản hoặc spam hay không, rồi kiểm tra liên kết được thêm vào bài nào và trong hoàn cảnh nào.
Khối lượng công việc này trở nên đáng kể khi một báo cáo có hàng chục hoặc hàng trăm tên miền. Những tên miền được Citron đánh giá là có khả năng xấu cao thường được chú ý trước, trong khi nhóm chưa chắc chắn có thể rất lớn và dễ bị bỏ qua, dù đôi khi vẫn chứa những trường hợp cần xử lý.
Cách tổ chức báo cáo hiện tại cũng tạo ra một số bất tiện. Citron tạo báo cáo theo từng ngày nên dữ liệu dần bị chia thành nhiều báo cáo nhỏ; cùng một tên miền có thể xuất hiện qua nhiều ngày; báo cáo cũ khó được quay lại xử lý; và khi muốn điều tra lịch sử của một tên miền, bài viết hoặc tài khoản, người dùng phải lần lại nhiều dữ liệu khác nhau. Việc Citron liên tục đăng những báo cáo tương đối lớn tại [[Wikipedia:Tin nhắn cho bảo quản viên]] cũng khiến khu vực này trở nên chật và mang nhiều tính thông báo tự động.
Các góp ý của người sử dụng Citron thời gian qua còn cho thấy một nhu cầu khác: người đánh giá không chỉ cần nút "nên bỏ qua" hay "nên chặn", mà còn cần biết '''vì sao''' một người khác đưa ra đánh giá đó, có thể xử lý lại các báo cáo cũ, tìm nhanh những trường hợp đã được đánh dấu và giảm bớt các bước thủ công khi một bảo quản viên quyết định thực hiện việc chặn.
== Mục tiêu ==
Mục tiêu chính của đợt nâng cấp là làm cho Citron trở thành một công cụ '''chuẩn bị thông tin cho con người''', thay vì chủ yếu đưa ra một danh sách tên miền cùng điểm số rồi để người sử dụng tự điều tra từ đầu.
Citron phiên bản mới được kỳ vọng có thể tự thu thập và phân tích trước những thông tin cần thiết về website, cho biết vì sao một trường hợp đáng chú ý, tập hợp những tên miền còn cần đánh giá thay vì buộc người dùng phải lần theo từng báo cáo ngày, đồng thời cho phép tra cứu thuận tiện dữ liệu Citron đã thu thập trong quá khứ. Phần lớn các trường hợp thông thường vì thế có thể được xem xét nhanh hơn, để thời gian của tuần tra viên và bảo quản viên được dành cho những trường hợp thực sự cần phán đoán.
Citron vẫn chỉ là công cụ hỗ trợ. Điểm số máy học, phân tích bằng AI hay bất kỳ tín hiệu tự động nào đều không được xem là kết luận cuối cùng. Việc đánh giá một tên miền và quyết định thực hiện hành động quản trị vẫn thuộc về con người và các quy trình của cộng đồng Wikipedia.
== Những thay đổi dự kiến ==
=== Cải thiện khả năng phân tích tên miền ===
Mô hình máy học hiện tại sẽ được cập nhật bằng dữ liệu mới và được đánh giá lại dựa trên những trường hợp Citron thực sự gặp trong quá trình vận hành. Thay vì chỉ dựa vào điểm số này, Citron dự kiến bổ sung một lớp phân tích nội dung bằng mô hình ngôn ngữ lớn (LLM). Hệ thống có thể đọc một lượng nội dung phù hợp từ website và xem xét ngữ cảnh liên kết trên Wikipedia để nhận diện những đặc điểm như website thương mại, quảng cáo, nội dung tự xuất bản, SEO, báo chí, tổ chức chính thức hoặc những dấu hiệu bất thường khác. Kết quả này sẽ được trình bày dưới dạng nhận định và lý do ngắn gọn để người dùng kiểm chứng, chứ không được dùng để tự động chặn tên miền.
Việc phân tích nội dung cũng nhằm khắc phục một hạn chế của cách xếp hạng hiện tại: một tên miền không nên bị bỏ qua chỉ vì điểm máy học thấp. Citron cần có khả năng tìm ra những trường hợp đáng chú ý ngay cả trong nhóm trước đây được xem là "chưa chắc chắn".
=== Làm lại giao diện đánh giá Citron ===
Giao diện hỗ trợ đánh giá sẽ được thiết kế lại để tập trung các thông tin cần thiết vào một nơi: điểm đánh giá hiện có, phân tích nội dung, các lần xuất hiện của tên miền, bài viết và sửa đổi liên quan, cũng như những đánh giá trước đó của cộng đồng. Người dùng vẫn có thể mở website hoặc bản sửa đổi để kiểm tra sâu hơn khi cần, nhưng không nên phải làm việc đó cho mọi tên miền chỉ để biết trường hợp đang nói đến là gì.
Bên cạnh việc xem báo cáo hiện tại, giao diện mới dự kiến cho phép xem '''những tên miền còn cần đánh giá xuyên qua nhiều báo cáo'''. Nhờ đó, một báo cáo cũ không bị mất giá trị chỉ vì đã qua ngày; những trường hợp chưa được xử lý có thể tiếp tục được xem xét về sau, còn các tên miền đã được đánh giá phù hợp có thể được hạ ưu tiên hoặc loại khỏi luồng chính. Giao diện cũng có thể ghi nhớ những trường hợp một người đã xem để hạn chế việc phải kiểm tra đi kiểm tra lại cùng một nội dung.
=== Bổ sung lý do cho đánh giá của người dùng ===
Khi lựa chọn "nên bỏ qua", "nên chặn" hoặc một đánh giá tương tự, người dùng có thể chọn thêm một hoặc một số lý do ngắn được chuẩn hóa, chẳng hạn như quảng cáo, website tự xuất bản, nguồn chính thức, trang thông tin điện tử hoặc các nhóm phù hợp khác. Những lý do này sẽ được hiển thị cho những người đánh giá sau, giúp họ hiểu một nhận định được đưa ra trên cơ sở nào. Các trao đổi dài hơn hoặc trường hợp có tranh luận không nhất thiết phải được lưu trong cơ sở dữ liệu riêng của Citron. Wikipedia vẫn có thể cung cấp không gian thảo luận như hiện nay để thành viên giải thích thêm hoặc trao đổi khi cần.
=== Rút ngắn quy trình xử lý ===
Giao diện sẽ có thêm các bộ lọc cần thiết, chẳng hạn chỉ xem những tên miền đã được thành viên đánh dấu hoặc những trường hợp vẫn còn cần xử lý. Đối với bảo quản viên, khi đã xác định một tên miền cần chặn, Citron cũng có thể cung cấp đường dẫn hoặc thao tác trực tiếp thuận tiện hơn tới hệ thống [[mw:Help:BlockedExternalDomains|BlockedExternalDomains]], thay vì để các bước đánh giá và thực thi hoàn toàn tách rời như hiện nay. Quyết định chặn vẫn do bảo quản viên thực hiện.
=== Cải tổ cách trình bày báo cáo ===
Đợt nâng cấp sẽ xem xét giảm sự phụ thuộc vào việc đăng một báo cáo lớn riêng biệt mỗi ngày tại Tin nhắn cho bảo quản viên. Một hướng tương đối an toàn là chỉ để một thông báo Citron nhỏ gọn tại đây và mở giao diện đánh giá khi người dùng cần; về lâu dài, các báo cáo có thể được tập hợp trong một giao diện thống nhất hơn thay vì nằm rải rác theo từng ngày. Cách trình bày cuối cùng sẽ được thử nghiệm và lấy thêm ý kiến cộng đồng. Việc thay đổi này không nhằm loại bỏ không gian thảo luận hiện có hoặc chuyển hoạt động quản trị ra khỏi Wikipedia, mà chủ yếu nhằm giảm sự lặp lại và giúp việc quay lại xem dữ liệu cũ thuận tiện hơn.
=== Xây dựng Citron Console ===
Một giao diện tra cứu riêng tại Toolforge dự kiến được xây dựng để tận dụng tốt hơn dữ liệu lịch sử mà Citron đã thu thập. Người dùng có thể tìm một tên miền để xem nó từng xuất hiện khi nào, trong những bài nào, do những tài khoản nào thêm vào và trước đây đã được Citron hoặc cộng đồng đánh giá ra sao. Tương tự, có thể tra cứu theo bài viết, bản sửa đổi hoặc người sửa đổi để hỗ trợ việc điều tra những chuỗi hành vi đáng ngờ.
Citron Console chủ yếu là công cụ tìm kiếm và tra cứu. Nó không thay thế Wikipedia, không phải nơi đưa ra quyết định quản trị và không nhằm trở thành một hệ thống quản trị Wikipedia riêng biệt.
Ngoài các thay đổi trực tiếp đối với người dùng, dự án cũng sẽ chuẩn hóa lại một số phần đã tích tụ trong quá trình phát triển: thống nhất tên gọi từ "Citron/Spam" thành "Citron", cập nhật tài liệu, làm rõ thuật ngữ và cải thiện cấu trúc phần mềm để Citron dễ bảo trì hơn. Hệ thống có thể được chuẩn bị cho khả năng sử dụng tại những dự án Wikimedia khác trong tương lai, nhưng đợt nâng cấp này trước hết vẫn tập trung vào nhu cầu của Wikipedia tiếng Việt.
:
7r3z4w9g57n33lun00e923049bvfwqv
759895
759894
2026-09-01T20:20:38Z
Plantaest
37055
Blanked the page
759895
wikitext
text/x-wiki
phoiac9h4m842xq45sp7s6u21eteeq1
User:MrJaroslavik/MarkAdmins.js
2
174970
759896
739786
2026-09-01T20:30:26Z
MrJaroslavik
44012
Hm test
759896
javascript
text/javascript
// MarkAdmins.js
// Based on: https://meta.wikimedia.org/wiki/MediaWiki:Gadget-markAdmins.js
// -------------------------------------------------------
// Features:
// - Automated API fetching (no static JSON required)
// - Support for Local (allusers) and Global (CentralAuth) groups
// - on others wiki than metawiki shows some local metawiki groups with global effect - wmf-officeit, wmf-supportsafety, global-renamer
// - Displays important global roles from Meta-Wiki on all projects.
// - 24h cache of saved users in groups - use this in console F12 to reset:
// - localStorage.removeItem('markAdmins_v2026_cache'); location.reload();
// - API pagination support (handles >500 users, e.g., on Enwiki)
// - Localized namespace detection
// - Skips talk pages and subpages
// - Priority list of groups
// - With help of Gemini 3
// -------------------------------------------------------
// <nowiki>
(function(mw, $) {
'use strict';
const markAdmins = mw.libs.markAdmins = {
config: {
// GROUP CONFIGURATION - IF YOU ADD LOCAL OR GLOBAL GROUP, DON´T FORGOT TO ALSO ADD IT BELOW - const lCandidate and const gCandidates
// Define labels and set "enabled: true" to display the tag or "enabled: false" to hide
groups: {
// LOCAL GROUPS (Fetched via list=allusers)
'sysop': {
label: 'A',
enabled: true
},
'bureaucrat': {
label: 'B',
enabled: true
},
'checkuser': {
label: 'CU',
enabled: true
},
'suppress': {
label: 'OS',
enabled: true
},
'interface-admin': {
label: 'IA',
enabled: true
},
'centralnoticeadmin': {
label: 'CNA',
enabled: true
},
'patroller': {
label: 'Pat',
enabled: true
},
'rollbacker': {
label: 'Rol',
enabled: true
},
'translationadmin': {
label: 'TA',
enabled: true
},
'wmf-officeit': {
label: 'WMFOIT',
enabled: true
},
'wmf-supportsafety': {
label: 'WMF T&S',
enabled: true
},
'global-renamer': {
label: 'GRN',
enabled: true
},
'bot': {
label: 'Bot',
enabled: true
},
'accountcreator': {
label: 'ACC',
enabled: true
},
'arbcom': {
label: 'ArbCom',
enabled: true
},
// GLOBAL GROUPS (Fetched via list=globalallusers / CentralAuth)
'steward': {
label: 'S',
enabled: true
},
'staff': {
label: 'Staff',
enabled: true
},
'global-sysop': {
label: 'GS',
enabled: true
},
'ombuds': {
label: 'Omb',
enabled: true
},
'u4c-member': {
label: 'U4C',
enabled: true
},
'sysadmin': {
label: 'sysadmin',
enabled: true
},
'abusefilter-helper': {
label: 'AFH',
enabled: true
},
'abusefilter-maintainer': {
label: 'AFM',
enabled: true
},
'global-rollbacker': {
label: 'GR',
enabled: true
},
'vrt-permissions': {
label: 'VRT',
enabled: true
},
'apihighlimits-requestor': {
label: 'API',
enabled: true
},
'global-bot': {
label: 'GBOT',
enabled: true
},
'global-interface-editor': {
label: 'GIE',
enabled: true
},
'new-wikis-importer': {
label: 'NWI',
enabled: true
},
}
},
users: {},
// Fetch privileged users from API with pagination support
fetchData: async function() {
const cacheKey = 'markAdmins_v2026_cache'; // Updated version key
const cached = localStorage.getItem(cacheKey);
const cacheTime = localStorage.getItem(`${cacheKey}_time`);
// Cache check: Ensure cacheTime is treated as a number
if (cached && cacheTime && (Date.now() - Number(cacheTime) < 86400000)) {
return JSON.parse(cached);
}
const api = new mw.Api();
const userMap = {};
// Updated helper function with optional filtering to prevent group leakage
async function fetchAndMerge(apiInstance, params, listName, allowedGroups) {
try {
let res = await apiInstance.get(params);
const processUsers = (users) => {
users?.forEach(({
name,
groups
}) => {
if (!userMap[name]) userMap[name] = [];
const groupsToAdd = allowedGroups ? groups.filter(g => allowedGroups.includes(g)) : groups;
userMap[name] = [...new Set([...userMap[name], ...groupsToAdd])];
});
};
processUsers(res.query?.[listName]);
while (res.continue) {
res = await apiInstance.get({
...params,
...res.continue
});
processUsers(res.query?.[listName]);
}
} catch (e) {
console.error("MarkAdmins API error", e);
}
}
// List of candidates
const lCandidates = ['sysop', 'bureaucrat', 'checkuser', 'suppress', 'interface-admin', 'centralnoticeadmin', 'patroller', 'rollbacker', 'translationadmin', 'wmf-officeit', 'wmf-supportsafety', 'global-renamer', 'bot', 'arbcom'];
const gCandidates = ['steward', 'staff', 'global-sysop', 'ombuds', 'u4c-member', 'sysadmin', 'abusefilter-helper', 'abusefilter-maintainer', 'global-interface-editor', 'global-rollbacker', 'vrt-permissions'];
// 1. Fetch Local groups
await fetchAndMerge(api, {
action: 'query',
list: 'allusers',
augroup: lCandidates.join('|'),
auprop: 'groups',
aulimit: 'max',
formatversion: 2
}, 'allusers');
// 2. Fetch Global groups
await fetchAndMerge(api, {
action: 'query',
list: 'globalallusers',
agugroup: gCandidates.join('|'),
aguprop: 'groups',
agulimit: 'max',
formatversion: 2
}, 'globalallusers');
// 3. Remote call to Meta-Wiki: strictly filtered to avoid showing TA/CNA on other wikis
if (mw.config.get('wgDBname') !== 'metawiki') {
const metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php', {
anonymous: true
});
const mCandidates = ['wmf-officeit', 'wmf-supportsafety', 'global-renamer'];
await fetchAndMerge(metaApi, {
action: 'query',
list: 'allusers',
augroup: mCandidates.join('|'),
auprop: 'groups',
aulimit: 'max',
formatversion: 2
}, 'allusers', mCandidates);
}
localStorage.setItem(cacheKey, JSON.stringify(userMap));
localStorage.setItem(cacheKey + '_time', Date.now());
return userMap;
},
/**
* Initialize gadget, detect local namespaces and setup hooks
*/
init: async function() {
const self = this;
await mw.loader.using(['mediawiki.api', 'mediawiki.ForeignApi', 'user', 'mediawiki.util']);
const nsIds = mw.config.get('wgNamespaceIds');
const userNamespaces = Object.keys(nsIds).filter(name => nsIds[name] === 2);
const nsPattern = userNamespaces.join('|').replace(/ /g, '_');
self.userRegex = new RegExp('(?:/wiki/|title=)(?:' + nsPattern + '):([^/\\s&?#]+)(?=[#?]|\\s|$)', 'i');
self.users = await self.fetchData();
self.currentDomain = mw.config.get('wgServerName');
mw.hook('wikipage.content').add(function($content) {
self.processLinks($content);
});
},
// Scan links in the provided content and append labels to matched users
processLinks: function($content) {
const self = this;
const priorityOrder = ['sysop', 'steward', 'bureaucrat', 'checkuser', 'suppress', 'interface-admin', 'translationadmin', 'patroller', 'rollbacker', 'staff', 'sysadmin', 'vrt-permissions'];
const priorityMap = Object.fromEntries(priorityOrder.map((id, index) => [id, index]));
$content.find('a[href]').each(function() {
const $a = $(this);
const href = $a.attr('href');
if (!href || $a.hasClass('markadmins-done') || $a.hasClass('extiw') || $a.hasClass('external')) return;
// Only process internal links or links matching the current domain (ignores Interwiki links in CentralAuth tables)
const isRelative = href.startsWith('/') && !href.startsWith('//');
const isSameDomain = href.includes('//' + self.currentDomain);
if (!isRelative && !isSameDomain) return;
const match = href.match(self.userRegex);
if (match) {
let user = decodeURIComponent(match[1].split('#')[0]).replace(/_/g, ' ');
// Standardize name: First letter uppercase to match API data
if (user) user = user.charAt(0).toUpperCase() + user.slice(1);
if (self.users[user]) {
const labels = [...self.users[user]].sort((a, b) => {
const pA = priorityMap[a] ?? 999;
const pB = priorityMap[b] ?? 999;
return pA !== pB ? pA - pB : a.localeCompare(b);
}).map(g => {
const gConfig = self.config.groups[g];
return (gConfig && gConfig.enabled) ? gConfig.label : null;
}).filter((label, index, arr) => label && arr.indexOf(label) === index);
if (labels.length > 0) {
$a.append(`<b class="adminMark"> (${labels.join('/')})</b>`);
}
}
$a.addClass('markadmins-done');
}
});
}
};
markAdmins.init();
}(mediaWiki, jQuery));
// </nowiki>
nxrl27ijkkbr66uhl40gjuk3f2u5qbs
User:Dreamyshade/common.js
2
177604
759904
755169
2026-09-02T02:05:53Z
Dreamyshade
20227
Try new script
759904
javascript
text/javascript
<!-- mw.loader.load('http://localhost:4444?ctype=text/javascript&title=afch-dev.js', 'text/javascript'); -->
mw.loader.load('https://meta.wikimedia.org/wiki/User:Max/MaxEdit.js', 'text/javascript');
brvhcwu0vrjf08n9xtozaywn12335sh
759905
759904
2026-09-02T02:07:39Z
Dreamyshade
20227
Import
759905
javascript
text/javascript
<!-- mw.loader.load('http://localhost:4444?ctype=text/javascript&title=afch-dev.js', 'text/javascript'); -->
importScript( '//meta.wikimedia.org/wiki/User:Max/MaxEdit.js' );
k98vu09p7di2hmxxeorteqtsqmuxmij
759906
759905
2026-09-02T02:08:44Z
Dreamyshade
20227
Try https://meta.wikimedia.org/wiki/User:Max/MaxEdit.js
759906
javascript
text/javascript
<!-- mw.loader.load('http://localhost:4444?ctype=text/javascript&title=afch-dev.js', 'text/javascript'); -->
// <nowiki>
$(() => {
if (
!['view', 'edit', 'history'].includes(mw.config.get('wgAction')) ||
mw.config.get('wgNamespaceNumber') < 0
) {
return;
}
if (mw.config.get('wgAction') === 'edit') {
return;
}
const CODE_MIRROR_MODE_MAP = {
wikitext: 'mediawiki',
javascript: 'javascript',
json: 'json',
css: 'css',
'sanitized-css': 'css',
Scribunto: 'lua'
};
async function loadCodeMirrorForWikitext(textareaEl) {
const requireModule = await mw.loader.using(['ext.CodeMirror', 'ext.CodeMirror.mode.mediawiki']);
const CodeMirrorClass = requireModule('ext.CodeMirror');
const { mediawiki } = requireModule('ext.CodeMirror.mode.mediawiki');
const instance = new CodeMirrorClass(textareaEl, mediawiki());
instance.initialize();
return instance;
}
async function loadCodeMirrorForMode(textareaEl, modeKey) {
const requireModule = await mw.loader.using(['ext.CodeMirror', 'ext.CodeMirror.modes']);
const CodeMirrorClass = requireModule('ext.CodeMirror');
const modes = requireModule('ext.CodeMirror.modes');
const modeFn = modes[modeKey];
if (!modeFn) {
return null;
}
const instance = new CodeMirrorClass(textareaEl, modeFn());
instance.initialize();
return instance;
}
function computeMinimalChange(oldStr, newStr) {
const minLen = Math.min(oldStr.length, newStr.length);
let start = 0;
while (start < minLen && oldStr[start] === newStr[start]) {
start++;
}
let endOld = oldStr.length;
let endNew = newStr.length;
while (endOld > start && endNew > start && oldStr[endOld - 1] === newStr[endNew - 1]) {
endOld--;
endNew--;
}
return { from: start, to: endOld, insert: newStr.slice(start, endNew) };
}
const MaxEdit = {
pagename: mw.config.get('wgPageName'),
version: '2.2',
contentmodels: ['wikitext', 'text', 'sanitized-css', 'json', 'javascript', 'css', 'Scribunto', 'MassMessageListContent'],
predefinedSummaries: [
{ value: 'copyedit', label: 'Copyedit' },
{ value: 'grammar', label: 'Grammar and spelling' },
{ value: 'wikify', label: 'Wikify' },
{ value: 'format', label: 'Formatting' },
{ value: 'cleanup', label: 'General cleanup' },
{ value: 'expand', label: 'Expand content' },
{ value: 'update', label: 'Update information' },
{ value: 'citation needed', label: 'Add citations' },
{ value: 'remove vandalism', label: 'Remove vandalism' },
{ value: 'revert', label: 'Revert changes' }
],
icons: {},
undoIconHtml: null,
isEditorOpen: false,
hiddenElements: null,
Vue: null,
Codex: null,
vueApp: null,
prefs: {
PREFIX: 'userjs-maxedit-',
_optsCache: {},
get(key, fallback) {
const fullKey = this.PREFIX + key;
let raw = this._optsCache[fullKey];
if (raw === undefined) {
try {
raw = window.localStorage.getItem(fullKey);
} catch (error) {
raw = null;
}
}
if (raw === undefined || raw === null) {
raw = mw.user.options.get(fullKey);
}
if (raw === undefined || raw === null) {
return fallback;
}
try {
return JSON.parse(raw);
} catch (error) {
return fallback;
}
},
async set(key, value) {
const fullKey = this.PREFIX + key;
const fullValue = JSON.stringify(value);
this._optsCache[fullKey] = fullValue;
try {
window.localStorage.setItem(fullKey, fullValue);
} catch (error) { /* empty */ }
try {
await new mw.Api().postWithEditToken({
action: 'options',
optionname: fullKey,
optionvalue: fullValue,
formatversion: 2
});
} catch (error) { /* empty */ }
}
},
init() {
mw.loader.using([
'vue',
'@wikimedia/codex',
'mediawiki.util',
'mediawiki.api',
'mediawiki.user',
'mediawiki.diff',
'mediawiki.diff.styles',
'jquery.textSelection'
]).then((require) => {
this.Vue = require('vue');
this.Codex = require('@wikimedia/codex');
this.run();
});
},
async run() {
this.addStyle();
await this.loadIcons();
this.setupTriggers();
},
async loadIcons() {
try {
const api = new mw.Api();
const data = await api.get({
action: 'query',
list: 'codexicons',
names: 'cdxIconCheck|cdxIconClose|cdxIconUndo|cdxIconSettings|cdxIconAdd|cdxIconTrash',
formatversion: 2
});
this.icons = (data && data.query && data.query.codexicons) || {};
} catch (error) {
this.icons = {};
}
this.undoIconHtml = this.renderCdxIcon(this.icons.cdxIconUndo);
},
renderCdxIcon(icon) {
if (!icon || !this.Vue || !this.Codex) {
return null;
}
const container = document.createElement('div');
const app = this.Vue.createApp({
render: () => this.Vue.h(this.Codex.CdxIcon, { icon })
});
app.mount(container);
const html = container.innerHTML;
app.unmount();
return html || null;
},
addStyle() {
mw.util.addCSS(`
#MaxEdit-main {
margin-top: 12px;
}
.MaxEdit-editor {
background: var(--background-color-base, #fff);
border: 1px solid var(--border-color-base, #a2a9b1);
border-radius: 4px;
padding: 16px;
color: var(--color-base, #202122);
}
.MaxEdit-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
margin-bottom: 14px;
}
.MaxEdit-header-title {
font-size: 17px;
font-weight: bold;
}
.MaxEdit-version {
font-size: 11px;
font-weight: normal;
color: var(--color-subtle, #54595d);
margin-left: 4px;
}
.MaxEdit-settings-btn {
flex-shrink: 0;
}
.MaxEdit-header-meta {
font-size: 12px;
color: var(--color-subtle, #54595d);
display: flex;
align-items: center;
gap: 8px;
flex-wrap: wrap;
}
.MaxEdit-chip {
background: var(--background-color-neutral-subtle, #f8f9fa);
border: 1px solid var(--border-color-subtle, #eaecf0);
border-radius: 12px;
padding: 1px 8px;
font-size: 11px;
}
.MaxEdit-chip--warning {
border-color: var(--border-color-warning, #fc3);
color: var(--color-warning, #ac6600);
}
.MaxEdit-banner {
margin-bottom: 12px;
}
.MaxEdit-tabs {
margin-bottom: 14px;
}
.MaxEdit-field {
margin: 10px 0;
}
.MaxEdit-textarea textarea {
min-height: 320px;
font-family: monospace, monospace;
font-size: 13px;
width: 100%;
resize: vertical;
}
.MaxEdit-textarea .cm-editor {
border: 1px solid var(--border-color-base, #a2a9b1);
border-radius: 2px;
}
.MaxEdit-textarea .cm-editor,
.MaxEdit-textarea .cm-scroller {
min-height: 320px;
}
.MaxEdit-textarea .cm-content {
font-family: monospace, monospace;
font-size: 13px;
}
.MaxEdit-editor-toggle {
margin-top: 4px;
text-align: right;
font-size: 12px;
}
.MaxEdit-editor-toggle a {
cursor: pointer;
}
.MaxEdit-summary-accordion {
margin: 10px 0;
}
.MaxEdit-summary-buttons {
display: flex;
flex-wrap: wrap;
gap: 6px;
padding: 8px 2px 2px;
}
.MaxEdit-preview-content,
.MaxEdit-diff-content {
padding: 4px 2px;
font-size: 0.95em;
line-height: 1.6;
}
.MaxEdit-diff-content .diff > tbody > tr {
position: relative;
}
.MaxEdit-diffundo-btn {
position: absolute;
inset-inline-end: 2px;
bottom: 2px;
display: flex;
align-items: center;
justify-content: center;
width: 18px;
height: 18px;
border: none;
background: var(--background-color-base, #fff);
border-radius: 2px;
padding: 2px;
cursor: pointer;
opacity: 0;
line-height: 1;
color: var(--color-subtle, #54595d);
}
.MaxEdit-diffundo-btn svg {
width: 12px;
height: 12px;
}
.MaxEdit-diff-content .diff > tbody > tr:hover .MaxEdit-diffundo-btn {
opacity: 0.7;
}
.MaxEdit-diffundo-btn:hover {
opacity: 1 !important;
}
.MaxEdit-diffundo-undone {
text-decoration: line-through;
opacity: 0.5;
}
.MaxEdit-actions {
display: flex;
gap: 8px;
margin-top: 14px;
padding-top: 14px;
border-top: 1px solid var(--border-color-subtle, #eaecf0);
}
.MaxEdit-actions .cdx-icon {
margin-right: 4px;
}
#MaxEdit-Edit-TopBtn a {
cursor: pointer;
}
.MaxEdit-prefs-field {
margin-bottom: 16px;
}
.MaxEdit-prefs-summary-list {
display: flex;
flex-direction: column;
gap: 6px;
margin-bottom: 8px;
}
.MaxEdit-prefs-summary-row {
display: flex;
align-items: center;
gap: 6px;
}
.MaxEdit-prefs-summary-row .cdx-text-input {
flex: 1;
}
.MaxEdit-prefs-summary-add {
display: flex;
align-items: center;
gap: 6px;
}
.MaxEdit-prefs-summary-add .cdx-text-input {
flex: 1;
}
`);
},
getRevisionFromURL() {
const params = new URLSearchParams(window.location.search);
const revId = params.get('oldid') || params.get('diff');
if (revId && /^\d+$/.test(revId)) {
return revId;
}
return null;
},
scrollToElement(element, offset) {
offset = offset || 0;
if (!element) {
return;
}
const top = element.getBoundingClientRect().top + window.pageYOffset + offset;
window.scrollTo({ top, behavior: 'smooth' });
},
getHeadingLevel($el) {
const $heading = $el.hasClass('mw-heading') ? $el.find('h1, h2, h3, h4, h5, h6').first() : $el;
const tag = $heading.prop('tagName');
return tag ? Number(tag.charAt(1)) : 999;
},
isHeadingElement($el) {
return $el.hasClass('mw-heading') || /^H[1-6]$/.test($el.prop('tagName') || '');
},
getSectionElements($heading) {
const level = this.getHeadingLevel($heading);
const elements = [$heading.get(0)];
let $next = $heading.next();
while ($next.length) {
if (this.isHeadingElement($next) && this.getHeadingLevel($next) <= level) {
break;
}
elements.push($next.get(0));
$next = $next.next();
}
return elements;
},
openEditor(section, sectionName, $sectionHeading) {
if (this.isEditorOpen) {
mw.notify('An editor is already open.', { type: 'warn' });
return;
}
this.isEditorOpen = true;
const revisionId = this.getRevisionFromURL();
const queryParams = {
action: 'query',
titles: this.pagename,
prop: ['info', 'revisions'],
rvprop: ['ids', 'content', 'contentmodel', 'timestamp', 'user'],
rvlimit: 1,
formatversion: 2
};
if (revisionId) {
queryParams.rvstartid = revisionId;
}
if (section !== undefined && section !== null) {
queryParams.rvsection = section;
}
new mw.Api().get(queryParams).then((response) => {
const page = response.query.pages[0];
let content = '';
let contentmodel = 'wikitext';
let isOldRevision = false;
let revisionInfo = null;
let isMissingPage = false;
if (page.revisions && page.revisions.length) {
const rev = page.revisions[0];
content = rev.content;
contentmodel = rev.contentmodel;
if (revisionId) {
isOldRevision = String(rev.revid) !== String(page.lastrevid);
revisionInfo = { timestamp: rev.timestamp, user: rev.user, revid: rev.revid };
}
} else if (page.missing) {
isMissingPage = true;
} else {
mw.notify('Failed to load page content.', { type: 'error' });
this.isEditorOpen = false;
return;
}
if (!this.contentmodels.includes(contentmodel)) {
mw.notify('Page content model is not a simple text-based one.', {
title: 'Unsupported content model',
type: 'error',
autoHide: true,
autoHideSeconds: 5,
tag: 'MaxEdit-notification'
});
this.isEditorOpen = false;
return;
}
this.mountEditor({
content,
contentmodel,
section,
sectionName,
sectionHeading: $sectionHeading,
isOldRevision,
revisionInfo,
isMissingPage,
revisionId,
initialLastRevId: page.missing ? null : page.lastrevid
});
}, () => {
mw.notify('API error while loading the page.', { type: 'error' });
this.isEditorOpen = false;
});
},
mountEditor(state) {
const hasSectionHeading = state.section !== undefined && state.section !== null &&
state.sectionHeading && state.sectionHeading.length;
if (hasSectionHeading) {
const elements = this.getSectionElements(state.sectionHeading);
this.hiddenElements = $(elements);
this.hiddenElements.hide();
$('<div>').attr('id', 'MaxEdit-main').insertAfter(this.hiddenElements.last());
} else {
this.hiddenElements = null;
$('#mw-content-text').hide();
$('<div>').attr('id', 'MaxEdit-main').insertAfter('#mw-content-text');
}
const EditorComponent = this.getEditorComponent(state);
this.vueApp = this.Vue.createMwApp(EditorComponent);
this.vueApp.mount('#MaxEdit-main');
setTimeout(() => {
this.scrollToElement(document.getElementById('MaxEdit-main'), -50);
}, 100);
},
closeEditor() {
if (this.vueApp) {
this.vueApp.unmount();
this.vueApp = null;
}
$('#MaxEdit-main').remove();
if (this.hiddenElements && this.hiddenElements.length) {
this.hiddenElements.show();
} else {
$('#mw-content-text').show();
}
this.hiddenElements = null;
this.isEditorOpen = false;
},
getEditorComponent(state) {
const Codex = this.Codex;
const pagename = this.pagename;
const version = this.version;
const icons = this.icons;
const undoIconHtml = this.undoIconHtml;
const predefinedSummaries = this.predefinedSummaries;
const prefsStore = this.prefs;
const closeEditor = () => this.closeEditor();
return {
components: {
CdxButton: Codex.CdxButton,
CdxTextArea: Codex.CdxTextArea,
CdxTextInput: Codex.CdxTextInput,
CdxCheckbox: Codex.CdxCheckbox,
CdxRadio: Codex.CdxRadio,
CdxField: Codex.CdxField,
CdxMessage: Codex.CdxMessage,
CdxProgressBar: Codex.CdxProgressBar,
CdxIcon: Codex.CdxIcon,
CdxTabs: Codex.CdxTabs,
CdxTab: Codex.CdxTab,
CdxAccordion: Codex.CdxAccordion,
CdxDialog: Codex.CdxDialog
},
data() {
return {
pagename,
version,
predefinedSummaries,
contentmodel: state.contentmodel,
section: state.section !== undefined ? state.section : null,
sectionName: state.sectionName || '',
isOldRevision: state.isOldRevision,
revisionInfo: state.revisionInfo,
isMissingPage: state.isMissingPage,
revisionId: state.revisionId,
initialLastRevId: state.initialLastRevId,
newerRevisionAvailable: false,
originalContent: state.content,
textareaValue: state.content,
summaryValue: '',
minorChecked: false,
summaryPickerOpen: false,
activeTab: 'edit',
useCodeMirror: true,
codeMirrorInstance: null,
previewLoading: false,
previewError: '',
previewHtml: '',
previewStale: true,
previewLoadedOnce: false,
reviewLoading: false,
reviewError: '',
reviewEmpty: false,
reviewHtml: '',
reviewStale: true,
reviewLoadedOnce: false,
diffLineOffset: 0,
diffRevId: null,
saving: false,
justSaved: false,
saveStatus: null,
conflictDialogOpen: false,
conflictMessage: '',
checkIcon: icons.cdxIconCheck || null,
closeIcon: icons.cdxIconClose || null,
settingsIcon: icons.cdxIconSettings || null,
addIcon: icons.cdxIconAdd || null,
trashIcon: icons.cdxIconTrash || null,
undoIconSvg: undoIconHtml || '↺',
customSummaries: [],
summaryMode: 'both',
currentEditorModePref: 'codemirror',
prefsDialogOpen: false,
prefsDraft: {
editorMode: 'codemirror',
customSummaries: [],
summaryMode: 'both'
},
newSummaryDraft: ''
};
},
computed: {
pagenameDisplay() {
return this.pagename.replace(/_/g, ' ');
},
formattedRevisionDate() {
if (!this.revisionInfo) {
return '';
}
return new Date(this.revisionInfo.timestamp).toLocaleString('en-GB', {
hour12: false,
hour: '2-digit',
minute: '2-digit',
day: 'numeric',
month: 'long',
year: 'numeric'
});
},
userPageUrl() {
return this.revisionInfo ? mw.util.getUrl('User:' + this.revisionInfo.user) : '#';
},
userTalkUrl() {
return this.revisionInfo ? mw.util.getUrl('User talk:' + this.revisionInfo.user) : '#';
},
userContribsUrl() {
return this.revisionInfo ? mw.util.getUrl('Special:Contributions/' + this.revisionInfo.user) : '#';
},
textareaEl() {
const wrap = this.$refs.textareaWrap;
return wrap && wrap.$el ? wrap.$el.querySelector('textarea') : null;
},
codeMirrorSupported() {
return CODE_MIRROR_MODE_MAP[this.contentmodel] !== undefined;
},
hasUnsavedChanges() {
if (this.justSaved) {
return false;
}
return this.textareaValue !== this.originalContent || this.summaryValue.trim() !== '';
},
editorModeOptions() {
return [
{ value: 'codemirror', label: 'Syntax highlighted (CodeMirror)' },
{ value: 'plain', label: 'Plain text' }
];
},
effectiveSummaries() {
const customs = this.customSummaries.map((label, idx) => ({
value: 'MaxEdit-custom-' + idx,
label
}));
if (this.summaryMode === 'custom' && customs.length) {
return customs;
}
return predefinedSummaries.concat(customs);
}
},
watch: {
activeTab(newTab) {
if (newTab === 'preview' && (this.previewStale || !this.previewLoadedOnce)) {
this.loadPreview();
} else if (newTab === 'changes') {
if (this.reviewStale || !this.reviewLoadedOnce) {
this.loadReview();
} else {
this.$nextTick(() => this.setupDiffUndo());
}
}
},
textareaValue(newVal) {
this.previewStale = true;
this.reviewStale = true;
this.syncCodeMirrorContent(newVal);
},
useCodeMirror(enabled) {
if (enabled) {
this.initCodeMirror();
} else {
this.destroyCodeMirror();
}
},
newerRevisionAvailable(val) {
if (val && !this.justSaved) {
this.reviewStale = true;
if (this.activeTab === 'changes') {
this.loadReview();
}
}
}
},
mounted() {
this.loadPreferences();
this.checkForNewerRevision();
this._pollTimer = setInterval(() => this.checkForNewerRevision(), 25000);
this._beforeUnloadHandler = (e) => {
if (this.hasUnsavedChanges) {
e.preventDefault();
e.returnValue = '';
}
};
window.addEventListener('beforeunload', this._beforeUnloadHandler);
this._keyHandler = (e) => {
if (this.conflictDialogOpen) {
return;
}
if ((e.ctrlKey || e.metaKey) && e.key === 'Enter') {
e.preventDefault();
if (!this.saving) {
this.save();
}
} else if (e.key === 'Escape') {
this.close();
}
};
window.addEventListener('keydown', this._keyHandler);
if (this.useCodeMirror && this.codeMirrorSupported) {
this.initCodeMirror();
}
},
beforeUnmount() {
this.destroyCodeMirror();
clearInterval(this._pollTimer);
window.removeEventListener('beforeunload', this._beforeUnloadHandler);
window.removeEventListener('keydown', this._keyHandler);
},
methods: {
close() {
if (this.hasUnsavedChanges && !window.confirm('Discard your unsaved changes?')) {
return;
}
closeEditor();
},
async initCodeMirror() {
if (this.codeMirrorInstance || !this.codeMirrorSupported) {
return;
}
await this.$nextTick();
const textareaEl = this.textareaEl;
if (!textareaEl) {
return;
}
const modeKey = CODE_MIRROR_MODE_MAP[this.contentmodel];
try {
const instance = modeKey === 'mediawiki'
? await loadCodeMirrorForWikitext(textareaEl)
: await loadCodeMirrorForMode(textareaEl, modeKey);
if (!instance) {
this.useCodeMirror = false;
return;
}
this.codeMirrorInstance = instance;
this._cmInputHandler = ({ view }) => {
if (view !== instance.view) {
return;
}
const newContent = view.state.sliceDoc();
if (newContent !== this.textareaValue) {
this.textareaValue = newContent;
}
};
mw.hook('ext.CodeMirror.input').add(this._cmInputHandler);
} catch (e) {
mw.notify('Could not load syntax highlighting; using plain text instead.', { type: 'warn' });
this.useCodeMirror = false;
}
},
destroyCodeMirror() {
if (this._cmInputHandler) {
mw.hook('ext.CodeMirror.input').remove(this._cmInputHandler);
this._cmInputHandler = null;
}
if (this.codeMirrorInstance && this.codeMirrorInstance.isActive) {
this.codeMirrorInstance.destroy();
}
this.codeMirrorInstance = null;
},
syncCodeMirrorContent(newVal) {
const instance = this.codeMirrorInstance;
if (!instance || !instance.view) {
return;
}
const view = instance.view;
const current = view.state.sliceDoc();
if (current === newVal) {
return;
}
const { from, to, insert } = computeMinimalChange(current, newVal);
const transaction = view.state.update({ changes: { from, to, insert } });
view.dispatch(transaction);
},
async checkForNewerRevision() {
if (this.saving || this.justSaved) {
return;
}
if (this.initialLastRevId === null || this.initialLastRevId === undefined) {
return;
}
try {
const res = await new mw.Api().get({
action: 'query',
titles: this.pagename,
prop: 'info',
formatversion: 2
});
if (this.saving || this.justSaved) {
return;
}
const page = res.query.pages[0];
if (page && !page.missing && String(page.lastrevid) !== String(this.initialLastRevId)) {
this.newerRevisionAvailable = true;
}
} catch (e) { /* empty */ }
},
appendSummary(label) {
this.summaryValue = this.summaryValue ? `${this.summaryValue}; ${label}` : label;
},
async loadPreview() {
this.previewLoading = true;
this.previewError = '';
try {
const res = await new mw.Api().post({
action: 'parse',
text: this.textareaValue,
title: this.pagename,
contentmodel: this.contentmodel,
pst: true,
formatversion: 2
});
this.previewHtml = res.parse.text;
this.previewStale = false;
this.previewLoadedOnce = true;
} catch (e) {
this.previewError = 'Error generating preview.';
}
this.previewLoading = false;
},
async computeDiffLineOffset() {
if (this.section === null || this.section === undefined) {
this.diffLineOffset = 0;
return true;
}
try {
const res = await new mw.Api().get({
action: 'parse',
page: this.pagename,
prop: 'revid|sections|wikitext',
formatversion: 2
});
const revid = res.parse.revid;
if (revid === this.diffRevId) {
return true;
}
const sectionInfo = res.parse.sections.find(
(s) => String(s.index) === String(this.section)
);
if (!sectionInfo) {
mw.notify("Couldn't get the section offset.", { tag: 'MaxEdit-diffundo', type: 'error' });
return false;
}
const charOffset = sectionInfo.byteoffset;
const wikitext = res.parse.wikitext;
this.diffLineOffset = charOffset
? wikitext.slice(0, charOffset).split('\n').length - 1
: 0;
this.diffRevId = revid;
return true;
} catch (e) {
this.diffLineOffset = 0;
return true;
}
},
async loadReview() {
this.reviewLoading = true;
this.reviewError = '';
this.reviewEmpty = false;
this.reviewHtml = '';
const offsetOk = await this.computeDiffLineOffset();
if (!offsetOk) {
this.reviewLoading = false;
this.reviewError = "Couldn't get the section offset.";
return;
}
try {
const compareParams = {
action: 'compare',
fromtitle: this.pagename,
toslots: 'main',
'totext-main': this.textareaValue,
formatversion: 2
};
if (this.section !== null && this.section !== undefined) {
compareParams.fromsection = this.section;
}
if (this.revisionId) {
compareParams.fromrev = this.revisionId;
}
const res = await new mw.Api().get(compareParams);
if (!res.compare || res.compare.body === '') {
this.reviewEmpty = true;
} else {
this.reviewHtml =
'<table class="diff diff-editfont-monospace" style="margin:auto;font-size:small;">' +
'<colgroup><col class="diff-marker"><col class="diff-content">' +
'<col class="diff-marker"><col class="diff-content"></colgroup>' +
'<tbody>' + res.compare.body + '</tbody></table>';
await this.$nextTick();
if (this.$refs.diffOutput) {
mw.hook('wikipage.diff').fire($(this.$refs.diffOutput));
}
this.setupDiffUndo();
}
this.reviewStale = false;
this.reviewLoadedOnce = true;
} catch (e) {
this.reviewError = 'Error generating diff.';
}
this.reviewLoading = false;
},
setupDiffUndo() {
const diffEl = this.$refs.diffOutput;
if (!diffEl) {
return;
}
const $diff = $(diffEl);
const $rows = $diff.find('table.diff > tbody > tr');
if (!$rows.length) {
return;
}
const offset = this.diffLineOffset;
const normalize = (text) => (text === '\u00A0' ? '' : text);
let lineIdx = null;
const contentRows = [];
$rows.each((_, row) => {
const $row = $(row);
const $lineNoCell = $row.children('.diff-lineno').last();
if ($lineNoCell.length) {
const num = $lineNoCell.text().replace(/\D/g, '');
if (num) {
lineIdx = Number(num) - 1 - offset;
}
return;
}
if (lineIdx === null) {
return;
}
const hasAdded = $row.children('.diff-addedline').length > 0;
const hasDeleted = $row.children('.diff-deletedline').length > 0;
const hasContext = $row.children('.diff-context').length > 0;
if (!hasAdded && !hasDeleted && !hasContext) {
return;
}
if (hasAdded || hasDeleted) {
$row.data('maxedit-line-idx', lineIdx);
contentRows.push($row);
}
const isUndone = $row.hasClass('MaxEdit-diffundo-undone');
const isPresentNow = hasContext
? true
: (isUndone ? hasDeleted : hasAdded);
if (isPresentNow) {
lineIdx += 1;
}
});
const shiftFollowingRows = ($row, delta) => {
if (!delta) {
return;
}
let found = false;
contentRows.forEach(($r) => {
if (found) {
const current = $r.data('maxedit-line-idx');
if (current !== undefined) {
$r.data('maxedit-line-idx', current + delta);
}
return;
}
if ($r.is($row)) {
found = true;
}
});
};
const handleUndo = ($row) => {
const rowLineIdx = $row.data('maxedit-line-idx');
if (rowLineIdx === undefined || rowLineIdx === null) {
mw.notify("Couldn't get the line number.", { tag: 'MaxEdit-diffundo', type: 'error' });
return;
}
const isUndone = $row.hasClass('MaxEdit-diffundo-undone');
const $toReplace = $row.children(isUndone ? '.diff-deletedline' : '.diff-addedline');
const $toRestore = $row.children(isUndone ? '.diff-addedline' : '.diff-deletedline');
const isInsert = !$toReplace.length;
const isRemove = !$toRestore.length;
const lines = this.textareaValue.split('\n');
let delta = 0;
if (isInsert) {
if (rowLineIdx > lines.length) {
mw.notify('The line has been modified since the diff.', { tag: 'MaxEdit-diffundo', type: 'warn' });
return;
}
lines.splice(rowLineIdx, 0, $toRestore.text());
delta = 1;
} else {
const expected = normalize($toReplace.text());
if (normalize(lines[rowLineIdx]) !== expected) {
mw.notify('The line has been modified since the diff.', { tag: 'MaxEdit-diffundo', type: 'warn' });
return;
}
if (isRemove) {
lines.splice(rowLineIdx, 1);
delta = -1;
} else {
lines.splice(rowLineIdx, 1, $toRestore.text());
delta = 0;
}
}
this.textareaValue = lines.join('\n');
$row.toggleClass('MaxEdit-diffundo-undone', !isUndone);
shiftFollowingRows($row, delta);
};
contentRows.forEach(($row) => {
const $target = $row.children('.diff-addedline').length
? $row.children('.diff-addedline')
: $row.children('.diff-empty.diff-side-added');
if (!$target.length) {
return;
}
const btn = document.createElement('button');
btn.type = 'button';
btn.className = 'MaxEdit-diffundo-btn';
btn.title = 'Undo this line';
btn.innerHTML = this.undoIconSvg;
btn.addEventListener('click', () => handleUndo($row));
$target.get(0).appendChild(btn);
});
},
loadPreferences() {
const editorMode = prefsStore.get('editor-mode', 'codemirror');
const customSummaries = prefsStore.get('custom-summaries', []);
const summaryMode = prefsStore.get('summary-mode', 'both');
this.currentEditorModePref = editorMode === 'plain' ? 'plain' : 'codemirror';
this.customSummaries = Array.isArray(customSummaries) ? customSummaries.slice(0, 10) : [];
this.summaryMode = summaryMode === 'custom' ? 'custom' : 'both';
this.useCodeMirror = this.currentEditorModePref !== 'plain';
},
openPrefs() {
this.prefsDraft = {
editorMode: this.currentEditorModePref,
customSummaries: this.customSummaries.slice(),
summaryMode: this.summaryMode
};
this.newSummaryDraft = '';
this.prefsDialogOpen = true;
},
closePrefs() {
this.prefsDialogOpen = false;
},
addCustomSummary() {
const value = this.newSummaryDraft.trim();
if (!value || this.prefsDraft.customSummaries.length >= 10) {
return;
}
this.prefsDraft.customSummaries.push(value);
this.newSummaryDraft = '';
},
removeCustomSummary(idx) {
this.prefsDraft.customSummaries.splice(idx, 1);
},
async savePrefs() {
const draft = this.prefsDraft;
const customSummaries = draft.customSummaries
.map((s) => s.trim())
.filter(Boolean)
.slice(0, 10);
this.customSummaries = customSummaries;
this.summaryMode = draft.summaryMode === 'custom' ? 'custom' : 'both';
this.currentEditorModePref = draft.editorMode === 'plain' ? 'plain' : 'codemirror';
if (this.currentEditorModePref === 'plain') {
this.useCodeMirror = false;
} else if (this.codeMirrorSupported) {
this.useCodeMirror = true;
}
this.prefsDialogOpen = false;
await Promise.all([
prefsStore.set('editor-mode', this.currentEditorModePref),
prefsStore.set('custom-summaries', customSummaries),
prefsStore.set('summary-mode', this.summaryMode)
]);
mw.notify('Preferences saved.', {
type: 'success',
autoHide: true,
autoHideSeconds: 5,
tag: 'MaxEdit-notification'
});
},
save() {
this.saving = true;
this.saveStatus = { type: 'notice', message: 'Saving…' };
let summary = this.summaryValue || '';
if (this.sectionName) {
summary = `/* ${this.sectionName} */ ${summary}`;
}
summary += ' ([[:m:User:Max/MaxEdit.js|MaxEdit]])';
const editParams = {
action: 'edit',
title: this.pagename,
text: this.textareaValue,
discussiontoolsautosubscribe: 'no',
summary,
formatversion: 2
};
if (this.section !== null && this.section !== undefined) {
editParams.section = this.section;
}
if (this.minorChecked) {
editParams.minor = true;
}
new mw.Api().postWithEditToken(editParams).then(
(res) => {
this.saving = false;
if (res.edit && res.edit.result === 'Success') {
this.justSaved = true;
this.newerRevisionAvailable = false;
this.originalContent = this.textareaValue;
this.summaryValue = '';
clearInterval(this._pollTimer);
window.removeEventListener('beforeunload', this._beforeUnloadHandler);
this.saveStatus = { type: 'success', message: 'Page saved successfully! Reloading…' };
mw.notify('Page saved successfully!', {
title: 'Saved',
type: 'success',
autoHide: true,
autoHideSeconds: 5,
tag: 'MaxEdit-notification'
});
location.reload();
return;
}
this.saveStatus = { type: 'error', message: 'Error saving page.' };
},
(code, data) => {
this.saving = false;
if (code === 'editconflict') {
this.saveStatus = null;
this.conflictMessage = (data && data.error && data.error.info) ||
'An edit conflict occurred. Please resolve it manually.';
this.conflictDialogOpen = true;
return;
}
const info = (data && data.error && data.error.info) || 'Error saving page.';
this.saveStatus = { type: 'error', message: info };
}
);
}
},
template: `
<div class="MaxEdit-editor">
<div class="MaxEdit-header">
<div>
<div class="MaxEdit-header-title">MaxEdit<span class="MaxEdit-version">v{{ version }}</span></div>
<div class="MaxEdit-header-meta">
<span>{{ pagenameDisplay }}</span>
<span v-if="sectionName" class="MaxEdit-chip">{{ sectionName }}</span>
<span v-if="isOldRevision" class="MaxEdit-chip MaxEdit-chip--warning">Old revision</span>
</div>
</div>
<cdx-button weight="quiet" aria-label="Preferences" class="MaxEdit-settings-btn" @click="openPrefs">
<cdx-icon v-if="settingsIcon" :icon="settingsIcon"></cdx-icon>
<span v-else>⚙</span>
</cdx-button>
</div>
<cdx-message v-if="isOldRevision && revisionInfo && !justSaved" type="warning" :allow-user-dismiss="false" class="MaxEdit-banner">
<strong>Warning:</strong> you are editing an out-of-date revision of this page, from {{ formattedRevisionDate }} by
<a :href="userPageUrl" target="_blank" rel="noopener">{{ revisionInfo.user }}</a>
(<a :href="userTalkUrl" target="_blank" rel="noopener">talk</a> | <a :href="userContribsUrl" target="_blank" rel="noopener">contribs</a>).
If you publish it, any changes made since this revision will be lost.
</cdx-message>
<cdx-message v-if="newerRevisionAvailable && !justSaved" type="warning" :allow-user-dismiss="true" @user-dismissed="newerRevisionAvailable = false" class="MaxEdit-banner">
<strong>Warning:</strong> this page has been edited by someone else since you opened this editor.
Check the "Changes" tab before saving so you don't accidentally overwrite their edit.
</cdx-message>
<cdx-message v-if="isMissingPage && !justSaved" type="success" :allow-user-dismiss="false" class="MaxEdit-banner">
<strong>Warning:</strong> this page doesn't exist yet — saving will create it.
</cdx-message>
<cdx-message v-if="sectionName && !justSaved" type="notice" :allow-user-dismiss="false" class="MaxEdit-banner">
<strong>Warning:</strong> you're editing the "{{ sectionName }}" section.
</cdx-message>
<cdx-tabs v-model:active="activeTab" class="MaxEdit-tabs">
<cdx-tab name="edit" label="Edit">
<cdx-field class="MaxEdit-field">
<cdx-text-area ref="textareaWrap" v-model="textareaValue" :rows="16" class="MaxEdit-textarea"></cdx-text-area>
<div v-if="codeMirrorSupported" class="MaxEdit-editor-toggle">
<a href="#" @click.prevent="useCodeMirror = !useCodeMirror">
{{ useCodeMirror ? 'Switch to plain text editor' : 'Switch to syntax-highlighted editor' }}
</a>
</div>
</cdx-field>
<cdx-accordion v-model:open="summaryPickerOpen" class="MaxEdit-summary-accordion">
<template #title>Quick summaries</template>
<div class="MaxEdit-summary-buttons">
<cdx-button
v-for="s in effectiveSummaries"
:key="s.value"
size="small"
@click="appendSummary(s.label)"
>{{ s.label }}</cdx-button>
</div>
</cdx-accordion>
<cdx-field class="MaxEdit-field">
<template #label>Edit summary</template>
<cdx-text-input v-model="summaryValue" placeholder="Describe your changes"></cdx-text-input>
</cdx-field>
<cdx-checkbox v-model="minorChecked" class="MaxEdit-field">Minor edit</cdx-checkbox>
</cdx-tab>
<cdx-tab name="preview" label="Preview">
<cdx-progress-bar v-if="previewLoading" aria-label="Loading preview"></cdx-progress-bar>
<cdx-message v-else-if="previewError" type="error" :allow-user-dismiss="false">{{ previewError }}</cdx-message>
<div v-else class="MaxEdit-preview-content" v-html="previewHtml"></div>
</cdx-tab>
<cdx-tab name="changes" label="Changes">
<cdx-progress-bar v-if="reviewLoading" aria-label="Loading changes"></cdx-progress-bar>
<cdx-message v-else-if="reviewError" type="error" :allow-user-dismiss="false">{{ reviewError }}</cdx-message>
<cdx-message v-else-if="reviewEmpty" type="notice" :allow-user-dismiss="false">No changes to show.</cdx-message>
<div v-show="!reviewLoading && !reviewError && !reviewEmpty" ref="diffOutput" class="MaxEdit-diff-content" v-html="reviewHtml"></div>
</cdx-tab>
</cdx-tabs>
<cdx-message v-if="saveStatus" :type="saveStatus.type" :allow-user-dismiss="false" class="MaxEdit-banner">
{{ saveStatus.message }}
</cdx-message>
<div class="MaxEdit-actions">
<cdx-button weight="primary" action="progressive" :disabled="saving || justSaved" @click="save">
<cdx-icon v-if="checkIcon" :icon="checkIcon"></cdx-icon>
Save
</cdx-button>
<cdx-button weight="primary" action="destructive" :disabled="saving || justSaved" @click="close">
<cdx-icon v-if="closeIcon" :icon="closeIcon"></cdx-icon>
Cancel
</cdx-button>
</div>
<cdx-dialog
v-model:open="conflictDialogOpen"
title="Edit conflict"
close-button-label="Close"
:use-close-button="true"
>
{{ conflictMessage }}
</cdx-dialog>
<cdx-dialog
v-model:open="prefsDialogOpen"
title="MaxEdit preferences"
close-button-label="Close"
:use-close-button="true"
:primary-action="{ label: 'Save', actionType: 'progressive' }"
:default-action="{ label: 'Cancel' }"
@primary="savePrefs"
@default="closePrefs"
>
<cdx-field class="MaxEdit-prefs-field">
<template #label>Default editor mode</template>
<cdx-radio
v-for="option in editorModeOptions"
:key="option.value"
v-model="prefsDraft.editorMode"
name="MaxEdit-editor-mode"
:input-value="option.value"
>{{ option.label }}</cdx-radio>
</cdx-field>
<cdx-field class="MaxEdit-prefs-field">
<template #label>Custom quick summaries</template>
<template #description>Add up to 10 of your own quick summary buttons.</template>
<div class="MaxEdit-prefs-summary-list">
<div v-for="(summary, idx) in prefsDraft.customSummaries" :key="idx" class="MaxEdit-prefs-summary-row">
<cdx-text-input v-model="prefsDraft.customSummaries[idx]"></cdx-text-input>
<cdx-button weight="quiet" action="destructive" aria-label="Remove summary" @click="removeCustomSummary(idx)">
<cdx-icon v-if="trashIcon" :icon="trashIcon"></cdx-icon>
<span v-else>×</span>
</cdx-button>
</div>
</div>
<div v-if="prefsDraft.customSummaries.length < 10" class="MaxEdit-prefs-summary-add">
<cdx-text-input v-model="newSummaryDraft" placeholder="New quick summary" @keyup.enter="addCustomSummary"></cdx-text-input>
<cdx-button weight="quiet" action="progressive" aria-label="Add summary" @click="addCustomSummary">
<cdx-icon v-if="addIcon" :icon="addIcon"></cdx-icon>
<span v-else>+</span>
</cdx-button>
</div>
</cdx-field>
<cdx-field v-if="prefsDraft.customSummaries.length" class="MaxEdit-prefs-field">
<template #label>Quick summary buttons to show</template>
<cdx-radio v-model="prefsDraft.summaryMode" name="MaxEdit-summary-mode" input-value="both">Default and custom summaries</cdx-radio>
<cdx-radio v-model="prefsDraft.summaryMode" name="MaxEdit-summary-mode" input-value="custom">Custom summaries only</cdx-radio>
</cdx-field>
</cdx-dialog>
</div>
`
};
},
setupTriggers() {
$(document).ready(() => {
this.checkForEditAction();
this.addTopButton();
this.addSectionButtons();
});
$(window).on('popstate', () => this.checkForEditAction());
$(window).on('beforeunload', () => {
this.isEditorOpen = false;
});
},
checkForEditAction() {
if (mw.config.get('wgAction') === 'edit' && this.isEditorOpen) {
this.closeEditor();
}
},
addTopButton() {
if ($('#MaxEdit-Edit-TopBtn').length) {
return;
}
if (!($('#ca-edit').length || mw.config.get('wgArticleId') === 0)) {
return;
}
const skin = mw.config.get('skin');
let $btn;
if (skin === 'vector-2022') {
$btn = $('<li>')
.attr('id', 'MaxEdit-Edit-TopBtn')
.addClass('vector-tab-noicon mw-list-item')
.append($('<a>').attr('href', '#').append($('<span>').text('MaxEdit')));
} else if (skin === 'minerva') {
$btn = $('<li>')
.attr('id', 'MaxEdit-Edit-TopBtn')
.css({ 'align-items': 'center', display: 'flex' })
.append(
$('<span>').addClass('page-actions-menu__list-item').append(
$('<a>')
.attr('href', '#')
.addClass('mw-ui-icon mw-ui-icon-element mw-ui-icon-wikimedia-edit-base20 mw-ui-icon-with-label-desktop')
.css('vertical-align', 'middle')
.text('MaxEdit')
)
);
} else {
$btn = $('<li>')
.attr('id', 'MaxEdit-Edit-TopBtn')
.append($('<span>').append($('<a>').attr('href', '#').text('MaxEdit')));
}
if (skin === 'minerva') {
if ($('#ca-edit').length) {
$('#ca-edit').parent().after($btn);
} else {
$('#page-actions ul').append($btn);
}
} else if ($('#ca-edit').length) {
$('#ca-edit').after($btn);
} else {
$('#ca-talk').after($btn);
}
$btn.find('a').on('click', (e) => {
e.preventDefault();
this.openEditor();
});
},
addSectionButtons() {
$('.mw-editsection').each((_, el) => {
const $section = $(el);
if ($section.find('.MaxEdit-section-edit, .MaxEdit-minerva-section-edit').length) {
return;
}
const $editLink = $section.find('a[href*="action=edit"]').first();
if (!$editLink.length) {
return;
}
const href = $editLink.attr('href');
const urlParams = new URLSearchParams(href.split('?')[1]);
const section = urlParams.get('section');
if (section === null) {
return;
}
const $headingWrapper = $section.closest('.mw-heading');
const $header = $headingWrapper.length
? $headingWrapper.find('h1, h2, h3, h4, h5, h6').first()
: $section.closest('h1, h2, h3, h4, h5, h6');
const $headerClone = $header.length ? $header.clone() : null;
if ($headerClone) {
$headerClone.find('.ext-checkuser-tempaccount-reveal-ip').remove();
}
const sectionName = ($headerClone && $headerClone.text().trim()) || ('Section ' + section);
const $sectionHeading = $headingWrapper.length ? $headingWrapper : $header;
if (mw.config.get('skin') === 'minerva') {
const $drButton = $('<a>')
.addClass('MaxEdit-minerva-section-edit cdx-button cdx-button--size-large cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet')
.css('margin-left', '8px')
.attr('href', '#')
.attr('title', `Edit section with MaxEdit: ${sectionName}`)
.text('MaxEdit')
.on('click', (e) => {
e.preventDefault();
this.openEditor(section, sectionName, $sectionHeading);
});
$editLink.after($drButton);
} else {
const $btn = $('<a>')
.addClass('MaxEdit-section-edit')
.attr('href', '#')
.text('MaxEdit')
.on('click', (e) => {
e.preventDefault();
this.openEditor(section, sectionName, $sectionHeading);
});
$section.find('.mw-editsection-bracket').last().before(', ').before($btn);
}
});
}
};
MaxEdit.init();
});
// </nowiki>
m0btgng4cilra5w0kz91575zq4lbu7x
759907
759906
2026-09-02T02:49:16Z
Dreamyshade
20227
Restore
759907
javascript
text/javascript
<!-- mw.loader.load('http://localhost:4444?ctype=text/javascript&title=afch-dev.js', 'text/javascript'); -->
6b2cbkt3pfimxv3txnnuk5o66pmbi67
Climate system
0
178157
759876
2026-09-01T14:05:50Z
Lina Farid (WMDE)
61392
Test article for user testing
759876
wikitext
text/x-wiki
[[File:Climate-system.jpg|thumb|The five components of the climate system all interact. They are the [[Atmosphere of Earth|atmosphere]], the [[hydrosphere]], the [[cryosphere]], the [[lithosphere]] and the [[biosphere]].
Earth's '''climate system''' is a [[:en:Complex_system|complex system]] with five interacting components: the [[:en:Atmosphere_of_Earth|atmosphere]] (air), the [[:en:Hydrosphere|hydrosphere]] (water), the [[:en:Cryosphere|cryosphere]] (ice and permafrost), the [[:en:Lithosphere|lithosphere]] (earth's upper rocky layer) and the [[:en:Biosphere|biosphere]] (living things). ''[[:en:Climate|Climate]]'' is the statistical characterization of the climate system. It represents the average [[:en:Weather|weather]], typically over a period of 30 years, and is determined by a combination of processes, such as [[:en:Ocean_current|ocean currents]] and wind patterns.<ref>{{Cite web |title=Climate systems |url=https://climatechange.environment.nsw.gov.au/About-climate-change-in-NSW/Climate-systems |url-status=live |archive-url=https://web.archive.org/web/20190506123249/https://climatechange.environment.nsw.gov.au/About-climate-change-in-NSW/Climate-systems |archive-date=2019-05-06 |access-date=2019-05-06 |website=climatechange.environment.nsw.gov.au}}</ref><ref>{{Cite web |title=Earth's climate system |url=https://worldoceanreview.com/en/wor-1/climate-system/earth-climate-system/ |access-date=2019-10-13 |website=World Ocean Review |language=en-US}}</ref> Circulation in the atmosphere and oceans transports heat from the [[:en:Tropical_regions|tropical regions]] to regions that receive less energy from the Sun. [[:en:Solar_radiation|Solar radiation]] is the main driving force for this circulation. The [[:en:Water_cycle|water cycle]] also moves energy throughout the climate system. In addition, certain chemical elements are constantly moving between the components of the climate system. Two examples for these [[:en:Biogeochemical_cycle|biochemical cycles]] are the [[:en:Carbon_cycle|carbon]] and [[:en:Nitrogen_cycle|nitrogen cycles]].
The climate system can change due to [[:en:Climate_variability|internal variability]] and [[:en:Radiative_forcing|external forcings]]. These external forcings can be natural, such as [[:en:Solar_activity_and_climate|variations in solar intensity]] and volcanic eruptions, or caused by humans. Accumulation of [[:en:Greenhouse_gas|greenhouse gases]] in the atmosphere, mainly being emitted by people burning [[:en:Fossil_fuel|fossil fuels]], is causing [[:en:Climate_change|climate change]]. Human activity also releases cooling [[:en:Aerosols|aerosols]], but their net effect is far less than that of greenhouse gases. Changes can be amplified by [[:en:Climate_change_feedback|feedback processes]] in the different climate system components.
== Components ==
The ''atmosphere'' envelops the earth and extends hundreds of kilometres from the surface. It consists mostly of inert [[:en:Nitrogen|nitrogen]] (78%), [[:en:Oxygen|oxygen]] (21%) and [[:en:Argon|argon]] (0.9%).<ref>{{harvnb|Barry|Hall-McKim|2014|p=22}}; {{harvnb|Goosse|2015|loc=section 1.2.1}}.</ref> Some trace gases in the atmosphere, such as [[:en:Water_vapour|water vapour]] and [[:en:Carbon_dioxide|carbon dioxide]], are the gases most important for the workings of the climate system, as they are [[:en:Greenhouse_gases|greenhouse gases]] which allow visible light from the [[:en:Sun|Sun]] to penetrate to the surface, but block some of the [[:en:Infrared|infrared]] radiation the Earth's surface emits to balance the Sun's radiation. This causes surface temperatures to rise.{{sfn|Gettelman|Rood|2016|pp=14–15}}
The [[:en:Hydrological_cycle|hydrological cycle]] is the movement of water through the climate system. Not only does the hydrological cycle determine patterns of [[:en:Precipitation|precipitation]], it also has an influence on the movement of energy throughout the climate system.{{sfn|Gettelman|Rood|2016|p=16}}
<references />
mouqpd53b2427c2un4aququtv7i6wtz
759877
759876
2026-09-01T14:08:29Z
Johannes Richter (WMDE)
61456
fix
759877
wikitext
text/x-wiki
[[File:Climate-system.jpg|thumb|The five components of the climate system all interact. They are the [[Atmosphere of Earth|atmosphere]], the [[hydrosphere]], the [[cryosphere]], the [[lithosphere]] and the [[biosphere]].|330x330px]]
Earth's '''climate system''' is a [[:en:Complex_system|complex system]] with five interacting components: the [[:en:Atmosphere_of_Earth|atmosphere]] (air), the [[:en:Hydrosphere|hydrosphere]] (water), the [[:en:Cryosphere|cryosphere]] (ice and permafrost), the [[:en:Lithosphere|lithosphere]] (earth's upper rocky layer) and the [[:en:Biosphere|biosphere]] (living things). ''[[:en:Climate|Climate]]'' is the statistical characterization of the climate system. It represents the average [[:en:Weather|weather]], typically over a period of 30 years, and is determined by a combination of processes, such as [[:en:Ocean_current|ocean currents]] and wind patterns.<ref>{{Cite web |title=Climate systems |url=https://climatechange.environment.nsw.gov.au/About-climate-change-in-NSW/Climate-systems |url-status=live |archive-url=https://web.archive.org/web/20190506123249/https://climatechange.environment.nsw.gov.au/About-climate-change-in-NSW/Climate-systems |archive-date=2019-05-06 |access-date=2019-05-06 |website=climatechange.environment.nsw.gov.au}}</ref><ref>{{Cite web |title=Earth's climate system |url=https://worldoceanreview.com/en/wor-1/climate-system/earth-climate-system/ |access-date=2019-10-13 |website=World Ocean Review |language=en-US}}</ref> Circulation in the atmosphere and oceans transports heat from the [[:en:Tropical_regions|tropical regions]] to regions that receive less energy from the Sun. [[:en:Solar_radiation|Solar radiation]] is the main driving force for this circulation. The [[:en:Water_cycle|water cycle]] also moves energy throughout the climate system. In addition, certain chemical elements are constantly moving between the components of the climate system. Two examples for these [[:en:Biogeochemical_cycle|biochemical cycles]] are the [[:en:Carbon_cycle|carbon]] and [[:en:Nitrogen_cycle|nitrogen cycles]].
The climate system can change due to [[:en:Climate_variability|internal variability]] and [[:en:Radiative_forcing|external forcings]]. These external forcings can be natural, such as [[:en:Solar_activity_and_climate|variations in solar intensity]] and volcanic eruptions, or caused by humans. Accumulation of [[:en:Greenhouse_gas|greenhouse gases]] in the atmosphere, mainly being emitted by people burning [[:en:Fossil_fuel|fossil fuels]], is causing [[:en:Climate_change|climate change]]. Human activity also releases cooling [[:en:Aerosols|aerosols]], but their net effect is far less than that of greenhouse gases. Changes can be amplified by [[:en:Climate_change_feedback|feedback processes]] in the different climate system components.
== Components ==
The ''atmosphere'' envelops the earth and extends hundreds of kilometres from the surface. It consists mostly of inert [[:en:Nitrogen|nitrogen]] (78%), [[:en:Oxygen|oxygen]] (21%) and [[:en:Argon|argon]] (0.9%).<ref>{{harvnb|Barry|Hall-McKim|2014|p=22}}; {{harvnb|Goosse|2015|loc=section 1.2.1}}.</ref> Some trace gases in the atmosphere, such as [[:en:Water_vapour|water vapour]] and [[:en:Carbon_dioxide|carbon dioxide]], are the gases most important for the workings of the climate system, as they are [[:en:Greenhouse_gases|greenhouse gases]] which allow visible light from the [[:en:Sun|Sun]] to penetrate to the surface, but block some of the [[:en:Infrared|infrared]] radiation the Earth's surface emits to balance the Sun's radiation. This causes surface temperatures to rise.{{sfn|Gettelman|Rood|2016|pp=14–15}}
The [[:en:Hydrological_cycle|hydrological cycle]] is the movement of water through the climate system. Not only does the hydrological cycle determine patterns of [[:en:Precipitation|precipitation]], it also has an influence on the movement of energy throughout the climate system.{{sfn|Gettelman|Rood|2016|p=16}}
== References ==
<references />
byqnyyk133bkfjy3e9urc2nuzriwclc
759878
759877
2026-09-01T14:13:26Z
~2026-47551-64
75474
759878
wikitext
text/x-wiki
[[File:Climate-system.jpg|thumb|The five components of the climate system all interact. They are the atmosphere, the hydrosphere, the cryosphere, the lithosphere and the biosphere.]]
Earth's '''climate system''' is a [[:en:Complex_system|complex system]] with five interacting components: the [[:en:Atmosphere_of_Earth|atmosphere]] (air), the [[:en:Hydrosphere|hydrosphere]] (water), the [[:en:Cryosphere|cryosphere]] (ice and permafrost), the [[:en:Lithosphere|lithosphere]] (earth's upper rocky layer) and the [[:en:Biosphere|biosphere]] (living things).
''[[:en:Climate|Climate]]'' is the statistical characterization of the climate system. It represents the average [[:en:Weather|weather]], typically over a period of 30 years, and is determined by a combination of processes, such as [[:en:Ocean_current|ocean currents]] and wind patterns.<ref>{{Cite web |title=Climate systems |url=https://climatechange.environment.nsw.gov.au/About-climate-change-in-NSW/Climate-systems |url-status=live |archive-url=https://web.archive.org/web/20190506123249/https://climatechange.environment.nsw.gov.au/About-climate-change-in-NSW/Climate-systems |archive-date=2019-05-06 |access-date=2019-05-06 |website=climatechange.environment.nsw.gov.au}}</ref><ref>{{Cite web |title=Earth's climate system |url=https://worldoceanreview.com/en/wor-1/climate-system/earth-climate-system/ |access-date=2019-10-13 |website=World Ocean Review |language=en-US}}</ref> Circulation in the atmosphere and oceans transports heat from the [[:en:Tropical_regions|tropical regions]] to regions that receive less energy from the Sun. [[:en:Solar_radiation|Solar radiation]] is the main driving force for this circulation. The [[:en:Water_cycle|water cycle]] also moves energy throughout the climate system. In addition, certain chemical elements are constantly moving between the components of the climate system. Two examples for these [[:en:Biogeochemical_cycle|biochemical cycles]] are the [[:en:Carbon_cycle|carbon]] and [[:en:Nitrogen_cycle|nitrogen cycles]].
The climate system can change due to [[:en:Climate_variability|internal variability]] and [[:en:Radiative_forcing|external forcings]]. These external forcings can be natural, such as [[:en:Solar_activity_and_climate|variations in solar intensity]] and volcanic eruptions, or caused by humans. Accumulation of [[:en:Greenhouse_gas|greenhouse gases]] in the atmosphere, mainly being emitted by people burning [[:en:Fossil_fuel|fossil fuels]], is causing [[:en:Climate_change|climate change]]. Human activity also releases cooling [[:en:Aerosols|aerosols]], but their net effect is far less than that of greenhouse gases. Changes can be amplified by [[:en:Climate_change_feedback|feedback processes]] in the different climate system components.
== Components ==
The ''atmosphere'' envelops the earth and extends hundreds of kilometres from the surface. It consists mostly of inert [[:en:Nitrogen|nitrogen]] (78%), [[:en:Oxygen|oxygen]] (21%) and [[:en:Argon|argon]] (0.9%).<ref>{{harvnb|Barry|Hall-McKim|2014|p=22}}; {{harvnb|Goosse|2015|loc=section 1.2.1}}.</ref> Some trace gases in the atmosphere, such as [[:en:Water_vapour|water vapour]] and [[:en:Carbon_dioxide|carbon dioxide]], are the gases most important for the workings of the climate system, as they are [[:en:Greenhouse_gases|greenhouse gases]] which allow visible light from the [[:en:Sun|Sun]] to penetrate to the surface, but block some of the [[:en:Infrared|infrared]] radiation the Earth's surface emits to balance the Sun's radiation. This causes surface temperatures to rise.{{sfn|Gettelman|Rood|2016|pp=14–15}}
The [[:en:Hydrological_cycle|hydrological cycle]] is the movement of water through the climate system. Not only does the hydrological cycle determine patterns of [[:en:Precipitation|precipitation]], it also has an influence on the movement of energy throughout the climate system.{{sfn|Gettelman|Rood|2016|p=16}}
== References ==
<references />
et5jzvfky0hckcjzpketd78cp1lif8v
759879
759878
2026-09-01T14:23:16Z
Lina Farid (WMDE)
61392
removed sfn
759879
wikitext
text/x-wiki
[[File:Climate-system.jpg|thumb|The five components of the climate system all interact. They are the atmosphere, the hydrosphere, the cryosphere, the lithosphere and the biosphere.]]
Earth's '''climate system''' is a [[:en:Complex_system|complex system]] with five interacting components: the [[:en:Atmosphere_of_Earth|atmosphere]] (air), the [[:en:Hydrosphere|hydrosphere]] (water), the [[:en:Cryosphere|cryosphere]] (ice and permafrost), the [[:en:Lithosphere|lithosphere]] (earth's upper rocky layer) and the [[:en:Biosphere|biosphere]] (living things).
''[[:en:Climate|Climate]]'' is the statistical characterization of the climate system. It represents the average [[:en:Weather|weather]], typically over a period of 30 years, and is determined by a combination of processes, such as [[:en:Ocean_current|ocean currents]] and wind patterns.<ref>{{Cite web |title=Climate systems |url=https://climatechange.environment.nsw.gov.au/About-climate-change-in-NSW/Climate-systems |url-status=live |archive-url=https://web.archive.org/web/20190506123249/https://climatechange.environment.nsw.gov.au/About-climate-change-in-NSW/Climate-systems |archive-date=2019-05-06 |access-date=2019-05-06 |website=climatechange.environment.nsw.gov.au}}</ref><ref>{{Cite web |title=Earth's climate system |url=https://worldoceanreview.com/en/wor-1/climate-system/earth-climate-system/ |access-date=2019-10-13 |website=World Ocean Review |language=en-US}}</ref> Circulation in the atmosphere and oceans transports heat from the [[:en:Tropical_regions|tropical regions]] to regions that receive less energy from the Sun. [[:en:Solar_radiation|Solar radiation]] is the main driving force for this circulation. The [[:en:Water_cycle|water cycle]] also moves energy throughout the climate system. In addition, certain chemical elements are constantly moving between the components of the climate system. Two examples for these [[:en:Biogeochemical_cycle|biochemical cycles]] are the [[:en:Carbon_cycle|carbon]] and [[:en:Nitrogen_cycle|nitrogen cycles]].
The climate system can change due to [[:en:Climate_variability|internal variability]] and [[:en:Radiative_forcing|external forcings]]. These external forcings can be natural, such as [[:en:Solar_activity_and_climate|variations in solar intensity]] and volcanic eruptions, or caused by humans. Accumulation of [[:en:Greenhouse_gas|greenhouse gases]] in the atmosphere, mainly being emitted by people burning [[:en:Fossil_fuel|fossil fuels]], is causing [[:en:Climate_change|climate change]]. Human activity also releases cooling [[:en:Aerosols|aerosols]], but their net effect is far less than that of greenhouse gases. Changes can be amplified by [[:en:Climate_change_feedback|feedback processes]] in the different climate system components.
== Components ==
The ''atmosphere'' envelops the earth and extends hundreds of kilometres from the surface. It consists mostly of inert [[:en:Nitrogen|nitrogen]] (78%), [[:en:Oxygen|oxygen]] (21%) and [[:en:Argon|argon]] (0.9%).<ref>{{harvnb|Barry|Hall-McKim|2014|p=22}}; {{harvnb|Goosse|2015|loc=section 1.2.1}}.</ref> Some trace gases in the atmosphere, such as [[:en:Water_vapour|water vapour]] and [[:en:Carbon_dioxide|carbon dioxide]], are the gases most important for the workings of the climate system, as they are [[:en:Greenhouse_gases|greenhouse gases]] which allow visible light from the [[:en:Sun|Sun]] to penetrate to the surface, but block some of the [[:en:Infrared|infrared]] radiation the Earth's surface emits to balance the Sun's radiation. This causes surface temperatures to rise.<ref name="Reference-0">Gettelman, Andrew; Rood, Richard B. (2016). "Components of the Climate System". Demystifying Climate Models. Earth Systems Data and Models. Vol. 2. pp. 13–22. doi:10.1007/978-3-662-48959-8_2. ISBN 978-3-662-48957-4.</ref>
The [[:en:Hydrological_cycle|hydrological cycle]] is the movement of water through the climate system. Not only does the hydrological cycle determine patterns of [[:en:Precipitation|precipitation]], it also has an influence on the movement of energy throughout the climate system.<ref name="Reference-0" />
== References ==
<references />
fmbhkfo6nbza175veqznuywp2rdlr22
User:MarrkAdams89/TEST
2
178158
759882
2026-09-01T16:18:22Z
MarrkAdams89
75481
Created page with "{| cellspacing="0" cellpadding="0" align="right" style="background:#FFFFFF; border:1px solid #6F99B3" !Misc ! |- valign="top" |<div style="float: left; border:solid black 1px; margin: 1px;"> {| cellspacing="0" style="width: 238px; background: #BED2E5;" | style="width: 45px; height: 45px; background: transparent; text-align: center; font-size: 14pt; color: black;" |{{User Administrator}}"
759882
wikitext
text/x-wiki
{| cellspacing="0" cellpadding="0" align="right" style="background:#FFFFFF; border:1px solid #6F99B3"
!Misc
!
|- valign="top"
|<div style="float: left; border:solid black 1px; margin: 1px;">
{| cellspacing="0" style="width: 238px; background: #BED2E5;"
| style="width: 45px; height: 45px; background: transparent; text-align: center; font-size: 14pt; color: black;" |{{User Administrator}}
am1oyars2iecnsyk2gqlofzk59eyhny
759883
759882
2026-09-01T16:18:43Z
MarrkAdams89
75481
759883
wikitext
text/x-wiki
{| cellspacing="0" cellpadding="0" align="right" style="background:#FFFFFF; border:1px solid #6F99B3"
!Misc
!
|- valign="top"
|<div style="float: left; border:solid black 1px; margin: 1px;">
{| cellspacing="0" style="width: 238px; background: #BED2E5;"
| style="width: 45px; height: 45px; background: transparent; text-align: center; font-size: 14pt; color: black;" |{{User administrator}}
h3n2pbzqkm2swpnk9ri0dffrhz5pdmk
759884
759883
2026-09-01T16:19:06Z
MarrkAdams89
75481
759884
wikitext
text/x-wiki
{| cellspacing="0" cellpadding="0" align="right" style="background:#FFFFFF; border:1px solid #6F99B3"
!Misc
!
|- valign="top"
|<div style="float: left; border:solid black 1px; margin: 1px;">
{| cellspacing="0" style="width: 238px; background: #BED2E5;"
| style="width: 45px; height: 45px; background: transparent; text-align: center; font-size: 14pt; color: black;" |
dflxg05cqakwqgk42aauwrqn0aubkhu
Talk:Testpage
1
178159
759909
2026-09-02T06:13:23Z
Max
57656
NPP checklist: recording page review
759909
wikitext
text/x-wiki
== NPP review checklist ==
{{NPP checklist
|checked_for_copyvio = y
|checked_CSD_criteria = y
|checked_whether_to_draftify = y - not sure
|checked_notability = y
|checked_title = y
|comments = Looks good.
|sign = – [[User:DreamRimmer|<span style="color:#5A4FCF">'''Dream'''Rimmer</span>]] [[User talk:DreamRimmer|<span style="color:##5A4FCF;">■</span>]] 06:13, 2 September 2026 (UTC)
}}
hr2d9of66i89g3purh6zhjlipwqjliz
759918
759909
2026-09-02T07:37:33Z
Max
57656
NPP checklist: recording page review
759918
wikitext
text/x-wiki
== NPP review checklist ==
{{NPP checklist
|checked_for_copyvio = y
|checked_CSD_criteria = y
|checked_whether_to_draftify = y - not sure
|checked_notability = y
|checked_title = y
|comments = Looks good.
|sign = – [[User:DreamRimmer|<span style="color:#5A4FCF">'''Dream'''Rimmer</span>]] [[User talk:DreamRimmer|<span style="color:##5A4FCF;">■</span>]] 06:13, 2 September 2026 (UTC)
}}
== NPP review checklists ==
=== Max ===
{{NPP checklist
|checked_for_copyvio = y
|checked_CSD_criteria = y
|checked_whether_to_draftify = y
|checked_notability = y
|checked_title = y
|comments =
|sign = – [[User:DreamRimmer|<span style="color:#5A4FCF">'''Dream'''Rimmer</span>]] [[User talk:DreamRimmer|<span style="color:##5A4FCF;">■</span>]] 07:37, 2 September 2026 (UTC)
}}
9k90pqahlzqurrjgvfs5vcl3jvabygg
759919
759918
2026-09-02T07:38:20Z
Max
57656
NPP checklist: recording page review
759919
wikitext
text/x-wiki
== NPP review checklist ==
{{NPP checklist
|checked_for_copyvio = y
|checked_CSD_criteria = y
|checked_whether_to_draftify = y - not sure
|checked_notability = y
|checked_title = y
|comments = Looks good.
|sign = – [[User:DreamRimmer|<span style="color:#5A4FCF">'''Dream'''Rimmer</span>]] [[User talk:DreamRimmer|<span style="color:##5A4FCF;">■</span>]] 06:13, 2 September 2026 (UTC)
}}
== NPP review checklists ==
=== Max ===
{{NPP checklist
|checked_for_copyvio = y
|checked_CSD_criteria = y
|checked_whether_to_draftify = y
|checked_notability = y
|checked_title = y
|comments =
|sign = – [[User:DreamRimmer|<span style="color:#5A4FCF">'''Dream'''Rimmer</span>]] [[User talk:DreamRimmer|<span style="color:##5A4FCF;">■</span>]] 07:37, 2 September 2026 (UTC)
}}
=== Max ===
{{NPP checklist
|checked_for_copyvio = no
|checked_CSD_criteria = no
|checked_whether_to_draftify = no
|checked_notability = no
|checked_title = no
|comments =
|sign = – [[User:DreamRimmer|<span style="color:#5A4FCF">'''Dream'''Rimmer</span>]] [[User talk:DreamRimmer|<span style="color:##5A4FCF;">■</span>]] 07:38, 2 September 2026 (UTC)
}}
odd52xpy953mr35ci214xb0dx3a0lhe
759920
759919
2026-09-02T07:39:06Z
Max
57656
NPP checklist: recording page review
759920
wikitext
text/x-wiki
== NPP review checklist ==
{{NPP checklist
|checked_for_copyvio = y
|checked_CSD_criteria = y
|checked_whether_to_draftify = y - not sure
|checked_notability = y
|checked_title = y
|comments = Looks good.
|sign = – [[User:DreamRimmer|<span style="color:#5A4FCF">'''Dream'''Rimmer</span>]] [[User talk:DreamRimmer|<span style="color:##5A4FCF;">■</span>]] 06:13, 2 September 2026 (UTC)
}}
== NPP review checklists ==
=== Max ===
{{NPP checklist
|checked_for_copyvio = y
|checked_CSD_criteria = y
|checked_whether_to_draftify = y
|checked_notability = y
|checked_title = y
|comments =
|sign = – [[User:DreamRimmer|<span style="color:#5A4FCF">'''Dream'''Rimmer</span>]] [[User talk:DreamRimmer|<span style="color:##5A4FCF;">■</span>]] 07:37, 2 September 2026 (UTC)
}}
=== Max ===
{{NPP checklist
|checked_for_copyvio = no
|checked_CSD_criteria = no
|checked_whether_to_draftify = no
|checked_notability = no
|checked_title = no
|comments =
|sign = – [[User:DreamRimmer|<span style="color:#5A4FCF">'''Dream'''Rimmer</span>]] [[User talk:DreamRimmer|<span style="color:##5A4FCF;">■</span>]] 07:38, 2 September 2026 (UTC)
}}
=== Max ===
{{NPP checklist
|checked_for_copyvio = no
|checked_CSD_criteria = ?
|checked_whether_to_draftify = ?
|checked_notability = ?
|checked_title = unknown
|comments =
|sign = – [[User:DreamRimmer|<span style="color:#5A4FCF">'''Dream'''Rimmer</span>]] [[User talk:DreamRimmer|<span style="color:##5A4FCF;">■</span>]] 07:39, 2 September 2026 (UTC)
}}
cpin71nuoyi3wknb9l3mlkhbt5rr7mu
Arany János
0
178160
759911
2026-09-02T06:36:45Z
Dj
51146
Created page with "{{redir|Arany János}}{{személy infobox|típus=író|név=Arany János|kép=Barabas-arany.jpg|képméret=240px|képaláírás=[[Barabás Miklós (festő)|Barabás Miklós]]: ''Arany János portréja'' ([[1848]])|születési név=|születési dátum=[[1817]]. [[március 2.]]|szülei=Arany György, Megyeri Sára|születési hely=[[Nagyszalonta]]|halál dátuma=[[1882]]. [[október 22.]] {{életkor-holt|1817|3|2|1882|10|22}}|halál helye=[[Budapest]]|nemzetiség=Magyaror..."
759911
wikitext
text/x-wiki
{{redir|Arany János}}{{személy infobox|típus=író|név=Arany János|kép=Barabas-arany.jpg|képméret=240px|képaláírás=[[Barabás Miklós (festő)|Barabás Miklós]]: ''Arany János portréja'' ([[1848]])|születési név=|születési dátum=[[1817]]. [[március 2.]]|szülei=Arany György, Megyeri Sára|születési hely=[[Nagyszalonta]]|halál dátuma=[[1882]]. [[október 22.]] {{életkor-holt|1817|3|2|1882|10|22}}|halál helye=[[Budapest]]|nemzetiség=[[Magyarország|magyar]]|szakma=|művésznév=|iskolái=[[Debreceni Református Kollégium]]|kitüntetés=|házastárs=[[Ercsey Julianna]]|gyermekei=[[Arany Julianna]]<br />[[Arany László (költő)|Arany László]]|alsablon={{Személy infobox/Író
| típus = író
| becsukva =
| műfaj = [[elbeszélő költemény]], [[dal]], [[ballada]]
| irányzat = [[népiesség]]
| periódus = [[1845]]–[[1882]]
| első mű =
| fő mű = [[Az elveszett alkotmány]], [[Toldi]], [[Toldi estéje]]
| kiadó =
| díjak =
| behatás =
| kihatás =
}}}}<ref>{{Cite journal|author=Rudolf|last=Krader|first=Barbara|date=május 1978|title=Magyarorszagi Cigany Nepdalok|journal=Ethnomusicology|volume=22|issue=2|pages=379|doi=10.2307/851512|url=https://doi.org/10.2307/851512|accessdate=2025-10-06|issn=0014-1836}}</ref><center>[[Fájl:Arany János szoborcsoport, Stróbl Alajos alkotása, 1893.jpg|bélyegkép|250px|Arany János csoportos emlékműve
a [[Magyar Nemzeti Múzeum]] előtt, [[Strobl Alajos]] műve]]
</center>'''Arany János''' ([[Nagyszalonta]], [[1817]]. [[március 2.]] – [[Budapest]], [[1882]]. [[október 22.]]) magyar költő, tanár, lapszerkesztő, a [[Kisfaludy Társaság]] igazgatója, a [[Magyar Tudományos Akadémia]] tagja és főtitkára. A [[magyar irodalom]] egyik legismertebb és egyben legjelentősebb alakja. A legnagyobb magyar balladaköltő, ezért nevezték a ''ballada Shakespeare-jének'', vállalt hivatala miatt a ''szalontai nótáriusnak'', de szülővárosában – vélhetően természete miatt – a ''hallgati ember'' titulussal is illették. Fordításai közül kiemelkednek [[William Shakespeare|Shakespeare-fordításai]].
Szegény [[Kálvinizmus|református]] családba született. Szüleinek kései gyermeke volt, akik féltő gonddal nevelték, hiszen a [[Gümőkór|tüdőbaj]] miatt kilenc testvére közül nyolcat előtte elvesztettek. Ő azonban igazi csodagyerek lett, már tizennégy éves korában segédtanítói állást tudott vállalni és támogatta idősödő szüleit. Az anyagi javakban nem dúskáló családi háttér ellenére olyan nagy és sokoldalú szellemi műveltségre tett szert, hogy felnőttkorára a [[Latin irodalom|latin]], a [[Ókori görög irodalom|görög]], a [[Német irodalom|német]], az [[Angol irodalom|angol]] és a [[francia irodalom]] remekeit eredetiben olvasta, és jelentős fordítói munkát is végzett. A [[magyar nyelv]] egyik legnagyobb ismerője, és ennek megfelelően páratlanul gazdag szókinccsel rendelkezett. Pusztán kisebb költeményeiben mintegy 23 ezer szót, illetve 16 ezer egyedi szótövet használt.
Irodalmi pályafutása 1845-ben ''Az elveszett alkotmány'' című szatirikus [[Eposz|eposszal]] indult, de igazán ismertté az 1846-ban készült [[Elbeszélő költemény|elbeszélő költeménye]], a ''[[Toldi]]'' tette. Már pályája kezdetén is foglalkozott a közélettel, és politikai tárgyú cikkeket írt. Az [[1848–49-es forradalom és szabadságharc|1848–49-es forradalom és szabadságharcban]] [[Nemzetőrség (1848)|nemzetőrként]] vett részt, majd a [[Szemere Bertalan]] által vezetett belügyminisztériumban volt fogalmazó. A bukást követően egy ideig bujdosott, ám végül elkerülte a megtorlást, és [[Nagykőrös|Nagykőrösre]] költözött, ahol 1851 és 1860 között tanári állást tudott vállalni.
Az élete teljesen megváltozott, amikor a Kisfaludy Társaság igazgatójává választotta, és [[Pest (történelmi település)|Pestre]] költözött. Itt szerkesztette és adta ki két hetilapját: a [[Szépirodalmi Figyelő|Szépirodalmi Figyelőt]] (1860–1862) és a [[Koszorú (hetilap)|Koszorút]] (1863–1865). A [[kiegyezés]] idején a magyar irodalmi és a politikai élet kiemelkedő és meghatározó képviselője volt. Irodalmi munkássága kihatott a talán addig kevésbé ismert történelmi szereplők ismertségére is, hiszen a műveiben megformált alakok közül több neki köszönhetően vált igazán halhatatlanná. [[Petőfi Sándor]] kortársa és barátja is volt egyben. [[Költészet]]ükben nagy különbség, hogy a gyorsan érő és rövid életű Petőfivel szemben az övé lassabban bontakozott ki. Halála is összeköti őket, hiszen egy meg nem erősített [[városi legenda]] szerint, a már egyébként is gyengélkedő népi költőfejedelem 1882. október 15-én a pesti Petőfi téri [[Petőfi Sándor-szobor (Budapest)|Petőfi-szobor]] avatásán fázott meg, és az azt követő [[Tüdőgyulladás|tüdőgyulladásban]] hunyt el, 65 éves korában.<ref>[http://pestbuda.hu/cikk/20190312_viczian_zsofia_petofi_felemelt_keze_egy_szobor_a_duna_partjan_136_eve Petőfi felemelt keze: egy szobor a Duna partján 136 éve]</ref><center>{{idézet2|''Minden szál hozzá vezetett, és minden szál tőle vezet, a magyar szellemi életnek ő a sugárzási központja.''|[[Szerb Antal]]<ref>{{cite web |author=Szerb Antal |authorlink=Szerb Antal |title=Arany János |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/szerbaj.htm |publisher=magyar-irodalom.elte.hu |accessdate=2016-07-03}}</ref>}}</center>
== Élete ==
[[Fájl:Arany coat 1634.jpg|bélyegkép|250px|Az Arany család címere 1634-ből]] Az Arany család ősi fészke [[Nagyszalonta#Kölesér|Köleséren]] volt, onnan költöztek előbb [[Szilágynagyfalu|Szilágynagyfaluba]],<ref>{{cite web |author=Sándor Boglárka Ágnes |date=2009-04-15 |title=Arany János kultusza ma is él Szilágynagyfaluban |url=http://www.szabadsag.ro/szabadsag/servlet/szabadsag/template/article,PArticleScreen.vm/id/24235 |archiveurl=https://web.archive.org/web/20160305131609/http://szabadsag.ro/szabadsag/servlet/szabadsag/template/article,particlescreen.vm/id/24235 |archivedate=2016-03-05 |accessdate=2016-03-02 |publisher=szabadsag.ro |language=magyar}}</ref> majd [[Nagyszalonta|Szalontára]]; első földjüket és nemességüket [[Bocskai István|Bocskai Istvánt]]ól kapták, címerüket [[I. Rákóczi György]] adományozta [[1634]]-ben, de ezt elvesztették, amikor [[Mária Terézia magyar királynő|Mária Terézia]] [[1745]]-ben herceg [[Esterházy Pál Antal (1711–1762)|Esterházy Pál Antalnak]] adományozta a hajdúvárosokat. A nemeslevél birtokában a család [[1778]]-tól pereskedett jussáért, de [[Nemességi igazolás|nemességüket]] [[Jog|jogi]] úton sem sikerült visszaszerezniük.<ref>Az Arany család őseiről, nemesi rangjáról, címeréről, valamint a nemesi cím visszaszerzésére tett peres eljárásról lásd [[Arany László (költő)|Arany László]] ''[[s:Az Arany család nemesi címe|Az Arany család nemesi címe]]'' című jegyzetét a Wikiforrásban.</ref><ref name="Gyermek- és ifjúkora">{{cite web |title=Arany János Gyermek- és ifjúkora |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/ajelet1.htm |accessdate=2016-03-03 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
1817. március 2-án született, egy kis házat és kevés földet birtokló család tizedik gyermekeként. (Kilenc testvére közül csak a legidősebb, Sára maradt életben.) Szülei, Arany György ([[1762]] – [[Nagyszalonta]], [[1844]]. [[január 2.]]) és Megyeri Sára ([[1772]]. [[november 2.]] – Nagyszalonta, [[1836]]. [[augusztus 20.]]) földművesek voltak.{{refhely|Gyulai Pál 1884}}<ref>[https://www.arcanum.hu/hu/online-kiadvanyok/MagyarIrodalom-magyar-irodalomtortenet-1/magyar-irodalomtortenet-pinter-jeno-5116/6-a-magyar-irodalom-a-xix-szazad-masodik-harmadaban-1C05/arany-janos-1EC8/arany-janos-elete-1EC9/ Arcanum - Arany János élete]</ref>
Szüleinek késői és egyetlen fiúgyermeke volt. Születésekor nővére már rég férjhez ment, már gyermeke is volt. Szülei hívő [[Magyarországi Református Egyház|reformátusok]] voltak. János fiatal korától tisztes szegénységben, de békés és csendes környezetben nőhetett fel. Egészen korán, három- négyéves korában megtanult olvasni, hamuba írt betűk segítségével.<ref name="sulinet">{{cite web |date=2009-04-15 |title=Arany János életrajza |url=http://tudasbazis.sulinet.hu/hu/magyar-nyelv-es-irodalom/irodalom/irodalom-6-osztaly/eletutja/arany-janos-eletrajza |archiveurl=https://web.archive.org/web/20151110032644/http://tudasbazis.sulinet.hu/hu/magyar-nyelv-es-irodalom/irodalom/irodalom-6-osztaly/eletutja/arany-janos-eletrajza |archivedate=2015-11-10 |accessdate=2016-03-03 |publisher=tudasbazis.sulinet.hu |language=magyar}}</ref><center>{{idézet2|„Mire iskolába adtak, hova mód nélkül vágytam, […] már nemcsak tökéletesen olvastam, de némi olvasottsággal is bírtam, természetesen oly könyvekben, melyek kezem ügyébe estek. […] A tanító, megpróbálván, rögtön, amint felvettek, elsőnek tett osztályomban s e helyet folyvást megtartottam. A többi tanítók és növendékek a nagyobb osztályokból, sőt külső emberek is, csodámra jártak, s én nem egy krajcárt kaptam egy vagy más produkcióm jutalmául.”<ref name="sulinet"/>}}</center>Apja rengeteget mesélt neki a Toldikról, megszerettette vele a magyar népköltészetet és az irodalmat. Tanulékonysága korán feltűnt: mire hatévesen iskolába került, már nemcsak tökéletesen olvasott, hanem [[Biblia|bibliai]] történeteket, énekeket és a könnyű irodalom termékeit is ismerte. Csodagyereknek tartották, és már iskolás évei alatt városszerte ismertté vált verseiről. Páratlan szókincsre tett szert, és a régi magyar nyelv nagy hatást gyakorolt költészetére. A későbbiekben talán emiatt idegenkedett a [[nyelvújítás]] és a [[romantika]] magyar nyelvre gyakorolt hatásaitól.<ref name="Gyermek- és ifjúkora" />{{refhely|Arany János}}
=== Iskolaévei ===
[[Fájl:Arany jános dolgozószobája.jpg|bélyegkép|jobbra|250px|Rekonstruált dolgozószobája a nagyszalontai Arany János Múzeumban]] [[Nagyszalonta|Szalontai]] iskolaéveinek (1823–1831) végén, hogy szülei anyagi helyzetén könnyítsen, a tanulás mellett tanított is, és az iskolában lakott. [[1833]]-ban a költészeti osztályba lépett, majd novembertől a [[Debreceni Református Kollégium|Debreceni Református Kollégiumban]] tanult. Mivel reményei nem váltak valóra, és pénze is kevés volt, [[1834]] márciusában [[Kisújszállás|Kisújszállásra]] ment egy évre segédtanítónak, ''„praeceptornak”'', hogy pénzt szerezzen tanulmányai folytatására. Kisújszálláson [[Török Pál (püspök)|Török Pál]], a későbbi református püspök volt a rektor, aki megnyitotta jeles könyvtárát Arany előtt, és ennek köszönhetően éjjel-nappal olvasott. A [[Német nyelv|német]] és [[Francia nyelv|francia nyelvben]] is elmélyült, és [[Latin nyelv|latinból]], németből fordítgatott, sőt a költészettel is kísérletezett.<ref name="Gyermek- és ifjúkora" />
Egy év múlva visszament Debrecenbe, ahol tanárai is felfigyeltek rá. Kisújszállási ajánlóleveleivel és szorgalmával hamarosan az osztály élére került, és a tanítás folytán anyagi helyzete is tűrhetővé vált. Magántanítványai közé tartoztak többek közt [[Erdélyi József (tanár)|Erdélyi József]] tanár lányai. Az iskolai egyhangúságot megunó Arany azonban ekkoriban nem tanító, hanem festő vagy szobrász akart lenni, így [[1836]] februárjában önként elhagyta a kollégiumot. Ez a kilépés azt eredményezte, hogy középfokú tanulmányait nem fejezte be, és emiatt nem kaphatott végbizonyítványt sem.<ref name="sulinet" />{{refhely|Arany János}}
=== Vándorszínészi kitérő ===
Gyakran járt színházba, hiszen Debrecenben erre bőven volt lehetősége. 1836-ban önéletrajzi vallomásai szerint minden erkölcsi és anyagi kényszerítés nélkül hagyta el az iskolát, és élete válaszút elé került. [[Ferenczy István (szobrász)|Ferenczy István]] szobrászatának híre vonzotta nagyon, aki az [[1830-as évek]] ünnepelt zsenije volt. A [[szobrászat]] gondolatával titokban foglalkozó Arany megingott, és inkább [[Thaleia|Thália]] zászlaja alá állt be, ha rövid időre is. Az alig húszéves ifjú 1836 februárjában Debrecenben a [[Fáncsy Lajos]] és [[László József (színművész)|László József]] igazgatása alatt működő [[Színtársulat|színtársulathoz]] szegődött egy évre. A társulat azonban a korra oly jellemző módon pár hónap múlva feloszlott. A rövid időszak ellenére is több darabban játszhatott. A ''[[Bolond Istók (elbeszélő költemény, Arany János)|Bolond Istók]]'' című elbeszélő költeményének második énekében életrajzi említésnek tudható be, amit saját színészi pályájáról írt.<ref name="Bayer">{{cite journal |author=Bayer József |title=Arany Jánis színészi pályája |url=http://real-j.mtak.hu/2334/1/BudapestiSzemle_1888_053.pdf |format=pdf |language=magyar |issue=Budapesti Szemle |pages=283-296 old. |authorlink=Bayer József (színháztörténész) |accessdate=2016-05-05}}</ref> [[Kép:Arany a színlapon.jpg|jobbra|bélyegkép|220px|Arany János neve egy [[1836]]-os [[Nagykároly|nagykárolyi]] színlapon<ref>[https://mek.oszk.hu/04900/04944/html/borzaszto0026.html A Borzasztó torony - Képek a magyar vándorszínészet világából -Borostyán, Rónai, alias: Petőfi Sándor], mek.oszk.hu</ref><nowiki>]]</nowiki>
Első fellépése valószínűleg – ''Bolond Istók''éhoz hasonlóan – a színpad mögött történt, és ennek során a színpad átrendezésekor székeket pakolt. Lépésről lépésre szoktatták ugyanis hozzá a színpadi léthez. A debreceni színlap először 1836. március 3-án említette meg a nevét [[Ernst Raupach]] népszerű regényes színjátékában, az ''Ördög Róbert''ben, ahol a tanácsnokot alakította. Ezután több darabban feltűnt, hol a második favágó vagy éppen a jövendő századbeli inas epizódszerepében. Nem jelentős [[Színész|színészi]] megnyilvánulások, de azért arra is lehetősége adódott, hogy [[énekes]] szerepkörben szép [[basszus]] hangját is megmutassa. Talán legjelentősebb színészi szerepét kapta március 26-án, amikor [[Babocsay István|Babocsay Istvánnak]] 1805-ben nyomtatásban is megjelent ''Vígkedvű Mihály'' című drámájában Biczó István városi tanácsnokot alakíthatta.
A társulat felbomlásáról a ''Bolond Istók'' című elbeszélő költeményében így írt Arany:
: ''Egy reggel – épen a bolondok napja,''
: ''Az ő nevenapja, april elseje''
: ''Volt, hogy fülét a hír oldalba csapja,''
: ''Hogy társaság nincs, már csak hült helye.''
Arany személyes levelezése szerint [[Debrecen|Debrecenben]] [[Fáncsy Lajos]] és [[László József (színművész)|László József]] igazgatása alatt működő színésztársulat 1836. április 1-jén föloszlott. Az egyéb fennmaradt iratok tanúsága szerint május 1-jén szűnt meg a társulat, de valószínűleg voltak ennek előzményei, és ezért kötötte a költő a bolondok napjához a felbomlást. Egyébként egész áprilisban színpadon volt, de továbbra sem jutott nagyobb szerephez.<ref name="Bayer" /><ref>{{cite journal |author=Kardos Lajos |title=Arany János színészi pályája és a Bolond Istók |url=http://epa.oszk.hu/02500/02518/00013/pdf/EPA02518_irodalomtortenet_1913_05_276-287.pdf |format=pdf |language=magyar |issue=Kisebb Közlemények |pages=276-280 old. |accessdate=2016-05-05}}</ref>
=== Hazatérése, hivatalt vállalása, szüleinek elvesztése, házasságkötése és gyermekeik megszületése ===
Ezután egy Hubay nevezetű [[színész]]<ref>Valószínűleg Hubay Emánuel színigazgató, aki 1836-37-ben Szaplonczay Mihállyal Szatmárban, majd Nagykárolyban működött.</ref> által toborzott és részben a feloszlott társulat romjaiból szervezett vándorszínész csapathoz csatlakozott.<ref>[http://www.harag.eu/hu/magunkrol/szinhaztortenet.html Szatmárnémeti Északi Színház Harag György Társulat] {{Wayback|url=http://www.harag.eu/hu/magunkrol/szinhaztortenet.html|date=20170315014222}}, harag.eu</ref> Vándorlásuk során [[Nagykároly]], majd [[Szatmárnémeti|Szatmár]], végül pedig [[Máramarossziget]] lett a célállomás. A néhány hónapig tartó sanyarú hányattatás során megtapasztalta az egyre érezhetőbb nyomort, továbbra sem jött a nagy színészi szerep. Kialudt a színészet iránti rajongó fellángolása. Egy éjszaka, álmában halottnak látta édesanyját, ezért elhagyta a társulatot, és gyalog hazaindult. [[Németh László (író)|Németh László]] megfogalmazása szerinti „vak kiruccanása”, színészkora véget ért.<ref>[http://www.mek.oszk.hu/01000/01013/01013.htm#2 Németh László tanulmányok - Arany János], mek.oszk.hu</ref> {{idézet2|''Egy nap, hasonló gyötrelmek közt álom ért rám – s jó édesanyámat halva láttam. A benyomás oly erős volt, hogy többé nem vethetém ki fejemből, ellenállhatatlan ösztönt érzék hazamenni, de miképp? [[Máramarossziget|Sziget]] [[Nagyszalonta|Szalontához]], az általam ismert úton kerülve, körülbelül ötven mérföld. A direktorhoz, Hubayhoz fordulék, egy húszast kértem tőle lehető díjamból, de fölöslegesnek láttam vele közölni szándékomat. Egy zsebkendőbe kötém egész vagyonomat – kimentem a piacra, hol nyolc pengő krajcárból egy cipót s egy kevés szalonnát vettem, azzal megindultam egyedül, gyalog. Első éjt az erdőben töltém, oláh fuvarosok tüze mellett, a többit kocsmapadokon – s így végre [[Szatmárnémeti|Szatmáron]], [[Nagykároly]]on, [[Debrecen]]en át, hétnapi gyalog vándorlás után hazaértem, nem nagy örömére szegény szüleimnek.''|Arany János levele [[Gyulai Pál (irodalomtörténész)|Gyulai Pál]]hoz<ref>[https://mek.oszk.hu/04900/04944/html/borzaszto0021.html Arany János levele Gyulai Pálhoz], mek.oszk.hu</ref>}} [[Fájl:Ercsey Julianna portréja (Ellinger Ede felvétele) – crop.jpg|bélyegkép|jobbra|220px|[[Ercsey Julianna|Aranyné Ercsey Julianna]]<nowiki>, a költő felesége]]</nowiki>
Otthon megtudta, hogy apja megvakult, anyja pedig haldoklott<ref>[http://tudasbazis.sulinet.hu/hu/magyar-nyelv-es-irodalom/irodalom/irodalom-6-osztaly/eletutja/arany-janos-eletrajza Arany János életrajza] {{Wayback|url=http://tudasbazis.sulinet.hu/hu/magyar-nyelv-es-irodalom/irodalom/irodalom-6-osztaly/eletutja/arany-janos-eletrajza|date=20151110032644}}, tudasbazis.sulinet.hu</ref> és két héttel később, hazaérkezése után [[Kolera|kolerában]] megbetegedve elhunyt – ennek hatására egy ideig még a költő is elhallgatott benne.<ref name="Bayer" /> [[Magyarországi Református Egyház|Egyháza]] és a város részvéttel tekintett a fiú sorsára, és megválasztották őt konrektornak. Szülőhelyén a [[Gimnázium#A 16. századtól|grammatikai]] osztályokat tanította [[1839]] tavaszáig, majd egy évig írnokként helyezkedett el a városnál, végül rendes aljegyző lett Nagyszalontán.{{refhely|Gyulai Pál 1884}} [[Kép:Arany János 1914.jpg|bélyegkép|250px|Arany János családja körében 1863 körül]] Az 1836-tól 1840-ig terjedő időszakban is sokat olvasott: [[William Shakespeare|Shakespeare-t]] (német fordításban), elővette [[Homérosz|Homéroszt]] is, a francia irodalomból pedig [[François Fénelon]] ''Télemakhosz kalandjai'' című regénye és [[Jean-Pierre Claris de Florian|Florian]] művei után [[Molière]]-t kezdett olvasni, illetve [[Prosper Jolyot de Crébillon|Crébillon]] rémdrámáit forgatta. Ez időszakban találta meg élete párját is, és fontos lett számára, hogy házasságához biztos anyagi hátteret teremtsen, így kevesebb ideje maradt az irodalom tanulmányozására.
[[Nagyszalonta|Nagyszalontán]] [[1840]]. [[November 19.|november 19-én]] vette feleségül [[Ercsey Julianna|Ercsey Juliannát]], egy ügyvéd törvénytelen és vagyontalan leányát. Úgy döntött, hogy az esküvő után már nem foglalkozik annyit olvasással és különböző művek tanulmányozásával, hanem helyette minden szabadidejét szeretett feleségével töltötte. Munkájában szorgalmas és kiegyensúlyozott volt, kisebb peres ügyekben segédkezett, passzusokat (marhalevél) állított ki, és a hivatali életben kiválóan teljesített, még a megyei táblabírák is elismerték tevékenységét. Ekkoriban új ismeretekkel is gyarapodott, hiszen munkájából adódóan kitanulta a [[Geodézia|földmérést]].
Házasságukból [[1841]]-ben született Juliska lánya és [[1844]]-ben [[Arany László (költő)|László]] fia, aki később ismert bankár, népköltészetgyűjtő, Arany hagyatékának gondozója, kitűnő költő és irodalomtudós lett. Gyermekeinek sikereire Arany mindig nagyon büszke volt. Halála után fia rendezte sajtó alá Arany hátrahagyott iratait és levelezését négy kötetben.{{refhely|Gyulai Pál 1884||Pintér Jenő hetedik kötet|234. old|Sőtér István IV. kötet|96. old|}}<ref>{{cite web |author=Boldizsár Noémi |date=2010-11-12 |title=A jó feleség aranyat ér |url=http://www.hetek.hu/eletmod/201011/a_jo_feleseg_aranyat_er |accessdate=2016-10-07 |publisher=hetek.hu}}</ref> Hagyatékának azon része, amely személyes vonatkozással bírt (például családi magánlevelezésének nagyobb része), fia özvegyénél Szalay Gizellánál (1857–1945) maradt. Ezt csak ő és második férje [[Voinovich Géza]] (1877–1952) irodalomtörténész kutathatta, aki háromkötetes művet szentelt Arany János [[életrajz]]ának. A [[Gellérthegy|gellérthegyi]] villájukban őrzött kéziratok, családi magánlevelezés és egyéb relikviák 1945 januárjában belövések és bombázások következtében teljesen megsemmisültek, mivel a közelben német ágyúállások voltak. Levelezésének fennmaradt része Arany László végakarata szerint a MTA Könyvtárának Kézirattárában található.<ref>[[Domokos Mariann]]–[[Gulyás Judit]] 2018 (szerk.): Az Arany család mesegyűjteménye. Budapest, 12–15.</ref>
=== Elismert költővé válása: az ''Elveszett alkotmány'' és a ''Toldi'' ===
[[Kép:Toldi (1847).jpg|bélyeg|„[[Toldi]]<nowiki>” a többi pályadíjnyertessel, és az önálló kiadás címlapjának képe]] [[Kép:Arany.gif|bélyeg|A </nowiki>[[Toldi]]<nowiki> szerzője]] </nowiki>[[1842]] tavaszán Arany egykori tanulótársa, [[Szilágyi István (pedagógus)|Szilágyi István]] Szalontára érkezett rektori minőségben, és a költőt az irodalmi munkásság folytatására buzdította: elsősorban a görög tragédiaszerzők fordítását javasolta neki. Szilágyi István inspirálására, teljesen egyedül tanult meg [[Angol nyelv|angolul]]. Beszélni nem tudott, csak az írásképet ismerte. Az angol szövegeket összevetette a német fordítással, és így kezdett el nyelvtankönyv segítségével lépésről lépésre haladva egyre jobban elmélyülni az angol nyelvű irodalomban. A nyelv olvasásában jártasságot szerezve Shakespeare-t kezdte tanulmányozni és fordítgatni.<ref>Angoltudása irodalmi művek megértéséhez elegendő volt, de a beszédet nem értette, és ő sem tudott angolul beszélni.</ref> [[1845]] nyarán írta az ''Elveszett alkotmány'' című szatirikus eposzt, amelyet beküldött a [[Kisfaludy Társaság]] vígeposzpályázatára. A mű meg is jelent a ''[[Kisfaludy Társaság|Kisfaludy-társaság]] Évlapjai'' VII. kötetében, és vele a 25 arannyal járó pályadíjat is elnyerte, bár [[Vörösmarty Mihály|Vörösmarty]] nem volt teljesen elragadtatva, és bírálta [[Hexameter|hexametereit]]. A kritikai kifogások azonban nem vették el a kedvét, hanem inkább további munkára inspirálták Aranyt.{{refhely|Gyulai Pál 1884}}
[[1846]]-ban az [[Életképek|Életképekben]] (I. évfolyam 13. sz.)<ref>{{cite journal |author=Frankenburg Adolf |title=Életképek 1846-os számai |url=http://real-j.mtak.hu/7340/1/MTA_Eletkepek_1846_1.pdf |format=pdf |language=magyar |issue=[[Életképek]] |pages=283-388 old. |authorlink=Frankenburg Adolf |accessdate=2016-05-05}}</ref> jelent meg tőle egy falusi beszély<ref>A beszély a [[novella]] régies elnevezése.</ref> ''Egyszerű beszélyke, Úti tárczámból'' és egy másik ''Hermina'' címmel (II. évf. 9. sz.). Az 1846. március 28-án megjelent ''Egyszerű beszélyke'' volt Arany első nyomtatásban is megjelent írása.{{refhely|Sőtér István IV. kötet}}
[[1846]]-ban a Kisfaludy Társaság ismét irodalmi pályázatot írt ki. A feltételeket [[Erdélyi János (költő)|Erdélyi János]] állította össze és az ő utasítására került be a követelmények közé a [[Népiesség|népies forma]]. A pályázat szövege: ''„Készíttessék költői beszély, versben, melynek hőse valamelyt, a nép ajakin élő történeti személy, például: [[I. Mátyás magyar király|Mátyás király]], [[Toldi Miklós (nemes)|Toldi Miklós]], [[Kádár vitéz]] stb. A forma és a szellem pedig [[Ütemhangsúlyos verselés|népies legyen]]. Beküldés határnapja: 1846. november 26. Jutalma 15 db arany.”'' A ''[[Toldi]]'' már egyöntetű siker volt, és olyan győzelmet aratott, hogy nemcsak a pályadíjat nyerte meg ([[1847]]. [[Február 6.|február 6-án]], amikor a társaság a kitűzött 15 aranyat kivételesen húszra emelte), hanem bírálói ámulatát is. Egyszerre ünnepelt költő lett, és jeles írók figyelme fordult feléje. [[Petőfi Sándor|Petőfi]] volt az egyik első, aki üdvözlésére sietett, és ismeretlenül is levélben köszöntötte őt. [[Szilágyi István (pedagógus)|Szilágyi István]] találóan azt írta Aranynak, hogy a ''„Toldinak nagy máj adatik”''.{{refhely|Sőtér István IV. kötet}}
Ez időtől kezdve folyamatosan írt az Életképekbe és a [[Pesti Divatlap|Pesti Divatlapba]] kisebb költeményeket. [[1847]]-ben készítette el a ''[[Toldi estéje|Toldi estéjét]]''<ref>1847. július elején fogott hozzá. A mű teljes egészében 1848. március 20-án már kész volt, de csak hat és fél évvel később, 1854 őszén jelent meg.</ref> és a ''Murány ostromá''t. [[1847]]. [[Június 1.|június 1]]. és 10. között Petőfi meglátogatta Szalontán, és ettől kezdve szoros barátság szövődött köztük, és rendszeresen leveleztek egymással. Ez a levelezés jelentős kor- és irodalomtörténeti emlék is egyben. Úgy írt és fordított ez időben, hogy közben napi tíz órai hivatali munkáját is ellátta, és családjára is odafigyelt.{{refhely|Sőtér István IV. kötet}}
[[1848]]-ban a Kisfaludy Társaság felvette tagjai közé. Az [[1848–49-es forradalom és szabadságharc]] alatt néhány verset és kisebb elbeszélést írt a folyóiratokba és néhány közéleti helyzetdalt is. Ilyen például a ''Nemzetőr-dal'', de nem hozott létre jelentős esztétikai értéket, mivel az akkori közösségi hangnem távol állt az ő líraiságától. A kormány által megindított ''Nép Barátja'' című lap szerkesztését nem vállalta el, csak nevét kölcsönözte hozzá, míg a tényleges szerkesztő [[Vas Gereben]] volt. Arany eleinte több költeményt és népszerű politikai cikket írt a lapba, de [[1849]]. [[Március 10.|március 10-től]] már a neve sem fordult elő a lapon. [[Nemzetőrség (1848)|Nemzetőrként]] részt vett a szalontai századdal az [[Arad ostroma|aradi várostrom]] körüli katonai szolgálatban, mintegy 8-10 hétig. Az ostromról így írt a ''Bolond Istók''ban: ''„Oh láttam én (hisz ott is voltam egyszer, / Tenni kevés – de halni volt esély)”''<ref>{{CitPer|author=Ferenczes István|tit=Veszedelmekről álmodom|per=Kortárs|tom=58|fasc=9|ann=2014|lun=09|url=https://epa.oszk.hu/00300/00381/00195/EPA00381_kortars_2014_09_24413.htm}}</ref> Jegyzői hivatalát [[1849]] tavaszáig megőrizte, de a város nem tudta fizetni a tisztviselőit, ezért a [[Szemere Bertalan]] által vezetett [[Belügyminisztérium|belügyminisztériumn]]ál vállalt fogalmazói állást. Hivatalával összefüggésben [[Debrecen|Debrecenbe]], majd [[Pest (történelmi település)|Pestre]] költözött. Mindeközben családja végig Szalontán maradt, ahol otthont adott Petőfi családjának 1849. január végétől májusig.{{refhely|Gyulai Pál 1884}}
Június végétől megkezdődött a cári csapatok előli menekülés. Nagyszalontán keresztül vonultak vissza [[Görgei Artúr|Görgei tábornok]] egységei. Néhány napig nála húzta meg magát menekülő és bujdosásra kényszerülő írótársai közül [[Vörösmarty Mihály]] és [[Bajza József (költő)|Bajza József]]. Nemsokára ő is menekülni kényszerült, és egy ideig bujdosott. Erdőkben töltötte napjait, és később, amikor visszamerészkedett otthonába, éjszakákat töltött felöltözve, arra várva, hogy hátha őt is letartóztatják. A félelem mellett legalább ilyen teherként jelentkezett, hogy ''„csaknem földönfutó valék”'', ahogy írta később, mert az [[1849]]-es év a teljes anyagi ellehetetlenülés szélére sodorta családját.{{refhely|Sőtér István IV. kötet}}
=== A szabadságharc után ===
{{Képdia|Kép:Ferenc Somorjai Arany János háza Nagykörösön.jpg|<center>Arany János lakóháza [[Nagykőrös]]ön</center>|Kép:Arany János plaque-3 (Nagykőrös Hősök tere 8).jpg|Arany János emléktáblája a nevét viselő általános iskola bejáratánál (Nagykőrös, Hősök tere 8.)|Kép:Arany János plaque-2 (Nagykőrös Hősök tere 8).jpg|Emléktáblája a nevét viselő általános iskola falán. Molnár Elek munkája, 1960. (Nagykőrös, Hősök tere 8.)|Kép:Arany János plaque (Nagykőrös Hősök tere 6).jpg|Emléktáblája a nevét viselő gimnázium falán. Sári Zoltán munkája, 2010. (Nagykőrös, Hősök tere 6.)|cím=Arany Nagykőrösön}}
A [[világosi fegyverletétel]] után nem tartóztatták le, rövid bujdosás után közéleti szerepet nem vállalva visszatérhetett Szalontára. Időközben [[Tisza Lajos (politikus, 1798–1856)|Tisza Lajos]] meghívta [[Geszt (település)|Gesztre]], hogy fiát, [[Tisza Domokos|Domokost]] költészetre oktassa. Szemléletének ellentmondásaira jellemző, hogy az elbukott [[1848–49-es forradalom és szabadságharc|magyar szabadságharcot]] kétféleképpen tudta értékelni: elégikusan és ironikusan is. Arany a bukás után sem pártolt el a szabadságharc eszméitől. ''Évnapra'' című versében (1850) 1848. március 15. megtagadását a Megváltót eláruló Péter gyengeségéhez hasonlítja; a ''Szondi két apródja'' a szabadságharc dicsőítése. S ha a ''Nagyidai cigányok''ban torzképet rajzol is a szabadságharcról, a gúny csak a vezéreket éri, mert Arany másképp ítélte meg a vezetőket és másképp a népet.<ref>{{cite web |title=Komlós Aladár: A magyar költészet Petőfitől Adyig |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/komlosaj.htm |publisher=http://magyar-irodalom.elte.hu |accd=2017-03-19}}</ref> 1850-től kezdve megint írhatott, és folyóiratokban leginkább lírai költeményeket publikált. A [[Bach-korszak|Bach-korszakban]] lassan azért hozzákezdett anyagi helyzetének rendezéséhez, a ''Nép Barátja'' tiszteletdíjaiból nádfedeles, rozzant, kétszobás parasztházat tudott vásárolni, melyhez volt egy apró gyümölcsöse is.{{refhely|Gyulai Pál 1884||Sőtér István IV. kötet|}}
Az [[1851]]. év második felében a nagykőrösi református egyház hívására a [[Arany János Református Gimnázium|Nagykőrösi Református Gimnáziumban]] a magyar és [[latin nyelv]] és irodalom tanárává választották, és az év őszén egész családjával [[Nagykőrös|Nagykőrösre]] költözött. A hely [[Mezőváros|mezővárosi]] létéből fakadó parlagiasságával feloldhatatlan ellentmondásba került tehetsége, tíz éven keresztül mégis lelkiismeretes és pontos tanár volt. [[Folyóirat|Folyóiratokban]] rendszeresen publikált, és ebből az időszakból származnak nagyobb művei is. Nagykőrösi tanárként rendszeresebben tanulmányozta a magyar nyelvet és az irodalmat, illetve a világirodalom nagyobb eposzait is újraolvasta. Ez időben néhány értekezést írt az ''Uj Magyar Museum''ba is (1854, 1857).{{refhely|Sőtér István IV. kötet}}
=== A Magyar Tudományos Akadémia tagjaként ===
A [[Magyar Tudományos Akadémia]] tízévi szünet után megtartott nagygyűlésén, [[1858]]. [[December 15.|december 15-én]] előbb levelező, majd még aznap rendes tagjává választotta. Székét [[1859]]. [[Október 31.|október 31-én]] ''Zrínyi és Tasso'' című értekezésével foglalta el. Ekkoriban sokat betegeskedett, gyomorbántalmak kínozták. Hívták többfelé is tanárnak, de nem vágyott új állásra, mert sokkal mozgalmasabb életet szeretett volna. [[1860]]. [[Július 15.|július 15-én]] a [[Kisfaludy Társaság]] igazgatójává választotta, így [[Pest (történelmi település)|Pestre]] költözött, és még az év november 7-én megindította a [[Szépirodalmi Figyelő|Szépirodalmi Figyelőt]], amelyet [[1862]]. [[Október 30.|október 30-ig]] szerkesztett.{{refhely|Gyulai Pál 1884}}
[[Szalay László (jogász, 1813–1864)|Szalay László]] elhunytával a Magyar Tudományos Akadémia titkára lett [[1865]]. [[Január 26.|január 26-tól]], majd az új alapszabályok kihirdetése után, [[1870]]. [[Január 17.|január 17-én]] a közgyűlés főtitkárrá nyilvánította.{{refhely|Gyulai Pál 1884}} [[Toldy Ferenc]] halála után, 1875-ben egyetemi tanszék vezetésére kérték fel: [[Trefort Ágoston]] vallás- és közoktatásügyi miniszter felajánlotta a [[Eötvös Loránd Tudományegyetem|budapesti egyetemen]] megüresedett magyar irodalomtörténeti tanszéket. A nagy megtiszteltetés ellenére ezt, egészségi állapotára való hivatkozással, nem tudta elvállalni.<ref>{{cite web |title=Arany János élete |url=https://www.arcanum.hu/hu/online-kiadvanyok/MagyarIrodalom-magyar-irodalomtortenet-1/magyar-irodalomtortenet-pinter-jeno-5116/6-a-magyar-irodalom-a-xix-szazad-masodik-harmadaban-1C05/arany-janos-1EC8/arany-janos-elete-1EC9/ |accessdate=2019-11-26 |publisher=arcanum.hu |language=magyar}}</ref>
Megromlott egészsége miatt a főtitkári teendők alól is több ízben kérte felmentését. 1877-ben lemondott főtitkári hivataláról, de ezt az akadémia nem fogadta el, hanem egy évre szabadságra küldték. Miután ez letelt, megismételte lemondását, amit az akadémia szintén nem fogadott el, hanem megint egy évre szabadságolták. 1879-ben harmadszor is kérte a felmentését, és ezt már elfogadták. A döntéshozóknak közben az is feltűnt, hogy főtitkári fizetését, melyet egyébként az alapszabályok életfogytig biztosítottak neki, már az eltelt két évben sem vette fel. Arany ki is jelentette, hogy végleges visszalépése után sem fogja azt elfogadni. Ezért arra kérték, hogy legalább az akadémia palotájában levő főtitkári lakást használja a továbbiakban, és – hogy senkiben se merülhessen fel kétely – a nagygyűlés tiszteletbeli főtitkári címmel ruházta fel, és igazgatótaggá választotta őt.{{refhely|SZTE Egyetemi Könyvtár}}
=== ''A walesi bárdok'' keletkezése és leánya halála ===
{{bővebben|A walesi bárdok}}
[[File:Zichy-arany-cropped-p047.jpg|250x250px|[[Zichy Mihály]]: Illusztráció A walesi bárdokhoz]]
1857-ben, [[I. Ferenc József magyar király|Ferenc József]] és [[Wittelsbach Erzsébet magyar királyné|Erzsébet királyné]] magyarországi látogatása alkalmából a kormánypárti [[Budapesti Hírlap (napilap, 1853–1860)|Budapesti Hírlap]] főszerkesztője – mások mellett – felkérte Arany Jánost egy üdvözlőbeszéd megírására. Az alkotást akadályozó tartós betegségre hivatkozva<ref>Tisztelt Szerkesztő Ur! Vettem becses felszólitását, de nem vagyok oly állapotban, hogy annak eleget tehessek. Physicai bajom, mely a lélekre tompítólag, a kedélyre leverőleg hat, s melyben évek óta sinlődöm, akadályoz a munkában. Hivatkozom az összes szépirodalmi lapokra s egyéb folyóiratokra, melyek jóllehet szűntelen sűrgetnek, egy év óta alig közöltek tőlem valamit, s ha igen, az is valamely régibb töredék volt. Így hát nem én vagyok az oka, ha rokkant Pegazusommal nem jelenhetek meg a fényes tisztelgésnél: lesznek mások, fiatalabbak, kik azt a helyet díszesebben betöltik mint én. [...] tisztelője Arany János</ref> tért ki a felkérés elől. Mindezek ellenére az utókor a [[2000-es évek]] közepéig azt gondolta, ekkor írta, saját fiókjában tartva, ''A walesi bárdok'' című balladát. [[Milbacher Róbert]] irodalomtörténész szerint a vers valójában csak négy évvel később, 1861 körül született, részben [[Széchenyi István]] ''Ein Blick'' című pamfletjének hatására, részben pedig mert megtudta, hogy egy másik költő, [[Tóth Endre (költő, 1824–1885)|Tóth Endre]] ''Ötszáz gael dalnok'' címmel ugyancsak megírta a walesi bárdok történetét. Például „a koronád legszebb gyémántja” szófordulatot szó szerint Széchenyitől vette át Arany.<ref name="Milbacher Róbert">{{cite journal |author=Milbacher Róbert |year=2006/1 |title=Szegény, szegény Eduard királyǃ? (Újabb adalékok A walesi bárdok értelmezéséhez) |url=http://www.irodalomtortenet.hu/pdf/IT_2006-1.pdf |format=pdf |language=magyar |issue=Irodalomtörténet |pages=44–90. old. |accessdate=2016-10-29 |archivedate=2013-12-19 |archiveurl=https://web.archive.org/web/20131219075720/http://www.irodalomtortenet.hu/pdf/IT_2006-1.pdf}}</ref> [[Hász-Fehér Katalin]] ''A walesi bárdok keletkezés- és közléstörténete című elemzésében'' azt a megállapítást tette, hogy az Arany-filológia mai állása szerint nincs közvetlen bizonyíték a keletkezés pontos időpontjára.<ref>{{cite journal |author=Hász-Fehér Katalin |year=2014/2 |title=Bárdok Walesben A walesi bárdok keletkezés- és közléstörténete |url=http://epa.oszk.hu/02500/02518/00344/pdf/EPA02518_irodalomtortenet_2014_2_186-223.pdf |format=pdf |language=magyar |issue=Irodalomtörténet |pages=187–223. old. |accessdate=2017-03-16}}</ref>
Ebben az „óangol” balladában [[I. Eduárd angol király|Eduárd angol király]] látogatásra indul újonnan leigázott tartományába, [[Wales|Walesbe]]. Mindenki számára nyilvánvaló volt, hogy Edward maga Ferenc József, a walesi bárdok pedig a magyar költők. [[1863]]-ban az általa ugyanebben az évben indított ''Koszorú'' című lapban jelent meg először ''A walesi bárdok''. A verset a cenzúra miatt nem sajátként, hanem egy óangol ballada fordításaként írta alá.<ref name="Milbacher Róbert" /><ref>{{cite web |date=2010-04-04 |title=Magyarország története, 30. rész – Út a kiegyezéshez'', ismeretterjesztő filmsorozat 2009 rendező: M. Nagy Richárd, Varga Zs. Csaba |url=http://nava.hu/id/970002/ |accessdate=2016-11-01 |publisher=ujszo.com |language=magyar}}</ref>
A Koszorú folyóirat [[1865]] júniusának végén szűnt meg. Arany számos cikket, írói arcképeket, valamint bírálatot és értekezést írt a magyar verselésről. Lelkének belső feszültsége jót tett költészetének, mert versek írására ösztönözte. Lírája ebben az évtizedben bontakozott ki legsokoldalúbban. Mélyen átélte a polgárosodó világ [[elidegenedés]]ét. [[1865]]-ben leánya, Juliska, méhgyulladást kapott – szervezete legyengült, majd a [[Gümőkór|tüdőbaj]] végképp legyőzte, fél évvel azután meghalt, hogy [[Szél Kálmán|Szél Kálmánt]]ól kislánya született, Szél Piroska. Szeretett leányának váratlan halála mélyen megrendítette Aranyt, olyannyira, hogy amikor verset kezdett írni lánya emlékére, a negyedik sor után megakadt, és ezt írta füzetébe a folytatás helyett: ''„Nagyon fáj! nem megy!”'' A családi életben bekövetkezett tragédia hatására több mint egy évtizedre a költő is elhallgatott benne. [[1868]]-tól Aranyék nevelték Juliska kislányát, aki 21 éves korában édesanyjához hasonlóan a tüdőbaj áldozata lett és 1882 októberében elhunyt. A tragédiát Arany már nem élte meg.{{refhely|Gyulai Pál 1884||Sőtér István IV. kötet|}}
=== Betegsége, halála és temetése ===
[[Deák Ferenc (igazságügy-miniszter)|Deák Ferenc]] és a [[kiegyezés]] híve volt, de ''A walesi bárdok'' című művében is kifejezte, hogy a leigázott tartomány urát nem szíveli. A költőfejedelem emblematikus alakja volt korának, és ezt az uralkodó, [[I. Ferenc József magyar király|Ferenc József]] felismerte. 1866-ban elismerve érdemeit és fejet hajtva költői munkássága előtt, [[Érdemkereszt (Ausztria–Magyarország)|Arany Érdemkereszttel]] tüntette ki. A Belügyminisztériumból az MTA címére kiküldött érdemkeresztet a költő nem akarta elfogadni, ezért értesítette a belügyminisztert, hogy visszautasítja azt. A megkeresésére hamar választ kapott, hogy nem teheti meg, mert a ''Hivatalos Lap'' már leközölte a kitüntetést. Ezután nem tehetett egyebet, minthogy a kitüntetés mellé írt egy fricskát, és a fiókjában felbontatlanul őrizte, a kettőt együtt halála után találták meg.<ref>Az érdemrendet rejtő doboz csomagolópapírjára ezt írta: ''„Hasfájásban szenvedek, Érdemkeresztet küldenek, Ha csak egyet tojhatnám, Száz keresztért nem adnám.”'' A történetet [[Vámbéry Rusztem]] közlése alapján 1942 táján [[Faludy György]] jegyezte le.</ref><ref>{{cite web |date=2016-08-27 |title=Arany Jánosnak sem kellett az érdemkereszt |url=http://ujszo.com/online/panorama/2016/08/27/arany-janosnak-sem-kellett-az-erdemkereszt |archiveurl=https://web.archive.org/web/20161030001005/http://ujszo.com/online/panorama/2016/08/27/arany-janosnak-sem-kellett-az-erdemkereszt |archivedate=2016-10-30 |accessdate=2016-10-29 |publisher=ujszo.com |language=magyar}}</ref>
{{Szövegdoboz|'''''Arany Szent István-rendje''''' Fönnmaradt egy anekdota, amely szerint egy főrend [[Andrássy Gyula (politikus, 1823–1890)|Andrássy Gyula]] miniszterelnökkel beszélve nehezményezte az Aranynak adományozott rendjelet, mondván, hogy ez a rendjel eddig csak igen magas rangúaknak járt ki. Mire Andrássy ezt felelte: „– Meg tudná mondani Excellenciád, ki volt [[Raffaello Sanzio|Raffaelo]] korában a külügyminiszter?” Tényleg, ki is volt a külügyminiszter?<ref name="Szent István-rend">{{cite web |author=Kiczenko Judit |url=https://btk.ppke.hu/uploads/articles/115865/file/247_258_Kiczenko.pdf |format=pdf |title=ARANY JÁNOS ÉS A SZENT ISTVÁN-REND |date=2016-08-27 |accessdate=2016-10-29 |language=magyar |publisher=btk.ppke.hu |archiveurl=https://web.archive.org/web/20140716034808/https://btk.ppke.hu/uploads/articles/115865/file/247_258_Kiczenko.pdf |archivedate=2014-07-16 }}</ref>|keretszín=#A3B0BF|háttérszín=#CEDFF2}} Ferenc József koronázása alkalmával újabb, immáron fejedelmi kitüntetést adományozott a magyar nemzet akkor élő legnagyobb költőjének, [[1867]]-ben a ''kiváltságosak'' közé emelte, és a [[Magyar Királyi Szent István-rend|Szent István-rend]] kiskeresztjével tüntette ki. Arany ezt az uralkodói kegyet is megpróbálta visszautasítani, de [[Eötvös József (író)|báró Eötvös József]] vallás- és közoktatásügyi miniszternek írt tiltakozására azt a választ kapta, hogy: ''„…neked jogodban áll e rendjelt nem hordani, s ezt alkalmasint tenni is fogod, de azt visszaútasítani, ahhoz bizony, barátom, nincs jogod. Nemcsak a fejedelem iránti tiszteletet, de más érdekeket sértenél meg…”'' Közben az újságból értesült, hogy a belügyminiszter ''„Budán folyó év és hó 11-én 2366. elnöki szám alatt kibocsátott”'' rendelete az ő kitüntetéséről szól. Ekkor tiltakozásul írt [[Wenckheim Béla|báró Wenckheim Béla]] belügyminiszternek is. A két miniszter személyesen is felkereste, és végül hosszas kapacitálás és levélváltások után írta e sorokat: ''„– Én tartottam magamat, míg lehetett, de végre belátván, hogy nagy demonstrationalis látszat nélkül (mitől mindig irtóztam) a visszautasítás meg nem történhetik, beleegyeztem…”''<ref name="Szent István-rend" />
[[1865]]-től [[1876]]-ig eredeti művein alig dolgozott valamit. Miután megvált főtitkári hivatalától, a visszavonulás jót tett irodalmi munkásságának, mert számos lírai költeményt és balladát írt ez időben. Művei a [[Margit-sziget]] [[Tölgy|tölgyf]]ái alatt, egyfajta őszi virágzásképpen születtek. [[1879]]-ben készült el a ''[[Toldi szerelme]]'' című elbeszélés tizenkét énekben, melynek első kiadása két hónap alatt elfogyott. A [[Magyar Tudományos Akadémia]] és a Kisfaludy Társaság is jutalmával tüntette ki. A Társaság ötvenaranyos jutalmából alapítványt hozott létre. Élete végén Arany nagyobb vállalásai közül a ''Toldi szerelmé''t tudta befejezni. Irodalmi tevékenységét ekkor már az is nehezítette, hogy megrendült az egészsége: [[1868]]-ban veszélyes máj- és bélgyulladást állapítottak meg nála, emiatt rendszeres gyógyfürdőzést írtak elő neki. Évente látogatta a [[Karlovy Vary|karlsbadi]] fürdőt, de megfordult [[Szliácsfürdő|Szliácsfürdőn]] is.<ref>{{cite web |title=Slávni návštevníci kúpeľov |url=http://www.kupelesliac.sk/Slavni-navstevnici-kupelov.10.0.html |archiveurl=https://web.archive.org/web/20161105145639/http://kupelesliac.sk/Slavni-navstevnici-kupelov.10.0.html |archivedate=2016-11-05 |accessdate=2016-11-25 |publisher=kupelesliac.sk |language=szlovák}}</ref> [[1870]]-ben korának legnevesebb sebésze, [[Kovács Sebestény Endre (sebész, 1814–1878)|Kovács Sebestény Endre]] operálta meg, és több epekövét is eltávolította. [[Hallás|Hallása]] és [[Látás|látása]] is romlani kezdett, de felesége gondoskodásának és a megfelelő étrendjének köszönhetően néha-néha megint elláthatta hivatalát, és még az irodalommal is foglalkozhatott. A fulladozó, nehéz légzése azonban napközben is gyakran jelentkezett, de különösen a reggeli és a hajnali órákat nagyon megszenvedte.{{refhely|Gyulai Pál 1884||Sőtér István IV. kötet|}}
Az [[1870-es évek]] során befejezte a ''[[Hamlet, dán királyfi|Hamlet]]'' és a ''[[János király]]'' fordítását, lefordította [[Arisztophanész]] összes művét, elkészült a ''Bolond Istók''kal, valamint megírta az ''[[Őszikék]]'' című ciklusát, és bevégezte a Toldi-trilógia középső részét, a ''Toldi szerelmé''t. Régi betegsége, a heveny hörgőgyulladás [[1878]] áprilisában újra kitört rajta, de a szokottnál súlyosabban. Végül – egy [[városi legenda]] szerint – a pesti Petőfi téri Petőfi-szobor [[1882]]. [[Október 15.|október 15-i]] avatásán meg is hűlt, és [[Tüdőgyulladás|tüdőgyulladást]] kapott. Ettől kezdve állapota fokozatosan romlott, és egy héttel később, [[Október 22.|október 22-én]] déli 12 órakor elhunyt Budapesten, a Magyar Tudományos Akadémia palotájában lévő szolgálati lakásában, élete 66., házasságának 42. évében.{{refhely|Gyulai Pál 1884||Sőtér István IV. kötet|}}
Temetése [[Október 24.|október 24-én]], délután 3 órakor a [[Fiumei úti sírkert|Kerepesi temetőben]] a [[Református egyházak|református egyház]] szertartása szerint zajlott. Végső nyughelyére az akadémia tagjai testületileg kísérték. Ravatalánál [[Gyulai Pál (irodalomtörténész)|Gyulai Pál]], [[Szász Károly (költő, 1829–1905)|Szász Károly]] és [[Török Pál (püspök)|Török Pál]] református püspök tartott gyászbeszédet. Később a [[Margit-sziget|Margit-szigetr]]ől áttelepített tölgyeket ültettek a sírja fölé.<ref>{{cite web |title=Arany János sírja – a Nemzeti Sírkert 22. parcellája |url=http://muemlekek.info/muemlek/arany-janos-sirja.php |archiveurl=https://web.archive.org/web/20161029174410/http://muemlekek.info/muemlek/arany-janos-sirja.php |archivedate=2016-10-29 |accessdate=2016-10-29 |publisher=muemlekek.info |language=magyar}}</ref> A [[Kisfaludy Társaság|Kisfaludy Társaságban]] [[1883]]. [[Október 24.|október 24]]-én, Gyulai Pál a Magyar Tudományos Akadémián,<ref>{{cite web |date=1883-10-24 |title=Gyulai Pál emlékbeszéde Arany János felett |url=https://mek.oszk.hu/04900/04968/html/02.htm#49 |accessdate=2016-10-29 |publisher=GYULAI PÁL VÁLOGATOTT MŰVEI |language=magyar}}</ref> az [[1884]]. [[Június 8.|június 8]]-i ülésen pedig Szász Károly tartott fölötte emlékbeszédet.{{refhely|SZTE Egyetemi Könyvtár}}
== Arany jelentősebb költeményei ==
{{képdia|Kép:Arany János költő.jpg|Arany János 1856-ban [[Barabás Miklós (festő)|Barabás Miklós]] litográfiája|Kép:Arany János Barabás 1848.jpg|Arany János 1848-ban [[Barabás Miklós (festő)|Barabás Miklós]] litográfiája|Kép:Arany János.jpg|Arany János|Kép:17. Arany János.jpg|Arcképe képeslapsorozaton|Kép:Arany Morelli.jpg|[[Morelli Gusztáv]] fametszete|Kép:Arany János öreg kép.jpg|A költő arcképe|Kép:Arany János arcképe (Ellinger Ede, 1880).jpg|[[Ellinger Ede]] fényképe (1880)|Kép:Arany János portréja (Pollák Zsigmond, 1887).jpg|[[Pollák Zsigmond]] metszete Ellinger fényképe alapján (1887)|cím=Képek a költőről}} {{bővebben|Arany János költészete}} {{idézet2|''Arany János az európai magyar olvasó legnagyobb bánata: Európa nem vette tudomásul. Holott – vélik – ő mutathatta volna meg legjobban, mire képes ez a nyelv és ez a költészet: ő volt a magyar vers és nyelv legnagyobb mestere.''|[[Németh G. Béla]]}}
A [[magyar irodalom]] legkiemelkedőbb [[Epika|epikus]] költője és az egyik legnagyobb magyar népi költőfejedelem.<ref>{{cite web |author=Tarlósi János |date=2014-03-01 |title=Arany János a népi költőfejedelem |url=http://delikronika.webnode.hu/news/arany-janos-a-nepi-koltofejedelem-tarlosi-janos-olvass-tovabb-http-delikronika-webnode-hu-news-arany-janos-a-nepi-koltofejedelem-tarlosi-janos-keszits-sajat-weboldalt-ingyen-http-www-webnode-hu/ |archiveurl=https://web.archive.org/web/20161109221348/http://delikronika.webnode.hu/news/arany-janos-a-nepi-koltofejedelem-tarlosi-janos-olvass-tovabb-http-delikronika-webnode-hu-news-arany-janos-a-nepi-koltofejedelem-tarlosi-janos-keszits-sajat-weboldalt-ingyen-http-www-webnode-hu/ |archivedate=2016-11-09 |accessdate=2016-11-09 |publisher=Déli Magyar Krónika |language=magyar}}</ref> Majdnem fél évszázados költői munkássága során folyamatosan, de mennyiségileg és minőségileg egyenetlen eloszlásban születtek költeményei, ám mégis tökéletes irodalmi művek sokaságát alkotta meg. Jelentős vers minden költői szakaszában található. Pályakezdésének ideje az 1845–1849 közötti időszak. A következő a szabadságharc utáni költészete (1849–1866), azután a hazáját és a családját ért csapások miatt hosszú ideig tényleg hallgatag ember lett, és a ''„szünetelt korszak”'' követett, amikor egyáltalán nem írt verseket. Pályafutása végén azonban rövid időre megint visszatért költőként, és ekkor született sorrendben a harmadik költői korszaka, az [[Őszikék]] (1877–1880), amikor viszonylag rövid idő alatt nagyon sokat alkotott. Remekbe szabott balladái miatt kortársai „a ballada Shakespeare-jeként” tisztelték, és az írók közül kiemelkedett páratlanul gazdag magyar szókincsével is.<ref>{{cite web |title=Arany János lírája |url=http://tudasbazis.sulinet.hu/hu/magyar-nyelv-es-irodalom/irodalom/irodalom-10-osztaly/arany-janos/arany-janos-liraja |accessdate=2016-03-06 |publisher=sulinet.hu |language=magyar}}</ref><ref>{{cite web |author=Géher István |year=2005 |title=MAGYAR „HAMLET”: ARANY JÁNOSFURCSA ÁLCÁJA |url=http://www.holmi.org/arch/2005/12/07.html |accessdate=2016-07-03 |publisher=holmi.org |language=magyar}}</ref>
Hogy mennyire gazdag volt ez? Összehasonlították az irodalmi műveiben használt egyedi szavakat [[Vörösmarty Mihály]], [[József Attila]], [[Petőfi Sándor]], [[Babits Mihály]] és [[Ady Endre]] hasonló műveiben előfordulókkal. Arany igen jelentős, 60 ezer körülit, a második Vörösmarty 44 ezer körülit, míg a közülük sereghajtó Petőfi 20 ezer körüli egyedi szót használt.<ref>A magyar nyelvben összesen 60-100 ezer ilyen szó van, és egy átlagos értelmiségi egyévnyi beszédét rögzítve körülbelül 25-30 ezret használ.</ref><ref>{{cite web |author=Géher István |date=2005-03-31 |title=Ennek a magyar költőnek a legnagyobb a szókincse |url=http://www.szeretlekmagyarorszag.hu/ennek-a-magyar-koltonek-a-legnagyobb-a-szokincse/ |accessdate=2016-10-29 |publisher=szeretlekmagyarorszag.hu |language=magyar}}</ref><ref>{{cite book |author=főszerk. [[Adamikné Jászó Anna|A. Jászó Anna]] |title=A magyar nyelv könyve |publisher=Trezor, |year=2004, |pages=171. o. |city=Budapest}}</ref><ref>{{cite web |date=2015-03-30 |title=Legenda bizonyítva: megszámoltuk Arany szavait |url=http://www.origo.hu/techbazis/20150329-legenda-bizonyitva-raengedtuk-a-szupertechnologiat-a-verses-kotetekre.html |archiveurl=https://web.archive.org/web/20170303122757/http://www.origo.hu/techbazis/20150329-legenda-bizonyitva-raengedtuk-a-szupertechnologiat-a-verses-kotetekre.html |archivedate=2017-03-03 |accessdate=2017-03-02 |publisher=Origó Techbázis,}}</ref> Ilyen ma már ritkán használt [[Köznyelv|köznyelvi]] szavak például a műveiben előforduló olyan állatnevek, mint a toportyán ([[aranysakál]], ''Toldi'' – Negyedik ének)<ref>{{cite web |author=Arany János |title=Toldi Negyedik ének |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/tnegyedi.htm |accessdate=2016-10-29 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>) és a pitypalaty ([[fürj]], ''Télben'' című vers).<ref>{{cite web |author= |title=Arany János – Télben |url=http://meseld.hu/magyar-koltok-versei/arany-janos/542-arany-janos-telben |archiveurl=https://web.archive.org/web/20161030001018/http://meseld.hu/magyar-koltok-versei/arany-janos/542-arany-janos-telben |archivedate=2016-10-30 |accessdate=2016-10-29 |publisher=meseld.hu |language=magyar}}</ref>
=== Elbeszélő költeményei ===
Arany [[Elbeszélő költemény|elbeszélő költemények]], más néven verses vagy költői elbeszélések, illetve az ő idejében használatos elnevezéssel költői beszélyek formájában írta meg már az első komolyabb irodalmi alkotását is. Ez volt ''Az elveszett alkotmány''. Ezzel a Kisfaludy Társaság pályázatát elnyerte, de [[Vörösmarty Mihály]] még fenntartással fogadta Arany János bemutatkozását. A későbbi irodalmi szempontból sokkal jelentősebb költeményei azonban már meghozták a költői hírnevet és az általános elismerést.{{refhely|Gyulai Pál 1884}} [[Fájl:A Toldi kézirata.jpg|bélyegkép|200px|jobbra|A [[Toldi]] kézirata ([[Arany László (költő)|Arany László]] ajándékozta 1886-ban [[Lehr Albert|Lehr Albertnak]] annak emlékére, hogy Lehr Toldi-kommentárja megnyerte az [[Magyar Tudományos Akadémia|Akadémia]]<nowiki> nagyjutalmát)]]</nowiki>
A legjelentősebb – és mind közül kiemelkedik terjedelmében is – elbeszélő költeménye a ''Toldi-trilógia,'' mely ''a [[Toldi]]'' (1847), a ''[[Toldi estéje]]'' (1854) és a ''[[Toldi szerelme]]'' (1879) részekből áll össze. A művekben szereplő [[Toldi Miklós (nemes)|Toldi Miklóst]] sokáig kitalált személynek gondolták. Bebizonyosodott azonban, hogy Arany által a magyar hősök közé emelt, valóban kivételes fizikai adottságú bihari birtokos nemes valós személy volt. A trilógia nagy része történeti tényekkel is alátámasztható, azonban vélhetően vannak kitalált részek is benne, ilyen lehet például a testvérével kialakult konfliktusa, harca a [[Szürke farkas|farkasokkal]] vagy a cseh vitézzel vívott sajátos párbaja.<ref>{{cite web |author= |date=2015-09-16 |title=Ki volt valójában Toldi Miklós? |url=http://mult-kor.hu/ki-volt-valojaban-toldi-miklos-20150916 |accessdate=2016-11-08 |publisher=mult-kor.hu |language=magyar}}</ref>
Ez a trilógia azonban nemcsak Toldi nevét emelte magasba, hanem a szerzőét is halhatatlanná tette. Érdekesség, hogy a trilógia három része három különböző időpontban – teljesen más történelmi korszakokban – született, és nem a történések időrendjében készült el. Hasonló nagyszabású munka lehetett volna a [[Hunok|hun]] eredettörténetből vett ''Csaba-trilógia'' de ennek csak az első része, a ''[[Buda halála]]'' készült el teljesen.<ref name="Toldi trilógia">{{cite web |author= |title=Toldi trilógia |url=https://mek.oszk.hu/00500/00597/html/toldi.htm |accessdate=2016-11-07 |publisher=Arany János összes költeménye |language=magyar}}</ref>
Aranyt nemcsak szépíróként foglalkoztatta a verses elbeszélői forma, kortárs és klasszikus eposzértelmezéseiben, kritikáiban is írt a műfajról. Visszatérő elvárásként fogalmazta meg a „vérré válás” normáját. Ez alatt azt értette, hogy az [[eposz]] hitelét, értékét a közösségi befogadás biztosítja, a népi szájhagyományba való visszaépülés ugyanolyan műfaji követelmény, mint az [[eposzi kellékek]]. [[Takáts József (irodalomtörténész)|Takáts József]] irodalomtörténész hívta rá fel a figyelmet, hogy ez az eposzelmélet Arany [[Szokásjog|szokásjogi]] gondolkodására vezethető vissza. Lehetséges forrásként Arany másodjegyzőként szerzett jogi tapasztalatára hivatkozik, de meggyőző példákat hoz Arany nyelvészeti témájú írásaiból is. Mindkét esetben egy alulról érkező, gyakorlatból és közhasználatból építkező szabályrendszer érvényesül egy kívülről előírottal szemben. Innen jól látható, hogy Arany egyedi eposzfelfogása a korban jellemző szokásjogi gondolkodáson alapszik.<ref>{{Cite journal |author=Takáts József |title=Arany János szokásjogi gondolkodása |url=http://itk.iti.mta.hu/megjelent/2002-34/takats.pdf |journal=Irodalomtörténeti Közlemények |volume=CVI. |issue=3–4. |pages=295–313. |accessdate=2024-01-12}}</ref>
Jelentősebb elbeszélő költeményeinek rövid bemutatása:
* ''[[Toldi]]'' (1847): A Kisfaludy Társaság pályázatára készített, műfaját tekintve elbeszélő költemény, melyet vélhetően az előző pályázaton díjnyertes ''Az elveszett alkotmányt'' ért Vörösmarty bírálat is inspirált. A történet ihletét vélhetően [[Ilosvai Selymes Péter]] ''Az híres nevezetes Tholdi Miklósnak cselekedeteiről és bajnokságáról való história'' című krónikája adta. A kiírt pályázaton a mű nemcsak a díjat nyerte meg, hanem példátlan módon a kitűzött tizenöt aranyat kivételesen húszra emelték. Arany ezzel az alkotásával ünnepelt költővé vált, és jeles írók figyelme fordult felé. A tizenkét énekből álló költemény költői képekben gazdag, melyek közül az egyik legszebb az álom-[[allegória]]: ''„Majd az édes álom pillangó képében / Elvetődött arra tarka köntösében...”''<ref name="Toldi trilógia" /><ref>{{cite web |author= |title=A Toldi felépítése |url=http://tudasbazis.sulinet.hu/hu/magyar-nyelv-es-irodalom/irodalom/irodalom-6-osztaly/a-toldi-keletkezese-es-forrasai/a-toldi-szerkezete |accessdate=2016-11-07 |publisher=tudasbazis.sulinet.hu |language=magyar}}</ref>
* ''[[Toldi estéje]]'' (1854): A Toldi váratlanul nagy sikere ösztönözte az újabb mű megírására. Levelében értesítette barátját, [[Petőfi Sándor|Petőfi Sándort]], hogy „Egy ''Toldit'' akarok még írni, ''Toldi Estéjét…''” A kéziratot 1848. április 1-jén elküldte Petőfi Sándornak, de a forradalmi események miatt csak 1854 tavaszán jelent meg. A mű az irodalmivá emelt népnyelven íródott. Fogadtatása a késedelem ellenére lelkes volt. [[Eötvös József (író)|Eötvös József]] rögtön a megjelenés után Aranynak küldött levelében így írt: ''„Ha valaha művet láttam, mely minden követeléseimnek megfelelt: Toldi Estéje az…”'' [[Gyulai Pál (irodalomtörténész)|Gyulai Pál]], az egyébként rettenthetetlen kritikus nem kevesebbet állított, minthogy: ''„Arany Jánosé az első hely a magyar költészetben.”''<ref name="Toldi trilógia" /><ref>{{cite book |author=Arany János |title=Toldi estéje |publisher=Franklin Társulat |others=Magyarázta: Lehr Albert |year=1905 |edition= |location=Budapest |pages=5–12., 50–53 |language=magyar |id=}}</ref><ref>{{cite web |author= |title=Toldi estéje (1848) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyac.htm |accessdate=2016-12-02 |publisher=tudasbazis.sulinet.hu |language=magyar}}</ref>
* ''[[Buda halála]]'' (1863): Arany a [[kiegyezés]] előtti években írta Pesten. A mű a tervezett hun-trilógia egyedül befejezett része, melynek műfaját nem lehet egyértelműen meghatározni. A történetben Buda király megosztja hatalmát öccsével, Etelével. Ez a lemondás vezet aztán a király későbbi halálához. A [[Tragikomédia|tragikum]] kifejezése, a metaforákban gazdag fordulatok, nagy művészi hatású és korszerű alkotássá tette a költeményt.{{refhely|Sőtér István IV. kötet||Csáky Zsolt|}}<ref>{{cite web |author= |date=2013-04-12 |title=Arany János (1817-1882): BUDA HALÁLA |url=http://csicsada-irodalom-birodalom.blogspot.hu/2013/04/arany-janos-1817-1882-buda-halala.html |accessdate=2016-11-07 |publisher=Irodalom és művészetek birodalma |language=magyar}}</ref>
* ''[[A nagyidai cigányok]]'' (1851): A vers az 1848–49-es szabadságharc egyfajta ironikus értékelése, műfaja szatirikus eposz. A [[magyar nemesség]] azon liberális álláspontjával értett egyet, amely hitt a lassú, de szerves fejlődésben. Kossuth Lajos nézeteit nem fogadta el maradéktalanul, és álmodozónak gondolta. Ironikus szatírájának és világképének változásában [[Kemény Zsigmond]] ''Forradalom után'' című 1850-ben írt röpiratának volt nagy szerepe. A versben a groteszk hangvételt nagy nyelvi igénnyel szedte versbe, például ilyen, akár már komikusnak ható fordulatokkal: ''„Ló, három, szilajok, valamint a csiga, … Dicsőségünk nem fér papirosomra, Nohát nem is bántom. … Lenyakazva egymást, szépen megbékéltek. …Köröskörnyül immár meg van rakva sebbel, Mint az ángol ember kaputrokja zsebbel;”'' [[Reviczky Gyula]] szerint ez volt Arany legtöbbet vitatott és legzseniálisabb műve is egyben.{{refhely|Sőtér István IV. kötet||Csáky Zsolt|}}<ref>{{cite web |author= |date=2013-04-12 |title=A nagyidai cigányok (1851) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyad.htm |accessdate=2016-11-07 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* A ''[[Bolond Istók (elbeszélő költemény, Arany János)|Bolond Istók]]'' első éneke 1850-ben, míg a második 1878-ban készült el. A műfaja elbeszélő költemény, a cselekmény pedig Arany vándorszínészi élményein alapult. A vers a szerencsétlen sorsú alsó néposztályok életét mutatja be.{{refhely|Sőtér István IV. kötet||Csáky Zsolt|}}<ref>{{cite web |author= |title=Arany János összes költeményei |url=https://mek.oszk.hu/00500/00597/html/elbeszel.htm |accessdate=2016-10-30 |publisher=mek.oszk.hu |language=magyar}}</ref><ref>{{cite web |author= |title=Arany János elbeszélő költeményei |url=https://sites.google.com/site/magyarirokaranyjanos/home/versek-1847-1849/versek-1850-1852/versek-1865-1876/versek-1877-1882/aranynak-tulajdonitott/toldi-trilogia/elbeszelo-koeltemenyek |archive-url=https://web.archive.org/web/20161022233717/https://sites.google.com/site/magyarirokaranyjanos/home/versek-1847-1849/versek-1850-1852/versek-1865-1876/versek-1877-1882/aranynak-tulajdonitott/toldi-trilogia/elbeszelo-koeltemenyek |archiveurl=https://web.archive.org/web/20161022233717/https://sites.google.com/site/magyarirokaranyjanos/home/versek-1847-1849/versek-1850-1852/versek-1865-1876/versek-1877-1882/aranynak-tulajdonitott/toldi-trilogia/elbeszelo-koeltemenyek |archive-date=2016-10-22 |archivedate=2016-10-22 |accessdate=2016-10-30 |publisher=sites.google.com |language=magyar}}</ref>
* ''[[Toldi szerelme]]'' (1879): Élete vége felé a költő nagy vállalkozásai közül befejezett mű. Jóval terjedelmesebb és meséjében is bonyodalmasabb, mint bármelyik másik Arany-költemény. Nagy sikert aratott alkotás, első kiadása két hónap alatt elfogyott. A [[Magyar Tudományos Akadémia]] és a Kisfaludy Társaság is a jutalmával tüntette ki.<ref name="Toldi trilógia" /><ref>{{cite web |author= |title=Toldi szerelme |url=https://mek.oszk.hu/02200/02228/html/04/69.html |accessdate=2016-10-30 |publisher=A magyar irodalom története. |language=magyar}}</ref>
=== Lírai költeményei ===
Arany pályája több korszakra is felosztható, azonban [[Líra (műnem)|lírai]] költészetének darabjai minden egyes alkotói szakaszában megtalálhatóak. A majdnem fél évszázados költői tevékenységében ezek mennyiségileg és minőségileg is egyenetlen eloszlásúak. Jelentős és kiemelkedő korszak a nagykőrösi időszak. Az 1860-as években a lírai költészet a [[Bach-korszak]] bukásával talaját vesztette, és Pestre költözésétől ez nála is megfigyelhető, hiszen költészete másként bontakozik ki. Az 1861–1877 közötti időszakban átélt élmények lírai megörökítése ugyan elmaradt, de egyfajta kárpótlásként lírai szövegek azért előfordulnak az [[Őszikék]] versciklusában.<ref name="Lírája">{{cite web |author= |title=Arany János lírája |url=http://tudasbazis.sulinet.hu/hu/magyar-nyelv-es-irodalom/irodalom/irodalom-10-osztaly/arany-janos/arany-janos-liraja |accessdate=2016-10-30 |publisher=sulinet |language=magyar}}</ref><ref>{{cite web |author=Bori Imre |title=Az első "modern" verseskönyv: az Őszikék |url=https://mek.oszk.hu/00500/00596/html/tanulmanyok/bori85.html |accessdate=2016-12-07 |publisher=A magyar irodalom modern irányai I., Újvidék, 1985. 93-100 |language=magyar}}</ref> [[Fájl:Arany János 1867-ben (Simonyi Antal felvétele).jpg|bélyegkép|balra|250px|Arany János 1867-ben]] A szabadságharc utáni időkben a [[vallás]] szerepe a [[Természettudomány|természettudományok]] fejlődésével a korábbiakhoz képest bizonyos mértékben visszaszorult. A [[Mennyország|túlvilágba]] vetett hit és a földöntúli élet léte megkérdőjeleződött, és így megrázó élménnyé vált a [[halál]] véglegessége. Arany átérezte korának nagy világnézeti válságát és lélektani hatását, és költészetére az is hatott, hogy az európai szabadságküzdelmek mind sorra elbuktak. A magyar szabadságharc elvesztése miatt érzett kiábrándultság és az elvesztett remény lírai költészetére is jelentős hatást gyakorolt.<ref name="Lírája" />
Korai darabjai között két igazán kiemelkedő vers van: ''A rab gólya'' (1847) és a ''Nemzetőrdal'' (1848).
* ''[[A rab gólya]]'' (1847): Az 1847-ben írt népies költeménye a lírai kisepika szép példája. A versben szereplő rab madár egy [[fehér gólya]]. A madarak általában a szabadságot jelképezik, de itt a törött szárnyú gólya vélhetően a költő lelkiállapotát jeleníti meg. Ő ez időben Szalontán élt egyfajta vidéki elszigeteltségben, és valószínűleg ennek az érzésnek ad hangot a költemény.{{refhely|Csáky Zsolt}}<ref>{{cite web |author=Girasek Edmond |title=Madár-motívumok Arany János költészetében |url=http://www.doksi.hu/elemzes.php?order=Show&id=231 |accessdate=2016-11-09 |publisher=doksi.hu |language=magyar}}</ref>
* ''[[Nemzetőrdal (csárdás)|Nemzetőrdal]]'' (1848): A forradalmi lelkesedés és a népies dalköltészet egyesülése, mely a [[Verbunkos|katonatoborzók]] hangulatát idézi meg. Első sorában mindjárt előtör a nemzeti büszkeség is: ''„Ne félj, babám, nem megyek világra: / Nemzetemnek vagyok katonája.”'' Ez a költemény megzenésítését követően népdallá is vált.<ref name="Lírája" /><ref name="Nemzetőrdalok">{{cite web |author=Tary Lujza |title=Nemzetőrdalok |url=http://48asdalok.btk.mta.hu/peldatar/nemzetordalok |accessdate=2016-11-09 |publisher=48asdalok.btk.mta.hu |language=magyar}}</ref>
A későbbi és az [[1850-es évek|ötvenes évek]] első felének lírája javarészt [[Nagykőrös|Nagykőrösh]]öz köthető. A ''Letészem a lantot'' (1850) ugyan még a költözés előttire datálható, de ezeket a költeményeit a szabadságharc bukása érlelte lírikussá. E korszak (1849–1866) jelentősebb versei az alábbiak:<ref>{{cite web |author= |title=Lírája a nagykőrösi években |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/ajpalya3.htm |accessdate=2016-10-30 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[Letészem a lantot]]'' (1850): A mű fél évvel a szabadságharc leverése után íródott. A műfaja [[elégia]], és már a címe is beszédes, hiszen a költő tart a megtorlástól, és arra készül, hogy felhagy az írással. Két létállapotot állít szembe, egy értékben gazdag múltat és egy értékszegény világot, a jelent. A versszakok végén refrénként tér vissza a fájdalom: ''„Hová lettél, hová levél, Ó lelkem ifjúsága?”''{{refhely|Csáky Zsolt}}<ref>{{cite web |author= |title=Arany János: Letészem a lantot (verselemzés) |url=http://tananyag.net/irodalom/magyar-irodalom/arany-janos-leteszem-a-lantot-verselemzes |archiveurl=https://web.archive.org/web/20161108052236/http://tananyag.net/irodalom/magyar-irodalom/arany-janos-leteszem-a-lantot-verselemzes |archivedate=2016-11-08 |accessdate=2016-11-07 |publisher=tananyag.net |language=magyar}}</ref>
* ''[[Családi kör (költemény)|Családi kör]]'' (1851): Arany lirizált kisepikájának egyik legismertebb és méltán népszerű verse. A benne lévő bensőséges idill teljesen más, mint az ötvenes évek más ilyen jellegű lírai költeményeié. Olyan képi ábrázolást alkotott meg, amely a nép egyszerű fiának is eligazodást ad a nehéz időkre, és buzdít is egyben. Apaközpontú világával a ''Toldit'' idézi meg, és egyfajta hangulatos életképben ünnepi megvilágítást kap a család mindennapos együttléte, ahova a vendégként fogadott ''„béna harcfi”'' képében betör a történelmi valóság is.<ref>{{cite web |author= |title=Családi kör (1851) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyae.htm |accessdate=2016-10-30 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[Kertben]]'' (1851): [[Pesszimizmus|Pesszimista]] életszemléletű irásainak egyikke. A mű szavait idézve: ''„Közönyös a világ… az élet – Egy összezsúfolt táncterem, … Nagy részvétel, ha némelyikünk – Az ismerőst … megismeri.”'' A költeményben feltör a szabadságharc leverése miatt érzett elkeseredés, amelyet a költő iróniával fejez ki. A [[Világosi fegyverletétel|fegyverletétel]] után ugyan fejlődésnek indult a [[Kapitalizmus|tőkés rendszer]], de az elsősorban nem magyar érdekeket szolgált. A polgárosodástól a [[Magyarok|magyarság]] többsége csak hátrányokat szenvedett. Az [[Alexander Bach]] nevével fémjelzett korszak tönkretette a személyes kapcsolatokat, úrrá lett sokakon az [[elidegenedés]], hiszen ez a rendszer egyfajta gépnek tekintette az embereket. Ez a vers ennek a fásultságnak egyfajta bemutatása.{{refhely|Csáky Zsolt}}<ref>{{cite web |author= |title=Kertben (1851) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyaf.htm |accessdate=2016-11-08 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[Visszatekintés]]'' (1852): A versben megjelenik az illúziók köddé válása, a céltalanság, a kiüresedés, az [[idill]] elérhetetlen messzesége, és az is, hogy már a halál sem megoldás. Stílusában kevert hangnemű, egyszerre elégikus és ironikus, a puritán életvitelt kudarcként ábrázolja. A mű befejezésében a költő a ''„[[Hit (vallás)|Hit]] – [[Remény (érzelem)|Remény]] – [[Szeretet]]”'' hármasságnak a [[biedermeier]] almanach-költészet bibliai hagyományához nyúl vissza.{{refhely|Csáky Zsolt}}<ref>{{cite web |author= |title=Visszatekintés (1852) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyag.htm |accessdate=2016-11-08 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[A lejtőn]]'' (1852–57): Ez a költeménye is elégikus hangnemben íródott dalszerű vers. Két olyan irodalmi műre utalnak első és utolsó sorai, amelyek fontos szerepet töltöttek be a szerző élményvilágában. A vers kezdete [[Edgar Allan Poe]] ''[[A holló]]'' című híres költeményét idézi fel. A záró rész azokra a sorokra emlékeztet, amelyek a [[Hamlet, dán királyfi|''Hamlet''ben]] Ophelia halálának körülményeit mutatják meg.{{refhely|Csáky Zsolt}}<ref>{{cite web |author= |title=A lejtőn (1857) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyah.htm |accessdate=2016-11-08 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref><ref>{{cite web |author= |title=Arany János összes költeményei |url=https://mek.oszk.hu/00500/00597/html/index.htm |accessdate=2016-10-30 |publisher=mek.oszk.hu |language=magyar}}</ref>
=== Balladái ===
[[Fájl:Nagykőrös múzeum emléktábla.JPG|bélyegkép|jobbra|250px|2001-es emléktábla a nagykőrösi [[Arany János Közérdekű Muzeális Gyűjtemény|Arany János Múzeum]]<nowiki> falán]] A </nowiki>[[ballada]] (a [[Provanszál dialektus|provanszál]] ''balada, azaz „tánc”'' szóból eredeztetik) a szépirodalomban meghatározását tekintve az [[Epika|epikának]] egy [[Líra (műnem)|lírai]] jegyeket is mutató költői műfaja. [[Greguss Ágost]] szerint ''„tragédia dalban elbeszélve.”'' Arany elsősorban lírikus költő volt, de a gondolatibb líra felé vonzódott. A ''[[Toldi estéje]]'' és a balladái jó példák erre. 1853 után kezdett rendre balladákat írni, főleg nagykőrösi tanársága idején, és kétségtelenül ezek a legjobban szerkesztett költemények életművében. Végigkomponáltságuk egyedülálló, és ilyen típusú balladákkal a [[Magyar irodalom|magyar irodalomban]] majd [[Ady Endre|Ady Endrénél]] lehet megint találkozni.<ref name="A nagykőrösi évek balladái">{{cite web |title=A nagykőrösi évek balladái |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/ajpalya4.htm |accessdate=2016-11-18 |publisher=magyar-irodalom.elte.hu}}</ref>
Már 1847-ben is kísérletezett a balladával, de ezen verstípusait a nagykőrösi években emelte igazán magas színvonalra. Közel állt hozzá a történetet kihagyásokkal, párbeszédekkel dramatizáló ballada, amelyet a skót és a székely népköltészetből ismert meg. Nem úgy, mint a történetet lassabban adagoló [[Románc (irodalmi műfaj)|románcot]], melyet a latin népek (elsősorban spanyolok) költészetéből és még talán a németektől ismerhetett meg. Jól bizonyítható ez a Hunyadi-balladakör két megírt részének: az ''V. László''nak (1853) és a ''Mátyás anyjá''nak (1854) összehasonlításakor, mivel az előbbit lényegesen nagyobb igénnyel írta meg.{{refhely|Sőtér István IV. kötet||Csáky Zsolt|}}
Balladatípusai három szerkezeti megoldást tartalmaznak. Az elsőt egyszólamú, vonalszerűen előrehaladó balladának lehet nevezni. Ez áll legközelebb a románchoz, nevezik még népies balladának is. Ide tartoznak első balladakísérletei: ''A varró leányok'' (1847), ''Az egri lány'' (1853) és két nagy vers: ''Zách Klára'' (1855) és ''A walesi bárdok'' (1857).<ref name="A nagykőrösi évek balladái" /> Korai balladái közül a fontosabbak:
* ''[[Mátyás anyja]]'' (1854): A vers arról szól, hogy az aggódó [[Szilágyi Erzsébet (kormányzóné)|Szilágyi Erzsébet]] levélben próbál hírt kapni Prágában raboskodó fiáról. A műben [[Allegória|allegorikus]] a hírvivőként szerepel a holló, a [[Hunyadi-család]] címerállata.<ref>{{cite web |author= |title=Mátyás anyja |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/matyany.htm |accessdate=2016-11-18 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[Zách Klára (ballada)|Zách Klára]]'' (1855): A magyar történelem egyik leghírhedtebb merényletét [[Záh Felicián]] követte el, akinek családját különös kegyetlenséggel [[I. Károly magyar király|I. Károly Róbert]] parancsára kivégezték. Többek közt Zách lányát, Klárát is. Arany a tömbszerűen szaggatott történetmondással lelassítja az elbeszélést. A lépcsőzetes szerkezetet a bosszúálló királyné szavainak idézése zárja le, és az utolsó sorokban a magyar haza kilátástalan helyzetén kesereg a költő.<ref>{{cite web |author= |title=Zách Klára |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/zacs.htm |accessdate=2016-11-21 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[A walesi bárdok]]''. (1861 körül)<ref>Utóbbi ballada keletkezéséről a [[2000-es évek]] közepéig azt gondolták, hogy Ferenc József és [[Wittelsbach Erzsébet magyar királyné|Erzsébet királyné]] 1857-es magyarországi látogatása alkalmából készült. A 2000-es évek közepén viszont [[Milbacher Róbert]] rekonstruálta ''A walesi bárdok'' keletkezésének körülményeit, és ennek kapcsán arra a következtetésre jutott, hogy a balladát 1861 körül írhatta vagy legalábbis fejezhette be, részben [[Széchenyi István]] ''Ein Blick'' című pamfletjének hatására, részben pedig azért, mert megtudta, hogy egy másik költő, Tóth Endre ''Ötszáz gael dalnok'' címmel ugyancsak megírta a walesi bárdok történetét.</ref><ref name="Milbacher Róbert" /><ref>{{cite web |author= |title=A walesi bárdok kézirata |url=http://real-ms.mtak.hu/16/ |accessdate=2016-11-21 |publisher=MTA KIK |language=magyar}}</ref> Versformája az úgynevezett skót ballada. Több versében a bűn és bűnhődés gondolatát állította középpontba, és ezekhez tartozik a walesi bárdok is. A szakaszos tördeltség benyomását erősítő belső ismétlések itt is uralkodó szerepet játszanak, mind az elbeszélésben, mind a párbeszédben, sőt közöttük is. Történeti tények egyébként nem támasztják alá, amit Arany ebben a balladában megénekelt.<ref>{{cite web |author= |title=A walesi bárdok elemzése |url=http://tudasbazis.sulinet.hu/hu/e0803548-666b-7010-0020-6b726f6e696b_e0803601-6c70-8020-0000-6b726f6e696b |archiveurl=https://web.archive.org/web/20170105191352/http://tudasbazis.sulinet.hu/hu/e0803548-666b-7010-0020-6b726f6e696b_e0803601-6c70-8020-0000-6b726f6e696b |archivedate=2017-01-05 |accessdate=2016-11-21 |publisher=tudasbazis.sulinet.hu |language=magyar}}</ref>
A második csoportba sorolható balladáit történelminek lehet nevezni. Ezeknek a balladáknak távolibb a rokonsága a románccal. Történelmi balladái politikai célzatosságot hordoznak magukban. Az [[1850-es évek|1850-es években]] fel kellett rázni a [[Magyarok|nemzetet]] fásultságából, és Arany ebben nagy szerepet vállalt. Az ''V. László'' végszavaival – ''„De visszajő a rab…!”'' – vélhetően az osztrák császár börtöneiben raboskodó magyar hazafiak hozzátartozóiba próbált lelket önteni, a ''Zách Klára'' [[Julius Jacob von Haynau|Haynau táborszernagy]] kegyetlen bosszúját idézte fel, a ''Szondi két apródja'' és ''A walesi bárdok'' arra emlékeztetett, hogy a nemzetét szerető magyar költőnek nincs miért dicsőítenie [[I. Ferenc József magyar király|Ferenc Józsefet]]. Arany a nemzeti önrendelkezést akkor állította középpontba, amikor a magyar függetlenséget eltörölték, és történeti példázataival egyszerre tanított a megalkuvás elutasítására és a sorssal szembeszegülő kemény próbatételre is. Két jelentős verse sorolható egyértelműen ebbe a balladatípusba, az ''V. László'' és a ''Szondi két apródja'', de ide köthető még az [[Ágnes asszony]] (1853) és ''Az örök zsidó'' (1860) is:{{refhely|Sőtér István IV. kötet||Csáky Zsolt|}}
* ''[[V. László (ballada)|V. László]]'' (1853): Történelmi tárgyú, Nagykőrösön írt ballada. A Hunyadi-balladakör elsőként megírt része. Több szálon fut a történet , melynek írásmódja töredékes mondatszerkesztésű. A költemény tördeltsége fokozódik attól kezdve, hogy a [[Fogoly (személy)|foglyok]] megszöknek, a király pedig elmenekül [[Prága|Prágába]]. A bűn és bűnhődés motívum kiváló példája, amikor a menekülő király hűsítőt kér hű szolgájától, aki e szavakkal adja át neki a kelyhet: ''„Itt a kehely, igyál, Uram, László király, Enyhít… mikép a sír!”''<ref>{{cite web |title=Arany János – V. László (1853) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyaj.htm |accessdate=2016-11-25 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[Szondi két apródja]]'' (1856): Történelmi ballada, melyben vezérmotívum a kétszólamúság. A történet alapja [[Drégely vára|Drégely várának]] 1552-es török ostroma. Az apródok a múltat idézik fel, míg Ali szolgája a jelent. A költemény arra keres válaszokat, hogy a bátor és hős várvédők tragikus bukásából milyen erkölcsi tanulságokat lehet levonni.<ref>{{cite web |title=Arany balladái – Szondi két apródja |url=http://tudasbazis.sulinet.hu/hu/magyar-nyelv-es-irodalom/irodalom/irodalom-8-osztaly/arany-balladai/szondi-ket-aprodja |accessdate=2016-11-25 |publisher=tudasbazis.sulinet.hu |language=magyar}}</ref>
* ''[[Ágnes asszony]]'' (1853): Nagykőrösön írt balladáinak egyike, műfaját tekintve keretes szerkezetű ballada. Az erősen lirizált versnek a megalkotásakor az egyén sorsának egyetemes kérdései foglalkoztatták a költőt. Arany e művében a [[Bűn|bűnt]] teszi kérdésessé, a mű témája a lelkiismereti konfliktus. A férjgyilkost bírái szabadon engedik, mert elmebajos.<ref>{{cite web |title=Arany János – Ágnes asszony (1853) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyal.htm |accessdate=2016-11-25 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[Az örök zsidó]]'' (1860): A legjelentősebb alkotói korszakát lezáró nagy verse. Műfaját tekintve elégikus líra és tragikus ballada ötvözete. Az örök zsidó (ismertebb nevén [[a bolygó zsidó]]) legendájáról szóló történet [[Párizsi Máté]] angol szerzetes 13. századi krónikájából ismert.<ref>Karthaphilos, [[Quintus Pontius Pilatus|Pilátus]] ajtónállója a halálra ítélt [[Jézus|Krisztust]] a palotából kiléptekor megütötte, és ezt mondta: ''Menj már, miért késlekedsz.'' Krisztus így felelt neki: ''Én megyek, de te várj, míg visszatérek.'' Forrás: Csáky Zsolt: ''Az önkényuralomtól a kiegyezésig. Arany János (1817–1882)''.</ref> Ez a történet másokat, például [[Vörösmarty Mihály|Vörösmartyt]] is foglalkoztatta, de erről írt költeménye töredékben maradt csak fenn. Arany új verstípust alakított ki ebben a művében, ami csak a 19. század közepén jelent meg az európai költészetben. Az örök zsidó reménye szerint egyszer talán megáll a végtelen rohanás.<ref>A költemény művészi hatása összefügg azzal, hogy Arany kínzó kérdésként fogalmazza meg és egyetemes jelképbe kivetítve tárgyiasítja a belső feszültségét, ami döntő szerepet játszott élményvilágában.</ref><ref>{{cite web |title=Arany János – Az örök zsidó (1860) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyam.htm |accessdate=2016-11-25 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
Harmadik típusú, ''nagyvárosi'' balladái a késői korszakának „[[Őszikék]]”-balladái. E korszakban előtérbe kerültek misztikus [[Babona|babonás]] motívumok, felerősödött költészetében az [[Erkölcs|erkölcsi]] szigor, és megjelent a [[Város|nagyváros-ellenesség]]. Ezekben az 1877-ben keletkezett balladákban kevesebbnek tűnik a drámai rész, és a párbeszédeket magánbeszédekkel helyettesíti a költő. Erre a korszakra az is jellemző, hogy pár hónap alatt több költeményt ír, mint előtte hosszú évek során.<ref>{{cite web |title=Arany János – Az Őszikék balladái |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/ajpalya8.htm |accessdate=2016-11-25 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref> Az Őszikék korszak fontosabb balladái: [[Fájl:Gyárfás, Jenő - The Ordeal of the Bier (1881).jpg|250px|bélyegkép|jobbra|[[Gyárfás Jenő]]: ''Tetemrehívás''<nowiki> (1883)]]</nowiki>
* ''[[Tetemre hívás]]'': Késői korszakának egyik legnépszerűbb és talán legtöbbet vitatott balladája. A [[Középkor|középkori]] kis faluban játszódó történetben egy apa keresi késsel megölt fia gyilkosát úgy, hogy segítségül hívja az [[Istenítélet|istenítéletet]]. Az olvasót magával ragadja a sajátos ritmika és a [[Misztika|misztikus]] történet. A hatás nem maradt el, hiszen [[Gyárfás Jenő|Gyárfás Jenőt]] oly módon megihlette, hogy megfestette a ''Tetemrehívást''. A képére nézve és Arany sorait olvasva ''„...döbbenet által a szív ere fagy...”'', ki lehet jelenteni, hogy tapintható a drámai feszültség. A [[Hiedelemmonda|néphit]] szerint ugyanis a halott sebe gyilkosának jelenlétében újra vérezni kezd.<ref>{{cite web |title=Tetemre hívás |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/tetemre.htm |accessdate=2016-12-02 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref><ref>{{cite web |title=Arany és XIX. századi történeti festészetünk |url=https://mek.oszk.hu/00500/00596/html/festeszet/festeszet.html |accessdate=2016-12-02 |publisher=mek.oszk.hu |language=magyar}}</ref> A műből 1909-ben zenekölteményt írt [[Würtzler Béla (hegedűs)|Würtzler Béla]].<ref>{{cite web |author=HarpPost |date=2023-01-12 |title=Adalékok id. Würtzler Béla életútjához |url=https://harppost.blogspot.com/2023/01/adalekok-id-wurtzler-bela-eletutjahoz.html |accessdate=2023-01-22}}</ref>
* ''[[Tengerihántás]]'': A műben két elbeszélő szerepel. Egyikük csak a keretnek tekinthető első és utolsó versszakban szólal meg. A kereten belüli történet folyamán az ellenszólam egyaránt olvasható a keretként szolgáló helyzet betű szerinti leírásának és a kereten belüli történet metaforikus értelmezésének: ''„Dalos Eszti a mezőre kiment ő, / Aratókkal puha fűvön pihent ő; / De ha álom ért reájok, / Odahagyta kis tanyájok. / – Töri a vadkan az „irtást” – / Ne tegyétek, ti leányok!”'' Még az utolsó előtti versszak sem kivétel: a jelen betű szerinti leírása itt is a múlt metaforája.<ref>{{cite web |title=Arany János – Tengeri-hántás (1877) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyav.htm |accessdate=2016-11-25 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[Híd-avatás]]'': Egy évvel a [[Margit híd]] zászlódíszes avatása után írta, amely időközben az [[Öngyilkosság|öngyilkosságra]] készülő emberek egyik lehetséges helyszínévé vált. Áll az új híd, és sorban emberek érkeznek hozzá. Éjszaka és csend van, azonban egyszerre tömeg gyűlik a hídhoz mindenféle kor- és [[Társadalmi osztály|társadalmi osztályb]]ól, és mintegy önmagukból kikelve, bűvölet alatt, avatásként a mélybe vetik magukat. Valójában ők a modern nagyváros elesettjei, a [[pénz]] világának áldozatai. Felbukkanni látszik az a régi, [[Középkor|középkori]] babona is, amely szerint az elmúlás előtt a [[halál]] egy [[Haláltánc (műfaj)|utolsó táncra]] viszi a haldoklót. Az egész abszurd helyzet egyfajta tánc könnyedségével zajlik a költeményben.<ref>{{cite web |title=Arany János – Híd-avatás |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/hid.htm |accessdate=2016-11-25 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[Vörös Rébék (vers)|Vörös Rébék]]'': A késői balladái közül talán ez a legeredetibb. Egy népmondai töredék alapján íródott, mely a vers első két sorában idézetként szerepel. A [[Kormos varjú|varjú]] és a [[boszorkány]] azonosítása népi hiedelmen alapul. A cím egy asszonyra, [[Rebeka|Rebekára]] utalhat, akinek vörös haja van. Ez a ballada a paraszti életet és a misztikumot idézi, és egy sajátságos kapcsolatra mutat rá.<ref>{{cite web |title=Arany János – Vörös Rébék |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/vorosr.htm |accessdate=2016-11-25 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[A kép-mutogató]]'': A vásári [[Képmutogatás|képmutogatásr]]ól szól a költemény, mely Arany János utolsó balladája. A történet két fontos szereplő és két polaritás köré szerveződik. Az egyik ilyen szövegalkotó tényező [[Petőfi Sándor]], a másik pedig vélhetően [[Széchenyi István]].<ref>{{cite web |author=Sárkány János |title=Adalékok Arany utolsó balladájához |url=https://hu.wikibooks.org/wiki/S%C3%A1rk%C3%A1ny_J%C3%A1nos:Adal%C3%A9kok_Arany_utols%C3%B3_ballad%C3%A1j%C3%A1hoz |archiveurl=https://web.archive.org/web/20161126131542/https://hu.wikibooks.org/wiki/S%C3%A1rk%C3%A1ny_J%C3%A1nos:Adal%C3%A9kok_Arany_utols%C3%B3_ballad%C3%A1j%C3%A1hoz |archivedate=2016-11-26 |accessdate=2016-11-26 |publisher=wikibooks.org |language=magyar}}</ref>
== Arany és a zene ==
{{Sticky header}}
{| class="wikitable sortable sticky-header" align="right" style="margin-left: 20pt"
|+17 dal a 19-ből
!Cím
!Szövegíró
|-
|A hegedű száraz fája{{jegyzet*|Zeneszerzők: Tóth János István, valamint Vásárhelyi Zoltán}}
|Arany János
|-
|A tudós macskája{{jegyzet*|ISWC: T-007.202.109-0, zeneszerző: Radványi Balázs}}
|Arany János
|-
|Igyunk biz azt egy-egy kicsit{{jegyzet*|ISWC: T-007.204.560-3, zeneszerző: Tóth János István}}
|Arany János
|-
|Zách Klára
|Arany János
|-
|A toronyban delet harangoznak
|[[Petőfi Sándor]]
|-
|A tintás üveg
|[[Petőfi Sándor]]
|-
|Csokonai
|[[Petőfi Sándor]]
|-
|Éji dal
|[[Petőfi Sándor]]
|-
|[[A szép fényes katonának]]
|[[Amade László]]
|-
|Bú kél velem
|[[Kölcsey Ferenc]]
|-
|Esteledik, szól a gulya kolompja
|[[Bartalus István]]
|-
|Zöld erdőben, zöld mezőben sétál
|ismeretlen
|-
|[[Erdő mellett estvéledtem]]
|ismeretlen
|-
|Szép jóestét
|ismeretlen
|-
|Túl a hegyen
|ismeretlen
|-
|Én ültettem a cédrusfát
|ismeretlen
|-
|Elveszett a tarka tyúkom
|ismeretlen
|}
Arany János már gyermekkorában [[Gitár|gitározott]] és [[Zongora|zongorázott]]. Saját elmondása szerint, amikor Debrecenben felcsapott színésznek, szép, csengő hangja volt. Értett a [[Kottaírás|kottaíráshoz]] is, de nem tudni, kitől tanulta. Életének utolsó éveiben, az 1870-es évek elején névnapjára gitárt kapott ajándékba a barátaitól. Emlékezetből leírta ifjúkorának mindegy 150 kedvelt dalát. Gitározás közben [[Petőfi Sándor]], [[Kölcsey Ferenc]], [[Amade László]] és a saját verseire született, kíséret nélküli melódiákat papírra vetett, és azzal adta át [[Bartalus István]] barátjának, hogy csak halála után hozhatja nyilvánosságra. Bartalus 1883. január 31-én a [[Kisfaludy Társaság]] ülésén jelentette be az Arany hagyatékából maradt dalokat, és [[Láng Fülöp]] operaénekes előadásában, Bartalus zongorakíséretében tízet elő is adott közülük.{{refhely|Leszler János}}<ref name="Lakatos Vince">{{cite journal |author=Lakatos Vince |year=1919 |title=Arany János mint zeneszerző |url=http://epa.oszk.hu/02500/02518/00042/pdf/EPA02518_irodalomtortenet_1919_01-02_040-043.pdf |format=pdf |language=magyar |issue=Irodalomtörténet |pages=40–43. p. |accessdate=2016-06-30}}</ref>
[[Jakab István (drámaíró)|Jakab István]] zenésítette meg a ''Nemzetőr-dal'' (1848) című versét, mely [[Népdal|népdall]]á vált.<ref name="Nemzetőrdalok" /> Arany Jánosnak az 1874–82 közötti évekből 19 saját dala maradt fenn, ezek közül tíz megjelent nyomtatásban 1883-ban Bartalus István zongorakíséretével. Arany néhány dalszöveget is írt. 1849-ben [[Festetics Leó]] zenéjére írta a [[Kondorosi csárda mellett]] című versét. 1856. április 17-én küldte el <cite>Hej iharfa, juharfa</cite> című versét [[Simonffy Kálmán]] zeneszerzőnek. Ugyancsak 1856-ban írta <cite>Volt nekem egy rigószőrű paripám</cite> kezdetű versét, melyet [[Egressi Samu]] zenésített meg.{{refhely|Leszler János}}<ref name="Lakatos Vince" />
''Pázmán lovag'' című vígballadájának témája [[Johann Strauss (zeneszerző, 1825–1899)|ifj. Johann Strauss]] egyedüli operájának{{wd|Q2632179}} volt témája, [[Dóczy Lajos]] átírásában.<ref name="A nagykőrösi évek balladái" />
== Művei ==
* [https://mek.oszk.hu/00500/00597/html/ Arany János Összes verse]
* [https://mek.oszk.hu/00500/00596/html/ Őszikék] Elektronikus kiállítás a Magyar Elektronikus Könyvtárban
* [http://www.gutenberg.org/ebooks/author/41307 Művei a Project Gutenbergen]
* [https://web.archive.org/web/20080516113521/http://www.akonyv.hu/klasszikus.htm Arany János művei a Mercator Stúdió Elektronikus Könyvkiadónál]
* [http://tudastar.googlepages.com/arany Arany versek neves előadóktól (online hallgatható)] {{Wayback|url=http://tudastar.googlepages.com/arany|date=20070430200326}}
* [http://www.babelmatrix.org/index.php?page=authorPage&auth_id=118 Arany János versei műfordításokban] Bábel Web Antológia
* [http://real-eod.mtak.hu/3578/ Arany János prózai dolgozatai] MTA
* [http://real-ms.mtak.hu/18072/ Kapcsos könyv] (kézirat)
* [http://real-eod.mtak.hu/view/series/Arany_J=E1nos_=F6sszes_m==0171vei.html Arany János összes művei], Akadémiai Kiadó
== Műfordításai ==
Kezdetben latin, görög és német nyelvű munkákból fordított, de ahogy haladt előre az angol nyelvben, úgy ért oda élete legjelentősebb fordításaihoz. Műfordításainak eredménye, hogy nevéhez köthető a magyar műfordítás-irodalom fellendítése. 1860-ban lett a Kisfaludy Társaság igazgatója, és az ő irányításával alakult meg a társaság [[Magyar Shakespeare Bizottság|Shakespeare-bizottsága]]. Ez indította meg a legnagyobb arányú magyar műfordítási vállalkozást, a teljes Shakespeare-kiadást. Tizenkilenc kötetben, 1864 és 1879 között jelentek meg a sorozat részei, melynek kiadási költségeit [[Tomori Anasztáz]] vállalta magára. Arany a már régebben megkezdett [[János király|''János királly''al]] és a ''[[Szentivánéji álom]]''mal szerepelt, illetve a sorozathoz készítette el a klasszikussá vált [[Hamlet, dán királyfi|''Hamlet''-fordítását]].<ref>{{cite book |author=Sőtér István |url=https://mek.oszk.hu/02200/02228/html/04/315.html |title=A magyar irodalom története – 52. A MŰFORDÍTÁS-IRODALOM |publisher=Akadémiai Kiadó, |year=1965 |isbn=963 05 1643 5 |language=magyar |accessdate=2016-11-26 |city=Budapest}}</ref>
Jelentősebb műfordításai:
=== Versek ===
* ''Sir Patrick Spens'' (skót ballada); kínai népballadák (angolból)
* néhány vers, ballada, epigramma [[Quintus Horatius Flaccus|Horatiustól]], [[Ludwig August Frankl von Hochwart|Ludwig August Frankltól]], [[Robert Burns (költő)|Robert Burnstől]], [[Johann Wolfgang von Goethe|Goethétől]], [[George Byron|Byrontól]] (Az új görög dalnok – a ''Don Juan'' című elbeszélő költemény részlete), [[Thomas Moore (költő)|Thomas Moore-tól]].
=== Színművek ===
* [http://real-eod.mtak.hu/4213/ Arisztophanész vígjátékai]
* [[William Shakespeare|Shakespeare]]
** ''[[Hamlet, dán királyfi]]''<ref>A ''[[Hamlet, dán királyfi]]'' Arany János kedvenc olvasmányai közé tartozott, és nem véletlen, hogy az ő remek fordításában vált a magyar irodalom szerves részévé. Arany fordítása után sokáig csak jelentéktelen fordítások születtek: Zigány Árpád (1899, prózafordítás), Telekes Béla (1904), Szabó T. Attila (1929, prózafordítás).</ref>
** ''[[János király]]''
** ''[[Szentivánéji álom]]''
{{wikiforrás|Kategória:Arany János fordításai}}
=== Prózafordítások ===
* [[Nyikolaj Vasziljevics Gogol|Nyikolaj Gogol]]: ''A köpönyeg'' (német nyelvű kiadás alapján)
== Egyesületi, testületi tagságai ==
* A Magyar Tudományos Akadémia tiszteletbeli főtitkára, igazgatója és rendes tagja
* A Kisfaludy Társaság igazgatója és rendes tagja
* A Concordia budapesti jótékonysági egylet tiszteletbeli tagja
* A bölcsészhallgatókat segítő egyesület bizottságának tiszteletbeli tagja
== Emlékezete ==
{{Képdia|Kép:Arany János sírja.jpg|Arany János és [[Arany László (költő)|Arany László]] síremléke [[Budapest]]en. [[Fiumei úti sírkert|Kerepesi temető]]: 14-sziget. [[Strobl Alajos]] szobrászművész és [[Kallina Mór]] építész alkotása. Kivitelezők: [[Kauser József|Kauser-cég]], [[Strozzi]]-cég<ref group="m">A temető egész területe az állami tulajdonú védett síremlékekkel együtt műemlék.</ref>|Kép:Ref. kollégium (5236. számú műemlék) 3.jpg|A [[Debreceni Református Kollégium]] bejárata|Kép:Arany János plaque (Nagykőrös Hősök tere 6).jpg|Arany János mellszobra (Debrecen, Hajó utca, [[Juha Richárd]] alkotása)|Kép:Arany János emléktáblája V kerület Arany János utca 1.JPG|[[Budapest V. kerülete|Budapest V. kerület]] Arany János utca 1. szám alatti emléktábla|Kép:Arany János mellszobor, Szeged UNJ.jpg|Arany János portrészobra Szegeden|Kép:Slač - kúpele, pamätná tabuľa.JPG|Arany János és [[Madách Imre (író)|Madách Imre]] emléktáblája [[Szliácsfürdő]]n|Kép:Arany János tűzfalportré.jpg|Portréja a XII. kerület, Alkotás - Márvány utca sarkán egy ház tűzfalán|Fájl:Arany János-emlékpad.gif|Arany János-emlékpad, ''Toldi estéje''<br />([[Göd|Alsógöd]], [[Városvédők Egyesülete]])|cím=Arany János emlékezete}} {{idézet2|''A nyelv a nép nyelve, de stilizált népnyelv. Mintegy a népnyelv quinta essentiája, oly tömény oldat, hogy maga a nép már nem is értheti meg. Arany jegyzetekkel magyarázza kifejezéseit, talán érzi, hogy Buda halála nemsokára a magyar irodalom legnehezebb olvasmányai közé fog tartozni. Nyelvészkedő szorgalmának gyümölcse ez a nyelv, melyet csillagmérföldek választanak el Petőfi közvetlenségétől. Aki a hunokról ír, nem is beszélhet a XIX. század változandó nyelvén; aki az örök magyar sorsot akarja kifejezni, annak az örök magyar nyelvet, a lényegnyelvet kell megteremtenie.''|[[Szerb Antal]]: ''Arany János''}} Műveinek teljes gyűjteményét a költő halála után csakhamar kiadta régi kiadója, [[Ráth Mór]]; összes munkáit nyolc kötetben [[1884]]–1885-ben, hátrahagyott iratait és levelezését pedig fia, [[Arany László (költő)|Arany László]] szerkesztésében és jegyzeteivel, négy kötetben 1887 és 1889 között. 1895 és 1898 között jelentek meg négy kötetben a [[Zichy Mihály]] által illusztrált Arany-balladák. Ezt a sorozatot hasonmás kiadásban a 2017-es [[Arany János-emlékév]] nyitányára ismét kiadták.<ref>[[c:Category:Illustrations to János Arany's ballads by Mihály Zichy|''Arany János Balladái Zichy Mihály rajzaival'' a Wikimédia Commonson]]</ref><ref>{{cite web |date=2016-11-25 |title=Hasonmás kiadásban jelentek meg Arany János Zichy Mihály által illusztrált balladái |url=http://mta.hu/sajtoszemle/hasonmas-kiadasban-jelentek-meg-arany-janos-zichy-mihaly-altal-illusztralt-balladai-107140 |accessdate=2016-12-02 |publisher=mta.hu |language=magyar}}</ref>
[[Arany János-szobor (Budapest)|Arany János bronzszobrát]] a költő műveiből vett alakokkal (Toldi, Rozgonyi Piroska) [[Strobl Alajos]] mintázta, a [[Magyar Nemzeti Múzeum]] előtt állították fel, és [[1893]] tavaszán leplezték le. Tiszteletére portrészobrot avattak a [[Szeged|szegedi]] Nemzeti Emlékcsarnokban, a Dóm tér keleti oldalán. (A szobor szintén Strobl alkotása.) Szintén szobrot állított tiszteletére szülővárosa, [[Nagyszalonta]] is, és itt található a helyiek által Csonkatoronynak nevezett [[Arany János Emlékmúzeum]].<ref name="partiumimuzeumok">{{cite web |date= |title=Nagyszalonta Arany János Emlékmúzeum |url=http://partiumimuzeumok.ro/nagyszalonta/index.html |archiveurl=https://web.archive.org/web/20160425183234/http://partiumimuzeumok.ro/nagyszalonta/index.html |archivedate=2016-04-25 |accessdate=2016-10-29 |publisher=partiumimuzeumok.ro |language=magyar-román-angol}}</ref>
Szalontai szülőháza nem maradt meg, de a helyére a város önkormányzata építtetett egy tájjellegű épületet. A benne kialakított, néprajzi jellegű helytörténeti kiállítást 2010 júniusában adták át.<ref name="partiumimuzeumok" /> [[Arany János emlékezete Erdélyben|Erdélyben emlékezete]] külön figyelmet kap, és évfordulós megemlékezéseket, ünnepi eseményeket és koszorúzásokat szerveznek.<ref>{{RMIL|1||a.htm#AranyJánosemlékezete}} [Arany János emlékezete]</ref><ref>{{cite web |date=2015-10-26 |title=Arany János emlékezete Nagyszalontán |url=http://www.reggeliujsag.ro/arany-janos-emlekezete-nagyszalontan/ |archiveurl=https://web.archive.org/web/20161029235500/http://www.reggeliujsag.ro/arany-janos-emlekezete-nagyszalontan/ |archivedate=2016-10-29 |accessdate=2016-10-29 |publisher=reggeliujsag.ro |language=magyar}}</ref> 1903–1948 között Temesváron működött az [[Arany János Társaság]], mely a költő emlékének ápolását és az irodalom- és a nyelvművelést tűzte ki célul.<ref>{{cite journal |author=Pomogáts Béla |title=Temesvár a magyar irodalomban |url=http://www.forrasfolyoirat.hu/1604/pomogats.pdf |format=pdf |language=magyar |issue=Forrásfolyóirat |pages=52-60 old. |authorlink=Pomogáts Béla |accessdate=2016-05-05 |archiveurl=https://web.archive.org/web/20161101164400/http://www.forrasfolyoirat.hu/1604/pomogats.pdf |archivedate=2016-11-01}}</ref> 1955-ben Nagyszalontán az anyanyelvi kultúra ápolására és a magyar irodalom terjesztésére alakult meg az [[Arany János Irodalmi Kör (Nagyszalonta)|Arany János Irodalmi Kör]].<ref>{{RMIL|1||a.htm#AranyJánosIrodalmiKör}} [Arany János Irodalmi Kör]</ref> [[Kép:Budapest-margitsziget-arany-1.jpg|bélyegkép|Arany János mellszobra a [[Margit-sziget|Margit-szigeti]] tölgyek alatt<ref>[https://www.nevezetesfak.hu/magyar/oldalak/arany_janos_tolgyei/ Arany János tölgyei] {{Wayback|url=https://www.nevezetesfak.hu/magyar/oldalak/arany_janos_tolgyei/|date=20190807110557}}, nevezetesfak.hu</ref><ref>[https://gallery.hungaricana.hu/hu/BudapestGyujtemeny/11465/?img=0 A margitszigeti Arany János-szobor], gallery.hungaricana.hu</ref><nowiki>]] </nowiki>[[Nagykőrös]]ön nevét viseli az Arany János Református Gimnázium, Szakközépiskola és Kollégium,<ref>{{cite web |title=Az Arany János Református Gimnázium, Szakközépiskola és Kollégium weboldala |url=http://www.ajrg.hu/ |archiveurl=https://web.archive.org/web/20190930165816/http://www.ajrg.hu/ |archivedate=2019-09-30 |accessdate=2016-10-29 |publisher=ajrg.hu |language=magyar}}</ref> az [[Arany János Közérdekű Muzeális Gyűjtemény]],<ref>{{cite web |title=Az Arany János Közérdekű Muzeális Gyűjtemény weboldala |url=http://www.korosikultura.hu/ |accessdate=2016-12-19 |publisher=korosikultura.hu |language=magyar}}</ref> és a városban működik az irodalmi, tudományos és művészi tevékenységgel foglalkozó Arany János Társaság.<ref>{{cite web |title=Arany János Társaság honlapja |url=http://aranytarsasag.ajrg.hu/ |archiveurl=https://web.archive.org/web/20161029174627/http://aranytarsasag.ajrg.hu/ |archivedate=2016-10-29 |accessdate=2016-10-29 |publisher=aranytarsasag.ajrg.hu |language=magyar}}</ref> A magyarországi települések többségében lehet találni róla elnevezett utcát, teret – például [[Arany János utca metróállomás]], [[Arany János tér (Debrecen)]].
* Magyarország több pontján [[iskola]] viseli a nevét (például: [[Budapest|Budapesten]],<ref>{{cite web |title=Sashegyi Arany János Általános Iskola és Gimnázium |url=https://ajgm.mozanaplo.hu/portal |accessdate=2016-06-30 |publisher=ajgm.mozanaplo.hu |language=magyar}}</ref> [[Szeged|Szegeden]],<ref>{{cite web |title=Szegedi Arany János Általános Iskola |url=https://arany-szeged.mozanaplo.hu/portal |accessdate=2016-06-30 |publisher=arany-szeged.mozanaplo.hu |language=magyar}}</ref> [[Bonyhád|Bonyhádon]],<ref>{{cite web |title=Arany János Gimnáziumi Intézményegység |url=http://aranyjanosiskola.hu/ |archiveurl=https://web.archive.org/web/20160828062332/http://aranyjanosiskola.hu/ |archivedate=2016-08-28 |accessdate=2016-06-30 |publisher=aranyjanosiskola.hu |language=magyar}}</ref> [[Nyíregyháza|Nyíregyházán]],<ref>{{cite web |title=Nyíregyházi Arany János Gimnázium, Általános Iskola és Kollégium |url=http://nyharany.hu/wp/ |accessdate=2016-06-30 |publisher=nyharany.hu |language=magyar}}</ref> [[Dunaújvárosi Arany János Általános Iskola|Dunaújvárosban]]),<ref>{{cite web |title=Dunaújvárosi Arany János Általános Iskola |url=https://www.oktatas.hu/hivatali_ugyek/kir_intezmenykereso/!Intezmenykereso/Intezmeny/Index/030037 |archiveurl=https://web.archive.org/web/20180122235115/https://www.oktatas.hu/hivatali_ugyek/kir_intezmenykereso/!Intezmenykereso/Intezmeny/Index/030037 |archivedate=2018-01-22 |accessdate=2016-12-19 |publisher=oktatas.hu |language=magyar}}</ref> Gyöngyösön ([[Arany János Általános Iskola (Gyöngyös)|Arany János Általános Iskola]]), Százhalombattán ([[Arany János Általános Iskola és Gimnázium (Százhalombatta)|Arany János Általános Iskola és Gimnázium]]), továbbá a környező országokban is (például: Arany János Líceum, [[Nagyszalonta]],<ref>{{cite web |title=Arany János Líceum |url=http://www.gsaranyjanos.ro/ |archiveurl=https://web.archive.org/web/20170622082509/http://www.gsaranyjanos.ro/ |archivedate=2017-06-22 |accessdate=2016-11-08 |publisher=gsaranyjanos.ro |language=magyar-román}}</ref> Arany János Alapiskola, [[Ekecs]],<ref>{{cite web |title=Arany János Alapiskola |url=http://www.suli.sk/organization.php?organization=98§ion=ais |accessdate=2016-11-08 |publisher=suli.sk |language=magyar-román}}</ref> Arany János Általános Iskola, [[Oromhegyes]],<ref>{{cite web |title=Arany János Általános Iskola |url=http://www.aranyjanos.edu.rs/ez-egy-minta-oldal/ |accessdate=2016-11-08 |publisher=aranyjanos.edu.rs |language=magyar-szerb}}</ref>) de még a tengerentúlon is, [[Kanada]] [[Hamilton (Ontario)|Hamilton]] városában<ref>{{cite web |title=Arany Janos Magyar Iskola / Hungarian School |url=http://www.hun-suli.itgo.com/index.html |accessdate=2016-06-30 |publisher=hun-suli.itgo.com |language=angol}}</ref> és az Amerikai Egyesült Államokban, [[New York|New Yorkban]].<ref>{{cite web |title=Arany János Magyar Iskola |url=http://www.aranyjanosiskola.org/ |archiveurl=https://web.archive.org/web/20160516232651/http://www.aranyjanosiskola.org/ |archivedate=2016-05-16 |accessdate=2016-06-30 |publisher=aranyjanosiskola.org |language=magyar}}</ref>
* 1985–1994 között működött Arany János Színház néven a Budapesti Gyermekszínház társulata a Paulay Ede u. 35. sz. alatti épületben.<ref>{{cite web |title=Arany János Színház |url=https://mek.oszk.hu/02100/02139/html/sz01/193.html |accessdate=2016-06-30 |publisher=MAGYAR SZÍNHÁZMŰVÉSZETI LEXIKON |language=magyar}}</ref><ref>{{cite web |title=Parisiana-tól az Új Színházig |url=http://www.ujszinhaz.hu/page25.php |archiveurl=https://web.archive.org/web/20160808083433/http://ujszinhaz.hu/page25.php |archivedate=2016-08-08 |accessdate=2016-06-30 |publisher=ujszinhaz.hu |language=magyar}}</ref>
* [[Kisbolygó|Kisbolygót]] neveztek el róla: a [[89973 Aranyjános|89973 Aranyjánost]]. Az apró, 1–2 km átmérőjű, 3,29 éves keringési idejű égitestet, melyet 2002. szeptember 8-án fedezett fel [[Sárneczky Krisztián]].<ref>{{cite web |title=Aranyról, Jókairól és Ganzról neveztek el kisbolygókat |url=http://hvg.hu/tudomany/20100122_arany_janos_jokai_mor_tittel_kisbolygo |accessdate=2016-06-30 |publisher=hvg.hu |language=magyar}}</ref>
* Számos későbbi klasszikus költő elevenítette fel versében Arany János alakját vagy stílusát, a legismertebb [[Weöres Sándor|Weöres Sándort]]ól a ''Negyedik Szimfónia''<ref>{{cite journal |author=Margócsy István |year=2010 |title=Weöres Sándor: Negyedik szimfónia – Értelmezési kísérlet |url=http://ketezer.hu/2010/12/margocsy-istvan-weores-sandor-negyedik-szimfonia-ertelmezesi-kiserlet/ |language=magyar |issue=2000 Irodalmi és társadalmi havi lap Lapszám: 12 |accessdate=2016-06-30}}</ref> és [[Babits Mihály|Babits Mihályt]]ól az ''Arany Jánoshoz''.<ref>{{cite web |author=Babits Mihály |authorlink=Babits Mihály |title=Változatok egy gyerekdalra |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/babitsaj.htm |accessdate=2016-06-30 |publisher=sulinet |language=magyar}}</ref> Paródiák is születtek: [[Varró Dániel|Varró Dánielt]]ől a ''Változatok egy gyermekdalra'' Arany János-i változata,<ref>{{cite web |author=Varró Dániel |title=Változatok egy gyerekdalra |url=http://dokk.hu/versek/olvas.php?id=235 |accessdate=2016-06-30 |publisher=dokk.hu |language=magyar}}</ref> a Lőwy Árpád néven alkotó [[Réthy László|Réthy Lászlónak]] tulajdonított trágár átdolgozás<ref>{{cite web |title=Toldi trágár átírása |url=http://dtp.atomki.hu/~ecsedi/Lowy/Toldi.html |archiveurl=https://web.archive.org/web/20160325152539/http://dtp.atomki.hu/~ecsedi/Lowy/Toldi.html |archivedate=2016-03-25 |accessdate=2016-06-30 |publisher=atomki.hu |language=magyar}}</ref> és [[Kőrizs Imre|Kőrizs Imrétől]] a ''Toldi éjszakája''.<ref>{{cite web |title=Kőrizs Imre: TOLDI ÉJSZAKÁJA |url=http://www.holmi.org/2007/11/korizs-imre-puzzle |accessdate=2016-06-30 |publisher=HOLMI online kiadás |language=magyar}}</ref>
* [[2001]]-ben a [[Magyar Nemzeti Bank]] [[Emlékérme|emlékpénzérme]]-sorozatot jelentetett meg [[Szlávics László (szobrász, 1959)|ifj. Szlávics László]] tervei alapján, ''[[A magyar ifjúsági irodalom alakjai (emlékérmesor)|A magyar ifjúsági irodalom alakjai]]'' címmel. A 200 forintos címlettel készült emlékérmék egyikén Arany János ''[[Toldi]]'' című művének illusztrációja látható.<ref>{{cite web |title=A magyar ifjúsági irodalom sorozatban Arany János:Toldi emlékérem |url=http://penzvero.hu/termekek/termekcsomagok/ifjusagi-irodalom-csomag-bu.html# |archiveurl=https://web.archive.org/web/20160821201002/http://penzvero.hu/termekek/termekcsomagok/ifjusagi-irodalom-csomag-bu.html |archivedate=2016-08-21 |accessdate=2016-06-23 |publisher=penzvero.hu |language=magyar}}</ref>
* Az 5000 fő alatti kistelepülésen, tanyán élő, tehetséges és szociálisan rászoruló gyermekek támogatására hozták létre a nevét viselő Arany János Tehetséggondozó Programot.<ref>{{cite web |title=Arany János Tehetséggondozó Program honlapja |url=http://www.ajtp.hu/start |archiveurl=https://web.archive.org/web/20160915171745/http://www.ajtp.hu/start |archivedate=2016-09-15 |accessdate=2016-09-29 |publisher=ajtp.hu |language=magyar}}</ref>
* A [[Magyar Tudományos Akadémia]] külföldi magyar tudósok jutalmazására hívta életre az [[Arany János-díj a tudományos kutatásért]] kitüntetést és az [[Arany János-érem|Arany János-érmet]].<ref>{{cite web |title=Arany János-díj és -érem 2012 |url=http://old.mta.hu/data/cikk/12/29/71/cikk_122971/Arany_dijazottak-2012_webreEZAJO.pdf |archiveurl=https://web.archive.org/web/20161109083459/http://old.mta.hu/data/cikk/12/29/71/cikk_122971/Arany_dijazottak-2012_webreEZAJO.pdf |archivedate=2016-11-09 |accessdate=2016-10-08 |publisher=Tudomány és Magyarság 3. |language=magyar |format=pdf}}</ref><ref>{{cite web |title=Arany János-érem |url=http://mta.hu/dijak-kituntetesek/arany-janos-erem-105813 |accessdate=2016-09-29 |publisher=Magyar Tudományos Akadémia |language=magyar}}</ref><ref>{{cite web |title=Arany János-díj a tudományos kutatásért |url=http://mta.hu/dijak-kituntetesek/arany-janos-dij-a-tudomanyos-kutatasert-105812 |accessdate=2016-09-29 |publisher=Magyar Tudományos Akadémia |language=magyar}}</ref>
* A [[Magyar Írószövetség]] Arany János Alapítványának kuratóriuma által 1996 és 2003 között kiosztott irodalmi díj volt az [[Arany János-jutalom]], és 1996 óta adományozzák az [[Arany János-díj|Arany János-díjat]].<ref>{{cite web |title=Arany János-díj |url=http://www.aranyjanosalapitvany.hu/dij.html |accessdate=2016-11-08 |publisher=aranyjanosalapitvany.hu/dij.html |language=magyar}}</ref>
* A [[Magyar Posta Zrt.|Magyar Posta]] emlékére 1932-ben és 1957-ben adott ki portréképével ellátott 2 filléres, illetve 2 forintos bélyeget.<ref>{{cite web |date=2009-04-15 |title=Arany János portréképével kiadott 1932-es 2 filléres postabélyeg |url=http://www.catawiki.com/catalog/stamps/countries-regions-territories/hungary-hun/1407399-janos-arany?area=ca2f9de386421ac5979510fe8da8efb5d09f4914 |accessdate=2016-03-06 |publisher=catawiki.com |language=angol}}</ref><ref>{{cite web |date=2009-04-15 |title=Arany János portréképével kiadott 1957-es 2 forintos postabélyeg |url=http://www.philatelia.net/classik/stamps/?id=11515 |accessdate=2016-03-06 |publisher=philatelia.net |language=angol}}</ref>
* A [[Dalriada]] soproni [[Folk-metal|folkmetal-együttes]] Arany János balladáit zenésítette meg 2009-ben kiadott ''[[Arany-album]]'' című lemezén.
* [[2017]]-ben, a költő születésének bicentenáriumának alkalmából [[Arany János-emlékév|Arany János-emlékévet]] rendeztek.<ref>{{cite web |date=2016-09-16 |title=Arany János-emlékév |url=http://nepszava.hu/cikk/1106054-arany-janos-emlekev/ |archiveurl=https://web.archive.org/web/20160916234414/http://nepszava.hu/cikk/1106054-arany-janos-emlekev/ |archivedate=2016-09-16 |accessdate=2016-09-16 |publisher=nepszava.hu |language=magyar}}</ref>
* 2017. március 2-án, Arany János születésének 200. évfordulóján Eric Fairbrother, a [[Wales|walesi]] [[Montgomery (Powys)|Montgomery]]{{wd|Q1311946}} polgármestere a ''Freeman of Montgomery'' címet adományozta A walesi bárdok szerzőjének.<ref>{{cite web |date=2017-03-04 |title=Walesi díszpolgár lett Arany János |url=http://www.hirado.hu/2017/03/04/walesi-diszpolgar-lett-arany-janos/ |accessdate=2017-03-04 |publisher=hirado.hu |language=magyar}}</ref><ref>{{cite web |date=2017-03-02 |title=Hungary celebrates legendary tale of Welsh bards' slaughter |url=http://www.bbc.com/news/uk-wales-mid-wales-39136034 |accessdate=2017-03-04 |publisher=bbc.com |language=angol}}</ref>
* 2018. március 28-án leplezték le tűzfal[[Arckép|portréját]]; az Alkotás és Márvány utca sarkán.<ref>http://www.kultura.hu/tuzfalfestmeny-arany KULTURA.HU</ref>
== Megjegyzések ==
<references group="m" />
== Dalainak adatai ==
{{megjegyzések}}
== Szakirodalom ==
* [[Gyulai Pál (irodalomtörténész)|Gyulai Pál]]: ''Arany János balladái''
* [[Riedl Frigyes]]: ''Arany János,'' Budapest, 1887 ([https://archive.org/stream/aranyjnos00rieduoft#page/n5/mode/2up Online elérhetőség])
* [[Péterfy Jenő]]: [https://mek.oszk.hu/00500/00596/html/tanulmanyok/peterfy1888.html ''Arany János Őszikéi,'' Budapesti Szemle, 1888. május, 54. köt. 137. sz. / P.J. ''Válogatott Művei,'' Budapest, 1983. 632–638.], mek.oszk.hu
* [[Szinnyei Ferenc]]: ''Arany János,'' Budapest, 1909 ([https://archive.org/stream/aranyjnos00szin#page/n5/mode/2up Online elérhetőség])
* [[Haraszti Gyula]]: ''Arany János,'' Budapest, 1912 ([https://archive.org/stream/aranyjnos00hara#page/n1/mode/2up Online elérhetőség])
* [[Négyesy László]]: ''Arany,'' Budapest, 1917 ([https://archive.org/stream/aranykltszle00nguoft#page/n3/mode/2up Online elérhetőség])
* [[Keresztury Dezső]]: ''így élt Arany János,'' Akadémiai Kiadó, Budapest, 1974
* [[Németh G. Béla]]: ''Arany János,'' in: Uő, ''Mű és személyiség,'' Budapest, 1970, 7–41.
* [[Dávidházi Péter]]: ''Hunyt mesterünk.'' Arany János kritikusi öröksége, Argumentum Kiadó, Budapest, 1994
* [[Keresztury Dezső]]: [https://mek.oszk.hu/01300/01360/01360.htm ''Arany János''], mek.oszk.hu
* [http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/gyulaaj2.htm Arany János – Szakirodalom], magyar-irodalom.elte.hu
== Jegyzetek ==
{{jegyzetek}}
== Források ==
* {{hely|Pintér Jenő hatodik kötet}} {{cite book |author=Pintér Jenő |url=https://mek.oszk.hu/15300/15384/pdf/15384_6.pdf |title=Magyar Irodalomtörténet I. A MAGYAR IRODALOM A XIX. SZÁZAD MÁSODIK HARMADÁBAN. |year=1933 |location=Budapest |pages=409-546 |format=pdf |authorlink=Pintér Jenő (irodalomtörténész)}}
* {{hely|Sőtér István IV. kötet}} {{cite book |author=Sőtér István |url=https://mek.oszk.hu/02200/02228/html/04/55.html |title=A MAGYAR IRODALOM TÖRTÉNETE 1849-TŐL 1905-IG |publisher=AKADÉMIAI KIADÓ |year=1965 |location=Budapest |pages= |authorlink=Sőtér István}} ''Arany János (1817–1882)'' c. fejezet.
* {{hely|Gyulai Pál 1884}} {{cite book |author=Gyulai Pál |url=https://mek.oszk.hu/07200/07299/07299.pdf |title=Gyulai Pál bírálatai 1861–1903 – Arany János életrajza |publisher=A Magyar Tudományos Akadémia Könyvkiadóvállalata, Franklin Társulat Nyomdája – UJ FOLYAM 1911–1913. CYCLUS |location=Budapest |pages=250-270 |format=pdf |authorlink=Gyulai Pál (irodalomtörténész)}}
* {{hely|Arany János}} {{cite web |title=Életrajza és egyebek |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/aranyj.htm |accessdate=2016-03-02 |publisher=magyar-irodalom.elte.hu}}
* {{hely|Csáky Zsolt}} {{cite web |title=Az önkényuralomtól a kiegyezésig Arany János (1817–1882) |url=https://erettsegi.com/tetelek/irodalom/arany-janos-az-onkenyuralomtol-a-kiegyezesig |accessdate=2026-04-09 |3=publisher}}
* {{hely|Pintér Jenő hetedik kötet}} {{cite book |author=Pintér Jenő |url=https://mek.oszk.hu/15300/15384/pdf/15384_7.pdf |title=Magyar Irodalomtörténet I. A MAGYAR IRODALOM A XIX. SZÁZAD UTOLSÓ HARMADÁBAN. |year=1934 |location=Budapest |pages= |format=pdf |authorlink=Pintér Jenő (irodalomtörténész)}}
* {{hely|SZTE Egyetemi Könyvtár}} {{cite web |author=Dr. Kokas Károly és Tóth Margit |title=Arany János élete |url=http://www.bibl.u-szeged.hu/oszikek/pallas/elete.html |accessdate=2016-10-29 |publisher=bibl.u-szeged.hu |language=magyar}}
* {{hely|Szinnyei József}} {{cite web |author=Szinnyei József |authorlink=Szinnyei József (bibliográfus) |title=Arany János |url=https://mek.oszk.hu/03600/03630/html/a/a00413.htm |accessdate=2016-03-03 |work=Magyar írók élete és munkái |publisher=Budapest: Hornyánszky}}
* {{hely|Leszler János}} {{CitLib|tit=Nótakedvelőknek|aut=Leszler József|red=Zeneműkiadó|loc=Budapest|ann=1986|isbn=963 330 599 3|pag=21–22}}
== További információk ==
{{Wikidézet|Arany János}} {{wikiforrásszerző}}
* [[Koltai Virgil]] 1886: Arany János élete és költészete. In: Értesítő a Pannonhalmi Sz.-Benedek-rend győri Főgymnasiumáról az 1885-86. tanév végén. Győr
* {{cite web |title=Alkotói portrék a magyar irodalomból >> Arany János |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/aranyj.htm |accessdate=2016-11-26 |publisher=magyar-irodalom.elte.hu |language=magyar}}
* {{cite web |title=Kokas Károly - Tóth Margit: Őszikék. Összeállítás Arany János öregkori ciklusáról |url=https://mek.oszk.hu/00500/00596/ |accessdate=2016-12-02 |publisher=mek.oszk.hu |language=magyar}}
* {{Cite book |title=Arany János Összes művei |year=1951 |editor=Voinovich Géza, Keresztury Dezső |edition=Az MTA kritikai kiadása |location=Budapest}}
* {{Cite book |author=Arany János |title=Tanulmányok és kritikák |publisher=Kossuth Egyetemi Kiadó |year=1998 |isbn=963 472 257 1 |editor=S. Varga Pál |location=Debrecen}}
* {{cite web |author=[[Tolnai Vilmos]] |title=Adalékok Arany János forrásaihoz |url=http://epa.oszk.hu/00000/00001/00057/pdf/ITK_1902_03_257-271.pdf |accessdate=2018-09-14 |publisher=epa.oszk.hu |language=magyar}}
* {{Cite web |author=[[Voinovich Géza]] |year=1929 |title=Arany János életrajza 1-2-3. kötet |url=http://real-eod.mtak.hu/3141/ |accessdate=2020-03-15 |publisher=A Magyar Tudományos Akadémia Könyvkiadó Vállalata. Új folyam . Magyar Tudományos Akadémia |location=Budapest}}
* [[Wojatsek Károly]] 1991: Arany János hatása a szlovák irodalomra. In: A magyar nyelv és kultúra a Duna völgyében – Kapcsolatok és kölcsönhatások a 19-20. század fordulóján. Budapest, 722-734.
* [http://publicatio.bibl.u-szeged.hu/12837/ Kokas Károly: A könyv meséje] – Kísérő tanulmány a "kapcsos könyv"-ről és az [[Őszikék|Őszikékr]]ől a [[Kapcsos könyv]] 2017-es (Kossuth) kiadásához. (Hozzáférés: 2022. szeptember 11.)
=== Arany János-linkek ===
* [https://real-eod.mtak.hu/view/creators/Arany=3AJ=E1nos=3A=3A.html Arany János művei a REAL-EOD-ban]
* [http://aranyjanos.lap.hu// Arany János.lap.hu]
* [https://web.archive.org/web/20140403135319/http://muemlekek.info/muemlek/arany-janos-sirja.php Arany János sírja]
* [https://www.urbanlegends.hu/tag/arany-janos/ Arany Jánossal kapcsolatos irodalmi tévhitek, anekdoták ellenőrzése]
=== Arany János-emlékpadok ===
* [https://www.kozterkep.hu/~/24789/Arany_Janos_emlekpad_Nagykoros_1927.html Arany János-emlékpad Nagykőrös, Csendes Ferenc (kőfaragó), 1927]
* [https://web.archive.org/web/20170201234634/http://www.panoramio.com/photo/3450811 Toldi estéje,] [[Göd|Alsógöd]]
{{A Magyar Tudományos Akadémia főtitkárai}} {{Arany János munkássága}} {{Klasszikus magyar irodalom}} {{Nemzetközi katalógusok}} {{portál|irodalom}}
{{kiemelt}}
[[Kategória:Magyar műfordítók]] [[Kategória:MTA-tagok]] [[Kategória:Az MTA főtitkárai]] [[Kategória:Nagyszalontaiak]] [[Kategória:Református magyarok]] [[Kategória:Magyar poliglottok]] [[Kategória:Magyar Shakespeare-fordítók]] [[Kategória:Magyar költők]] [[Kategória:19. századi magyar irodalom]] [[Kategória:Magyarok, akikről kisbolygót neveztek el]] [[Kategória:Tüdőgyulladásban elhunyt személyek]] [[Kategória:1817-ben született személyek]] [[Kategória:1882-ben elhunyt személyek]] [[Kategória:A Fiumei úti sírkertben eltemetett személyek]] [[Kategória:A Fővárosi Lapok vezetői, újságírói]]
icu62dpts0o9uank3ienzk7lrt46s6u
759912
759911
2026-09-02T06:38:15Z
Dj
51146
/* Arany János-emlékpadok */
759912
wikitext
text/x-wiki
{{redir|Arany János}}{{személy infobox|típus=író|név=Arany János|kép=Barabas-arany.jpg|képméret=240px|képaláírás=[[Barabás Miklós (festő)|Barabás Miklós]]: ''Arany János portréja'' ([[1848]])|születési név=|születési dátum=[[1817]]. [[március 2.]]|szülei=Arany György, Megyeri Sára|születési hely=[[Nagyszalonta]]|halál dátuma=[[1882]]. [[október 22.]] {{életkor-holt|1817|3|2|1882|10|22}}|halál helye=[[Budapest]]|nemzetiség=[[Magyarország|magyar]]|szakma=|művésznév=|iskolái=[[Debreceni Református Kollégium]]|kitüntetés=|házastárs=[[Ercsey Julianna]]|gyermekei=[[Arany Julianna]]<br />[[Arany László (költő)|Arany László]]|alsablon={{Személy infobox/Író
| típus = író
| becsukva =
| műfaj = [[elbeszélő költemény]], [[dal]], [[ballada]]
| irányzat = [[népiesség]]
| periódus = [[1845]]–[[1882]]
| első mű =
| fő mű = [[Az elveszett alkotmány]], [[Toldi]], [[Toldi estéje]]
| kiadó =
| díjak =
| behatás =
| kihatás =
}}}}<ref>{{Cite journal|author=Rudolf|last=Krader|first=Barbara|date=május 1978|title=Magyarorszagi Cigany Nepdalok|journal=Ethnomusicology|volume=22|issue=2|pages=379|doi=10.2307/851512|url=https://doi.org/10.2307/851512|accessdate=2025-10-06|issn=0014-1836}}</ref><center>[[Fájl:Arany János szoborcsoport, Stróbl Alajos alkotása, 1893.jpg|bélyegkép|250px|Arany János csoportos emlékműve
a [[Magyar Nemzeti Múzeum]] előtt, [[Strobl Alajos]] műve]]
</center>'''Arany János''' ([[Nagyszalonta]], [[1817]]. [[március 2.]] – [[Budapest]], [[1882]]. [[október 22.]]) magyar költő, tanár, lapszerkesztő, a [[Kisfaludy Társaság]] igazgatója, a [[Magyar Tudományos Akadémia]] tagja és főtitkára. A [[magyar irodalom]] egyik legismertebb és egyben legjelentősebb alakja. A legnagyobb magyar balladaköltő, ezért nevezték a ''ballada Shakespeare-jének'', vállalt hivatala miatt a ''szalontai nótáriusnak'', de szülővárosában – vélhetően természete miatt – a ''hallgati ember'' titulussal is illették. Fordításai közül kiemelkednek [[William Shakespeare|Shakespeare-fordításai]].
Szegény [[Kálvinizmus|református]] családba született. Szüleinek kései gyermeke volt, akik féltő gonddal nevelték, hiszen a [[Gümőkór|tüdőbaj]] miatt kilenc testvére közül nyolcat előtte elvesztettek. Ő azonban igazi csodagyerek lett, már tizennégy éves korában segédtanítói állást tudott vállalni és támogatta idősödő szüleit. Az anyagi javakban nem dúskáló családi háttér ellenére olyan nagy és sokoldalú szellemi műveltségre tett szert, hogy felnőttkorára a [[Latin irodalom|latin]], a [[Ókori görög irodalom|görög]], a [[Német irodalom|német]], az [[Angol irodalom|angol]] és a [[francia irodalom]] remekeit eredetiben olvasta, és jelentős fordítói munkát is végzett. A [[magyar nyelv]] egyik legnagyobb ismerője, és ennek megfelelően páratlanul gazdag szókinccsel rendelkezett. Pusztán kisebb költeményeiben mintegy 23 ezer szót, illetve 16 ezer egyedi szótövet használt.
Irodalmi pályafutása 1845-ben ''Az elveszett alkotmány'' című szatirikus [[Eposz|eposszal]] indult, de igazán ismertté az 1846-ban készült [[Elbeszélő költemény|elbeszélő költeménye]], a ''[[Toldi]]'' tette. Már pályája kezdetén is foglalkozott a közélettel, és politikai tárgyú cikkeket írt. Az [[1848–49-es forradalom és szabadságharc|1848–49-es forradalom és szabadságharcban]] [[Nemzetőrség (1848)|nemzetőrként]] vett részt, majd a [[Szemere Bertalan]] által vezetett belügyminisztériumban volt fogalmazó. A bukást követően egy ideig bujdosott, ám végül elkerülte a megtorlást, és [[Nagykőrös|Nagykőrösre]] költözött, ahol 1851 és 1860 között tanári állást tudott vállalni.
Az élete teljesen megváltozott, amikor a Kisfaludy Társaság igazgatójává választotta, és [[Pest (történelmi település)|Pestre]] költözött. Itt szerkesztette és adta ki két hetilapját: a [[Szépirodalmi Figyelő|Szépirodalmi Figyelőt]] (1860–1862) és a [[Koszorú (hetilap)|Koszorút]] (1863–1865). A [[kiegyezés]] idején a magyar irodalmi és a politikai élet kiemelkedő és meghatározó képviselője volt. Irodalmi munkássága kihatott a talán addig kevésbé ismert történelmi szereplők ismertségére is, hiszen a műveiben megformált alakok közül több neki köszönhetően vált igazán halhatatlanná. [[Petőfi Sándor]] kortársa és barátja is volt egyben. [[Költészet]]ükben nagy különbség, hogy a gyorsan érő és rövid életű Petőfivel szemben az övé lassabban bontakozott ki. Halála is összeköti őket, hiszen egy meg nem erősített [[városi legenda]] szerint, a már egyébként is gyengélkedő népi költőfejedelem 1882. október 15-én a pesti Petőfi téri [[Petőfi Sándor-szobor (Budapest)|Petőfi-szobor]] avatásán fázott meg, és az azt követő [[Tüdőgyulladás|tüdőgyulladásban]] hunyt el, 65 éves korában.<ref>[http://pestbuda.hu/cikk/20190312_viczian_zsofia_petofi_felemelt_keze_egy_szobor_a_duna_partjan_136_eve Petőfi felemelt keze: egy szobor a Duna partján 136 éve]</ref><center>{{idézet2|''Minden szál hozzá vezetett, és minden szál tőle vezet, a magyar szellemi életnek ő a sugárzási központja.''|[[Szerb Antal]]<ref>{{cite web |author=Szerb Antal |authorlink=Szerb Antal |title=Arany János |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/szerbaj.htm |publisher=magyar-irodalom.elte.hu |accessdate=2016-07-03}}</ref>}}</center>
== Élete ==
[[Fájl:Arany coat 1634.jpg|bélyegkép|250px|Az Arany család címere 1634-ből]] Az Arany család ősi fészke [[Nagyszalonta#Kölesér|Köleséren]] volt, onnan költöztek előbb [[Szilágynagyfalu|Szilágynagyfaluba]],<ref>{{cite web |author=Sándor Boglárka Ágnes |date=2009-04-15 |title=Arany János kultusza ma is él Szilágynagyfaluban |url=http://www.szabadsag.ro/szabadsag/servlet/szabadsag/template/article,PArticleScreen.vm/id/24235 |archiveurl=https://web.archive.org/web/20160305131609/http://szabadsag.ro/szabadsag/servlet/szabadsag/template/article,particlescreen.vm/id/24235 |archivedate=2016-03-05 |accessdate=2016-03-02 |publisher=szabadsag.ro |language=magyar}}</ref> majd [[Nagyszalonta|Szalontára]]; első földjüket és nemességüket [[Bocskai István|Bocskai Istvánt]]ól kapták, címerüket [[I. Rákóczi György]] adományozta [[1634]]-ben, de ezt elvesztették, amikor [[Mária Terézia magyar királynő|Mária Terézia]] [[1745]]-ben herceg [[Esterházy Pál Antal (1711–1762)|Esterházy Pál Antalnak]] adományozta a hajdúvárosokat. A nemeslevél birtokában a család [[1778]]-tól pereskedett jussáért, de [[Nemességi igazolás|nemességüket]] [[Jog|jogi]] úton sem sikerült visszaszerezniük.<ref>Az Arany család őseiről, nemesi rangjáról, címeréről, valamint a nemesi cím visszaszerzésére tett peres eljárásról lásd [[Arany László (költő)|Arany László]] ''[[s:Az Arany család nemesi címe|Az Arany család nemesi címe]]'' című jegyzetét a Wikiforrásban.</ref><ref name="Gyermek- és ifjúkora">{{cite web |title=Arany János Gyermek- és ifjúkora |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/ajelet1.htm |accessdate=2016-03-03 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
1817. március 2-án született, egy kis házat és kevés földet birtokló család tizedik gyermekeként. (Kilenc testvére közül csak a legidősebb, Sára maradt életben.) Szülei, Arany György ([[1762]] – [[Nagyszalonta]], [[1844]]. [[január 2.]]) és Megyeri Sára ([[1772]]. [[november 2.]] – Nagyszalonta, [[1836]]. [[augusztus 20.]]) földművesek voltak.{{refhely|Gyulai Pál 1884}}<ref>[https://www.arcanum.hu/hu/online-kiadvanyok/MagyarIrodalom-magyar-irodalomtortenet-1/magyar-irodalomtortenet-pinter-jeno-5116/6-a-magyar-irodalom-a-xix-szazad-masodik-harmadaban-1C05/arany-janos-1EC8/arany-janos-elete-1EC9/ Arcanum - Arany János élete]</ref>
Szüleinek késői és egyetlen fiúgyermeke volt. Születésekor nővére már rég férjhez ment, már gyermeke is volt. Szülei hívő [[Magyarországi Református Egyház|reformátusok]] voltak. János fiatal korától tisztes szegénységben, de békés és csendes környezetben nőhetett fel. Egészen korán, három- négyéves korában megtanult olvasni, hamuba írt betűk segítségével.<ref name="sulinet">{{cite web |date=2009-04-15 |title=Arany János életrajza |url=http://tudasbazis.sulinet.hu/hu/magyar-nyelv-es-irodalom/irodalom/irodalom-6-osztaly/eletutja/arany-janos-eletrajza |archiveurl=https://web.archive.org/web/20151110032644/http://tudasbazis.sulinet.hu/hu/magyar-nyelv-es-irodalom/irodalom/irodalom-6-osztaly/eletutja/arany-janos-eletrajza |archivedate=2015-11-10 |accessdate=2016-03-03 |publisher=tudasbazis.sulinet.hu |language=magyar}}</ref><center>{{idézet2|„Mire iskolába adtak, hova mód nélkül vágytam, […] már nemcsak tökéletesen olvastam, de némi olvasottsággal is bírtam, természetesen oly könyvekben, melyek kezem ügyébe estek. […] A tanító, megpróbálván, rögtön, amint felvettek, elsőnek tett osztályomban s e helyet folyvást megtartottam. A többi tanítók és növendékek a nagyobb osztályokból, sőt külső emberek is, csodámra jártak, s én nem egy krajcárt kaptam egy vagy más produkcióm jutalmául.”<ref name="sulinet"/>}}</center>Apja rengeteget mesélt neki a Toldikról, megszerettette vele a magyar népköltészetet és az irodalmat. Tanulékonysága korán feltűnt: mire hatévesen iskolába került, már nemcsak tökéletesen olvasott, hanem [[Biblia|bibliai]] történeteket, énekeket és a könnyű irodalom termékeit is ismerte. Csodagyereknek tartották, és már iskolás évei alatt városszerte ismertté vált verseiről. Páratlan szókincsre tett szert, és a régi magyar nyelv nagy hatást gyakorolt költészetére. A későbbiekben talán emiatt idegenkedett a [[nyelvújítás]] és a [[romantika]] magyar nyelvre gyakorolt hatásaitól.<ref name="Gyermek- és ifjúkora" />{{refhely|Arany János}}
=== Iskolaévei ===
[[Fájl:Arany jános dolgozószobája.jpg|bélyegkép|jobbra|250px|Rekonstruált dolgozószobája a nagyszalontai Arany János Múzeumban]] [[Nagyszalonta|Szalontai]] iskolaéveinek (1823–1831) végén, hogy szülei anyagi helyzetén könnyítsen, a tanulás mellett tanított is, és az iskolában lakott. [[1833]]-ban a költészeti osztályba lépett, majd novembertől a [[Debreceni Református Kollégium|Debreceni Református Kollégiumban]] tanult. Mivel reményei nem váltak valóra, és pénze is kevés volt, [[1834]] márciusában [[Kisújszállás|Kisújszállásra]] ment egy évre segédtanítónak, ''„praeceptornak”'', hogy pénzt szerezzen tanulmányai folytatására. Kisújszálláson [[Török Pál (püspök)|Török Pál]], a későbbi református püspök volt a rektor, aki megnyitotta jeles könyvtárát Arany előtt, és ennek köszönhetően éjjel-nappal olvasott. A [[Német nyelv|német]] és [[Francia nyelv|francia nyelvben]] is elmélyült, és [[Latin nyelv|latinból]], németből fordítgatott, sőt a költészettel is kísérletezett.<ref name="Gyermek- és ifjúkora" />
Egy év múlva visszament Debrecenbe, ahol tanárai is felfigyeltek rá. Kisújszállási ajánlóleveleivel és szorgalmával hamarosan az osztály élére került, és a tanítás folytán anyagi helyzete is tűrhetővé vált. Magántanítványai közé tartoztak többek közt [[Erdélyi József (tanár)|Erdélyi József]] tanár lányai. Az iskolai egyhangúságot megunó Arany azonban ekkoriban nem tanító, hanem festő vagy szobrász akart lenni, így [[1836]] februárjában önként elhagyta a kollégiumot. Ez a kilépés azt eredményezte, hogy középfokú tanulmányait nem fejezte be, és emiatt nem kaphatott végbizonyítványt sem.<ref name="sulinet" />{{refhely|Arany János}}
=== Vándorszínészi kitérő ===
Gyakran járt színházba, hiszen Debrecenben erre bőven volt lehetősége. 1836-ban önéletrajzi vallomásai szerint minden erkölcsi és anyagi kényszerítés nélkül hagyta el az iskolát, és élete válaszút elé került. [[Ferenczy István (szobrász)|Ferenczy István]] szobrászatának híre vonzotta nagyon, aki az [[1830-as évek]] ünnepelt zsenije volt. A [[szobrászat]] gondolatával titokban foglalkozó Arany megingott, és inkább [[Thaleia|Thália]] zászlaja alá állt be, ha rövid időre is. Az alig húszéves ifjú 1836 februárjában Debrecenben a [[Fáncsy Lajos]] és [[László József (színművész)|László József]] igazgatása alatt működő [[Színtársulat|színtársulathoz]] szegődött egy évre. A társulat azonban a korra oly jellemző módon pár hónap múlva feloszlott. A rövid időszak ellenére is több darabban játszhatott. A ''[[Bolond Istók (elbeszélő költemény, Arany János)|Bolond Istók]]'' című elbeszélő költeményének második énekében életrajzi említésnek tudható be, amit saját színészi pályájáról írt.<ref name="Bayer">{{cite journal |author=Bayer József |title=Arany Jánis színészi pályája |url=http://real-j.mtak.hu/2334/1/BudapestiSzemle_1888_053.pdf |format=pdf |language=magyar |issue=Budapesti Szemle |pages=283-296 old. |authorlink=Bayer József (színháztörténész) |accessdate=2016-05-05}}</ref> [[Kép:Arany a színlapon.jpg|jobbra|bélyegkép|220px|Arany János neve egy [[1836]]-os [[Nagykároly|nagykárolyi]] színlapon<ref>[https://mek.oszk.hu/04900/04944/html/borzaszto0026.html A Borzasztó torony - Képek a magyar vándorszínészet világából -Borostyán, Rónai, alias: Petőfi Sándor], mek.oszk.hu</ref><nowiki>]]</nowiki>
Első fellépése valószínűleg – ''Bolond Istók''éhoz hasonlóan – a színpad mögött történt, és ennek során a színpad átrendezésekor székeket pakolt. Lépésről lépésre szoktatták ugyanis hozzá a színpadi léthez. A debreceni színlap először 1836. március 3-án említette meg a nevét [[Ernst Raupach]] népszerű regényes színjátékában, az ''Ördög Róbert''ben, ahol a tanácsnokot alakította. Ezután több darabban feltűnt, hol a második favágó vagy éppen a jövendő századbeli inas epizódszerepében. Nem jelentős [[Színész|színészi]] megnyilvánulások, de azért arra is lehetősége adódott, hogy [[énekes]] szerepkörben szép [[basszus]] hangját is megmutassa. Talán legjelentősebb színészi szerepét kapta március 26-án, amikor [[Babocsay István|Babocsay Istvánnak]] 1805-ben nyomtatásban is megjelent ''Vígkedvű Mihály'' című drámájában Biczó István városi tanácsnokot alakíthatta.
A társulat felbomlásáról a ''Bolond Istók'' című elbeszélő költeményében így írt Arany:
: ''Egy reggel – épen a bolondok napja,''
: ''Az ő nevenapja, april elseje''
: ''Volt, hogy fülét a hír oldalba csapja,''
: ''Hogy társaság nincs, már csak hült helye.''
Arany személyes levelezése szerint [[Debrecen|Debrecenben]] [[Fáncsy Lajos]] és [[László József (színművész)|László József]] igazgatása alatt működő színésztársulat 1836. április 1-jén föloszlott. Az egyéb fennmaradt iratok tanúsága szerint május 1-jén szűnt meg a társulat, de valószínűleg voltak ennek előzményei, és ezért kötötte a költő a bolondok napjához a felbomlást. Egyébként egész áprilisban színpadon volt, de továbbra sem jutott nagyobb szerephez.<ref name="Bayer" /><ref>{{cite journal |author=Kardos Lajos |title=Arany János színészi pályája és a Bolond Istók |url=http://epa.oszk.hu/02500/02518/00013/pdf/EPA02518_irodalomtortenet_1913_05_276-287.pdf |format=pdf |language=magyar |issue=Kisebb Közlemények |pages=276-280 old. |accessdate=2016-05-05}}</ref>
=== Hazatérése, hivatalt vállalása, szüleinek elvesztése, házasságkötése és gyermekeik megszületése ===
Ezután egy Hubay nevezetű [[színész]]<ref>Valószínűleg Hubay Emánuel színigazgató, aki 1836-37-ben Szaplonczay Mihállyal Szatmárban, majd Nagykárolyban működött.</ref> által toborzott és részben a feloszlott társulat romjaiból szervezett vándorszínész csapathoz csatlakozott.<ref>[http://www.harag.eu/hu/magunkrol/szinhaztortenet.html Szatmárnémeti Északi Színház Harag György Társulat] {{Wayback|url=http://www.harag.eu/hu/magunkrol/szinhaztortenet.html|date=20170315014222}}, harag.eu</ref> Vándorlásuk során [[Nagykároly]], majd [[Szatmárnémeti|Szatmár]], végül pedig [[Máramarossziget]] lett a célállomás. A néhány hónapig tartó sanyarú hányattatás során megtapasztalta az egyre érezhetőbb nyomort, továbbra sem jött a nagy színészi szerep. Kialudt a színészet iránti rajongó fellángolása. Egy éjszaka, álmában halottnak látta édesanyját, ezért elhagyta a társulatot, és gyalog hazaindult. [[Németh László (író)|Németh László]] megfogalmazása szerinti „vak kiruccanása”, színészkora véget ért.<ref>[http://www.mek.oszk.hu/01000/01013/01013.htm#2 Németh László tanulmányok - Arany János], mek.oszk.hu</ref> {{idézet2|''Egy nap, hasonló gyötrelmek közt álom ért rám – s jó édesanyámat halva láttam. A benyomás oly erős volt, hogy többé nem vethetém ki fejemből, ellenállhatatlan ösztönt érzék hazamenni, de miképp? [[Máramarossziget|Sziget]] [[Nagyszalonta|Szalontához]], az általam ismert úton kerülve, körülbelül ötven mérföld. A direktorhoz, Hubayhoz fordulék, egy húszast kértem tőle lehető díjamból, de fölöslegesnek láttam vele közölni szándékomat. Egy zsebkendőbe kötém egész vagyonomat – kimentem a piacra, hol nyolc pengő krajcárból egy cipót s egy kevés szalonnát vettem, azzal megindultam egyedül, gyalog. Első éjt az erdőben töltém, oláh fuvarosok tüze mellett, a többit kocsmapadokon – s így végre [[Szatmárnémeti|Szatmáron]], [[Nagykároly]]on, [[Debrecen]]en át, hétnapi gyalog vándorlás után hazaértem, nem nagy örömére szegény szüleimnek.''|Arany János levele [[Gyulai Pál (irodalomtörténész)|Gyulai Pál]]hoz<ref>[https://mek.oszk.hu/04900/04944/html/borzaszto0021.html Arany János levele Gyulai Pálhoz], mek.oszk.hu</ref>}} [[Fájl:Ercsey Julianna portréja (Ellinger Ede felvétele) – crop.jpg|bélyegkép|jobbra|220px|[[Ercsey Julianna|Aranyné Ercsey Julianna]]<nowiki>, a költő felesége]]</nowiki>
Otthon megtudta, hogy apja megvakult, anyja pedig haldoklott<ref>[http://tudasbazis.sulinet.hu/hu/magyar-nyelv-es-irodalom/irodalom/irodalom-6-osztaly/eletutja/arany-janos-eletrajza Arany János életrajza] {{Wayback|url=http://tudasbazis.sulinet.hu/hu/magyar-nyelv-es-irodalom/irodalom/irodalom-6-osztaly/eletutja/arany-janos-eletrajza|date=20151110032644}}, tudasbazis.sulinet.hu</ref> és két héttel később, hazaérkezése után [[Kolera|kolerában]] megbetegedve elhunyt – ennek hatására egy ideig még a költő is elhallgatott benne.<ref name="Bayer" /> [[Magyarországi Református Egyház|Egyháza]] és a város részvéttel tekintett a fiú sorsára, és megválasztották őt konrektornak. Szülőhelyén a [[Gimnázium#A 16. századtól|grammatikai]] osztályokat tanította [[1839]] tavaszáig, majd egy évig írnokként helyezkedett el a városnál, végül rendes aljegyző lett Nagyszalontán.{{refhely|Gyulai Pál 1884}} [[Kép:Arany János 1914.jpg|bélyegkép|250px|Arany János családja körében 1863 körül]] Az 1836-tól 1840-ig terjedő időszakban is sokat olvasott: [[William Shakespeare|Shakespeare-t]] (német fordításban), elővette [[Homérosz|Homéroszt]] is, a francia irodalomból pedig [[François Fénelon]] ''Télemakhosz kalandjai'' című regénye és [[Jean-Pierre Claris de Florian|Florian]] művei után [[Molière]]-t kezdett olvasni, illetve [[Prosper Jolyot de Crébillon|Crébillon]] rémdrámáit forgatta. Ez időszakban találta meg élete párját is, és fontos lett számára, hogy házasságához biztos anyagi hátteret teremtsen, így kevesebb ideje maradt az irodalom tanulmányozására.
[[Nagyszalonta|Nagyszalontán]] [[1840]]. [[November 19.|november 19-én]] vette feleségül [[Ercsey Julianna|Ercsey Juliannát]], egy ügyvéd törvénytelen és vagyontalan leányát. Úgy döntött, hogy az esküvő után már nem foglalkozik annyit olvasással és különböző művek tanulmányozásával, hanem helyette minden szabadidejét szeretett feleségével töltötte. Munkájában szorgalmas és kiegyensúlyozott volt, kisebb peres ügyekben segédkezett, passzusokat (marhalevél) állított ki, és a hivatali életben kiválóan teljesített, még a megyei táblabírák is elismerték tevékenységét. Ekkoriban új ismeretekkel is gyarapodott, hiszen munkájából adódóan kitanulta a [[Geodézia|földmérést]].
Házasságukból [[1841]]-ben született Juliska lánya és [[1844]]-ben [[Arany László (költő)|László]] fia, aki később ismert bankár, népköltészetgyűjtő, Arany hagyatékának gondozója, kitűnő költő és irodalomtudós lett. Gyermekeinek sikereire Arany mindig nagyon büszke volt. Halála után fia rendezte sajtó alá Arany hátrahagyott iratait és levelezését négy kötetben.{{refhely|Gyulai Pál 1884||Pintér Jenő hetedik kötet|234. old|Sőtér István IV. kötet|96. old|}}<ref>{{cite web |author=Boldizsár Noémi |date=2010-11-12 |title=A jó feleség aranyat ér |url=http://www.hetek.hu/eletmod/201011/a_jo_feleseg_aranyat_er |accessdate=2016-10-07 |publisher=hetek.hu}}</ref> Hagyatékának azon része, amely személyes vonatkozással bírt (például családi magánlevelezésének nagyobb része), fia özvegyénél Szalay Gizellánál (1857–1945) maradt. Ezt csak ő és második férje [[Voinovich Géza]] (1877–1952) irodalomtörténész kutathatta, aki háromkötetes művet szentelt Arany János [[életrajz]]ának. A [[Gellérthegy|gellérthegyi]] villájukban őrzött kéziratok, családi magánlevelezés és egyéb relikviák 1945 januárjában belövések és bombázások következtében teljesen megsemmisültek, mivel a közelben német ágyúállások voltak. Levelezésének fennmaradt része Arany László végakarata szerint a MTA Könyvtárának Kézirattárában található.<ref>[[Domokos Mariann]]–[[Gulyás Judit]] 2018 (szerk.): Az Arany család mesegyűjteménye. Budapest, 12–15.</ref>
=== Elismert költővé válása: az ''Elveszett alkotmány'' és a ''Toldi'' ===
[[Kép:Toldi (1847).jpg|bélyeg|„[[Toldi]]<nowiki>” a többi pályadíjnyertessel, és az önálló kiadás címlapjának képe]] [[Kép:Arany.gif|bélyeg|A </nowiki>[[Toldi]]<nowiki> szerzője]] </nowiki>[[1842]] tavaszán Arany egykori tanulótársa, [[Szilágyi István (pedagógus)|Szilágyi István]] Szalontára érkezett rektori minőségben, és a költőt az irodalmi munkásság folytatására buzdította: elsősorban a görög tragédiaszerzők fordítását javasolta neki. Szilágyi István inspirálására, teljesen egyedül tanult meg [[Angol nyelv|angolul]]. Beszélni nem tudott, csak az írásképet ismerte. Az angol szövegeket összevetette a német fordítással, és így kezdett el nyelvtankönyv segítségével lépésről lépésre haladva egyre jobban elmélyülni az angol nyelvű irodalomban. A nyelv olvasásában jártasságot szerezve Shakespeare-t kezdte tanulmányozni és fordítgatni.<ref>Angoltudása irodalmi művek megértéséhez elegendő volt, de a beszédet nem értette, és ő sem tudott angolul beszélni.</ref> [[1845]] nyarán írta az ''Elveszett alkotmány'' című szatirikus eposzt, amelyet beküldött a [[Kisfaludy Társaság]] vígeposzpályázatára. A mű meg is jelent a ''[[Kisfaludy Társaság|Kisfaludy-társaság]] Évlapjai'' VII. kötetében, és vele a 25 arannyal járó pályadíjat is elnyerte, bár [[Vörösmarty Mihály|Vörösmarty]] nem volt teljesen elragadtatva, és bírálta [[Hexameter|hexametereit]]. A kritikai kifogások azonban nem vették el a kedvét, hanem inkább további munkára inspirálták Aranyt.{{refhely|Gyulai Pál 1884}}
[[1846]]-ban az [[Életképek|Életképekben]] (I. évfolyam 13. sz.)<ref>{{cite journal |author=Frankenburg Adolf |title=Életképek 1846-os számai |url=http://real-j.mtak.hu/7340/1/MTA_Eletkepek_1846_1.pdf |format=pdf |language=magyar |issue=[[Életképek]] |pages=283-388 old. |authorlink=Frankenburg Adolf |accessdate=2016-05-05}}</ref> jelent meg tőle egy falusi beszély<ref>A beszély a [[novella]] régies elnevezése.</ref> ''Egyszerű beszélyke, Úti tárczámból'' és egy másik ''Hermina'' címmel (II. évf. 9. sz.). Az 1846. március 28-án megjelent ''Egyszerű beszélyke'' volt Arany első nyomtatásban is megjelent írása.{{refhely|Sőtér István IV. kötet}}
[[1846]]-ban a Kisfaludy Társaság ismét irodalmi pályázatot írt ki. A feltételeket [[Erdélyi János (költő)|Erdélyi János]] állította össze és az ő utasítására került be a követelmények közé a [[Népiesség|népies forma]]. A pályázat szövege: ''„Készíttessék költői beszély, versben, melynek hőse valamelyt, a nép ajakin élő történeti személy, például: [[I. Mátyás magyar király|Mátyás király]], [[Toldi Miklós (nemes)|Toldi Miklós]], [[Kádár vitéz]] stb. A forma és a szellem pedig [[Ütemhangsúlyos verselés|népies legyen]]. Beküldés határnapja: 1846. november 26. Jutalma 15 db arany.”'' A ''[[Toldi]]'' már egyöntetű siker volt, és olyan győzelmet aratott, hogy nemcsak a pályadíjat nyerte meg ([[1847]]. [[Február 6.|február 6-án]], amikor a társaság a kitűzött 15 aranyat kivételesen húszra emelte), hanem bírálói ámulatát is. Egyszerre ünnepelt költő lett, és jeles írók figyelme fordult feléje. [[Petőfi Sándor|Petőfi]] volt az egyik első, aki üdvözlésére sietett, és ismeretlenül is levélben köszöntötte őt. [[Szilágyi István (pedagógus)|Szilágyi István]] találóan azt írta Aranynak, hogy a ''„Toldinak nagy máj adatik”''.{{refhely|Sőtér István IV. kötet}}
Ez időtől kezdve folyamatosan írt az Életképekbe és a [[Pesti Divatlap|Pesti Divatlapba]] kisebb költeményeket. [[1847]]-ben készítette el a ''[[Toldi estéje|Toldi estéjét]]''<ref>1847. július elején fogott hozzá. A mű teljes egészében 1848. március 20-án már kész volt, de csak hat és fél évvel később, 1854 őszén jelent meg.</ref> és a ''Murány ostromá''t. [[1847]]. [[Június 1.|június 1]]. és 10. között Petőfi meglátogatta Szalontán, és ettől kezdve szoros barátság szövődött köztük, és rendszeresen leveleztek egymással. Ez a levelezés jelentős kor- és irodalomtörténeti emlék is egyben. Úgy írt és fordított ez időben, hogy közben napi tíz órai hivatali munkáját is ellátta, és családjára is odafigyelt.{{refhely|Sőtér István IV. kötet}}
[[1848]]-ban a Kisfaludy Társaság felvette tagjai közé. Az [[1848–49-es forradalom és szabadságharc]] alatt néhány verset és kisebb elbeszélést írt a folyóiratokba és néhány közéleti helyzetdalt is. Ilyen például a ''Nemzetőr-dal'', de nem hozott létre jelentős esztétikai értéket, mivel az akkori közösségi hangnem távol állt az ő líraiságától. A kormány által megindított ''Nép Barátja'' című lap szerkesztését nem vállalta el, csak nevét kölcsönözte hozzá, míg a tényleges szerkesztő [[Vas Gereben]] volt. Arany eleinte több költeményt és népszerű politikai cikket írt a lapba, de [[1849]]. [[Március 10.|március 10-től]] már a neve sem fordult elő a lapon. [[Nemzetőrség (1848)|Nemzetőrként]] részt vett a szalontai századdal az [[Arad ostroma|aradi várostrom]] körüli katonai szolgálatban, mintegy 8-10 hétig. Az ostromról így írt a ''Bolond Istók''ban: ''„Oh láttam én (hisz ott is voltam egyszer, / Tenni kevés – de halni volt esély)”''<ref>{{CitPer|author=Ferenczes István|tit=Veszedelmekről álmodom|per=Kortárs|tom=58|fasc=9|ann=2014|lun=09|url=https://epa.oszk.hu/00300/00381/00195/EPA00381_kortars_2014_09_24413.htm}}</ref> Jegyzői hivatalát [[1849]] tavaszáig megőrizte, de a város nem tudta fizetni a tisztviselőit, ezért a [[Szemere Bertalan]] által vezetett [[Belügyminisztérium|belügyminisztériumn]]ál vállalt fogalmazói állást. Hivatalával összefüggésben [[Debrecen|Debrecenbe]], majd [[Pest (történelmi település)|Pestre]] költözött. Mindeközben családja végig Szalontán maradt, ahol otthont adott Petőfi családjának 1849. január végétől májusig.{{refhely|Gyulai Pál 1884}}
Június végétől megkezdődött a cári csapatok előli menekülés. Nagyszalontán keresztül vonultak vissza [[Görgei Artúr|Görgei tábornok]] egységei. Néhány napig nála húzta meg magát menekülő és bujdosásra kényszerülő írótársai közül [[Vörösmarty Mihály]] és [[Bajza József (költő)|Bajza József]]. Nemsokára ő is menekülni kényszerült, és egy ideig bujdosott. Erdőkben töltötte napjait, és később, amikor visszamerészkedett otthonába, éjszakákat töltött felöltözve, arra várva, hogy hátha őt is letartóztatják. A félelem mellett legalább ilyen teherként jelentkezett, hogy ''„csaknem földönfutó valék”'', ahogy írta később, mert az [[1849]]-es év a teljes anyagi ellehetetlenülés szélére sodorta családját.{{refhely|Sőtér István IV. kötet}}
=== A szabadságharc után ===
{{Képdia|Kép:Ferenc Somorjai Arany János háza Nagykörösön.jpg|<center>Arany János lakóháza [[Nagykőrös]]ön</center>|Kép:Arany János plaque-3 (Nagykőrös Hősök tere 8).jpg|Arany János emléktáblája a nevét viselő általános iskola bejáratánál (Nagykőrös, Hősök tere 8.)|Kép:Arany János plaque-2 (Nagykőrös Hősök tere 8).jpg|Emléktáblája a nevét viselő általános iskola falán. Molnár Elek munkája, 1960. (Nagykőrös, Hősök tere 8.)|Kép:Arany János plaque (Nagykőrös Hősök tere 6).jpg|Emléktáblája a nevét viselő gimnázium falán. Sári Zoltán munkája, 2010. (Nagykőrös, Hősök tere 6.)|cím=Arany Nagykőrösön}}
A [[világosi fegyverletétel]] után nem tartóztatták le, rövid bujdosás után közéleti szerepet nem vállalva visszatérhetett Szalontára. Időközben [[Tisza Lajos (politikus, 1798–1856)|Tisza Lajos]] meghívta [[Geszt (település)|Gesztre]], hogy fiát, [[Tisza Domokos|Domokost]] költészetre oktassa. Szemléletének ellentmondásaira jellemző, hogy az elbukott [[1848–49-es forradalom és szabadságharc|magyar szabadságharcot]] kétféleképpen tudta értékelni: elégikusan és ironikusan is. Arany a bukás után sem pártolt el a szabadságharc eszméitől. ''Évnapra'' című versében (1850) 1848. március 15. megtagadását a Megváltót eláruló Péter gyengeségéhez hasonlítja; a ''Szondi két apródja'' a szabadságharc dicsőítése. S ha a ''Nagyidai cigányok''ban torzképet rajzol is a szabadságharcról, a gúny csak a vezéreket éri, mert Arany másképp ítélte meg a vezetőket és másképp a népet.<ref>{{cite web |title=Komlós Aladár: A magyar költészet Petőfitől Adyig |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/komlosaj.htm |publisher=http://magyar-irodalom.elte.hu |accd=2017-03-19}}</ref> 1850-től kezdve megint írhatott, és folyóiratokban leginkább lírai költeményeket publikált. A [[Bach-korszak|Bach-korszakban]] lassan azért hozzákezdett anyagi helyzetének rendezéséhez, a ''Nép Barátja'' tiszteletdíjaiból nádfedeles, rozzant, kétszobás parasztházat tudott vásárolni, melyhez volt egy apró gyümölcsöse is.{{refhely|Gyulai Pál 1884||Sőtér István IV. kötet|}}
Az [[1851]]. év második felében a nagykőrösi református egyház hívására a [[Arany János Református Gimnázium|Nagykőrösi Református Gimnáziumban]] a magyar és [[latin nyelv]] és irodalom tanárává választották, és az év őszén egész családjával [[Nagykőrös|Nagykőrösre]] költözött. A hely [[Mezőváros|mezővárosi]] létéből fakadó parlagiasságával feloldhatatlan ellentmondásba került tehetsége, tíz éven keresztül mégis lelkiismeretes és pontos tanár volt. [[Folyóirat|Folyóiratokban]] rendszeresen publikált, és ebből az időszakból származnak nagyobb művei is. Nagykőrösi tanárként rendszeresebben tanulmányozta a magyar nyelvet és az irodalmat, illetve a világirodalom nagyobb eposzait is újraolvasta. Ez időben néhány értekezést írt az ''Uj Magyar Museum''ba is (1854, 1857).{{refhely|Sőtér István IV. kötet}}
=== A Magyar Tudományos Akadémia tagjaként ===
A [[Magyar Tudományos Akadémia]] tízévi szünet után megtartott nagygyűlésén, [[1858]]. [[December 15.|december 15-én]] előbb levelező, majd még aznap rendes tagjává választotta. Székét [[1859]]. [[Október 31.|október 31-én]] ''Zrínyi és Tasso'' című értekezésével foglalta el. Ekkoriban sokat betegeskedett, gyomorbántalmak kínozták. Hívták többfelé is tanárnak, de nem vágyott új állásra, mert sokkal mozgalmasabb életet szeretett volna. [[1860]]. [[Július 15.|július 15-én]] a [[Kisfaludy Társaság]] igazgatójává választotta, így [[Pest (történelmi település)|Pestre]] költözött, és még az év november 7-én megindította a [[Szépirodalmi Figyelő|Szépirodalmi Figyelőt]], amelyet [[1862]]. [[Október 30.|október 30-ig]] szerkesztett.{{refhely|Gyulai Pál 1884}}
[[Szalay László (jogász, 1813–1864)|Szalay László]] elhunytával a Magyar Tudományos Akadémia titkára lett [[1865]]. [[Január 26.|január 26-tól]], majd az új alapszabályok kihirdetése után, [[1870]]. [[Január 17.|január 17-én]] a közgyűlés főtitkárrá nyilvánította.{{refhely|Gyulai Pál 1884}} [[Toldy Ferenc]] halála után, 1875-ben egyetemi tanszék vezetésére kérték fel: [[Trefort Ágoston]] vallás- és közoktatásügyi miniszter felajánlotta a [[Eötvös Loránd Tudományegyetem|budapesti egyetemen]] megüresedett magyar irodalomtörténeti tanszéket. A nagy megtiszteltetés ellenére ezt, egészségi állapotára való hivatkozással, nem tudta elvállalni.<ref>{{cite web |title=Arany János élete |url=https://www.arcanum.hu/hu/online-kiadvanyok/MagyarIrodalom-magyar-irodalomtortenet-1/magyar-irodalomtortenet-pinter-jeno-5116/6-a-magyar-irodalom-a-xix-szazad-masodik-harmadaban-1C05/arany-janos-1EC8/arany-janos-elete-1EC9/ |accessdate=2019-11-26 |publisher=arcanum.hu |language=magyar}}</ref>
Megromlott egészsége miatt a főtitkári teendők alól is több ízben kérte felmentését. 1877-ben lemondott főtitkári hivataláról, de ezt az akadémia nem fogadta el, hanem egy évre szabadságra küldték. Miután ez letelt, megismételte lemondását, amit az akadémia szintén nem fogadott el, hanem megint egy évre szabadságolták. 1879-ben harmadszor is kérte a felmentését, és ezt már elfogadták. A döntéshozóknak közben az is feltűnt, hogy főtitkári fizetését, melyet egyébként az alapszabályok életfogytig biztosítottak neki, már az eltelt két évben sem vette fel. Arany ki is jelentette, hogy végleges visszalépése után sem fogja azt elfogadni. Ezért arra kérték, hogy legalább az akadémia palotájában levő főtitkári lakást használja a továbbiakban, és – hogy senkiben se merülhessen fel kétely – a nagygyűlés tiszteletbeli főtitkári címmel ruházta fel, és igazgatótaggá választotta őt.{{refhely|SZTE Egyetemi Könyvtár}}
=== ''A walesi bárdok'' keletkezése és leánya halála ===
{{bővebben|A walesi bárdok}}
[[File:Zichy-arany-cropped-p047.jpg|250x250px|[[Zichy Mihály]]: Illusztráció A walesi bárdokhoz]]
1857-ben, [[I. Ferenc József magyar király|Ferenc József]] és [[Wittelsbach Erzsébet magyar királyné|Erzsébet királyné]] magyarországi látogatása alkalmából a kormánypárti [[Budapesti Hírlap (napilap, 1853–1860)|Budapesti Hírlap]] főszerkesztője – mások mellett – felkérte Arany Jánost egy üdvözlőbeszéd megírására. Az alkotást akadályozó tartós betegségre hivatkozva<ref>Tisztelt Szerkesztő Ur! Vettem becses felszólitását, de nem vagyok oly állapotban, hogy annak eleget tehessek. Physicai bajom, mely a lélekre tompítólag, a kedélyre leverőleg hat, s melyben évek óta sinlődöm, akadályoz a munkában. Hivatkozom az összes szépirodalmi lapokra s egyéb folyóiratokra, melyek jóllehet szűntelen sűrgetnek, egy év óta alig közöltek tőlem valamit, s ha igen, az is valamely régibb töredék volt. Így hát nem én vagyok az oka, ha rokkant Pegazusommal nem jelenhetek meg a fényes tisztelgésnél: lesznek mások, fiatalabbak, kik azt a helyet díszesebben betöltik mint én. [...] tisztelője Arany János</ref> tért ki a felkérés elől. Mindezek ellenére az utókor a [[2000-es évek]] közepéig azt gondolta, ekkor írta, saját fiókjában tartva, ''A walesi bárdok'' című balladát. [[Milbacher Róbert]] irodalomtörténész szerint a vers valójában csak négy évvel később, 1861 körül született, részben [[Széchenyi István]] ''Ein Blick'' című pamfletjének hatására, részben pedig mert megtudta, hogy egy másik költő, [[Tóth Endre (költő, 1824–1885)|Tóth Endre]] ''Ötszáz gael dalnok'' címmel ugyancsak megírta a walesi bárdok történetét. Például „a koronád legszebb gyémántja” szófordulatot szó szerint Széchenyitől vette át Arany.<ref name="Milbacher Róbert">{{cite journal |author=Milbacher Róbert |year=2006/1 |title=Szegény, szegény Eduard királyǃ? (Újabb adalékok A walesi bárdok értelmezéséhez) |url=http://www.irodalomtortenet.hu/pdf/IT_2006-1.pdf |format=pdf |language=magyar |issue=Irodalomtörténet |pages=44–90. old. |accessdate=2016-10-29 |archivedate=2013-12-19 |archiveurl=https://web.archive.org/web/20131219075720/http://www.irodalomtortenet.hu/pdf/IT_2006-1.pdf}}</ref> [[Hász-Fehér Katalin]] ''A walesi bárdok keletkezés- és közléstörténete című elemzésében'' azt a megállapítást tette, hogy az Arany-filológia mai állása szerint nincs közvetlen bizonyíték a keletkezés pontos időpontjára.<ref>{{cite journal |author=Hász-Fehér Katalin |year=2014/2 |title=Bárdok Walesben A walesi bárdok keletkezés- és közléstörténete |url=http://epa.oszk.hu/02500/02518/00344/pdf/EPA02518_irodalomtortenet_2014_2_186-223.pdf |format=pdf |language=magyar |issue=Irodalomtörténet |pages=187–223. old. |accessdate=2017-03-16}}</ref>
Ebben az „óangol” balladában [[I. Eduárd angol király|Eduárd angol király]] látogatásra indul újonnan leigázott tartományába, [[Wales|Walesbe]]. Mindenki számára nyilvánvaló volt, hogy Edward maga Ferenc József, a walesi bárdok pedig a magyar költők. [[1863]]-ban az általa ugyanebben az évben indított ''Koszorú'' című lapban jelent meg először ''A walesi bárdok''. A verset a cenzúra miatt nem sajátként, hanem egy óangol ballada fordításaként írta alá.<ref name="Milbacher Róbert" /><ref>{{cite web |date=2010-04-04 |title=Magyarország története, 30. rész – Út a kiegyezéshez'', ismeretterjesztő filmsorozat 2009 rendező: M. Nagy Richárd, Varga Zs. Csaba |url=http://nava.hu/id/970002/ |accessdate=2016-11-01 |publisher=ujszo.com |language=magyar}}</ref>
A Koszorú folyóirat [[1865]] júniusának végén szűnt meg. Arany számos cikket, írói arcképeket, valamint bírálatot és értekezést írt a magyar verselésről. Lelkének belső feszültsége jót tett költészetének, mert versek írására ösztönözte. Lírája ebben az évtizedben bontakozott ki legsokoldalúbban. Mélyen átélte a polgárosodó világ [[elidegenedés]]ét. [[1865]]-ben leánya, Juliska, méhgyulladást kapott – szervezete legyengült, majd a [[Gümőkór|tüdőbaj]] végképp legyőzte, fél évvel azután meghalt, hogy [[Szél Kálmán|Szél Kálmánt]]ól kislánya született, Szél Piroska. Szeretett leányának váratlan halála mélyen megrendítette Aranyt, olyannyira, hogy amikor verset kezdett írni lánya emlékére, a negyedik sor után megakadt, és ezt írta füzetébe a folytatás helyett: ''„Nagyon fáj! nem megy!”'' A családi életben bekövetkezett tragédia hatására több mint egy évtizedre a költő is elhallgatott benne. [[1868]]-tól Aranyék nevelték Juliska kislányát, aki 21 éves korában édesanyjához hasonlóan a tüdőbaj áldozata lett és 1882 októberében elhunyt. A tragédiát Arany már nem élte meg.{{refhely|Gyulai Pál 1884||Sőtér István IV. kötet|}}
=== Betegsége, halála és temetése ===
[[Deák Ferenc (igazságügy-miniszter)|Deák Ferenc]] és a [[kiegyezés]] híve volt, de ''A walesi bárdok'' című művében is kifejezte, hogy a leigázott tartomány urát nem szíveli. A költőfejedelem emblematikus alakja volt korának, és ezt az uralkodó, [[I. Ferenc József magyar király|Ferenc József]] felismerte. 1866-ban elismerve érdemeit és fejet hajtva költői munkássága előtt, [[Érdemkereszt (Ausztria–Magyarország)|Arany Érdemkereszttel]] tüntette ki. A Belügyminisztériumból az MTA címére kiküldött érdemkeresztet a költő nem akarta elfogadni, ezért értesítette a belügyminisztert, hogy visszautasítja azt. A megkeresésére hamar választ kapott, hogy nem teheti meg, mert a ''Hivatalos Lap'' már leközölte a kitüntetést. Ezután nem tehetett egyebet, minthogy a kitüntetés mellé írt egy fricskát, és a fiókjában felbontatlanul őrizte, a kettőt együtt halála után találták meg.<ref>Az érdemrendet rejtő doboz csomagolópapírjára ezt írta: ''„Hasfájásban szenvedek, Érdemkeresztet küldenek, Ha csak egyet tojhatnám, Száz keresztért nem adnám.”'' A történetet [[Vámbéry Rusztem]] közlése alapján 1942 táján [[Faludy György]] jegyezte le.</ref><ref>{{cite web |date=2016-08-27 |title=Arany Jánosnak sem kellett az érdemkereszt |url=http://ujszo.com/online/panorama/2016/08/27/arany-janosnak-sem-kellett-az-erdemkereszt |archiveurl=https://web.archive.org/web/20161030001005/http://ujszo.com/online/panorama/2016/08/27/arany-janosnak-sem-kellett-az-erdemkereszt |archivedate=2016-10-30 |accessdate=2016-10-29 |publisher=ujszo.com |language=magyar}}</ref>
{{Szövegdoboz|'''''Arany Szent István-rendje''''' Fönnmaradt egy anekdota, amely szerint egy főrend [[Andrássy Gyula (politikus, 1823–1890)|Andrássy Gyula]] miniszterelnökkel beszélve nehezményezte az Aranynak adományozott rendjelet, mondván, hogy ez a rendjel eddig csak igen magas rangúaknak járt ki. Mire Andrássy ezt felelte: „– Meg tudná mondani Excellenciád, ki volt [[Raffaello Sanzio|Raffaelo]] korában a külügyminiszter?” Tényleg, ki is volt a külügyminiszter?<ref name="Szent István-rend">{{cite web |author=Kiczenko Judit |url=https://btk.ppke.hu/uploads/articles/115865/file/247_258_Kiczenko.pdf |format=pdf |title=ARANY JÁNOS ÉS A SZENT ISTVÁN-REND |date=2016-08-27 |accessdate=2016-10-29 |language=magyar |publisher=btk.ppke.hu |archiveurl=https://web.archive.org/web/20140716034808/https://btk.ppke.hu/uploads/articles/115865/file/247_258_Kiczenko.pdf |archivedate=2014-07-16 }}</ref>|keretszín=#A3B0BF|háttérszín=#CEDFF2}} Ferenc József koronázása alkalmával újabb, immáron fejedelmi kitüntetést adományozott a magyar nemzet akkor élő legnagyobb költőjének, [[1867]]-ben a ''kiváltságosak'' közé emelte, és a [[Magyar Királyi Szent István-rend|Szent István-rend]] kiskeresztjével tüntette ki. Arany ezt az uralkodói kegyet is megpróbálta visszautasítani, de [[Eötvös József (író)|báró Eötvös József]] vallás- és közoktatásügyi miniszternek írt tiltakozására azt a választ kapta, hogy: ''„…neked jogodban áll e rendjelt nem hordani, s ezt alkalmasint tenni is fogod, de azt visszaútasítani, ahhoz bizony, barátom, nincs jogod. Nemcsak a fejedelem iránti tiszteletet, de más érdekeket sértenél meg…”'' Közben az újságból értesült, hogy a belügyminiszter ''„Budán folyó év és hó 11-én 2366. elnöki szám alatt kibocsátott”'' rendelete az ő kitüntetéséről szól. Ekkor tiltakozásul írt [[Wenckheim Béla|báró Wenckheim Béla]] belügyminiszternek is. A két miniszter személyesen is felkereste, és végül hosszas kapacitálás és levélváltások után írta e sorokat: ''„– Én tartottam magamat, míg lehetett, de végre belátván, hogy nagy demonstrationalis látszat nélkül (mitől mindig irtóztam) a visszautasítás meg nem történhetik, beleegyeztem…”''<ref name="Szent István-rend" />
[[1865]]-től [[1876]]-ig eredeti művein alig dolgozott valamit. Miután megvált főtitkári hivatalától, a visszavonulás jót tett irodalmi munkásságának, mert számos lírai költeményt és balladát írt ez időben. Művei a [[Margit-sziget]] [[Tölgy|tölgyf]]ái alatt, egyfajta őszi virágzásképpen születtek. [[1879]]-ben készült el a ''[[Toldi szerelme]]'' című elbeszélés tizenkét énekben, melynek első kiadása két hónap alatt elfogyott. A [[Magyar Tudományos Akadémia]] és a Kisfaludy Társaság is jutalmával tüntette ki. A Társaság ötvenaranyos jutalmából alapítványt hozott létre. Élete végén Arany nagyobb vállalásai közül a ''Toldi szerelmé''t tudta befejezni. Irodalmi tevékenységét ekkor már az is nehezítette, hogy megrendült az egészsége: [[1868]]-ban veszélyes máj- és bélgyulladást állapítottak meg nála, emiatt rendszeres gyógyfürdőzést írtak elő neki. Évente látogatta a [[Karlovy Vary|karlsbadi]] fürdőt, de megfordult [[Szliácsfürdő|Szliácsfürdőn]] is.<ref>{{cite web |title=Slávni návštevníci kúpeľov |url=http://www.kupelesliac.sk/Slavni-navstevnici-kupelov.10.0.html |archiveurl=https://web.archive.org/web/20161105145639/http://kupelesliac.sk/Slavni-navstevnici-kupelov.10.0.html |archivedate=2016-11-05 |accessdate=2016-11-25 |publisher=kupelesliac.sk |language=szlovák}}</ref> [[1870]]-ben korának legnevesebb sebésze, [[Kovács Sebestény Endre (sebész, 1814–1878)|Kovács Sebestény Endre]] operálta meg, és több epekövét is eltávolította. [[Hallás|Hallása]] és [[Látás|látása]] is romlani kezdett, de felesége gondoskodásának és a megfelelő étrendjének köszönhetően néha-néha megint elláthatta hivatalát, és még az irodalommal is foglalkozhatott. A fulladozó, nehéz légzése azonban napközben is gyakran jelentkezett, de különösen a reggeli és a hajnali órákat nagyon megszenvedte.{{refhely|Gyulai Pál 1884||Sőtér István IV. kötet|}}
Az [[1870-es évek]] során befejezte a ''[[Hamlet, dán királyfi|Hamlet]]'' és a ''[[János király]]'' fordítását, lefordította [[Arisztophanész]] összes művét, elkészült a ''Bolond Istók''kal, valamint megírta az ''[[Őszikék]]'' című ciklusát, és bevégezte a Toldi-trilógia középső részét, a ''Toldi szerelmé''t. Régi betegsége, a heveny hörgőgyulladás [[1878]] áprilisában újra kitört rajta, de a szokottnál súlyosabban. Végül – egy [[városi legenda]] szerint – a pesti Petőfi téri Petőfi-szobor [[1882]]. [[Október 15.|október 15-i]] avatásán meg is hűlt, és [[Tüdőgyulladás|tüdőgyulladást]] kapott. Ettől kezdve állapota fokozatosan romlott, és egy héttel később, [[Október 22.|október 22-én]] déli 12 órakor elhunyt Budapesten, a Magyar Tudományos Akadémia palotájában lévő szolgálati lakásában, élete 66., házasságának 42. évében.{{refhely|Gyulai Pál 1884||Sőtér István IV. kötet|}}
Temetése [[Október 24.|október 24-én]], délután 3 órakor a [[Fiumei úti sírkert|Kerepesi temetőben]] a [[Református egyházak|református egyház]] szertartása szerint zajlott. Végső nyughelyére az akadémia tagjai testületileg kísérték. Ravatalánál [[Gyulai Pál (irodalomtörténész)|Gyulai Pál]], [[Szász Károly (költő, 1829–1905)|Szász Károly]] és [[Török Pál (püspök)|Török Pál]] református püspök tartott gyászbeszédet. Később a [[Margit-sziget|Margit-szigetr]]ől áttelepített tölgyeket ültettek a sírja fölé.<ref>{{cite web |title=Arany János sírja – a Nemzeti Sírkert 22. parcellája |url=http://muemlekek.info/muemlek/arany-janos-sirja.php |archiveurl=https://web.archive.org/web/20161029174410/http://muemlekek.info/muemlek/arany-janos-sirja.php |archivedate=2016-10-29 |accessdate=2016-10-29 |publisher=muemlekek.info |language=magyar}}</ref> A [[Kisfaludy Társaság|Kisfaludy Társaságban]] [[1883]]. [[Október 24.|október 24]]-én, Gyulai Pál a Magyar Tudományos Akadémián,<ref>{{cite web |date=1883-10-24 |title=Gyulai Pál emlékbeszéde Arany János felett |url=https://mek.oszk.hu/04900/04968/html/02.htm#49 |accessdate=2016-10-29 |publisher=GYULAI PÁL VÁLOGATOTT MŰVEI |language=magyar}}</ref> az [[1884]]. [[Június 8.|június 8]]-i ülésen pedig Szász Károly tartott fölötte emlékbeszédet.{{refhely|SZTE Egyetemi Könyvtár}}
== Arany jelentősebb költeményei ==
{{képdia|Kép:Arany János költő.jpg|Arany János 1856-ban [[Barabás Miklós (festő)|Barabás Miklós]] litográfiája|Kép:Arany János Barabás 1848.jpg|Arany János 1848-ban [[Barabás Miklós (festő)|Barabás Miklós]] litográfiája|Kép:Arany János.jpg|Arany János|Kép:17. Arany János.jpg|Arcképe képeslapsorozaton|Kép:Arany Morelli.jpg|[[Morelli Gusztáv]] fametszete|Kép:Arany János öreg kép.jpg|A költő arcképe|Kép:Arany János arcképe (Ellinger Ede, 1880).jpg|[[Ellinger Ede]] fényképe (1880)|Kép:Arany János portréja (Pollák Zsigmond, 1887).jpg|[[Pollák Zsigmond]] metszete Ellinger fényképe alapján (1887)|cím=Képek a költőről}} {{bővebben|Arany János költészete}} {{idézet2|''Arany János az európai magyar olvasó legnagyobb bánata: Európa nem vette tudomásul. Holott – vélik – ő mutathatta volna meg legjobban, mire képes ez a nyelv és ez a költészet: ő volt a magyar vers és nyelv legnagyobb mestere.''|[[Németh G. Béla]]}}
A [[magyar irodalom]] legkiemelkedőbb [[Epika|epikus]] költője és az egyik legnagyobb magyar népi költőfejedelem.<ref>{{cite web |author=Tarlósi János |date=2014-03-01 |title=Arany János a népi költőfejedelem |url=http://delikronika.webnode.hu/news/arany-janos-a-nepi-koltofejedelem-tarlosi-janos-olvass-tovabb-http-delikronika-webnode-hu-news-arany-janos-a-nepi-koltofejedelem-tarlosi-janos-keszits-sajat-weboldalt-ingyen-http-www-webnode-hu/ |archiveurl=https://web.archive.org/web/20161109221348/http://delikronika.webnode.hu/news/arany-janos-a-nepi-koltofejedelem-tarlosi-janos-olvass-tovabb-http-delikronika-webnode-hu-news-arany-janos-a-nepi-koltofejedelem-tarlosi-janos-keszits-sajat-weboldalt-ingyen-http-www-webnode-hu/ |archivedate=2016-11-09 |accessdate=2016-11-09 |publisher=Déli Magyar Krónika |language=magyar}}</ref> Majdnem fél évszázados költői munkássága során folyamatosan, de mennyiségileg és minőségileg egyenetlen eloszlásban születtek költeményei, ám mégis tökéletes irodalmi művek sokaságát alkotta meg. Jelentős vers minden költői szakaszában található. Pályakezdésének ideje az 1845–1849 közötti időszak. A következő a szabadságharc utáni költészete (1849–1866), azután a hazáját és a családját ért csapások miatt hosszú ideig tényleg hallgatag ember lett, és a ''„szünetelt korszak”'' követett, amikor egyáltalán nem írt verseket. Pályafutása végén azonban rövid időre megint visszatért költőként, és ekkor született sorrendben a harmadik költői korszaka, az [[Őszikék]] (1877–1880), amikor viszonylag rövid idő alatt nagyon sokat alkotott. Remekbe szabott balladái miatt kortársai „a ballada Shakespeare-jeként” tisztelték, és az írók közül kiemelkedett páratlanul gazdag magyar szókincsével is.<ref>{{cite web |title=Arany János lírája |url=http://tudasbazis.sulinet.hu/hu/magyar-nyelv-es-irodalom/irodalom/irodalom-10-osztaly/arany-janos/arany-janos-liraja |accessdate=2016-03-06 |publisher=sulinet.hu |language=magyar}}</ref><ref>{{cite web |author=Géher István |year=2005 |title=MAGYAR „HAMLET”: ARANY JÁNOSFURCSA ÁLCÁJA |url=http://www.holmi.org/arch/2005/12/07.html |accessdate=2016-07-03 |publisher=holmi.org |language=magyar}}</ref>
Hogy mennyire gazdag volt ez? Összehasonlították az irodalmi műveiben használt egyedi szavakat [[Vörösmarty Mihály]], [[József Attila]], [[Petőfi Sándor]], [[Babits Mihály]] és [[Ady Endre]] hasonló műveiben előfordulókkal. Arany igen jelentős, 60 ezer körülit, a második Vörösmarty 44 ezer körülit, míg a közülük sereghajtó Petőfi 20 ezer körüli egyedi szót használt.<ref>A magyar nyelvben összesen 60-100 ezer ilyen szó van, és egy átlagos értelmiségi egyévnyi beszédét rögzítve körülbelül 25-30 ezret használ.</ref><ref>{{cite web |author=Géher István |date=2005-03-31 |title=Ennek a magyar költőnek a legnagyobb a szókincse |url=http://www.szeretlekmagyarorszag.hu/ennek-a-magyar-koltonek-a-legnagyobb-a-szokincse/ |accessdate=2016-10-29 |publisher=szeretlekmagyarorszag.hu |language=magyar}}</ref><ref>{{cite book |author=főszerk. [[Adamikné Jászó Anna|A. Jászó Anna]] |title=A magyar nyelv könyve |publisher=Trezor, |year=2004, |pages=171. o. |city=Budapest}}</ref><ref>{{cite web |date=2015-03-30 |title=Legenda bizonyítva: megszámoltuk Arany szavait |url=http://www.origo.hu/techbazis/20150329-legenda-bizonyitva-raengedtuk-a-szupertechnologiat-a-verses-kotetekre.html |archiveurl=https://web.archive.org/web/20170303122757/http://www.origo.hu/techbazis/20150329-legenda-bizonyitva-raengedtuk-a-szupertechnologiat-a-verses-kotetekre.html |archivedate=2017-03-03 |accessdate=2017-03-02 |publisher=Origó Techbázis,}}</ref> Ilyen ma már ritkán használt [[Köznyelv|köznyelvi]] szavak például a műveiben előforduló olyan állatnevek, mint a toportyán ([[aranysakál]], ''Toldi'' – Negyedik ének)<ref>{{cite web |author=Arany János |title=Toldi Negyedik ének |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/tnegyedi.htm |accessdate=2016-10-29 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>) és a pitypalaty ([[fürj]], ''Télben'' című vers).<ref>{{cite web |author= |title=Arany János – Télben |url=http://meseld.hu/magyar-koltok-versei/arany-janos/542-arany-janos-telben |archiveurl=https://web.archive.org/web/20161030001018/http://meseld.hu/magyar-koltok-versei/arany-janos/542-arany-janos-telben |archivedate=2016-10-30 |accessdate=2016-10-29 |publisher=meseld.hu |language=magyar}}</ref>
=== Elbeszélő költeményei ===
Arany [[Elbeszélő költemény|elbeszélő költemények]], más néven verses vagy költői elbeszélések, illetve az ő idejében használatos elnevezéssel költői beszélyek formájában írta meg már az első komolyabb irodalmi alkotását is. Ez volt ''Az elveszett alkotmány''. Ezzel a Kisfaludy Társaság pályázatát elnyerte, de [[Vörösmarty Mihály]] még fenntartással fogadta Arany János bemutatkozását. A későbbi irodalmi szempontból sokkal jelentősebb költeményei azonban már meghozták a költői hírnevet és az általános elismerést.{{refhely|Gyulai Pál 1884}} [[Fájl:A Toldi kézirata.jpg|bélyegkép|200px|jobbra|A [[Toldi]] kézirata ([[Arany László (költő)|Arany László]] ajándékozta 1886-ban [[Lehr Albert|Lehr Albertnak]] annak emlékére, hogy Lehr Toldi-kommentárja megnyerte az [[Magyar Tudományos Akadémia|Akadémia]]<nowiki> nagyjutalmát)]]</nowiki>
A legjelentősebb – és mind közül kiemelkedik terjedelmében is – elbeszélő költeménye a ''Toldi-trilógia,'' mely ''a [[Toldi]]'' (1847), a ''[[Toldi estéje]]'' (1854) és a ''[[Toldi szerelme]]'' (1879) részekből áll össze. A művekben szereplő [[Toldi Miklós (nemes)|Toldi Miklóst]] sokáig kitalált személynek gondolták. Bebizonyosodott azonban, hogy Arany által a magyar hősök közé emelt, valóban kivételes fizikai adottságú bihari birtokos nemes valós személy volt. A trilógia nagy része történeti tényekkel is alátámasztható, azonban vélhetően vannak kitalált részek is benne, ilyen lehet például a testvérével kialakult konfliktusa, harca a [[Szürke farkas|farkasokkal]] vagy a cseh vitézzel vívott sajátos párbaja.<ref>{{cite web |author= |date=2015-09-16 |title=Ki volt valójában Toldi Miklós? |url=http://mult-kor.hu/ki-volt-valojaban-toldi-miklos-20150916 |accessdate=2016-11-08 |publisher=mult-kor.hu |language=magyar}}</ref>
Ez a trilógia azonban nemcsak Toldi nevét emelte magasba, hanem a szerzőét is halhatatlanná tette. Érdekesség, hogy a trilógia három része három különböző időpontban – teljesen más történelmi korszakokban – született, és nem a történések időrendjében készült el. Hasonló nagyszabású munka lehetett volna a [[Hunok|hun]] eredettörténetből vett ''Csaba-trilógia'' de ennek csak az első része, a ''[[Buda halála]]'' készült el teljesen.<ref name="Toldi trilógia">{{cite web |author= |title=Toldi trilógia |url=https://mek.oszk.hu/00500/00597/html/toldi.htm |accessdate=2016-11-07 |publisher=Arany János összes költeménye |language=magyar}}</ref>
Aranyt nemcsak szépíróként foglalkoztatta a verses elbeszélői forma, kortárs és klasszikus eposzértelmezéseiben, kritikáiban is írt a műfajról. Visszatérő elvárásként fogalmazta meg a „vérré válás” normáját. Ez alatt azt értette, hogy az [[eposz]] hitelét, értékét a közösségi befogadás biztosítja, a népi szájhagyományba való visszaépülés ugyanolyan műfaji követelmény, mint az [[eposzi kellékek]]. [[Takáts József (irodalomtörténész)|Takáts József]] irodalomtörténész hívta rá fel a figyelmet, hogy ez az eposzelmélet Arany [[Szokásjog|szokásjogi]] gondolkodására vezethető vissza. Lehetséges forrásként Arany másodjegyzőként szerzett jogi tapasztalatára hivatkozik, de meggyőző példákat hoz Arany nyelvészeti témájú írásaiból is. Mindkét esetben egy alulról érkező, gyakorlatból és közhasználatból építkező szabályrendszer érvényesül egy kívülről előírottal szemben. Innen jól látható, hogy Arany egyedi eposzfelfogása a korban jellemző szokásjogi gondolkodáson alapszik.<ref>{{Cite journal |author=Takáts József |title=Arany János szokásjogi gondolkodása |url=http://itk.iti.mta.hu/megjelent/2002-34/takats.pdf |journal=Irodalomtörténeti Közlemények |volume=CVI. |issue=3–4. |pages=295–313. |accessdate=2024-01-12}}</ref>
Jelentősebb elbeszélő költeményeinek rövid bemutatása:
* ''[[Toldi]]'' (1847): A Kisfaludy Társaság pályázatára készített, műfaját tekintve elbeszélő költemény, melyet vélhetően az előző pályázaton díjnyertes ''Az elveszett alkotmányt'' ért Vörösmarty bírálat is inspirált. A történet ihletét vélhetően [[Ilosvai Selymes Péter]] ''Az híres nevezetes Tholdi Miklósnak cselekedeteiről és bajnokságáról való história'' című krónikája adta. A kiírt pályázaton a mű nemcsak a díjat nyerte meg, hanem példátlan módon a kitűzött tizenöt aranyat kivételesen húszra emelték. Arany ezzel az alkotásával ünnepelt költővé vált, és jeles írók figyelme fordult felé. A tizenkét énekből álló költemény költői képekben gazdag, melyek közül az egyik legszebb az álom-[[allegória]]: ''„Majd az édes álom pillangó képében / Elvetődött arra tarka köntösében...”''<ref name="Toldi trilógia" /><ref>{{cite web |author= |title=A Toldi felépítése |url=http://tudasbazis.sulinet.hu/hu/magyar-nyelv-es-irodalom/irodalom/irodalom-6-osztaly/a-toldi-keletkezese-es-forrasai/a-toldi-szerkezete |accessdate=2016-11-07 |publisher=tudasbazis.sulinet.hu |language=magyar}}</ref>
* ''[[Toldi estéje]]'' (1854): A Toldi váratlanul nagy sikere ösztönözte az újabb mű megírására. Levelében értesítette barátját, [[Petőfi Sándor|Petőfi Sándort]], hogy „Egy ''Toldit'' akarok még írni, ''Toldi Estéjét…''” A kéziratot 1848. április 1-jén elküldte Petőfi Sándornak, de a forradalmi események miatt csak 1854 tavaszán jelent meg. A mű az irodalmivá emelt népnyelven íródott. Fogadtatása a késedelem ellenére lelkes volt. [[Eötvös József (író)|Eötvös József]] rögtön a megjelenés után Aranynak küldött levelében így írt: ''„Ha valaha művet láttam, mely minden követeléseimnek megfelelt: Toldi Estéje az…”'' [[Gyulai Pál (irodalomtörténész)|Gyulai Pál]], az egyébként rettenthetetlen kritikus nem kevesebbet állított, minthogy: ''„Arany Jánosé az első hely a magyar költészetben.”''<ref name="Toldi trilógia" /><ref>{{cite book |author=Arany János |title=Toldi estéje |publisher=Franklin Társulat |others=Magyarázta: Lehr Albert |year=1905 |edition= |location=Budapest |pages=5–12., 50–53 |language=magyar |id=}}</ref><ref>{{cite web |author= |title=Toldi estéje (1848) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyac.htm |accessdate=2016-12-02 |publisher=tudasbazis.sulinet.hu |language=magyar}}</ref>
* ''[[Buda halála]]'' (1863): Arany a [[kiegyezés]] előtti években írta Pesten. A mű a tervezett hun-trilógia egyedül befejezett része, melynek műfaját nem lehet egyértelműen meghatározni. A történetben Buda király megosztja hatalmát öccsével, Etelével. Ez a lemondás vezet aztán a király későbbi halálához. A [[Tragikomédia|tragikum]] kifejezése, a metaforákban gazdag fordulatok, nagy művészi hatású és korszerű alkotássá tette a költeményt.{{refhely|Sőtér István IV. kötet||Csáky Zsolt|}}<ref>{{cite web |author= |date=2013-04-12 |title=Arany János (1817-1882): BUDA HALÁLA |url=http://csicsada-irodalom-birodalom.blogspot.hu/2013/04/arany-janos-1817-1882-buda-halala.html |accessdate=2016-11-07 |publisher=Irodalom és művészetek birodalma |language=magyar}}</ref>
* ''[[A nagyidai cigányok]]'' (1851): A vers az 1848–49-es szabadságharc egyfajta ironikus értékelése, műfaja szatirikus eposz. A [[magyar nemesség]] azon liberális álláspontjával értett egyet, amely hitt a lassú, de szerves fejlődésben. Kossuth Lajos nézeteit nem fogadta el maradéktalanul, és álmodozónak gondolta. Ironikus szatírájának és világképének változásában [[Kemény Zsigmond]] ''Forradalom után'' című 1850-ben írt röpiratának volt nagy szerepe. A versben a groteszk hangvételt nagy nyelvi igénnyel szedte versbe, például ilyen, akár már komikusnak ható fordulatokkal: ''„Ló, három, szilajok, valamint a csiga, … Dicsőségünk nem fér papirosomra, Nohát nem is bántom. … Lenyakazva egymást, szépen megbékéltek. …Köröskörnyül immár meg van rakva sebbel, Mint az ángol ember kaputrokja zsebbel;”'' [[Reviczky Gyula]] szerint ez volt Arany legtöbbet vitatott és legzseniálisabb műve is egyben.{{refhely|Sőtér István IV. kötet||Csáky Zsolt|}}<ref>{{cite web |author= |date=2013-04-12 |title=A nagyidai cigányok (1851) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyad.htm |accessdate=2016-11-07 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* A ''[[Bolond Istók (elbeszélő költemény, Arany János)|Bolond Istók]]'' első éneke 1850-ben, míg a második 1878-ban készült el. A műfaja elbeszélő költemény, a cselekmény pedig Arany vándorszínészi élményein alapult. A vers a szerencsétlen sorsú alsó néposztályok életét mutatja be.{{refhely|Sőtér István IV. kötet||Csáky Zsolt|}}<ref>{{cite web |author= |title=Arany János összes költeményei |url=https://mek.oszk.hu/00500/00597/html/elbeszel.htm |accessdate=2016-10-30 |publisher=mek.oszk.hu |language=magyar}}</ref><ref>{{cite web |author= |title=Arany János elbeszélő költeményei |url=https://sites.google.com/site/magyarirokaranyjanos/home/versek-1847-1849/versek-1850-1852/versek-1865-1876/versek-1877-1882/aranynak-tulajdonitott/toldi-trilogia/elbeszelo-koeltemenyek |archive-url=https://web.archive.org/web/20161022233717/https://sites.google.com/site/magyarirokaranyjanos/home/versek-1847-1849/versek-1850-1852/versek-1865-1876/versek-1877-1882/aranynak-tulajdonitott/toldi-trilogia/elbeszelo-koeltemenyek |archiveurl=https://web.archive.org/web/20161022233717/https://sites.google.com/site/magyarirokaranyjanos/home/versek-1847-1849/versek-1850-1852/versek-1865-1876/versek-1877-1882/aranynak-tulajdonitott/toldi-trilogia/elbeszelo-koeltemenyek |archive-date=2016-10-22 |archivedate=2016-10-22 |accessdate=2016-10-30 |publisher=sites.google.com |language=magyar}}</ref>
* ''[[Toldi szerelme]]'' (1879): Élete vége felé a költő nagy vállalkozásai közül befejezett mű. Jóval terjedelmesebb és meséjében is bonyodalmasabb, mint bármelyik másik Arany-költemény. Nagy sikert aratott alkotás, első kiadása két hónap alatt elfogyott. A [[Magyar Tudományos Akadémia]] és a Kisfaludy Társaság is a jutalmával tüntette ki.<ref name="Toldi trilógia" /><ref>{{cite web |author= |title=Toldi szerelme |url=https://mek.oszk.hu/02200/02228/html/04/69.html |accessdate=2016-10-30 |publisher=A magyar irodalom története. |language=magyar}}</ref>
=== Lírai költeményei ===
Arany pályája több korszakra is felosztható, azonban [[Líra (műnem)|lírai]] költészetének darabjai minden egyes alkotói szakaszában megtalálhatóak. A majdnem fél évszázados költői tevékenységében ezek mennyiségileg és minőségileg is egyenetlen eloszlásúak. Jelentős és kiemelkedő korszak a nagykőrösi időszak. Az 1860-as években a lírai költészet a [[Bach-korszak]] bukásával talaját vesztette, és Pestre költözésétől ez nála is megfigyelhető, hiszen költészete másként bontakozik ki. Az 1861–1877 közötti időszakban átélt élmények lírai megörökítése ugyan elmaradt, de egyfajta kárpótlásként lírai szövegek azért előfordulnak az [[Őszikék]] versciklusában.<ref name="Lírája">{{cite web |author= |title=Arany János lírája |url=http://tudasbazis.sulinet.hu/hu/magyar-nyelv-es-irodalom/irodalom/irodalom-10-osztaly/arany-janos/arany-janos-liraja |accessdate=2016-10-30 |publisher=sulinet |language=magyar}}</ref><ref>{{cite web |author=Bori Imre |title=Az első "modern" verseskönyv: az Őszikék |url=https://mek.oszk.hu/00500/00596/html/tanulmanyok/bori85.html |accessdate=2016-12-07 |publisher=A magyar irodalom modern irányai I., Újvidék, 1985. 93-100 |language=magyar}}</ref> [[Fájl:Arany János 1867-ben (Simonyi Antal felvétele).jpg|bélyegkép|balra|250px|Arany János 1867-ben]] A szabadságharc utáni időkben a [[vallás]] szerepe a [[Természettudomány|természettudományok]] fejlődésével a korábbiakhoz képest bizonyos mértékben visszaszorult. A [[Mennyország|túlvilágba]] vetett hit és a földöntúli élet léte megkérdőjeleződött, és így megrázó élménnyé vált a [[halál]] véglegessége. Arany átérezte korának nagy világnézeti válságát és lélektani hatását, és költészetére az is hatott, hogy az európai szabadságküzdelmek mind sorra elbuktak. A magyar szabadságharc elvesztése miatt érzett kiábrándultság és az elvesztett remény lírai költészetére is jelentős hatást gyakorolt.<ref name="Lírája" />
Korai darabjai között két igazán kiemelkedő vers van: ''A rab gólya'' (1847) és a ''Nemzetőrdal'' (1848).
* ''[[A rab gólya]]'' (1847): Az 1847-ben írt népies költeménye a lírai kisepika szép példája. A versben szereplő rab madár egy [[fehér gólya]]. A madarak általában a szabadságot jelképezik, de itt a törött szárnyú gólya vélhetően a költő lelkiállapotát jeleníti meg. Ő ez időben Szalontán élt egyfajta vidéki elszigeteltségben, és valószínűleg ennek az érzésnek ad hangot a költemény.{{refhely|Csáky Zsolt}}<ref>{{cite web |author=Girasek Edmond |title=Madár-motívumok Arany János költészetében |url=http://www.doksi.hu/elemzes.php?order=Show&id=231 |accessdate=2016-11-09 |publisher=doksi.hu |language=magyar}}</ref>
* ''[[Nemzetőrdal (csárdás)|Nemzetőrdal]]'' (1848): A forradalmi lelkesedés és a népies dalköltészet egyesülése, mely a [[Verbunkos|katonatoborzók]] hangulatát idézi meg. Első sorában mindjárt előtör a nemzeti büszkeség is: ''„Ne félj, babám, nem megyek világra: / Nemzetemnek vagyok katonája.”'' Ez a költemény megzenésítését követően népdallá is vált.<ref name="Lírája" /><ref name="Nemzetőrdalok">{{cite web |author=Tary Lujza |title=Nemzetőrdalok |url=http://48asdalok.btk.mta.hu/peldatar/nemzetordalok |accessdate=2016-11-09 |publisher=48asdalok.btk.mta.hu |language=magyar}}</ref>
A későbbi és az [[1850-es évek|ötvenes évek]] első felének lírája javarészt [[Nagykőrös|Nagykőrösh]]öz köthető. A ''Letészem a lantot'' (1850) ugyan még a költözés előttire datálható, de ezeket a költeményeit a szabadságharc bukása érlelte lírikussá. E korszak (1849–1866) jelentősebb versei az alábbiak:<ref>{{cite web |author= |title=Lírája a nagykőrösi években |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/ajpalya3.htm |accessdate=2016-10-30 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[Letészem a lantot]]'' (1850): A mű fél évvel a szabadságharc leverése után íródott. A műfaja [[elégia]], és már a címe is beszédes, hiszen a költő tart a megtorlástól, és arra készül, hogy felhagy az írással. Két létállapotot állít szembe, egy értékben gazdag múltat és egy értékszegény világot, a jelent. A versszakok végén refrénként tér vissza a fájdalom: ''„Hová lettél, hová levél, Ó lelkem ifjúsága?”''{{refhely|Csáky Zsolt}}<ref>{{cite web |author= |title=Arany János: Letészem a lantot (verselemzés) |url=http://tananyag.net/irodalom/magyar-irodalom/arany-janos-leteszem-a-lantot-verselemzes |archiveurl=https://web.archive.org/web/20161108052236/http://tananyag.net/irodalom/magyar-irodalom/arany-janos-leteszem-a-lantot-verselemzes |archivedate=2016-11-08 |accessdate=2016-11-07 |publisher=tananyag.net |language=magyar}}</ref>
* ''[[Családi kör (költemény)|Családi kör]]'' (1851): Arany lirizált kisepikájának egyik legismertebb és méltán népszerű verse. A benne lévő bensőséges idill teljesen más, mint az ötvenes évek más ilyen jellegű lírai költeményeié. Olyan képi ábrázolást alkotott meg, amely a nép egyszerű fiának is eligazodást ad a nehéz időkre, és buzdít is egyben. Apaközpontú világával a ''Toldit'' idézi meg, és egyfajta hangulatos életképben ünnepi megvilágítást kap a család mindennapos együttléte, ahova a vendégként fogadott ''„béna harcfi”'' képében betör a történelmi valóság is.<ref>{{cite web |author= |title=Családi kör (1851) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyae.htm |accessdate=2016-10-30 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[Kertben]]'' (1851): [[Pesszimizmus|Pesszimista]] életszemléletű irásainak egyikke. A mű szavait idézve: ''„Közönyös a világ… az élet – Egy összezsúfolt táncterem, … Nagy részvétel, ha némelyikünk – Az ismerőst … megismeri.”'' A költeményben feltör a szabadságharc leverése miatt érzett elkeseredés, amelyet a költő iróniával fejez ki. A [[Világosi fegyverletétel|fegyverletétel]] után ugyan fejlődésnek indult a [[Kapitalizmus|tőkés rendszer]], de az elsősorban nem magyar érdekeket szolgált. A polgárosodástól a [[Magyarok|magyarság]] többsége csak hátrányokat szenvedett. Az [[Alexander Bach]] nevével fémjelzett korszak tönkretette a személyes kapcsolatokat, úrrá lett sokakon az [[elidegenedés]], hiszen ez a rendszer egyfajta gépnek tekintette az embereket. Ez a vers ennek a fásultságnak egyfajta bemutatása.{{refhely|Csáky Zsolt}}<ref>{{cite web |author= |title=Kertben (1851) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyaf.htm |accessdate=2016-11-08 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[Visszatekintés]]'' (1852): A versben megjelenik az illúziók köddé válása, a céltalanság, a kiüresedés, az [[idill]] elérhetetlen messzesége, és az is, hogy már a halál sem megoldás. Stílusában kevert hangnemű, egyszerre elégikus és ironikus, a puritán életvitelt kudarcként ábrázolja. A mű befejezésében a költő a ''„[[Hit (vallás)|Hit]] – [[Remény (érzelem)|Remény]] – [[Szeretet]]”'' hármasságnak a [[biedermeier]] almanach-költészet bibliai hagyományához nyúl vissza.{{refhely|Csáky Zsolt}}<ref>{{cite web |author= |title=Visszatekintés (1852) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyag.htm |accessdate=2016-11-08 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[A lejtőn]]'' (1852–57): Ez a költeménye is elégikus hangnemben íródott dalszerű vers. Két olyan irodalmi műre utalnak első és utolsó sorai, amelyek fontos szerepet töltöttek be a szerző élményvilágában. A vers kezdete [[Edgar Allan Poe]] ''[[A holló]]'' című híres költeményét idézi fel. A záró rész azokra a sorokra emlékeztet, amelyek a [[Hamlet, dán királyfi|''Hamlet''ben]] Ophelia halálának körülményeit mutatják meg.{{refhely|Csáky Zsolt}}<ref>{{cite web |author= |title=A lejtőn (1857) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyah.htm |accessdate=2016-11-08 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref><ref>{{cite web |author= |title=Arany János összes költeményei |url=https://mek.oszk.hu/00500/00597/html/index.htm |accessdate=2016-10-30 |publisher=mek.oszk.hu |language=magyar}}</ref>
=== Balladái ===
[[Fájl:Nagykőrös múzeum emléktábla.JPG|bélyegkép|jobbra|250px|2001-es emléktábla a nagykőrösi [[Arany János Közérdekű Muzeális Gyűjtemény|Arany János Múzeum]]<nowiki> falán]] A </nowiki>[[ballada]] (a [[Provanszál dialektus|provanszál]] ''balada, azaz „tánc”'' szóból eredeztetik) a szépirodalomban meghatározását tekintve az [[Epika|epikának]] egy [[Líra (műnem)|lírai]] jegyeket is mutató költői műfaja. [[Greguss Ágost]] szerint ''„tragédia dalban elbeszélve.”'' Arany elsősorban lírikus költő volt, de a gondolatibb líra felé vonzódott. A ''[[Toldi estéje]]'' és a balladái jó példák erre. 1853 után kezdett rendre balladákat írni, főleg nagykőrösi tanársága idején, és kétségtelenül ezek a legjobban szerkesztett költemények életművében. Végigkomponáltságuk egyedülálló, és ilyen típusú balladákkal a [[Magyar irodalom|magyar irodalomban]] majd [[Ady Endre|Ady Endrénél]] lehet megint találkozni.<ref name="A nagykőrösi évek balladái">{{cite web |title=A nagykőrösi évek balladái |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/ajpalya4.htm |accessdate=2016-11-18 |publisher=magyar-irodalom.elte.hu}}</ref>
Már 1847-ben is kísérletezett a balladával, de ezen verstípusait a nagykőrösi években emelte igazán magas színvonalra. Közel állt hozzá a történetet kihagyásokkal, párbeszédekkel dramatizáló ballada, amelyet a skót és a székely népköltészetből ismert meg. Nem úgy, mint a történetet lassabban adagoló [[Románc (irodalmi műfaj)|románcot]], melyet a latin népek (elsősorban spanyolok) költészetéből és még talán a németektől ismerhetett meg. Jól bizonyítható ez a Hunyadi-balladakör két megírt részének: az ''V. László''nak (1853) és a ''Mátyás anyjá''nak (1854) összehasonlításakor, mivel az előbbit lényegesen nagyobb igénnyel írta meg.{{refhely|Sőtér István IV. kötet||Csáky Zsolt|}}
Balladatípusai három szerkezeti megoldást tartalmaznak. Az elsőt egyszólamú, vonalszerűen előrehaladó balladának lehet nevezni. Ez áll legközelebb a románchoz, nevezik még népies balladának is. Ide tartoznak első balladakísérletei: ''A varró leányok'' (1847), ''Az egri lány'' (1853) és két nagy vers: ''Zách Klára'' (1855) és ''A walesi bárdok'' (1857).<ref name="A nagykőrösi évek balladái" /> Korai balladái közül a fontosabbak:
* ''[[Mátyás anyja]]'' (1854): A vers arról szól, hogy az aggódó [[Szilágyi Erzsébet (kormányzóné)|Szilágyi Erzsébet]] levélben próbál hírt kapni Prágában raboskodó fiáról. A műben [[Allegória|allegorikus]] a hírvivőként szerepel a holló, a [[Hunyadi-család]] címerállata.<ref>{{cite web |author= |title=Mátyás anyja |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/matyany.htm |accessdate=2016-11-18 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[Zách Klára (ballada)|Zách Klára]]'' (1855): A magyar történelem egyik leghírhedtebb merényletét [[Záh Felicián]] követte el, akinek családját különös kegyetlenséggel [[I. Károly magyar király|I. Károly Róbert]] parancsára kivégezték. Többek közt Zách lányát, Klárát is. Arany a tömbszerűen szaggatott történetmondással lelassítja az elbeszélést. A lépcsőzetes szerkezetet a bosszúálló királyné szavainak idézése zárja le, és az utolsó sorokban a magyar haza kilátástalan helyzetén kesereg a költő.<ref>{{cite web |author= |title=Zách Klára |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/zacs.htm |accessdate=2016-11-21 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[A walesi bárdok]]''. (1861 körül)<ref>Utóbbi ballada keletkezéséről a [[2000-es évek]] közepéig azt gondolták, hogy Ferenc József és [[Wittelsbach Erzsébet magyar királyné|Erzsébet királyné]] 1857-es magyarországi látogatása alkalmából készült. A 2000-es évek közepén viszont [[Milbacher Róbert]] rekonstruálta ''A walesi bárdok'' keletkezésének körülményeit, és ennek kapcsán arra a következtetésre jutott, hogy a balladát 1861 körül írhatta vagy legalábbis fejezhette be, részben [[Széchenyi István]] ''Ein Blick'' című pamfletjének hatására, részben pedig azért, mert megtudta, hogy egy másik költő, Tóth Endre ''Ötszáz gael dalnok'' címmel ugyancsak megírta a walesi bárdok történetét.</ref><ref name="Milbacher Róbert" /><ref>{{cite web |author= |title=A walesi bárdok kézirata |url=http://real-ms.mtak.hu/16/ |accessdate=2016-11-21 |publisher=MTA KIK |language=magyar}}</ref> Versformája az úgynevezett skót ballada. Több versében a bűn és bűnhődés gondolatát állította középpontba, és ezekhez tartozik a walesi bárdok is. A szakaszos tördeltség benyomását erősítő belső ismétlések itt is uralkodó szerepet játszanak, mind az elbeszélésben, mind a párbeszédben, sőt közöttük is. Történeti tények egyébként nem támasztják alá, amit Arany ebben a balladában megénekelt.<ref>{{cite web |author= |title=A walesi bárdok elemzése |url=http://tudasbazis.sulinet.hu/hu/e0803548-666b-7010-0020-6b726f6e696b_e0803601-6c70-8020-0000-6b726f6e696b |archiveurl=https://web.archive.org/web/20170105191352/http://tudasbazis.sulinet.hu/hu/e0803548-666b-7010-0020-6b726f6e696b_e0803601-6c70-8020-0000-6b726f6e696b |archivedate=2017-01-05 |accessdate=2016-11-21 |publisher=tudasbazis.sulinet.hu |language=magyar}}</ref>
A második csoportba sorolható balladáit történelminek lehet nevezni. Ezeknek a balladáknak távolibb a rokonsága a románccal. Történelmi balladái politikai célzatosságot hordoznak magukban. Az [[1850-es évek|1850-es években]] fel kellett rázni a [[Magyarok|nemzetet]] fásultságából, és Arany ebben nagy szerepet vállalt. Az ''V. László'' végszavaival – ''„De visszajő a rab…!”'' – vélhetően az osztrák császár börtöneiben raboskodó magyar hazafiak hozzátartozóiba próbált lelket önteni, a ''Zách Klára'' [[Julius Jacob von Haynau|Haynau táborszernagy]] kegyetlen bosszúját idézte fel, a ''Szondi két apródja'' és ''A walesi bárdok'' arra emlékeztetett, hogy a nemzetét szerető magyar költőnek nincs miért dicsőítenie [[I. Ferenc József magyar király|Ferenc Józsefet]]. Arany a nemzeti önrendelkezést akkor állította középpontba, amikor a magyar függetlenséget eltörölték, és történeti példázataival egyszerre tanított a megalkuvás elutasítására és a sorssal szembeszegülő kemény próbatételre is. Két jelentős verse sorolható egyértelműen ebbe a balladatípusba, az ''V. László'' és a ''Szondi két apródja'', de ide köthető még az [[Ágnes asszony]] (1853) és ''Az örök zsidó'' (1860) is:{{refhely|Sőtér István IV. kötet||Csáky Zsolt|}}
* ''[[V. László (ballada)|V. László]]'' (1853): Történelmi tárgyú, Nagykőrösön írt ballada. A Hunyadi-balladakör elsőként megírt része. Több szálon fut a történet , melynek írásmódja töredékes mondatszerkesztésű. A költemény tördeltsége fokozódik attól kezdve, hogy a [[Fogoly (személy)|foglyok]] megszöknek, a király pedig elmenekül [[Prága|Prágába]]. A bűn és bűnhődés motívum kiváló példája, amikor a menekülő király hűsítőt kér hű szolgájától, aki e szavakkal adja át neki a kelyhet: ''„Itt a kehely, igyál, Uram, László király, Enyhít… mikép a sír!”''<ref>{{cite web |title=Arany János – V. László (1853) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyaj.htm |accessdate=2016-11-25 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[Szondi két apródja]]'' (1856): Történelmi ballada, melyben vezérmotívum a kétszólamúság. A történet alapja [[Drégely vára|Drégely várának]] 1552-es török ostroma. Az apródok a múltat idézik fel, míg Ali szolgája a jelent. A költemény arra keres válaszokat, hogy a bátor és hős várvédők tragikus bukásából milyen erkölcsi tanulságokat lehet levonni.<ref>{{cite web |title=Arany balladái – Szondi két apródja |url=http://tudasbazis.sulinet.hu/hu/magyar-nyelv-es-irodalom/irodalom/irodalom-8-osztaly/arany-balladai/szondi-ket-aprodja |accessdate=2016-11-25 |publisher=tudasbazis.sulinet.hu |language=magyar}}</ref>
* ''[[Ágnes asszony]]'' (1853): Nagykőrösön írt balladáinak egyike, műfaját tekintve keretes szerkezetű ballada. Az erősen lirizált versnek a megalkotásakor az egyén sorsának egyetemes kérdései foglalkoztatták a költőt. Arany e művében a [[Bűn|bűnt]] teszi kérdésessé, a mű témája a lelkiismereti konfliktus. A férjgyilkost bírái szabadon engedik, mert elmebajos.<ref>{{cite web |title=Arany János – Ágnes asszony (1853) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyal.htm |accessdate=2016-11-25 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[Az örök zsidó]]'' (1860): A legjelentősebb alkotói korszakát lezáró nagy verse. Műfaját tekintve elégikus líra és tragikus ballada ötvözete. Az örök zsidó (ismertebb nevén [[a bolygó zsidó]]) legendájáról szóló történet [[Párizsi Máté]] angol szerzetes 13. századi krónikájából ismert.<ref>Karthaphilos, [[Quintus Pontius Pilatus|Pilátus]] ajtónállója a halálra ítélt [[Jézus|Krisztust]] a palotából kiléptekor megütötte, és ezt mondta: ''Menj már, miért késlekedsz.'' Krisztus így felelt neki: ''Én megyek, de te várj, míg visszatérek.'' Forrás: Csáky Zsolt: ''Az önkényuralomtól a kiegyezésig. Arany János (1817–1882)''.</ref> Ez a történet másokat, például [[Vörösmarty Mihály|Vörösmartyt]] is foglalkoztatta, de erről írt költeménye töredékben maradt csak fenn. Arany új verstípust alakított ki ebben a művében, ami csak a 19. század közepén jelent meg az európai költészetben. Az örök zsidó reménye szerint egyszer talán megáll a végtelen rohanás.<ref>A költemény művészi hatása összefügg azzal, hogy Arany kínzó kérdésként fogalmazza meg és egyetemes jelképbe kivetítve tárgyiasítja a belső feszültségét, ami döntő szerepet játszott élményvilágában.</ref><ref>{{cite web |title=Arany János – Az örök zsidó (1860) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyam.htm |accessdate=2016-11-25 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
Harmadik típusú, ''nagyvárosi'' balladái a késői korszakának „[[Őszikék]]”-balladái. E korszakban előtérbe kerültek misztikus [[Babona|babonás]] motívumok, felerősödött költészetében az [[Erkölcs|erkölcsi]] szigor, és megjelent a [[Város|nagyváros-ellenesség]]. Ezekben az 1877-ben keletkezett balladákban kevesebbnek tűnik a drámai rész, és a párbeszédeket magánbeszédekkel helyettesíti a költő. Erre a korszakra az is jellemző, hogy pár hónap alatt több költeményt ír, mint előtte hosszú évek során.<ref>{{cite web |title=Arany János – Az Őszikék balladái |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/ajpalya8.htm |accessdate=2016-11-25 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref> Az Őszikék korszak fontosabb balladái: [[Fájl:Gyárfás, Jenő - The Ordeal of the Bier (1881).jpg|250px|bélyegkép|jobbra|[[Gyárfás Jenő]]: ''Tetemrehívás''<nowiki> (1883)]]</nowiki>
* ''[[Tetemre hívás]]'': Késői korszakának egyik legnépszerűbb és talán legtöbbet vitatott balladája. A [[Középkor|középkori]] kis faluban játszódó történetben egy apa keresi késsel megölt fia gyilkosát úgy, hogy segítségül hívja az [[Istenítélet|istenítéletet]]. Az olvasót magával ragadja a sajátos ritmika és a [[Misztika|misztikus]] történet. A hatás nem maradt el, hiszen [[Gyárfás Jenő|Gyárfás Jenőt]] oly módon megihlette, hogy megfestette a ''Tetemrehívást''. A képére nézve és Arany sorait olvasva ''„...döbbenet által a szív ere fagy...”'', ki lehet jelenteni, hogy tapintható a drámai feszültség. A [[Hiedelemmonda|néphit]] szerint ugyanis a halott sebe gyilkosának jelenlétében újra vérezni kezd.<ref>{{cite web |title=Tetemre hívás |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/tetemre.htm |accessdate=2016-12-02 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref><ref>{{cite web |title=Arany és XIX. századi történeti festészetünk |url=https://mek.oszk.hu/00500/00596/html/festeszet/festeszet.html |accessdate=2016-12-02 |publisher=mek.oszk.hu |language=magyar}}</ref> A műből 1909-ben zenekölteményt írt [[Würtzler Béla (hegedűs)|Würtzler Béla]].<ref>{{cite web |author=HarpPost |date=2023-01-12 |title=Adalékok id. Würtzler Béla életútjához |url=https://harppost.blogspot.com/2023/01/adalekok-id-wurtzler-bela-eletutjahoz.html |accessdate=2023-01-22}}</ref>
* ''[[Tengerihántás]]'': A műben két elbeszélő szerepel. Egyikük csak a keretnek tekinthető első és utolsó versszakban szólal meg. A kereten belüli történet folyamán az ellenszólam egyaránt olvasható a keretként szolgáló helyzet betű szerinti leírásának és a kereten belüli történet metaforikus értelmezésének: ''„Dalos Eszti a mezőre kiment ő, / Aratókkal puha fűvön pihent ő; / De ha álom ért reájok, / Odahagyta kis tanyájok. / – Töri a vadkan az „irtást” – / Ne tegyétek, ti leányok!”'' Még az utolsó előtti versszak sem kivétel: a jelen betű szerinti leírása itt is a múlt metaforája.<ref>{{cite web |title=Arany János – Tengeri-hántás (1877) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyav.htm |accessdate=2016-11-25 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[Híd-avatás]]'': Egy évvel a [[Margit híd]] zászlódíszes avatása után írta, amely időközben az [[Öngyilkosság|öngyilkosságra]] készülő emberek egyik lehetséges helyszínévé vált. Áll az új híd, és sorban emberek érkeznek hozzá. Éjszaka és csend van, azonban egyszerre tömeg gyűlik a hídhoz mindenféle kor- és [[Társadalmi osztály|társadalmi osztályb]]ól, és mintegy önmagukból kikelve, bűvölet alatt, avatásként a mélybe vetik magukat. Valójában ők a modern nagyváros elesettjei, a [[pénz]] világának áldozatai. Felbukkanni látszik az a régi, [[Középkor|középkori]] babona is, amely szerint az elmúlás előtt a [[halál]] egy [[Haláltánc (műfaj)|utolsó táncra]] viszi a haldoklót. Az egész abszurd helyzet egyfajta tánc könnyedségével zajlik a költeményben.<ref>{{cite web |title=Arany János – Híd-avatás |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/hid.htm |accessdate=2016-11-25 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[Vörös Rébék (vers)|Vörös Rébék]]'': A késői balladái közül talán ez a legeredetibb. Egy népmondai töredék alapján íródott, mely a vers első két sorában idézetként szerepel. A [[Kormos varjú|varjú]] és a [[boszorkány]] azonosítása népi hiedelmen alapul. A cím egy asszonyra, [[Rebeka|Rebekára]] utalhat, akinek vörös haja van. Ez a ballada a paraszti életet és a misztikumot idézi, és egy sajátságos kapcsolatra mutat rá.<ref>{{cite web |title=Arany János – Vörös Rébék |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/vorosr.htm |accessdate=2016-11-25 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[A kép-mutogató]]'': A vásári [[Képmutogatás|képmutogatásr]]ól szól a költemény, mely Arany János utolsó balladája. A történet két fontos szereplő és két polaritás köré szerveződik. Az egyik ilyen szövegalkotó tényező [[Petőfi Sándor]], a másik pedig vélhetően [[Széchenyi István]].<ref>{{cite web |author=Sárkány János |title=Adalékok Arany utolsó balladájához |url=https://hu.wikibooks.org/wiki/S%C3%A1rk%C3%A1ny_J%C3%A1nos:Adal%C3%A9kok_Arany_utols%C3%B3_ballad%C3%A1j%C3%A1hoz |archiveurl=https://web.archive.org/web/20161126131542/https://hu.wikibooks.org/wiki/S%C3%A1rk%C3%A1ny_J%C3%A1nos:Adal%C3%A9kok_Arany_utols%C3%B3_ballad%C3%A1j%C3%A1hoz |archivedate=2016-11-26 |accessdate=2016-11-26 |publisher=wikibooks.org |language=magyar}}</ref>
== Arany és a zene ==
{{Sticky header}}
{| class="wikitable sortable sticky-header" align="right" style="margin-left: 20pt"
|+17 dal a 19-ből
!Cím
!Szövegíró
|-
|A hegedű száraz fája{{jegyzet*|Zeneszerzők: Tóth János István, valamint Vásárhelyi Zoltán}}
|Arany János
|-
|A tudós macskája{{jegyzet*|ISWC: T-007.202.109-0, zeneszerző: Radványi Balázs}}
|Arany János
|-
|Igyunk biz azt egy-egy kicsit{{jegyzet*|ISWC: T-007.204.560-3, zeneszerző: Tóth János István}}
|Arany János
|-
|Zách Klára
|Arany János
|-
|A toronyban delet harangoznak
|[[Petőfi Sándor]]
|-
|A tintás üveg
|[[Petőfi Sándor]]
|-
|Csokonai
|[[Petőfi Sándor]]
|-
|Éji dal
|[[Petőfi Sándor]]
|-
|[[A szép fényes katonának]]
|[[Amade László]]
|-
|Bú kél velem
|[[Kölcsey Ferenc]]
|-
|Esteledik, szól a gulya kolompja
|[[Bartalus István]]
|-
|Zöld erdőben, zöld mezőben sétál
|ismeretlen
|-
|[[Erdő mellett estvéledtem]]
|ismeretlen
|-
|Szép jóestét
|ismeretlen
|-
|Túl a hegyen
|ismeretlen
|-
|Én ültettem a cédrusfát
|ismeretlen
|-
|Elveszett a tarka tyúkom
|ismeretlen
|}
Arany János már gyermekkorában [[Gitár|gitározott]] és [[Zongora|zongorázott]]. Saját elmondása szerint, amikor Debrecenben felcsapott színésznek, szép, csengő hangja volt. Értett a [[Kottaírás|kottaíráshoz]] is, de nem tudni, kitől tanulta. Életének utolsó éveiben, az 1870-es évek elején névnapjára gitárt kapott ajándékba a barátaitól. Emlékezetből leírta ifjúkorának mindegy 150 kedvelt dalát. Gitározás közben [[Petőfi Sándor]], [[Kölcsey Ferenc]], [[Amade László]] és a saját verseire született, kíséret nélküli melódiákat papírra vetett, és azzal adta át [[Bartalus István]] barátjának, hogy csak halála után hozhatja nyilvánosságra. Bartalus 1883. január 31-én a [[Kisfaludy Társaság]] ülésén jelentette be az Arany hagyatékából maradt dalokat, és [[Láng Fülöp]] operaénekes előadásában, Bartalus zongorakíséretében tízet elő is adott közülük.{{refhely|Leszler János}}<ref name="Lakatos Vince">{{cite journal |author=Lakatos Vince |year=1919 |title=Arany János mint zeneszerző |url=http://epa.oszk.hu/02500/02518/00042/pdf/EPA02518_irodalomtortenet_1919_01-02_040-043.pdf |format=pdf |language=magyar |issue=Irodalomtörténet |pages=40–43. p. |accessdate=2016-06-30}}</ref>
[[Jakab István (drámaíró)|Jakab István]] zenésítette meg a ''Nemzetőr-dal'' (1848) című versét, mely [[Népdal|népdall]]á vált.<ref name="Nemzetőrdalok" /> Arany Jánosnak az 1874–82 közötti évekből 19 saját dala maradt fenn, ezek közül tíz megjelent nyomtatásban 1883-ban Bartalus István zongorakíséretével. Arany néhány dalszöveget is írt. 1849-ben [[Festetics Leó]] zenéjére írta a [[Kondorosi csárda mellett]] című versét. 1856. április 17-én küldte el <cite>Hej iharfa, juharfa</cite> című versét [[Simonffy Kálmán]] zeneszerzőnek. Ugyancsak 1856-ban írta <cite>Volt nekem egy rigószőrű paripám</cite> kezdetű versét, melyet [[Egressi Samu]] zenésített meg.{{refhely|Leszler János}}<ref name="Lakatos Vince" />
''Pázmán lovag'' című vígballadájának témája [[Johann Strauss (zeneszerző, 1825–1899)|ifj. Johann Strauss]] egyedüli operájának{{wd|Q2632179}} volt témája, [[Dóczy Lajos]] átírásában.<ref name="A nagykőrösi évek balladái" />
== Művei ==
* [https://mek.oszk.hu/00500/00597/html/ Arany János Összes verse]
* [https://mek.oszk.hu/00500/00596/html/ Őszikék] Elektronikus kiállítás a Magyar Elektronikus Könyvtárban
* [http://www.gutenberg.org/ebooks/author/41307 Művei a Project Gutenbergen]
* [https://web.archive.org/web/20080516113521/http://www.akonyv.hu/klasszikus.htm Arany János művei a Mercator Stúdió Elektronikus Könyvkiadónál]
* [http://tudastar.googlepages.com/arany Arany versek neves előadóktól (online hallgatható)] {{Wayback|url=http://tudastar.googlepages.com/arany|date=20070430200326}}
* [http://www.babelmatrix.org/index.php?page=authorPage&auth_id=118 Arany János versei műfordításokban] Bábel Web Antológia
* [http://real-eod.mtak.hu/3578/ Arany János prózai dolgozatai] MTA
* [http://real-ms.mtak.hu/18072/ Kapcsos könyv] (kézirat)
* [http://real-eod.mtak.hu/view/series/Arany_J=E1nos_=F6sszes_m==0171vei.html Arany János összes művei], Akadémiai Kiadó
== Műfordításai ==
Kezdetben latin, görög és német nyelvű munkákból fordított, de ahogy haladt előre az angol nyelvben, úgy ért oda élete legjelentősebb fordításaihoz. Műfordításainak eredménye, hogy nevéhez köthető a magyar műfordítás-irodalom fellendítése. 1860-ban lett a Kisfaludy Társaság igazgatója, és az ő irányításával alakult meg a társaság [[Magyar Shakespeare Bizottság|Shakespeare-bizottsága]]. Ez indította meg a legnagyobb arányú magyar műfordítási vállalkozást, a teljes Shakespeare-kiadást. Tizenkilenc kötetben, 1864 és 1879 között jelentek meg a sorozat részei, melynek kiadási költségeit [[Tomori Anasztáz]] vállalta magára. Arany a már régebben megkezdett [[János király|''János királly''al]] és a ''[[Szentivánéji álom]]''mal szerepelt, illetve a sorozathoz készítette el a klasszikussá vált [[Hamlet, dán királyfi|''Hamlet''-fordítását]].<ref>{{cite book |author=Sőtér István |url=https://mek.oszk.hu/02200/02228/html/04/315.html |title=A magyar irodalom története – 52. A MŰFORDÍTÁS-IRODALOM |publisher=Akadémiai Kiadó, |year=1965 |isbn=963 05 1643 5 |language=magyar |accessdate=2016-11-26 |city=Budapest}}</ref>
Jelentősebb műfordításai:
=== Versek ===
* ''Sir Patrick Spens'' (skót ballada); kínai népballadák (angolból)
* néhány vers, ballada, epigramma [[Quintus Horatius Flaccus|Horatiustól]], [[Ludwig August Frankl von Hochwart|Ludwig August Frankltól]], [[Robert Burns (költő)|Robert Burnstől]], [[Johann Wolfgang von Goethe|Goethétől]], [[George Byron|Byrontól]] (Az új görög dalnok – a ''Don Juan'' című elbeszélő költemény részlete), [[Thomas Moore (költő)|Thomas Moore-tól]].
=== Színművek ===
* [http://real-eod.mtak.hu/4213/ Arisztophanész vígjátékai]
* [[William Shakespeare|Shakespeare]]
** ''[[Hamlet, dán királyfi]]''<ref>A ''[[Hamlet, dán királyfi]]'' Arany János kedvenc olvasmányai közé tartozott, és nem véletlen, hogy az ő remek fordításában vált a magyar irodalom szerves részévé. Arany fordítása után sokáig csak jelentéktelen fordítások születtek: Zigány Árpád (1899, prózafordítás), Telekes Béla (1904), Szabó T. Attila (1929, prózafordítás).</ref>
** ''[[János király]]''
** ''[[Szentivánéji álom]]''
{{wikiforrás|Kategória:Arany János fordításai}}
=== Prózafordítások ===
* [[Nyikolaj Vasziljevics Gogol|Nyikolaj Gogol]]: ''A köpönyeg'' (német nyelvű kiadás alapján)
== Egyesületi, testületi tagságai ==
* A Magyar Tudományos Akadémia tiszteletbeli főtitkára, igazgatója és rendes tagja
* A Kisfaludy Társaság igazgatója és rendes tagja
* A Concordia budapesti jótékonysági egylet tiszteletbeli tagja
* A bölcsészhallgatókat segítő egyesület bizottságának tiszteletbeli tagja
== Emlékezete ==
{{Képdia|Kép:Arany János sírja.jpg|Arany János és [[Arany László (költő)|Arany László]] síremléke [[Budapest]]en. [[Fiumei úti sírkert|Kerepesi temető]]: 14-sziget. [[Strobl Alajos]] szobrászművész és [[Kallina Mór]] építész alkotása. Kivitelezők: [[Kauser József|Kauser-cég]], [[Strozzi]]-cég<ref group="m">A temető egész területe az állami tulajdonú védett síremlékekkel együtt műemlék.</ref>|Kép:Ref. kollégium (5236. számú műemlék) 3.jpg|A [[Debreceni Református Kollégium]] bejárata|Kép:Arany János plaque (Nagykőrös Hősök tere 6).jpg|Arany János mellszobra (Debrecen, Hajó utca, [[Juha Richárd]] alkotása)|Kép:Arany János emléktáblája V kerület Arany János utca 1.JPG|[[Budapest V. kerülete|Budapest V. kerület]] Arany János utca 1. szám alatti emléktábla|Kép:Arany János mellszobor, Szeged UNJ.jpg|Arany János portrészobra Szegeden|Kép:Slač - kúpele, pamätná tabuľa.JPG|Arany János és [[Madách Imre (író)|Madách Imre]] emléktáblája [[Szliácsfürdő]]n|Kép:Arany János tűzfalportré.jpg|Portréja a XII. kerület, Alkotás - Márvány utca sarkán egy ház tűzfalán|Fájl:Arany János-emlékpad.gif|Arany János-emlékpad, ''Toldi estéje''<br />([[Göd|Alsógöd]], [[Városvédők Egyesülete]])|cím=Arany János emlékezete}} {{idézet2|''A nyelv a nép nyelve, de stilizált népnyelv. Mintegy a népnyelv quinta essentiája, oly tömény oldat, hogy maga a nép már nem is értheti meg. Arany jegyzetekkel magyarázza kifejezéseit, talán érzi, hogy Buda halála nemsokára a magyar irodalom legnehezebb olvasmányai közé fog tartozni. Nyelvészkedő szorgalmának gyümölcse ez a nyelv, melyet csillagmérföldek választanak el Petőfi közvetlenségétől. Aki a hunokról ír, nem is beszélhet a XIX. század változandó nyelvén; aki az örök magyar sorsot akarja kifejezni, annak az örök magyar nyelvet, a lényegnyelvet kell megteremtenie.''|[[Szerb Antal]]: ''Arany János''}} Műveinek teljes gyűjteményét a költő halála után csakhamar kiadta régi kiadója, [[Ráth Mór]]; összes munkáit nyolc kötetben [[1884]]–1885-ben, hátrahagyott iratait és levelezését pedig fia, [[Arany László (költő)|Arany László]] szerkesztésében és jegyzeteivel, négy kötetben 1887 és 1889 között. 1895 és 1898 között jelentek meg négy kötetben a [[Zichy Mihály]] által illusztrált Arany-balladák. Ezt a sorozatot hasonmás kiadásban a 2017-es [[Arany János-emlékév]] nyitányára ismét kiadták.<ref>[[c:Category:Illustrations to János Arany's ballads by Mihály Zichy|''Arany János Balladái Zichy Mihály rajzaival'' a Wikimédia Commonson]]</ref><ref>{{cite web |date=2016-11-25 |title=Hasonmás kiadásban jelentek meg Arany János Zichy Mihály által illusztrált balladái |url=http://mta.hu/sajtoszemle/hasonmas-kiadasban-jelentek-meg-arany-janos-zichy-mihaly-altal-illusztralt-balladai-107140 |accessdate=2016-12-02 |publisher=mta.hu |language=magyar}}</ref>
[[Arany János-szobor (Budapest)|Arany János bronzszobrát]] a költő műveiből vett alakokkal (Toldi, Rozgonyi Piroska) [[Strobl Alajos]] mintázta, a [[Magyar Nemzeti Múzeum]] előtt állították fel, és [[1893]] tavaszán leplezték le. Tiszteletére portrészobrot avattak a [[Szeged|szegedi]] Nemzeti Emlékcsarnokban, a Dóm tér keleti oldalán. (A szobor szintén Strobl alkotása.) Szintén szobrot állított tiszteletére szülővárosa, [[Nagyszalonta]] is, és itt található a helyiek által Csonkatoronynak nevezett [[Arany János Emlékmúzeum]].<ref name="partiumimuzeumok">{{cite web |date= |title=Nagyszalonta Arany János Emlékmúzeum |url=http://partiumimuzeumok.ro/nagyszalonta/index.html |archiveurl=https://web.archive.org/web/20160425183234/http://partiumimuzeumok.ro/nagyszalonta/index.html |archivedate=2016-04-25 |accessdate=2016-10-29 |publisher=partiumimuzeumok.ro |language=magyar-román-angol}}</ref>
Szalontai szülőháza nem maradt meg, de a helyére a város önkormányzata építtetett egy tájjellegű épületet. A benne kialakított, néprajzi jellegű helytörténeti kiállítást 2010 júniusában adták át.<ref name="partiumimuzeumok" /> [[Arany János emlékezete Erdélyben|Erdélyben emlékezete]] külön figyelmet kap, és évfordulós megemlékezéseket, ünnepi eseményeket és koszorúzásokat szerveznek.<ref>{{RMIL|1||a.htm#AranyJánosemlékezete}} [Arany János emlékezete]</ref><ref>{{cite web |date=2015-10-26 |title=Arany János emlékezete Nagyszalontán |url=http://www.reggeliujsag.ro/arany-janos-emlekezete-nagyszalontan/ |archiveurl=https://web.archive.org/web/20161029235500/http://www.reggeliujsag.ro/arany-janos-emlekezete-nagyszalontan/ |archivedate=2016-10-29 |accessdate=2016-10-29 |publisher=reggeliujsag.ro |language=magyar}}</ref> 1903–1948 között Temesváron működött az [[Arany János Társaság]], mely a költő emlékének ápolását és az irodalom- és a nyelvművelést tűzte ki célul.<ref>{{cite journal |author=Pomogáts Béla |title=Temesvár a magyar irodalomban |url=http://www.forrasfolyoirat.hu/1604/pomogats.pdf |format=pdf |language=magyar |issue=Forrásfolyóirat |pages=52-60 old. |authorlink=Pomogáts Béla |accessdate=2016-05-05 |archiveurl=https://web.archive.org/web/20161101164400/http://www.forrasfolyoirat.hu/1604/pomogats.pdf |archivedate=2016-11-01}}</ref> 1955-ben Nagyszalontán az anyanyelvi kultúra ápolására és a magyar irodalom terjesztésére alakult meg az [[Arany János Irodalmi Kör (Nagyszalonta)|Arany János Irodalmi Kör]].<ref>{{RMIL|1||a.htm#AranyJánosIrodalmiKör}} [Arany János Irodalmi Kör]</ref> [[Kép:Budapest-margitsziget-arany-1.jpg|bélyegkép|Arany János mellszobra a [[Margit-sziget|Margit-szigeti]] tölgyek alatt<ref>[https://www.nevezetesfak.hu/magyar/oldalak/arany_janos_tolgyei/ Arany János tölgyei] {{Wayback|url=https://www.nevezetesfak.hu/magyar/oldalak/arany_janos_tolgyei/|date=20190807110557}}, nevezetesfak.hu</ref><ref>[https://gallery.hungaricana.hu/hu/BudapestGyujtemeny/11465/?img=0 A margitszigeti Arany János-szobor], gallery.hungaricana.hu</ref><nowiki>]] </nowiki>[[Nagykőrös]]ön nevét viseli az Arany János Református Gimnázium, Szakközépiskola és Kollégium,<ref>{{cite web |title=Az Arany János Református Gimnázium, Szakközépiskola és Kollégium weboldala |url=http://www.ajrg.hu/ |archiveurl=https://web.archive.org/web/20190930165816/http://www.ajrg.hu/ |archivedate=2019-09-30 |accessdate=2016-10-29 |publisher=ajrg.hu |language=magyar}}</ref> az [[Arany János Közérdekű Muzeális Gyűjtemény]],<ref>{{cite web |title=Az Arany János Közérdekű Muzeális Gyűjtemény weboldala |url=http://www.korosikultura.hu/ |accessdate=2016-12-19 |publisher=korosikultura.hu |language=magyar}}</ref> és a városban működik az irodalmi, tudományos és művészi tevékenységgel foglalkozó Arany János Társaság.<ref>{{cite web |title=Arany János Társaság honlapja |url=http://aranytarsasag.ajrg.hu/ |archiveurl=https://web.archive.org/web/20161029174627/http://aranytarsasag.ajrg.hu/ |archivedate=2016-10-29 |accessdate=2016-10-29 |publisher=aranytarsasag.ajrg.hu |language=magyar}}</ref> A magyarországi települések többségében lehet találni róla elnevezett utcát, teret – például [[Arany János utca metróállomás]], [[Arany János tér (Debrecen)]].
* Magyarország több pontján [[iskola]] viseli a nevét (például: [[Budapest|Budapesten]],<ref>{{cite web |title=Sashegyi Arany János Általános Iskola és Gimnázium |url=https://ajgm.mozanaplo.hu/portal |accessdate=2016-06-30 |publisher=ajgm.mozanaplo.hu |language=magyar}}</ref> [[Szeged|Szegeden]],<ref>{{cite web |title=Szegedi Arany János Általános Iskola |url=https://arany-szeged.mozanaplo.hu/portal |accessdate=2016-06-30 |publisher=arany-szeged.mozanaplo.hu |language=magyar}}</ref> [[Bonyhád|Bonyhádon]],<ref>{{cite web |title=Arany János Gimnáziumi Intézményegység |url=http://aranyjanosiskola.hu/ |archiveurl=https://web.archive.org/web/20160828062332/http://aranyjanosiskola.hu/ |archivedate=2016-08-28 |accessdate=2016-06-30 |publisher=aranyjanosiskola.hu |language=magyar}}</ref> [[Nyíregyháza|Nyíregyházán]],<ref>{{cite web |title=Nyíregyházi Arany János Gimnázium, Általános Iskola és Kollégium |url=http://nyharany.hu/wp/ |accessdate=2016-06-30 |publisher=nyharany.hu |language=magyar}}</ref> [[Dunaújvárosi Arany János Általános Iskola|Dunaújvárosban]]),<ref>{{cite web |title=Dunaújvárosi Arany János Általános Iskola |url=https://www.oktatas.hu/hivatali_ugyek/kir_intezmenykereso/!Intezmenykereso/Intezmeny/Index/030037 |archiveurl=https://web.archive.org/web/20180122235115/https://www.oktatas.hu/hivatali_ugyek/kir_intezmenykereso/!Intezmenykereso/Intezmeny/Index/030037 |archivedate=2018-01-22 |accessdate=2016-12-19 |publisher=oktatas.hu |language=magyar}}</ref> Gyöngyösön ([[Arany János Általános Iskola (Gyöngyös)|Arany János Általános Iskola]]), Százhalombattán ([[Arany János Általános Iskola és Gimnázium (Százhalombatta)|Arany János Általános Iskola és Gimnázium]]), továbbá a környező országokban is (például: Arany János Líceum, [[Nagyszalonta]],<ref>{{cite web |title=Arany János Líceum |url=http://www.gsaranyjanos.ro/ |archiveurl=https://web.archive.org/web/20170622082509/http://www.gsaranyjanos.ro/ |archivedate=2017-06-22 |accessdate=2016-11-08 |publisher=gsaranyjanos.ro |language=magyar-román}}</ref> Arany János Alapiskola, [[Ekecs]],<ref>{{cite web |title=Arany János Alapiskola |url=http://www.suli.sk/organization.php?organization=98§ion=ais |accessdate=2016-11-08 |publisher=suli.sk |language=magyar-román}}</ref> Arany János Általános Iskola, [[Oromhegyes]],<ref>{{cite web |title=Arany János Általános Iskola |url=http://www.aranyjanos.edu.rs/ez-egy-minta-oldal/ |accessdate=2016-11-08 |publisher=aranyjanos.edu.rs |language=magyar-szerb}}</ref>) de még a tengerentúlon is, [[Kanada]] [[Hamilton (Ontario)|Hamilton]] városában<ref>{{cite web |title=Arany Janos Magyar Iskola / Hungarian School |url=http://www.hun-suli.itgo.com/index.html |accessdate=2016-06-30 |publisher=hun-suli.itgo.com |language=angol}}</ref> és az Amerikai Egyesült Államokban, [[New York|New Yorkban]].<ref>{{cite web |title=Arany János Magyar Iskola |url=http://www.aranyjanosiskola.org/ |archiveurl=https://web.archive.org/web/20160516232651/http://www.aranyjanosiskola.org/ |archivedate=2016-05-16 |accessdate=2016-06-30 |publisher=aranyjanosiskola.org |language=magyar}}</ref>
* 1985–1994 között működött Arany János Színház néven a Budapesti Gyermekszínház társulata a Paulay Ede u. 35. sz. alatti épületben.<ref>{{cite web |title=Arany János Színház |url=https://mek.oszk.hu/02100/02139/html/sz01/193.html |accessdate=2016-06-30 |publisher=MAGYAR SZÍNHÁZMŰVÉSZETI LEXIKON |language=magyar}}</ref><ref>{{cite web |title=Parisiana-tól az Új Színházig |url=http://www.ujszinhaz.hu/page25.php |archiveurl=https://web.archive.org/web/20160808083433/http://ujszinhaz.hu/page25.php |archivedate=2016-08-08 |accessdate=2016-06-30 |publisher=ujszinhaz.hu |language=magyar}}</ref>
* [[Kisbolygó|Kisbolygót]] neveztek el róla: a [[89973 Aranyjános|89973 Aranyjánost]]. Az apró, 1–2 km átmérőjű, 3,29 éves keringési idejű égitestet, melyet 2002. szeptember 8-án fedezett fel [[Sárneczky Krisztián]].<ref>{{cite web |title=Aranyról, Jókairól és Ganzról neveztek el kisbolygókat |url=http://hvg.hu/tudomany/20100122_arany_janos_jokai_mor_tittel_kisbolygo |accessdate=2016-06-30 |publisher=hvg.hu |language=magyar}}</ref>
* Számos későbbi klasszikus költő elevenítette fel versében Arany János alakját vagy stílusát, a legismertebb [[Weöres Sándor|Weöres Sándort]]ól a ''Negyedik Szimfónia''<ref>{{cite journal |author=Margócsy István |year=2010 |title=Weöres Sándor: Negyedik szimfónia – Értelmezési kísérlet |url=http://ketezer.hu/2010/12/margocsy-istvan-weores-sandor-negyedik-szimfonia-ertelmezesi-kiserlet/ |language=magyar |issue=2000 Irodalmi és társadalmi havi lap Lapszám: 12 |accessdate=2016-06-30}}</ref> és [[Babits Mihály|Babits Mihályt]]ól az ''Arany Jánoshoz''.<ref>{{cite web |author=Babits Mihály |authorlink=Babits Mihály |title=Változatok egy gyerekdalra |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/babitsaj.htm |accessdate=2016-06-30 |publisher=sulinet |language=magyar}}</ref> Paródiák is születtek: [[Varró Dániel|Varró Dánielt]]ől a ''Változatok egy gyermekdalra'' Arany János-i változata,<ref>{{cite web |author=Varró Dániel |title=Változatok egy gyerekdalra |url=http://dokk.hu/versek/olvas.php?id=235 |accessdate=2016-06-30 |publisher=dokk.hu |language=magyar}}</ref> a Lőwy Árpád néven alkotó [[Réthy László|Réthy Lászlónak]] tulajdonított trágár átdolgozás<ref>{{cite web |title=Toldi trágár átírása |url=http://dtp.atomki.hu/~ecsedi/Lowy/Toldi.html |archiveurl=https://web.archive.org/web/20160325152539/http://dtp.atomki.hu/~ecsedi/Lowy/Toldi.html |archivedate=2016-03-25 |accessdate=2016-06-30 |publisher=atomki.hu |language=magyar}}</ref> és [[Kőrizs Imre|Kőrizs Imrétől]] a ''Toldi éjszakája''.<ref>{{cite web |title=Kőrizs Imre: TOLDI ÉJSZAKÁJA |url=http://www.holmi.org/2007/11/korizs-imre-puzzle |accessdate=2016-06-30 |publisher=HOLMI online kiadás |language=magyar}}</ref>
* [[2001]]-ben a [[Magyar Nemzeti Bank]] [[Emlékérme|emlékpénzérme]]-sorozatot jelentetett meg [[Szlávics László (szobrász, 1959)|ifj. Szlávics László]] tervei alapján, ''[[A magyar ifjúsági irodalom alakjai (emlékérmesor)|A magyar ifjúsági irodalom alakjai]]'' címmel. A 200 forintos címlettel készült emlékérmék egyikén Arany János ''[[Toldi]]'' című művének illusztrációja látható.<ref>{{cite web |title=A magyar ifjúsági irodalom sorozatban Arany János:Toldi emlékérem |url=http://penzvero.hu/termekek/termekcsomagok/ifjusagi-irodalom-csomag-bu.html# |archiveurl=https://web.archive.org/web/20160821201002/http://penzvero.hu/termekek/termekcsomagok/ifjusagi-irodalom-csomag-bu.html |archivedate=2016-08-21 |accessdate=2016-06-23 |publisher=penzvero.hu |language=magyar}}</ref>
* Az 5000 fő alatti kistelepülésen, tanyán élő, tehetséges és szociálisan rászoruló gyermekek támogatására hozták létre a nevét viselő Arany János Tehetséggondozó Programot.<ref>{{cite web |title=Arany János Tehetséggondozó Program honlapja |url=http://www.ajtp.hu/start |archiveurl=https://web.archive.org/web/20160915171745/http://www.ajtp.hu/start |archivedate=2016-09-15 |accessdate=2016-09-29 |publisher=ajtp.hu |language=magyar}}</ref>
* A [[Magyar Tudományos Akadémia]] külföldi magyar tudósok jutalmazására hívta életre az [[Arany János-díj a tudományos kutatásért]] kitüntetést és az [[Arany János-érem|Arany János-érmet]].<ref>{{cite web |title=Arany János-díj és -érem 2012 |url=http://old.mta.hu/data/cikk/12/29/71/cikk_122971/Arany_dijazottak-2012_webreEZAJO.pdf |archiveurl=https://web.archive.org/web/20161109083459/http://old.mta.hu/data/cikk/12/29/71/cikk_122971/Arany_dijazottak-2012_webreEZAJO.pdf |archivedate=2016-11-09 |accessdate=2016-10-08 |publisher=Tudomány és Magyarság 3. |language=magyar |format=pdf}}</ref><ref>{{cite web |title=Arany János-érem |url=http://mta.hu/dijak-kituntetesek/arany-janos-erem-105813 |accessdate=2016-09-29 |publisher=Magyar Tudományos Akadémia |language=magyar}}</ref><ref>{{cite web |title=Arany János-díj a tudományos kutatásért |url=http://mta.hu/dijak-kituntetesek/arany-janos-dij-a-tudomanyos-kutatasert-105812 |accessdate=2016-09-29 |publisher=Magyar Tudományos Akadémia |language=magyar}}</ref>
* A [[Magyar Írószövetség]] Arany János Alapítványának kuratóriuma által 1996 és 2003 között kiosztott irodalmi díj volt az [[Arany János-jutalom]], és 1996 óta adományozzák az [[Arany János-díj|Arany János-díjat]].<ref>{{cite web |title=Arany János-díj |url=http://www.aranyjanosalapitvany.hu/dij.html |accessdate=2016-11-08 |publisher=aranyjanosalapitvany.hu/dij.html |language=magyar}}</ref>
* A [[Magyar Posta Zrt.|Magyar Posta]] emlékére 1932-ben és 1957-ben adott ki portréképével ellátott 2 filléres, illetve 2 forintos bélyeget.<ref>{{cite web |date=2009-04-15 |title=Arany János portréképével kiadott 1932-es 2 filléres postabélyeg |url=http://www.catawiki.com/catalog/stamps/countries-regions-territories/hungary-hun/1407399-janos-arany?area=ca2f9de386421ac5979510fe8da8efb5d09f4914 |accessdate=2016-03-06 |publisher=catawiki.com |language=angol}}</ref><ref>{{cite web |date=2009-04-15 |title=Arany János portréképével kiadott 1957-es 2 forintos postabélyeg |url=http://www.philatelia.net/classik/stamps/?id=11515 |accessdate=2016-03-06 |publisher=philatelia.net |language=angol}}</ref>
* A [[Dalriada]] soproni [[Folk-metal|folkmetal-együttes]] Arany János balladáit zenésítette meg 2009-ben kiadott ''[[Arany-album]]'' című lemezén.
* [[2017]]-ben, a költő születésének bicentenáriumának alkalmából [[Arany János-emlékév|Arany János-emlékévet]] rendeztek.<ref>{{cite web |date=2016-09-16 |title=Arany János-emlékév |url=http://nepszava.hu/cikk/1106054-arany-janos-emlekev/ |archiveurl=https://web.archive.org/web/20160916234414/http://nepszava.hu/cikk/1106054-arany-janos-emlekev/ |archivedate=2016-09-16 |accessdate=2016-09-16 |publisher=nepszava.hu |language=magyar}}</ref>
* 2017. március 2-án, Arany János születésének 200. évfordulóján Eric Fairbrother, a [[Wales|walesi]] [[Montgomery (Powys)|Montgomery]]{{wd|Q1311946}} polgármestere a ''Freeman of Montgomery'' címet adományozta A walesi bárdok szerzőjének.<ref>{{cite web |date=2017-03-04 |title=Walesi díszpolgár lett Arany János |url=http://www.hirado.hu/2017/03/04/walesi-diszpolgar-lett-arany-janos/ |accessdate=2017-03-04 |publisher=hirado.hu |language=magyar}}</ref><ref>{{cite web |date=2017-03-02 |title=Hungary celebrates legendary tale of Welsh bards' slaughter |url=http://www.bbc.com/news/uk-wales-mid-wales-39136034 |accessdate=2017-03-04 |publisher=bbc.com |language=angol}}</ref>
* 2018. március 28-án leplezték le tűzfal[[Arckép|portréját]]; az Alkotás és Márvány utca sarkán.<ref>http://www.kultura.hu/tuzfalfestmeny-arany KULTURA.HU</ref>
== Megjegyzések ==
<references group="m" />
== Dalainak adatai ==
{{megjegyzések}}
== Szakirodalom ==
* [[Gyulai Pál (irodalomtörténész)|Gyulai Pál]]: ''Arany János balladái''
* [[Riedl Frigyes]]: ''Arany János,'' Budapest, 1887 ([https://archive.org/stream/aranyjnos00rieduoft#page/n5/mode/2up Online elérhetőség])
* [[Péterfy Jenő]]: [https://mek.oszk.hu/00500/00596/html/tanulmanyok/peterfy1888.html ''Arany János Őszikéi,'' Budapesti Szemle, 1888. május, 54. köt. 137. sz. / P.J. ''Válogatott Művei,'' Budapest, 1983. 632–638.], mek.oszk.hu
* [[Szinnyei Ferenc]]: ''Arany János,'' Budapest, 1909 ([https://archive.org/stream/aranyjnos00szin#page/n5/mode/2up Online elérhetőség])
* [[Haraszti Gyula]]: ''Arany János,'' Budapest, 1912 ([https://archive.org/stream/aranyjnos00hara#page/n1/mode/2up Online elérhetőség])
* [[Négyesy László]]: ''Arany,'' Budapest, 1917 ([https://archive.org/stream/aranykltszle00nguoft#page/n3/mode/2up Online elérhetőség])
* [[Keresztury Dezső]]: ''így élt Arany János,'' Akadémiai Kiadó, Budapest, 1974
* [[Németh G. Béla]]: ''Arany János,'' in: Uő, ''Mű és személyiség,'' Budapest, 1970, 7–41.
* [[Dávidházi Péter]]: ''Hunyt mesterünk.'' Arany János kritikusi öröksége, Argumentum Kiadó, Budapest, 1994
* [[Keresztury Dezső]]: [https://mek.oszk.hu/01300/01360/01360.htm ''Arany János''], mek.oszk.hu
* [http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/gyulaaj2.htm Arany János – Szakirodalom], magyar-irodalom.elte.hu
== Jegyzetek ==
{{jegyzetek}}
== Források ==
* {{hely|Pintér Jenő hatodik kötet}} {{cite book |author=Pintér Jenő |url=https://mek.oszk.hu/15300/15384/pdf/15384_6.pdf |title=Magyar Irodalomtörténet I. A MAGYAR IRODALOM A XIX. SZÁZAD MÁSODIK HARMADÁBAN. |year=1933 |location=Budapest |pages=409-546 |format=pdf |authorlink=Pintér Jenő (irodalomtörténész)}}
* {{hely|Sőtér István IV. kötet}} {{cite book |author=Sőtér István |url=https://mek.oszk.hu/02200/02228/html/04/55.html |title=A MAGYAR IRODALOM TÖRTÉNETE 1849-TŐL 1905-IG |publisher=AKADÉMIAI KIADÓ |year=1965 |location=Budapest |pages= |authorlink=Sőtér István}} ''Arany János (1817–1882)'' c. fejezet.
* {{hely|Gyulai Pál 1884}} {{cite book |author=Gyulai Pál |url=https://mek.oszk.hu/07200/07299/07299.pdf |title=Gyulai Pál bírálatai 1861–1903 – Arany János életrajza |publisher=A Magyar Tudományos Akadémia Könyvkiadóvállalata, Franklin Társulat Nyomdája – UJ FOLYAM 1911–1913. CYCLUS |location=Budapest |pages=250-270 |format=pdf |authorlink=Gyulai Pál (irodalomtörténész)}}
* {{hely|Arany János}} {{cite web |title=Életrajza és egyebek |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/aranyj.htm |accessdate=2016-03-02 |publisher=magyar-irodalom.elte.hu}}
* {{hely|Csáky Zsolt}} {{cite web |title=Az önkényuralomtól a kiegyezésig Arany János (1817–1882) |url=https://erettsegi.com/tetelek/irodalom/arany-janos-az-onkenyuralomtol-a-kiegyezesig |accessdate=2026-04-09 |3=publisher}}
* {{hely|Pintér Jenő hetedik kötet}} {{cite book |author=Pintér Jenő |url=https://mek.oszk.hu/15300/15384/pdf/15384_7.pdf |title=Magyar Irodalomtörténet I. A MAGYAR IRODALOM A XIX. SZÁZAD UTOLSÓ HARMADÁBAN. |year=1934 |location=Budapest |pages= |format=pdf |authorlink=Pintér Jenő (irodalomtörténész)}}
* {{hely|SZTE Egyetemi Könyvtár}} {{cite web |author=Dr. Kokas Károly és Tóth Margit |title=Arany János élete |url=http://www.bibl.u-szeged.hu/oszikek/pallas/elete.html |accessdate=2016-10-29 |publisher=bibl.u-szeged.hu |language=magyar}}
* {{hely|Szinnyei József}} {{cite web |author=Szinnyei József |authorlink=Szinnyei József (bibliográfus) |title=Arany János |url=https://mek.oszk.hu/03600/03630/html/a/a00413.htm |accessdate=2016-03-03 |work=Magyar írók élete és munkái |publisher=Budapest: Hornyánszky}}
* {{hely|Leszler János}} {{CitLib|tit=Nótakedvelőknek|aut=Leszler József|red=Zeneműkiadó|loc=Budapest|ann=1986|isbn=963 330 599 3|pag=21–22}}
== További információk ==
{{Wikidézet|Arany János}} {{wikiforrásszerző}}
* [[Koltai Virgil]] 1886: Arany János élete és költészete. In: Értesítő a Pannonhalmi Sz.-Benedek-rend győri Főgymnasiumáról az 1885-86. tanév végén. Győr
* {{cite web |title=Alkotói portrék a magyar irodalomból >> Arany János |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/aranyj.htm |accessdate=2016-11-26 |publisher=magyar-irodalom.elte.hu |language=magyar}}
* {{cite web |title=Kokas Károly - Tóth Margit: Őszikék. Összeállítás Arany János öregkori ciklusáról |url=https://mek.oszk.hu/00500/00596/ |accessdate=2016-12-02 |publisher=mek.oszk.hu |language=magyar}}
* {{Cite book |title=Arany János Összes művei |year=1951 |editor=Voinovich Géza, Keresztury Dezső |edition=Az MTA kritikai kiadása |location=Budapest}}
* {{Cite book |author=Arany János |title=Tanulmányok és kritikák |publisher=Kossuth Egyetemi Kiadó |year=1998 |isbn=963 472 257 1 |editor=S. Varga Pál |location=Debrecen}}
* {{cite web |author=[[Tolnai Vilmos]] |title=Adalékok Arany János forrásaihoz |url=http://epa.oszk.hu/00000/00001/00057/pdf/ITK_1902_03_257-271.pdf |accessdate=2018-09-14 |publisher=epa.oszk.hu |language=magyar}}
* {{Cite web |author=[[Voinovich Géza]] |year=1929 |title=Arany János életrajza 1-2-3. kötet |url=http://real-eod.mtak.hu/3141/ |accessdate=2020-03-15 |publisher=A Magyar Tudományos Akadémia Könyvkiadó Vállalata. Új folyam . Magyar Tudományos Akadémia |location=Budapest}}
* [[Wojatsek Károly]] 1991: Arany János hatása a szlovák irodalomra. In: A magyar nyelv és kultúra a Duna völgyében – Kapcsolatok és kölcsönhatások a 19-20. század fordulóján. Budapest, 722-734.
* [http://publicatio.bibl.u-szeged.hu/12837/ Kokas Károly: A könyv meséje] – Kísérő tanulmány a "kapcsos könyv"-ről és az [[Őszikék|Őszikékr]]ől a [[Kapcsos könyv]] 2017-es (Kossuth) kiadásához. (Hozzáférés: 2022. szeptember 11.)
=== Arany János-linkek ===
* [https://real-eod.mtak.hu/view/creators/Arany=3AJ=E1nos=3A=3A.html Arany János művei a REAL-EOD-ban]
* [http://aranyjanos.lap.hu// Arany János.lap.hu]
* [https://web.archive.org/web/20140403135319/http://muemlekek.info/muemlek/arany-janos-sirja.php Arany János sírja]
* [https://www.urbanlegends.hu/tag/arany-janos/ Arany Jánossal kapcsolatos irodalmi tévhitek, anekdoták ellenőrzése]
=== Arany János-emlékpadok ===
* [https://www.kozterkep.hu/~/24789/Arany_Janos_emlekpad_Nagykoros_1927.html Arany János-emlékpad Nagykőrös, Csendes Ferenc (kőfaragó), 1927]
* [https://web.archive.org/web/20170201234634/http://www.panoramio.com/photo/3450811 Toldi estéje,] [[Göd|Alsógöd]]
{{A Magyar Tudományos Akadémia főtitkárai}} {{Arany János munkássága}} {{Klasszikus magyar irodalom}} {{Nemzetközi katalógusok}} {{portál|irodalom}}
{{kiemelt}}
[[Category:Magyar írók]]
huqctdqe9lm15f4r88a02nn2vvcvtw9
759915
759912
2026-09-02T06:43:49Z
Dj
51146
/* Arany János-emlékpadok */
759915
wikitext
text/x-wiki
{{redir|Arany János}}{{személy infobox|típus=író|név=Arany János|kép=Barabas-arany.jpg|képméret=240px|képaláírás=[[Barabás Miklós (festő)|Barabás Miklós]]: ''Arany János portréja'' ([[1848]])|születési név=|születési dátum=[[1817]]. [[március 2.]]|szülei=Arany György, Megyeri Sára|születési hely=[[Nagyszalonta]]|halál dátuma=[[1882]]. [[október 22.]] {{életkor-holt|1817|3|2|1882|10|22}}|halál helye=[[Budapest]]|nemzetiség=[[Magyarország|magyar]]|szakma=|művésznév=|iskolái=[[Debreceni Református Kollégium]]|kitüntetés=|házastárs=[[Ercsey Julianna]]|gyermekei=[[Arany Julianna]]<br />[[Arany László (költő)|Arany László]]|alsablon={{Személy infobox/Író
| típus = író
| becsukva =
| műfaj = [[elbeszélő költemény]], [[dal]], [[ballada]]
| irányzat = [[népiesség]]
| periódus = [[1845]]–[[1882]]
| első mű =
| fő mű = [[Az elveszett alkotmány]], [[Toldi]], [[Toldi estéje]]
| kiadó =
| díjak =
| behatás =
| kihatás =
}}}}<ref>{{Cite journal|author=Rudolf|last=Krader|first=Barbara|date=május 1978|title=Magyarorszagi Cigany Nepdalok|journal=Ethnomusicology|volume=22|issue=2|pages=379|doi=10.2307/851512|url=https://doi.org/10.2307/851512|accessdate=2025-10-06|issn=0014-1836}}</ref><center>[[Fájl:Arany János szoborcsoport, Stróbl Alajos alkotása, 1893.jpg|bélyegkép|250px|Arany János csoportos emlékműve
a [[Magyar Nemzeti Múzeum]] előtt, [[Strobl Alajos]] műve]]
</center>'''Arany János''' ([[Nagyszalonta]], [[1817]]. [[március 2.]] – [[Budapest]], [[1882]]. [[október 22.]]) magyar költő, tanár, lapszerkesztő, a [[Kisfaludy Társaság]] igazgatója, a [[Magyar Tudományos Akadémia]] tagja és főtitkára. A [[magyar irodalom]] egyik legismertebb és egyben legjelentősebb alakja. A legnagyobb magyar balladaköltő, ezért nevezték a ''ballada Shakespeare-jének'', vállalt hivatala miatt a ''szalontai nótáriusnak'', de szülővárosában – vélhetően természete miatt – a ''hallgati ember'' titulussal is illették. Fordításai közül kiemelkednek [[William Shakespeare|Shakespeare-fordításai]].
Szegény [[Kálvinizmus|református]] családba született. Szüleinek kései gyermeke volt, akik féltő gonddal nevelték, hiszen a [[Gümőkór|tüdőbaj]] miatt kilenc testvére közül nyolcat előtte elvesztettek. Ő azonban igazi csodagyerek lett, már tizennégy éves korában segédtanítói állást tudott vállalni és támogatta idősödő szüleit. Az anyagi javakban nem dúskáló családi háttér ellenére olyan nagy és sokoldalú szellemi műveltségre tett szert, hogy felnőttkorára a [[Latin irodalom|latin]], a [[Ókori görög irodalom|görög]], a [[Német irodalom|német]], az [[Angol irodalom|angol]] és a [[francia irodalom]] remekeit eredetiben olvasta, és jelentős fordítói munkát is végzett. A [[magyar nyelv]] egyik legnagyobb ismerője, és ennek megfelelően páratlanul gazdag szókinccsel rendelkezett. Pusztán kisebb költeményeiben mintegy 23 ezer szót, illetve 16 ezer egyedi szótövet használt.
Irodalmi pályafutása 1845-ben ''Az elveszett alkotmány'' című szatirikus [[Eposz|eposszal]] indult, de igazán ismertté az 1846-ban készült [[Elbeszélő költemény|elbeszélő költeménye]], a ''[[Toldi]]'' tette. Már pályája kezdetén is foglalkozott a közélettel, és politikai tárgyú cikkeket írt. Az [[1848–49-es forradalom és szabadságharc|1848–49-es forradalom és szabadságharcban]] [[Nemzetőrség (1848)|nemzetőrként]] vett részt, majd a [[Szemere Bertalan]] által vezetett belügyminisztériumban volt fogalmazó. A bukást követően egy ideig bujdosott, ám végül elkerülte a megtorlást, és [[Nagykőrös|Nagykőrösre]] költözött, ahol 1851 és 1860 között tanári állást tudott vállalni.
Az élete teljesen megváltozott, amikor a Kisfaludy Társaság igazgatójává választotta, és [[Pest (történelmi település)|Pestre]] költözött. Itt szerkesztette és adta ki két hetilapját: a [[Szépirodalmi Figyelő|Szépirodalmi Figyelőt]] (1860–1862) és a [[Koszorú (hetilap)|Koszorút]] (1863–1865). A [[kiegyezés]] idején a magyar irodalmi és a politikai élet kiemelkedő és meghatározó képviselője volt. Irodalmi munkássága kihatott a talán addig kevésbé ismert történelmi szereplők ismertségére is, hiszen a műveiben megformált alakok közül több neki köszönhetően vált igazán halhatatlanná. [[Petőfi Sándor]] kortársa és barátja is volt egyben. [[Költészet]]ükben nagy különbség, hogy a gyorsan érő és rövid életű Petőfivel szemben az övé lassabban bontakozott ki. Halála is összeköti őket, hiszen egy meg nem erősített [[városi legenda]] szerint, a már egyébként is gyengélkedő népi költőfejedelem 1882. október 15-én a pesti Petőfi téri [[Petőfi Sándor-szobor (Budapest)|Petőfi-szobor]] avatásán fázott meg, és az azt követő [[Tüdőgyulladás|tüdőgyulladásban]] hunyt el, 65 éves korában.<ref>[http://pestbuda.hu/cikk/20190312_viczian_zsofia_petofi_felemelt_keze_egy_szobor_a_duna_partjan_136_eve Petőfi felemelt keze: egy szobor a Duna partján 136 éve]</ref><center>{{idézet2|''Minden szál hozzá vezetett, és minden szál tőle vezet, a magyar szellemi életnek ő a sugárzási központja.''|[[Szerb Antal]]<ref>{{cite web |author=Szerb Antal |authorlink=Szerb Antal |title=Arany János |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/szerbaj.htm |publisher=magyar-irodalom.elte.hu |accessdate=2016-07-03}}</ref>}}</center>
== Élete ==
[[Fájl:Arany coat 1634.jpg|bélyegkép|250px|Az Arany család címere 1634-ből]] Az Arany család ősi fészke [[Nagyszalonta#Kölesér|Köleséren]] volt, onnan költöztek előbb [[Szilágynagyfalu|Szilágynagyfaluba]],<ref>{{cite web |author=Sándor Boglárka Ágnes |date=2009-04-15 |title=Arany János kultusza ma is él Szilágynagyfaluban |url=http://www.szabadsag.ro/szabadsag/servlet/szabadsag/template/article,PArticleScreen.vm/id/24235 |archiveurl=https://web.archive.org/web/20160305131609/http://szabadsag.ro/szabadsag/servlet/szabadsag/template/article,particlescreen.vm/id/24235 |archivedate=2016-03-05 |accessdate=2016-03-02 |publisher=szabadsag.ro |language=magyar}}</ref> majd [[Nagyszalonta|Szalontára]]; első földjüket és nemességüket [[Bocskai István|Bocskai Istvánt]]ól kapták, címerüket [[I. Rákóczi György]] adományozta [[1634]]-ben, de ezt elvesztették, amikor [[Mária Terézia magyar királynő|Mária Terézia]] [[1745]]-ben herceg [[Esterházy Pál Antal (1711–1762)|Esterházy Pál Antalnak]] adományozta a hajdúvárosokat. A nemeslevél birtokában a család [[1778]]-tól pereskedett jussáért, de [[Nemességi igazolás|nemességüket]] [[Jog|jogi]] úton sem sikerült visszaszerezniük.<ref>Az Arany család őseiről, nemesi rangjáról, címeréről, valamint a nemesi cím visszaszerzésére tett peres eljárásról lásd [[Arany László (költő)|Arany László]] ''[[s:Az Arany család nemesi címe|Az Arany család nemesi címe]]'' című jegyzetét a Wikiforrásban.</ref><ref name="Gyermek- és ifjúkora">{{cite web |title=Arany János Gyermek- és ifjúkora |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/ajelet1.htm |accessdate=2016-03-03 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
1817. március 2-án született, egy kis házat és kevés földet birtokló család tizedik gyermekeként. (Kilenc testvére közül csak a legidősebb, Sára maradt életben.) Szülei, Arany György ([[1762]] – [[Nagyszalonta]], [[1844]]. [[január 2.]]) és Megyeri Sára ([[1772]]. [[november 2.]] – Nagyszalonta, [[1836]]. [[augusztus 20.]]) földművesek voltak.{{refhely|Gyulai Pál 1884}}<ref>[https://www.arcanum.hu/hu/online-kiadvanyok/MagyarIrodalom-magyar-irodalomtortenet-1/magyar-irodalomtortenet-pinter-jeno-5116/6-a-magyar-irodalom-a-xix-szazad-masodik-harmadaban-1C05/arany-janos-1EC8/arany-janos-elete-1EC9/ Arcanum - Arany János élete]</ref>
Szüleinek késői és egyetlen fiúgyermeke volt. Születésekor nővére már rég férjhez ment, már gyermeke is volt. Szülei hívő [[Magyarországi Református Egyház|reformátusok]] voltak. János fiatal korától tisztes szegénységben, de békés és csendes környezetben nőhetett fel. Egészen korán, három- négyéves korában megtanult olvasni, hamuba írt betűk segítségével.<ref name="sulinet">{{cite web |date=2009-04-15 |title=Arany János életrajza |url=http://tudasbazis.sulinet.hu/hu/magyar-nyelv-es-irodalom/irodalom/irodalom-6-osztaly/eletutja/arany-janos-eletrajza |archiveurl=https://web.archive.org/web/20151110032644/http://tudasbazis.sulinet.hu/hu/magyar-nyelv-es-irodalom/irodalom/irodalom-6-osztaly/eletutja/arany-janos-eletrajza |archivedate=2015-11-10 |accessdate=2016-03-03 |publisher=tudasbazis.sulinet.hu |language=magyar}}</ref><center>{{idézet2|„Mire iskolába adtak, hova mód nélkül vágytam, […] már nemcsak tökéletesen olvastam, de némi olvasottsággal is bírtam, természetesen oly könyvekben, melyek kezem ügyébe estek. […] A tanító, megpróbálván, rögtön, amint felvettek, elsőnek tett osztályomban s e helyet folyvást megtartottam. A többi tanítók és növendékek a nagyobb osztályokból, sőt külső emberek is, csodámra jártak, s én nem egy krajcárt kaptam egy vagy más produkcióm jutalmául.”<ref name="sulinet"/>}}</center>Apja rengeteget mesélt neki a Toldikról, megszerettette vele a magyar népköltészetet és az irodalmat. Tanulékonysága korán feltűnt: mire hatévesen iskolába került, már nemcsak tökéletesen olvasott, hanem [[Biblia|bibliai]] történeteket, énekeket és a könnyű irodalom termékeit is ismerte. Csodagyereknek tartották, és már iskolás évei alatt városszerte ismertté vált verseiről. Páratlan szókincsre tett szert, és a régi magyar nyelv nagy hatást gyakorolt költészetére. A későbbiekben talán emiatt idegenkedett a [[nyelvújítás]] és a [[romantika]] magyar nyelvre gyakorolt hatásaitól.<ref name="Gyermek- és ifjúkora" />{{refhely|Arany János}}
=== Iskolaévei ===
[[Fájl:Arany jános dolgozószobája.jpg|bélyegkép|jobbra|250px|Rekonstruált dolgozószobája a nagyszalontai Arany János Múzeumban]] [[Nagyszalonta|Szalontai]] iskolaéveinek (1823–1831) végén, hogy szülei anyagi helyzetén könnyítsen, a tanulás mellett tanított is, és az iskolában lakott. [[1833]]-ban a költészeti osztályba lépett, majd novembertől a [[Debreceni Református Kollégium|Debreceni Református Kollégiumban]] tanult. Mivel reményei nem váltak valóra, és pénze is kevés volt, [[1834]] márciusában [[Kisújszállás|Kisújszállásra]] ment egy évre segédtanítónak, ''„praeceptornak”'', hogy pénzt szerezzen tanulmányai folytatására. Kisújszálláson [[Török Pál (püspök)|Török Pál]], a későbbi református püspök volt a rektor, aki megnyitotta jeles könyvtárát Arany előtt, és ennek köszönhetően éjjel-nappal olvasott. A [[Német nyelv|német]] és [[Francia nyelv|francia nyelvben]] is elmélyült, és [[Latin nyelv|latinból]], németből fordítgatott, sőt a költészettel is kísérletezett.<ref name="Gyermek- és ifjúkora" />
Egy év múlva visszament Debrecenbe, ahol tanárai is felfigyeltek rá. Kisújszállási ajánlóleveleivel és szorgalmával hamarosan az osztály élére került, és a tanítás folytán anyagi helyzete is tűrhetővé vált. Magántanítványai közé tartoztak többek közt [[Erdélyi József (tanár)|Erdélyi József]] tanár lányai. Az iskolai egyhangúságot megunó Arany azonban ekkoriban nem tanító, hanem festő vagy szobrász akart lenni, így [[1836]] februárjában önként elhagyta a kollégiumot. Ez a kilépés azt eredményezte, hogy középfokú tanulmányait nem fejezte be, és emiatt nem kaphatott végbizonyítványt sem.<ref name="sulinet" />{{refhely|Arany János}}
=== Vándorszínészi kitérő ===
Gyakran járt színházba, hiszen Debrecenben erre bőven volt lehetősége. 1836-ban önéletrajzi vallomásai szerint minden erkölcsi és anyagi kényszerítés nélkül hagyta el az iskolát, és élete válaszút elé került. [[Ferenczy István (szobrász)|Ferenczy István]] szobrászatának híre vonzotta nagyon, aki az [[1830-as évek]] ünnepelt zsenije volt. A [[szobrászat]] gondolatával titokban foglalkozó Arany megingott, és inkább [[Thaleia|Thália]] zászlaja alá állt be, ha rövid időre is. Az alig húszéves ifjú 1836 februárjában Debrecenben a [[Fáncsy Lajos]] és [[László József (színművész)|László József]] igazgatása alatt működő [[Színtársulat|színtársulathoz]] szegődött egy évre. A társulat azonban a korra oly jellemző módon pár hónap múlva feloszlott. A rövid időszak ellenére is több darabban játszhatott. A ''[[Bolond Istók (elbeszélő költemény, Arany János)|Bolond Istók]]'' című elbeszélő költeményének második énekében életrajzi említésnek tudható be, amit saját színészi pályájáról írt.<ref name="Bayer">{{cite journal |author=Bayer József |title=Arany Jánis színészi pályája |url=http://real-j.mtak.hu/2334/1/BudapestiSzemle_1888_053.pdf |format=pdf |language=magyar |issue=Budapesti Szemle |pages=283-296 old. |authorlink=Bayer József (színháztörténész) |accessdate=2016-05-05}}</ref> [[Kép:Arany a színlapon.jpg|jobbra|bélyegkép|220px|Arany János neve egy [[1836]]-os [[Nagykároly|nagykárolyi]] színlapon<ref>[https://mek.oszk.hu/04900/04944/html/borzaszto0026.html A Borzasztó torony - Képek a magyar vándorszínészet világából -Borostyán, Rónai, alias: Petőfi Sándor], mek.oszk.hu</ref><nowiki>]]</nowiki>
Első fellépése valószínűleg – ''Bolond Istók''éhoz hasonlóan – a színpad mögött történt, és ennek során a színpad átrendezésekor székeket pakolt. Lépésről lépésre szoktatták ugyanis hozzá a színpadi léthez. A debreceni színlap először 1836. március 3-án említette meg a nevét [[Ernst Raupach]] népszerű regényes színjátékában, az ''Ördög Róbert''ben, ahol a tanácsnokot alakította. Ezután több darabban feltűnt, hol a második favágó vagy éppen a jövendő századbeli inas epizódszerepében. Nem jelentős [[Színész|színészi]] megnyilvánulások, de azért arra is lehetősége adódott, hogy [[énekes]] szerepkörben szép [[basszus]] hangját is megmutassa. Talán legjelentősebb színészi szerepét kapta március 26-án, amikor [[Babocsay István|Babocsay Istvánnak]] 1805-ben nyomtatásban is megjelent ''Vígkedvű Mihály'' című drámájában Biczó István városi tanácsnokot alakíthatta.
A társulat felbomlásáról a ''Bolond Istók'' című elbeszélő költeményében így írt Arany:
: ''Egy reggel – épen a bolondok napja,''
: ''Az ő nevenapja, april elseje''
: ''Volt, hogy fülét a hír oldalba csapja,''
: ''Hogy társaság nincs, már csak hült helye.''
Arany személyes levelezése szerint [[Debrecen|Debrecenben]] [[Fáncsy Lajos]] és [[László József (színművész)|László József]] igazgatása alatt működő színésztársulat 1836. április 1-jén föloszlott. Az egyéb fennmaradt iratok tanúsága szerint május 1-jén szűnt meg a társulat, de valószínűleg voltak ennek előzményei, és ezért kötötte a költő a bolondok napjához a felbomlást. Egyébként egész áprilisban színpadon volt, de továbbra sem jutott nagyobb szerephez.<ref name="Bayer" /><ref>{{cite journal |author=Kardos Lajos |title=Arany János színészi pályája és a Bolond Istók |url=http://epa.oszk.hu/02500/02518/00013/pdf/EPA02518_irodalomtortenet_1913_05_276-287.pdf |format=pdf |language=magyar |issue=Kisebb Közlemények |pages=276-280 old. |accessdate=2016-05-05}}</ref>
=== Hazatérése, hivatalt vállalása, szüleinek elvesztése, házasságkötése és gyermekeik megszületése ===
Ezután egy Hubay nevezetű [[színész]]<ref>Valószínűleg Hubay Emánuel színigazgató, aki 1836-37-ben Szaplonczay Mihállyal Szatmárban, majd Nagykárolyban működött.</ref> által toborzott és részben a feloszlott társulat romjaiból szervezett vándorszínész csapathoz csatlakozott.<ref>[http://www.harag.eu/hu/magunkrol/szinhaztortenet.html Szatmárnémeti Északi Színház Harag György Társulat] {{Wayback|url=http://www.harag.eu/hu/magunkrol/szinhaztortenet.html|date=20170315014222}}, harag.eu</ref> Vándorlásuk során [[Nagykároly]], majd [[Szatmárnémeti|Szatmár]], végül pedig [[Máramarossziget]] lett a célállomás. A néhány hónapig tartó sanyarú hányattatás során megtapasztalta az egyre érezhetőbb nyomort, továbbra sem jött a nagy színészi szerep. Kialudt a színészet iránti rajongó fellángolása. Egy éjszaka, álmában halottnak látta édesanyját, ezért elhagyta a társulatot, és gyalog hazaindult. [[Németh László (író)|Németh László]] megfogalmazása szerinti „vak kiruccanása”, színészkora véget ért.<ref>[http://www.mek.oszk.hu/01000/01013/01013.htm#2 Németh László tanulmányok - Arany János], mek.oszk.hu</ref> {{idézet2|''Egy nap, hasonló gyötrelmek közt álom ért rám – s jó édesanyámat halva láttam. A benyomás oly erős volt, hogy többé nem vethetém ki fejemből, ellenállhatatlan ösztönt érzék hazamenni, de miképp? [[Máramarossziget|Sziget]] [[Nagyszalonta|Szalontához]], az általam ismert úton kerülve, körülbelül ötven mérföld. A direktorhoz, Hubayhoz fordulék, egy húszast kértem tőle lehető díjamból, de fölöslegesnek láttam vele közölni szándékomat. Egy zsebkendőbe kötém egész vagyonomat – kimentem a piacra, hol nyolc pengő krajcárból egy cipót s egy kevés szalonnát vettem, azzal megindultam egyedül, gyalog. Első éjt az erdőben töltém, oláh fuvarosok tüze mellett, a többit kocsmapadokon – s így végre [[Szatmárnémeti|Szatmáron]], [[Nagykároly]]on, [[Debrecen]]en át, hétnapi gyalog vándorlás után hazaértem, nem nagy örömére szegény szüleimnek.''|Arany János levele [[Gyulai Pál (irodalomtörténész)|Gyulai Pál]]hoz<ref>[https://mek.oszk.hu/04900/04944/html/borzaszto0021.html Arany János levele Gyulai Pálhoz], mek.oszk.hu</ref>}} [[Fájl:Ercsey Julianna portréja (Ellinger Ede felvétele) – crop.jpg|bélyegkép|jobbra|220px|[[Ercsey Julianna|Aranyné Ercsey Julianna]]<nowiki>, a költő felesége]]</nowiki>
Otthon megtudta, hogy apja megvakult, anyja pedig haldoklott<ref>[http://tudasbazis.sulinet.hu/hu/magyar-nyelv-es-irodalom/irodalom/irodalom-6-osztaly/eletutja/arany-janos-eletrajza Arany János életrajza] {{Wayback|url=http://tudasbazis.sulinet.hu/hu/magyar-nyelv-es-irodalom/irodalom/irodalom-6-osztaly/eletutja/arany-janos-eletrajza|date=20151110032644}}, tudasbazis.sulinet.hu</ref> és két héttel később, hazaérkezése után [[Kolera|kolerában]] megbetegedve elhunyt – ennek hatására egy ideig még a költő is elhallgatott benne.<ref name="Bayer" /> [[Magyarországi Református Egyház|Egyháza]] és a város részvéttel tekintett a fiú sorsára, és megválasztották őt konrektornak. Szülőhelyén a [[Gimnázium#A 16. századtól|grammatikai]] osztályokat tanította [[1839]] tavaszáig, majd egy évig írnokként helyezkedett el a városnál, végül rendes aljegyző lett Nagyszalontán.{{refhely|Gyulai Pál 1884}} [[Kép:Arany János 1914.jpg|bélyegkép|250px|Arany János családja körében 1863 körül]] Az 1836-tól 1840-ig terjedő időszakban is sokat olvasott: [[William Shakespeare|Shakespeare-t]] (német fordításban), elővette [[Homérosz|Homéroszt]] is, a francia irodalomból pedig [[François Fénelon]] ''Télemakhosz kalandjai'' című regénye és [[Jean-Pierre Claris de Florian|Florian]] művei után [[Molière]]-t kezdett olvasni, illetve [[Prosper Jolyot de Crébillon|Crébillon]] rémdrámáit forgatta. Ez időszakban találta meg élete párját is, és fontos lett számára, hogy házasságához biztos anyagi hátteret teremtsen, így kevesebb ideje maradt az irodalom tanulmányozására.
[[Nagyszalonta|Nagyszalontán]] [[1840]]. [[November 19.|november 19-én]] vette feleségül [[Ercsey Julianna|Ercsey Juliannát]], egy ügyvéd törvénytelen és vagyontalan leányát. Úgy döntött, hogy az esküvő után már nem foglalkozik annyit olvasással és különböző művek tanulmányozásával, hanem helyette minden szabadidejét szeretett feleségével töltötte. Munkájában szorgalmas és kiegyensúlyozott volt, kisebb peres ügyekben segédkezett, passzusokat (marhalevél) állított ki, és a hivatali életben kiválóan teljesített, még a megyei táblabírák is elismerték tevékenységét. Ekkoriban új ismeretekkel is gyarapodott, hiszen munkájából adódóan kitanulta a [[Geodézia|földmérést]].
Házasságukból [[1841]]-ben született Juliska lánya és [[1844]]-ben [[Arany László (költő)|László]] fia, aki később ismert bankár, népköltészetgyűjtő, Arany hagyatékának gondozója, kitűnő költő és irodalomtudós lett. Gyermekeinek sikereire Arany mindig nagyon büszke volt. Halála után fia rendezte sajtó alá Arany hátrahagyott iratait és levelezését négy kötetben.{{refhely|Gyulai Pál 1884||Pintér Jenő hetedik kötet|234. old|Sőtér István IV. kötet|96. old|}}<ref>{{cite web |author=Boldizsár Noémi |date=2010-11-12 |title=A jó feleség aranyat ér |url=http://www.hetek.hu/eletmod/201011/a_jo_feleseg_aranyat_er |accessdate=2016-10-07 |publisher=hetek.hu}}</ref> Hagyatékának azon része, amely személyes vonatkozással bírt (például családi magánlevelezésének nagyobb része), fia özvegyénél Szalay Gizellánál (1857–1945) maradt. Ezt csak ő és második férje [[Voinovich Géza]] (1877–1952) irodalomtörténész kutathatta, aki háromkötetes művet szentelt Arany János [[életrajz]]ának. A [[Gellérthegy|gellérthegyi]] villájukban őrzött kéziratok, családi magánlevelezés és egyéb relikviák 1945 januárjában belövések és bombázások következtében teljesen megsemmisültek, mivel a közelben német ágyúállások voltak. Levelezésének fennmaradt része Arany László végakarata szerint a MTA Könyvtárának Kézirattárában található.<ref>[[Domokos Mariann]]–[[Gulyás Judit]] 2018 (szerk.): Az Arany család mesegyűjteménye. Budapest, 12–15.</ref>
=== Elismert költővé válása: az ''Elveszett alkotmány'' és a ''Toldi'' ===
[[Kép:Toldi (1847).jpg|bélyeg|„[[Toldi]]<nowiki>” a többi pályadíjnyertessel, és az önálló kiadás címlapjának képe]] [[Kép:Arany.gif|bélyeg|A </nowiki>[[Toldi]]<nowiki> szerzője]] </nowiki>[[1842]] tavaszán Arany egykori tanulótársa, [[Szilágyi István (pedagógus)|Szilágyi István]] Szalontára érkezett rektori minőségben, és a költőt az irodalmi munkásság folytatására buzdította: elsősorban a görög tragédiaszerzők fordítását javasolta neki. Szilágyi István inspirálására, teljesen egyedül tanult meg [[Angol nyelv|angolul]]. Beszélni nem tudott, csak az írásképet ismerte. Az angol szövegeket összevetette a német fordítással, és így kezdett el nyelvtankönyv segítségével lépésről lépésre haladva egyre jobban elmélyülni az angol nyelvű irodalomban. A nyelv olvasásában jártasságot szerezve Shakespeare-t kezdte tanulmányozni és fordítgatni.<ref>Angoltudása irodalmi művek megértéséhez elegendő volt, de a beszédet nem értette, és ő sem tudott angolul beszélni.</ref> [[1845]] nyarán írta az ''Elveszett alkotmány'' című szatirikus eposzt, amelyet beküldött a [[Kisfaludy Társaság]] vígeposzpályázatára. A mű meg is jelent a ''[[Kisfaludy Társaság|Kisfaludy-társaság]] Évlapjai'' VII. kötetében, és vele a 25 arannyal járó pályadíjat is elnyerte, bár [[Vörösmarty Mihály|Vörösmarty]] nem volt teljesen elragadtatva, és bírálta [[Hexameter|hexametereit]]. A kritikai kifogások azonban nem vették el a kedvét, hanem inkább további munkára inspirálták Aranyt.{{refhely|Gyulai Pál 1884}}
[[1846]]-ban az [[Életképek|Életképekben]] (I. évfolyam 13. sz.)<ref>{{cite journal |author=Frankenburg Adolf |title=Életképek 1846-os számai |url=http://real-j.mtak.hu/7340/1/MTA_Eletkepek_1846_1.pdf |format=pdf |language=magyar |issue=[[Életképek]] |pages=283-388 old. |authorlink=Frankenburg Adolf |accessdate=2016-05-05}}</ref> jelent meg tőle egy falusi beszély<ref>A beszély a [[novella]] régies elnevezése.</ref> ''Egyszerű beszélyke, Úti tárczámból'' és egy másik ''Hermina'' címmel (II. évf. 9. sz.). Az 1846. március 28-án megjelent ''Egyszerű beszélyke'' volt Arany első nyomtatásban is megjelent írása.{{refhely|Sőtér István IV. kötet}}
[[1846]]-ban a Kisfaludy Társaság ismét irodalmi pályázatot írt ki. A feltételeket [[Erdélyi János (költő)|Erdélyi János]] állította össze és az ő utasítására került be a követelmények közé a [[Népiesség|népies forma]]. A pályázat szövege: ''„Készíttessék költői beszély, versben, melynek hőse valamelyt, a nép ajakin élő történeti személy, például: [[I. Mátyás magyar király|Mátyás király]], [[Toldi Miklós (nemes)|Toldi Miklós]], [[Kádár vitéz]] stb. A forma és a szellem pedig [[Ütemhangsúlyos verselés|népies legyen]]. Beküldés határnapja: 1846. november 26. Jutalma 15 db arany.”'' A ''[[Toldi]]'' már egyöntetű siker volt, és olyan győzelmet aratott, hogy nemcsak a pályadíjat nyerte meg ([[1847]]. [[Február 6.|február 6-án]], amikor a társaság a kitűzött 15 aranyat kivételesen húszra emelte), hanem bírálói ámulatát is. Egyszerre ünnepelt költő lett, és jeles írók figyelme fordult feléje. [[Petőfi Sándor|Petőfi]] volt az egyik első, aki üdvözlésére sietett, és ismeretlenül is levélben köszöntötte őt. [[Szilágyi István (pedagógus)|Szilágyi István]] találóan azt írta Aranynak, hogy a ''„Toldinak nagy máj adatik”''.{{refhely|Sőtér István IV. kötet}}
Ez időtől kezdve folyamatosan írt az Életképekbe és a [[Pesti Divatlap|Pesti Divatlapba]] kisebb költeményeket. [[1847]]-ben készítette el a ''[[Toldi estéje|Toldi estéjét]]''<ref>1847. július elején fogott hozzá. A mű teljes egészében 1848. március 20-án már kész volt, de csak hat és fél évvel később, 1854 őszén jelent meg.</ref> és a ''Murány ostromá''t. [[1847]]. [[Június 1.|június 1]]. és 10. között Petőfi meglátogatta Szalontán, és ettől kezdve szoros barátság szövődött köztük, és rendszeresen leveleztek egymással. Ez a levelezés jelentős kor- és irodalomtörténeti emlék is egyben. Úgy írt és fordított ez időben, hogy közben napi tíz órai hivatali munkáját is ellátta, és családjára is odafigyelt.{{refhely|Sőtér István IV. kötet}}
[[1848]]-ban a Kisfaludy Társaság felvette tagjai közé. Az [[1848–49-es forradalom és szabadságharc]] alatt néhány verset és kisebb elbeszélést írt a folyóiratokba és néhány közéleti helyzetdalt is. Ilyen például a ''Nemzetőr-dal'', de nem hozott létre jelentős esztétikai értéket, mivel az akkori közösségi hangnem távol állt az ő líraiságától. A kormány által megindított ''Nép Barátja'' című lap szerkesztését nem vállalta el, csak nevét kölcsönözte hozzá, míg a tényleges szerkesztő [[Vas Gereben]] volt. Arany eleinte több költeményt és népszerű politikai cikket írt a lapba, de [[1849]]. [[Március 10.|március 10-től]] már a neve sem fordult elő a lapon. [[Nemzetőrség (1848)|Nemzetőrként]] részt vett a szalontai századdal az [[Arad ostroma|aradi várostrom]] körüli katonai szolgálatban, mintegy 8-10 hétig. Az ostromról így írt a ''Bolond Istók''ban: ''„Oh láttam én (hisz ott is voltam egyszer, / Tenni kevés – de halni volt esély)”''<ref>{{CitPer|author=Ferenczes István|tit=Veszedelmekről álmodom|per=Kortárs|tom=58|fasc=9|ann=2014|lun=09|url=https://epa.oszk.hu/00300/00381/00195/EPA00381_kortars_2014_09_24413.htm}}</ref> Jegyzői hivatalát [[1849]] tavaszáig megőrizte, de a város nem tudta fizetni a tisztviselőit, ezért a [[Szemere Bertalan]] által vezetett [[Belügyminisztérium|belügyminisztériumn]]ál vállalt fogalmazói állást. Hivatalával összefüggésben [[Debrecen|Debrecenbe]], majd [[Pest (történelmi település)|Pestre]] költözött. Mindeközben családja végig Szalontán maradt, ahol otthont adott Petőfi családjának 1849. január végétől májusig.{{refhely|Gyulai Pál 1884}}
Június végétől megkezdődött a cári csapatok előli menekülés. Nagyszalontán keresztül vonultak vissza [[Görgei Artúr|Görgei tábornok]] egységei. Néhány napig nála húzta meg magát menekülő és bujdosásra kényszerülő írótársai közül [[Vörösmarty Mihály]] és [[Bajza József (költő)|Bajza József]]. Nemsokára ő is menekülni kényszerült, és egy ideig bujdosott. Erdőkben töltötte napjait, és később, amikor visszamerészkedett otthonába, éjszakákat töltött felöltözve, arra várva, hogy hátha őt is letartóztatják. A félelem mellett legalább ilyen teherként jelentkezett, hogy ''„csaknem földönfutó valék”'', ahogy írta később, mert az [[1849]]-es év a teljes anyagi ellehetetlenülés szélére sodorta családját.{{refhely|Sőtér István IV. kötet}}
=== A szabadságharc után ===
{{Képdia|Kép:Ferenc Somorjai Arany János háza Nagykörösön.jpg|<center>Arany János lakóháza [[Nagykőrös]]ön</center>|Kép:Arany János plaque-3 (Nagykőrös Hősök tere 8).jpg|Arany János emléktáblája a nevét viselő általános iskola bejáratánál (Nagykőrös, Hősök tere 8.)|Kép:Arany János plaque-2 (Nagykőrös Hősök tere 8).jpg|Emléktáblája a nevét viselő általános iskola falán. Molnár Elek munkája, 1960. (Nagykőrös, Hősök tere 8.)|Kép:Arany János plaque (Nagykőrös Hősök tere 6).jpg|Emléktáblája a nevét viselő gimnázium falán. Sári Zoltán munkája, 2010. (Nagykőrös, Hősök tere 6.)|cím=Arany Nagykőrösön}}
A [[világosi fegyverletétel]] után nem tartóztatták le, rövid bujdosás után közéleti szerepet nem vállalva visszatérhetett Szalontára. Időközben [[Tisza Lajos (politikus, 1798–1856)|Tisza Lajos]] meghívta [[Geszt (település)|Gesztre]], hogy fiát, [[Tisza Domokos|Domokost]] költészetre oktassa. Szemléletének ellentmondásaira jellemző, hogy az elbukott [[1848–49-es forradalom és szabadságharc|magyar szabadságharcot]] kétféleképpen tudta értékelni: elégikusan és ironikusan is. Arany a bukás után sem pártolt el a szabadságharc eszméitől. ''Évnapra'' című versében (1850) 1848. március 15. megtagadását a Megváltót eláruló Péter gyengeségéhez hasonlítja; a ''Szondi két apródja'' a szabadságharc dicsőítése. S ha a ''Nagyidai cigányok''ban torzképet rajzol is a szabadságharcról, a gúny csak a vezéreket éri, mert Arany másképp ítélte meg a vezetőket és másképp a népet.<ref>{{cite web |title=Komlós Aladár: A magyar költészet Petőfitől Adyig |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/komlosaj.htm |publisher=http://magyar-irodalom.elte.hu |accd=2017-03-19}}</ref> 1850-től kezdve megint írhatott, és folyóiratokban leginkább lírai költeményeket publikált. A [[Bach-korszak|Bach-korszakban]] lassan azért hozzákezdett anyagi helyzetének rendezéséhez, a ''Nép Barátja'' tiszteletdíjaiból nádfedeles, rozzant, kétszobás parasztházat tudott vásárolni, melyhez volt egy apró gyümölcsöse is.{{refhely|Gyulai Pál 1884||Sőtér István IV. kötet|}}
Az [[1851]]. év második felében a nagykőrösi református egyház hívására a [[Arany János Református Gimnázium|Nagykőrösi Református Gimnáziumban]] a magyar és [[latin nyelv]] és irodalom tanárává választották, és az év őszén egész családjával [[Nagykőrös|Nagykőrösre]] költözött. A hely [[Mezőváros|mezővárosi]] létéből fakadó parlagiasságával feloldhatatlan ellentmondásba került tehetsége, tíz éven keresztül mégis lelkiismeretes és pontos tanár volt. [[Folyóirat|Folyóiratokban]] rendszeresen publikált, és ebből az időszakból származnak nagyobb művei is. Nagykőrösi tanárként rendszeresebben tanulmányozta a magyar nyelvet és az irodalmat, illetve a világirodalom nagyobb eposzait is újraolvasta. Ez időben néhány értekezést írt az ''Uj Magyar Museum''ba is (1854, 1857).{{refhely|Sőtér István IV. kötet}}
=== A Magyar Tudományos Akadémia tagjaként ===
A [[Magyar Tudományos Akadémia]] tízévi szünet után megtartott nagygyűlésén, [[1858]]. [[December 15.|december 15-én]] előbb levelező, majd még aznap rendes tagjává választotta. Székét [[1859]]. [[Október 31.|október 31-én]] ''Zrínyi és Tasso'' című értekezésével foglalta el. Ekkoriban sokat betegeskedett, gyomorbántalmak kínozták. Hívták többfelé is tanárnak, de nem vágyott új állásra, mert sokkal mozgalmasabb életet szeretett volna. [[1860]]. [[Július 15.|július 15-én]] a [[Kisfaludy Társaság]] igazgatójává választotta, így [[Pest (történelmi település)|Pestre]] költözött, és még az év november 7-én megindította a [[Szépirodalmi Figyelő|Szépirodalmi Figyelőt]], amelyet [[1862]]. [[Október 30.|október 30-ig]] szerkesztett.{{refhely|Gyulai Pál 1884}}
[[Szalay László (jogász, 1813–1864)|Szalay László]] elhunytával a Magyar Tudományos Akadémia titkára lett [[1865]]. [[Január 26.|január 26-tól]], majd az új alapszabályok kihirdetése után, [[1870]]. [[Január 17.|január 17-én]] a közgyűlés főtitkárrá nyilvánította.{{refhely|Gyulai Pál 1884}} [[Toldy Ferenc]] halála után, 1875-ben egyetemi tanszék vezetésére kérték fel: [[Trefort Ágoston]] vallás- és közoktatásügyi miniszter felajánlotta a [[Eötvös Loránd Tudományegyetem|budapesti egyetemen]] megüresedett magyar irodalomtörténeti tanszéket. A nagy megtiszteltetés ellenére ezt, egészségi állapotára való hivatkozással, nem tudta elvállalni.<ref>{{cite web |title=Arany János élete |url=https://www.arcanum.hu/hu/online-kiadvanyok/MagyarIrodalom-magyar-irodalomtortenet-1/magyar-irodalomtortenet-pinter-jeno-5116/6-a-magyar-irodalom-a-xix-szazad-masodik-harmadaban-1C05/arany-janos-1EC8/arany-janos-elete-1EC9/ |accessdate=2019-11-26 |publisher=arcanum.hu |language=magyar}}</ref>
Megromlott egészsége miatt a főtitkári teendők alól is több ízben kérte felmentését. 1877-ben lemondott főtitkári hivataláról, de ezt az akadémia nem fogadta el, hanem egy évre szabadságra küldték. Miután ez letelt, megismételte lemondását, amit az akadémia szintén nem fogadott el, hanem megint egy évre szabadságolták. 1879-ben harmadszor is kérte a felmentését, és ezt már elfogadták. A döntéshozóknak közben az is feltűnt, hogy főtitkári fizetését, melyet egyébként az alapszabályok életfogytig biztosítottak neki, már az eltelt két évben sem vette fel. Arany ki is jelentette, hogy végleges visszalépése után sem fogja azt elfogadni. Ezért arra kérték, hogy legalább az akadémia palotájában levő főtitkári lakást használja a továbbiakban, és – hogy senkiben se merülhessen fel kétely – a nagygyűlés tiszteletbeli főtitkári címmel ruházta fel, és igazgatótaggá választotta őt.{{refhely|SZTE Egyetemi Könyvtár}}
=== ''A walesi bárdok'' keletkezése és leánya halála ===
{{bővebben|A walesi bárdok}}
[[File:Zichy-arany-cropped-p047.jpg|250x250px|[[Zichy Mihály]]: Illusztráció A walesi bárdokhoz]]
1857-ben, [[I. Ferenc József magyar király|Ferenc József]] és [[Wittelsbach Erzsébet magyar királyné|Erzsébet királyné]] magyarországi látogatása alkalmából a kormánypárti [[Budapesti Hírlap (napilap, 1853–1860)|Budapesti Hírlap]] főszerkesztője – mások mellett – felkérte Arany Jánost egy üdvözlőbeszéd megírására. Az alkotást akadályozó tartós betegségre hivatkozva<ref>Tisztelt Szerkesztő Ur! Vettem becses felszólitását, de nem vagyok oly állapotban, hogy annak eleget tehessek. Physicai bajom, mely a lélekre tompítólag, a kedélyre leverőleg hat, s melyben évek óta sinlődöm, akadályoz a munkában. Hivatkozom az összes szépirodalmi lapokra s egyéb folyóiratokra, melyek jóllehet szűntelen sűrgetnek, egy év óta alig közöltek tőlem valamit, s ha igen, az is valamely régibb töredék volt. Így hát nem én vagyok az oka, ha rokkant Pegazusommal nem jelenhetek meg a fényes tisztelgésnél: lesznek mások, fiatalabbak, kik azt a helyet díszesebben betöltik mint én. [...] tisztelője Arany János</ref> tért ki a felkérés elől. Mindezek ellenére az utókor a [[2000-es évek]] közepéig azt gondolta, ekkor írta, saját fiókjában tartva, ''A walesi bárdok'' című balladát. [[Milbacher Róbert]] irodalomtörténész szerint a vers valójában csak négy évvel később, 1861 körül született, részben [[Széchenyi István]] ''Ein Blick'' című pamfletjének hatására, részben pedig mert megtudta, hogy egy másik költő, [[Tóth Endre (költő, 1824–1885)|Tóth Endre]] ''Ötszáz gael dalnok'' címmel ugyancsak megírta a walesi bárdok történetét. Például „a koronád legszebb gyémántja” szófordulatot szó szerint Széchenyitől vette át Arany.<ref name="Milbacher Róbert">{{cite journal |author=Milbacher Róbert |year=2006/1 |title=Szegény, szegény Eduard királyǃ? (Újabb adalékok A walesi bárdok értelmezéséhez) |url=http://www.irodalomtortenet.hu/pdf/IT_2006-1.pdf |format=pdf |language=magyar |issue=Irodalomtörténet |pages=44–90. old. |accessdate=2016-10-29 |archivedate=2013-12-19 |archiveurl=https://web.archive.org/web/20131219075720/http://www.irodalomtortenet.hu/pdf/IT_2006-1.pdf}}</ref> [[Hász-Fehér Katalin]] ''A walesi bárdok keletkezés- és közléstörténete című elemzésében'' azt a megállapítást tette, hogy az Arany-filológia mai állása szerint nincs közvetlen bizonyíték a keletkezés pontos időpontjára.<ref>{{cite journal |author=Hász-Fehér Katalin |year=2014/2 |title=Bárdok Walesben A walesi bárdok keletkezés- és közléstörténete |url=http://epa.oszk.hu/02500/02518/00344/pdf/EPA02518_irodalomtortenet_2014_2_186-223.pdf |format=pdf |language=magyar |issue=Irodalomtörténet |pages=187–223. old. |accessdate=2017-03-16}}</ref>
Ebben az „óangol” balladában [[I. Eduárd angol király|Eduárd angol király]] látogatásra indul újonnan leigázott tartományába, [[Wales|Walesbe]]. Mindenki számára nyilvánvaló volt, hogy Edward maga Ferenc József, a walesi bárdok pedig a magyar költők. [[1863]]-ban az általa ugyanebben az évben indított ''Koszorú'' című lapban jelent meg először ''A walesi bárdok''. A verset a cenzúra miatt nem sajátként, hanem egy óangol ballada fordításaként írta alá.<ref name="Milbacher Róbert" /><ref>{{cite web |date=2010-04-04 |title=Magyarország története, 30. rész – Út a kiegyezéshez'', ismeretterjesztő filmsorozat 2009 rendező: M. Nagy Richárd, Varga Zs. Csaba |url=http://nava.hu/id/970002/ |accessdate=2016-11-01 |publisher=ujszo.com |language=magyar}}</ref>
A Koszorú folyóirat [[1865]] júniusának végén szűnt meg. Arany számos cikket, írói arcképeket, valamint bírálatot és értekezést írt a magyar verselésről. Lelkének belső feszültsége jót tett költészetének, mert versek írására ösztönözte. Lírája ebben az évtizedben bontakozott ki legsokoldalúbban. Mélyen átélte a polgárosodó világ [[elidegenedés]]ét. [[1865]]-ben leánya, Juliska, méhgyulladást kapott – szervezete legyengült, majd a [[Gümőkór|tüdőbaj]] végképp legyőzte, fél évvel azután meghalt, hogy [[Szél Kálmán|Szél Kálmánt]]ól kislánya született, Szél Piroska. Szeretett leányának váratlan halála mélyen megrendítette Aranyt, olyannyira, hogy amikor verset kezdett írni lánya emlékére, a negyedik sor után megakadt, és ezt írta füzetébe a folytatás helyett: ''„Nagyon fáj! nem megy!”'' A családi életben bekövetkezett tragédia hatására több mint egy évtizedre a költő is elhallgatott benne. [[1868]]-tól Aranyék nevelték Juliska kislányát, aki 21 éves korában édesanyjához hasonlóan a tüdőbaj áldozata lett és 1882 októberében elhunyt. A tragédiát Arany már nem élte meg.{{refhely|Gyulai Pál 1884||Sőtér István IV. kötet|}}
=== Betegsége, halála és temetése ===
[[Deák Ferenc (igazságügy-miniszter)|Deák Ferenc]] és a [[kiegyezés]] híve volt, de ''A walesi bárdok'' című művében is kifejezte, hogy a leigázott tartomány urát nem szíveli. A költőfejedelem emblematikus alakja volt korának, és ezt az uralkodó, [[I. Ferenc József magyar király|Ferenc József]] felismerte. 1866-ban elismerve érdemeit és fejet hajtva költői munkássága előtt, [[Érdemkereszt (Ausztria–Magyarország)|Arany Érdemkereszttel]] tüntette ki. A Belügyminisztériumból az MTA címére kiküldött érdemkeresztet a költő nem akarta elfogadni, ezért értesítette a belügyminisztert, hogy visszautasítja azt. A megkeresésére hamar választ kapott, hogy nem teheti meg, mert a ''Hivatalos Lap'' már leközölte a kitüntetést. Ezután nem tehetett egyebet, minthogy a kitüntetés mellé írt egy fricskát, és a fiókjában felbontatlanul őrizte, a kettőt együtt halála után találták meg.<ref>Az érdemrendet rejtő doboz csomagolópapírjára ezt írta: ''„Hasfájásban szenvedek, Érdemkeresztet küldenek, Ha csak egyet tojhatnám, Száz keresztért nem adnám.”'' A történetet [[Vámbéry Rusztem]] közlése alapján 1942 táján [[Faludy György]] jegyezte le.</ref><ref>{{cite web |date=2016-08-27 |title=Arany Jánosnak sem kellett az érdemkereszt |url=http://ujszo.com/online/panorama/2016/08/27/arany-janosnak-sem-kellett-az-erdemkereszt |archiveurl=https://web.archive.org/web/20161030001005/http://ujszo.com/online/panorama/2016/08/27/arany-janosnak-sem-kellett-az-erdemkereszt |archivedate=2016-10-30 |accessdate=2016-10-29 |publisher=ujszo.com |language=magyar}}</ref>
{{Szövegdoboz|'''''Arany Szent István-rendje''''' Fönnmaradt egy anekdota, amely szerint egy főrend [[Andrássy Gyula (politikus, 1823–1890)|Andrássy Gyula]] miniszterelnökkel beszélve nehezményezte az Aranynak adományozott rendjelet, mondván, hogy ez a rendjel eddig csak igen magas rangúaknak járt ki. Mire Andrássy ezt felelte: „– Meg tudná mondani Excellenciád, ki volt [[Raffaello Sanzio|Raffaelo]] korában a külügyminiszter?” Tényleg, ki is volt a külügyminiszter?<ref name="Szent István-rend">{{cite web |author=Kiczenko Judit |url=https://btk.ppke.hu/uploads/articles/115865/file/247_258_Kiczenko.pdf |format=pdf |title=ARANY JÁNOS ÉS A SZENT ISTVÁN-REND |date=2016-08-27 |accessdate=2016-10-29 |language=magyar |publisher=btk.ppke.hu |archiveurl=https://web.archive.org/web/20140716034808/https://btk.ppke.hu/uploads/articles/115865/file/247_258_Kiczenko.pdf |archivedate=2014-07-16 }}</ref>|keretszín=#A3B0BF|háttérszín=#CEDFF2}} Ferenc József koronázása alkalmával újabb, immáron fejedelmi kitüntetést adományozott a magyar nemzet akkor élő legnagyobb költőjének, [[1867]]-ben a ''kiváltságosak'' közé emelte, és a [[Magyar Királyi Szent István-rend|Szent István-rend]] kiskeresztjével tüntette ki. Arany ezt az uralkodói kegyet is megpróbálta visszautasítani, de [[Eötvös József (író)|báró Eötvös József]] vallás- és közoktatásügyi miniszternek írt tiltakozására azt a választ kapta, hogy: ''„…neked jogodban áll e rendjelt nem hordani, s ezt alkalmasint tenni is fogod, de azt visszaútasítani, ahhoz bizony, barátom, nincs jogod. Nemcsak a fejedelem iránti tiszteletet, de más érdekeket sértenél meg…”'' Közben az újságból értesült, hogy a belügyminiszter ''„Budán folyó év és hó 11-én 2366. elnöki szám alatt kibocsátott”'' rendelete az ő kitüntetéséről szól. Ekkor tiltakozásul írt [[Wenckheim Béla|báró Wenckheim Béla]] belügyminiszternek is. A két miniszter személyesen is felkereste, és végül hosszas kapacitálás és levélváltások után írta e sorokat: ''„– Én tartottam magamat, míg lehetett, de végre belátván, hogy nagy demonstrationalis látszat nélkül (mitől mindig irtóztam) a visszautasítás meg nem történhetik, beleegyeztem…”''<ref name="Szent István-rend" />
[[1865]]-től [[1876]]-ig eredeti művein alig dolgozott valamit. Miután megvált főtitkári hivatalától, a visszavonulás jót tett irodalmi munkásságának, mert számos lírai költeményt és balladát írt ez időben. Művei a [[Margit-sziget]] [[Tölgy|tölgyf]]ái alatt, egyfajta őszi virágzásképpen születtek. [[1879]]-ben készült el a ''[[Toldi szerelme]]'' című elbeszélés tizenkét énekben, melynek első kiadása két hónap alatt elfogyott. A [[Magyar Tudományos Akadémia]] és a Kisfaludy Társaság is jutalmával tüntette ki. A Társaság ötvenaranyos jutalmából alapítványt hozott létre. Élete végén Arany nagyobb vállalásai közül a ''Toldi szerelmé''t tudta befejezni. Irodalmi tevékenységét ekkor már az is nehezítette, hogy megrendült az egészsége: [[1868]]-ban veszélyes máj- és bélgyulladást állapítottak meg nála, emiatt rendszeres gyógyfürdőzést írtak elő neki. Évente látogatta a [[Karlovy Vary|karlsbadi]] fürdőt, de megfordult [[Szliácsfürdő|Szliácsfürdőn]] is.<ref>{{cite web |title=Slávni návštevníci kúpeľov |url=http://www.kupelesliac.sk/Slavni-navstevnici-kupelov.10.0.html |archiveurl=https://web.archive.org/web/20161105145639/http://kupelesliac.sk/Slavni-navstevnici-kupelov.10.0.html |archivedate=2016-11-05 |accessdate=2016-11-25 |publisher=kupelesliac.sk |language=szlovák}}</ref> [[1870]]-ben korának legnevesebb sebésze, [[Kovács Sebestény Endre (sebész, 1814–1878)|Kovács Sebestény Endre]] operálta meg, és több epekövét is eltávolította. [[Hallás|Hallása]] és [[Látás|látása]] is romlani kezdett, de felesége gondoskodásának és a megfelelő étrendjének köszönhetően néha-néha megint elláthatta hivatalát, és még az irodalommal is foglalkozhatott. A fulladozó, nehéz légzése azonban napközben is gyakran jelentkezett, de különösen a reggeli és a hajnali órákat nagyon megszenvedte.{{refhely|Gyulai Pál 1884||Sőtér István IV. kötet|}}
Az [[1870-es évek]] során befejezte a ''[[Hamlet, dán királyfi|Hamlet]]'' és a ''[[János király]]'' fordítását, lefordította [[Arisztophanész]] összes művét, elkészült a ''Bolond Istók''kal, valamint megírta az ''[[Őszikék]]'' című ciklusát, és bevégezte a Toldi-trilógia középső részét, a ''Toldi szerelmé''t. Régi betegsége, a heveny hörgőgyulladás [[1878]] áprilisában újra kitört rajta, de a szokottnál súlyosabban. Végül – egy [[városi legenda]] szerint – a pesti Petőfi téri Petőfi-szobor [[1882]]. [[Október 15.|október 15-i]] avatásán meg is hűlt, és [[Tüdőgyulladás|tüdőgyulladást]] kapott. Ettől kezdve állapota fokozatosan romlott, és egy héttel később, [[Október 22.|október 22-én]] déli 12 órakor elhunyt Budapesten, a Magyar Tudományos Akadémia palotájában lévő szolgálati lakásában, élete 66., házasságának 42. évében.{{refhely|Gyulai Pál 1884||Sőtér István IV. kötet|}}
Temetése [[Október 24.|október 24-én]], délután 3 órakor a [[Fiumei úti sírkert|Kerepesi temetőben]] a [[Református egyházak|református egyház]] szertartása szerint zajlott. Végső nyughelyére az akadémia tagjai testületileg kísérték. Ravatalánál [[Gyulai Pál (irodalomtörténész)|Gyulai Pál]], [[Szász Károly (költő, 1829–1905)|Szász Károly]] és [[Török Pál (püspök)|Török Pál]] református püspök tartott gyászbeszédet. Később a [[Margit-sziget|Margit-szigetr]]ől áttelepített tölgyeket ültettek a sírja fölé.<ref>{{cite web |title=Arany János sírja – a Nemzeti Sírkert 22. parcellája |url=http://muemlekek.info/muemlek/arany-janos-sirja.php |archiveurl=https://web.archive.org/web/20161029174410/http://muemlekek.info/muemlek/arany-janos-sirja.php |archivedate=2016-10-29 |accessdate=2016-10-29 |publisher=muemlekek.info |language=magyar}}</ref> A [[Kisfaludy Társaság|Kisfaludy Társaságban]] [[1883]]. [[Október 24.|október 24]]-én, Gyulai Pál a Magyar Tudományos Akadémián,<ref>{{cite web |date=1883-10-24 |title=Gyulai Pál emlékbeszéde Arany János felett |url=https://mek.oszk.hu/04900/04968/html/02.htm#49 |accessdate=2016-10-29 |publisher=GYULAI PÁL VÁLOGATOTT MŰVEI |language=magyar}}</ref> az [[1884]]. [[Június 8.|június 8]]-i ülésen pedig Szász Károly tartott fölötte emlékbeszédet.{{refhely|SZTE Egyetemi Könyvtár}}
== Arany jelentősebb költeményei ==
{{képdia|Kép:Arany János költő.jpg|Arany János 1856-ban [[Barabás Miklós (festő)|Barabás Miklós]] litográfiája|Kép:Arany János Barabás 1848.jpg|Arany János 1848-ban [[Barabás Miklós (festő)|Barabás Miklós]] litográfiája|Kép:Arany János.jpg|Arany János|Kép:17. Arany János.jpg|Arcképe képeslapsorozaton|Kép:Arany Morelli.jpg|[[Morelli Gusztáv]] fametszete|Kép:Arany János öreg kép.jpg|A költő arcképe|Kép:Arany János arcképe (Ellinger Ede, 1880).jpg|[[Ellinger Ede]] fényképe (1880)|Kép:Arany János portréja (Pollák Zsigmond, 1887).jpg|[[Pollák Zsigmond]] metszete Ellinger fényképe alapján (1887)|cím=Képek a költőről}} {{bővebben|Arany János költészete}} {{idézet2|''Arany János az európai magyar olvasó legnagyobb bánata: Európa nem vette tudomásul. Holott – vélik – ő mutathatta volna meg legjobban, mire képes ez a nyelv és ez a költészet: ő volt a magyar vers és nyelv legnagyobb mestere.''|[[Németh G. Béla]]}}
A [[magyar irodalom]] legkiemelkedőbb [[Epika|epikus]] költője és az egyik legnagyobb magyar népi költőfejedelem.<ref>{{cite web |author=Tarlósi János |date=2014-03-01 |title=Arany János a népi költőfejedelem |url=http://delikronika.webnode.hu/news/arany-janos-a-nepi-koltofejedelem-tarlosi-janos-olvass-tovabb-http-delikronika-webnode-hu-news-arany-janos-a-nepi-koltofejedelem-tarlosi-janos-keszits-sajat-weboldalt-ingyen-http-www-webnode-hu/ |archiveurl=https://web.archive.org/web/20161109221348/http://delikronika.webnode.hu/news/arany-janos-a-nepi-koltofejedelem-tarlosi-janos-olvass-tovabb-http-delikronika-webnode-hu-news-arany-janos-a-nepi-koltofejedelem-tarlosi-janos-keszits-sajat-weboldalt-ingyen-http-www-webnode-hu/ |archivedate=2016-11-09 |accessdate=2016-11-09 |publisher=Déli Magyar Krónika |language=magyar}}</ref> Majdnem fél évszázados költői munkássága során folyamatosan, de mennyiségileg és minőségileg egyenetlen eloszlásban születtek költeményei, ám mégis tökéletes irodalmi művek sokaságát alkotta meg. Jelentős vers minden költői szakaszában található. Pályakezdésének ideje az 1845–1849 közötti időszak. A következő a szabadságharc utáni költészete (1849–1866), azután a hazáját és a családját ért csapások miatt hosszú ideig tényleg hallgatag ember lett, és a ''„szünetelt korszak”'' követett, amikor egyáltalán nem írt verseket. Pályafutása végén azonban rövid időre megint visszatért költőként, és ekkor született sorrendben a harmadik költői korszaka, az [[Őszikék]] (1877–1880), amikor viszonylag rövid idő alatt nagyon sokat alkotott. Remekbe szabott balladái miatt kortársai „a ballada Shakespeare-jeként” tisztelték, és az írók közül kiemelkedett páratlanul gazdag magyar szókincsével is.<ref>{{cite web |title=Arany János lírája |url=http://tudasbazis.sulinet.hu/hu/magyar-nyelv-es-irodalom/irodalom/irodalom-10-osztaly/arany-janos/arany-janos-liraja |accessdate=2016-03-06 |publisher=sulinet.hu |language=magyar}}</ref><ref>{{cite web |author=Géher István |year=2005 |title=MAGYAR „HAMLET”: ARANY JÁNOSFURCSA ÁLCÁJA |url=http://www.holmi.org/arch/2005/12/07.html |accessdate=2016-07-03 |publisher=holmi.org |language=magyar}}</ref>
Hogy mennyire gazdag volt ez? Összehasonlították az irodalmi műveiben használt egyedi szavakat [[Vörösmarty Mihály]], [[József Attila]], [[Petőfi Sándor]], [[Babits Mihály]] és [[Ady Endre]] hasonló műveiben előfordulókkal. Arany igen jelentős, 60 ezer körülit, a második Vörösmarty 44 ezer körülit, míg a közülük sereghajtó Petőfi 20 ezer körüli egyedi szót használt.<ref>A magyar nyelvben összesen 60-100 ezer ilyen szó van, és egy átlagos értelmiségi egyévnyi beszédét rögzítve körülbelül 25-30 ezret használ.</ref><ref>{{cite web |author=Géher István |date=2005-03-31 |title=Ennek a magyar költőnek a legnagyobb a szókincse |url=http://www.szeretlekmagyarorszag.hu/ennek-a-magyar-koltonek-a-legnagyobb-a-szokincse/ |accessdate=2016-10-29 |publisher=szeretlekmagyarorszag.hu |language=magyar}}</ref><ref>{{cite book |author=főszerk. [[Adamikné Jászó Anna|A. Jászó Anna]] |title=A magyar nyelv könyve |publisher=Trezor, |year=2004, |pages=171. o. |city=Budapest}}</ref><ref>{{cite web |date=2015-03-30 |title=Legenda bizonyítva: megszámoltuk Arany szavait |url=http://www.origo.hu/techbazis/20150329-legenda-bizonyitva-raengedtuk-a-szupertechnologiat-a-verses-kotetekre.html |archiveurl=https://web.archive.org/web/20170303122757/http://www.origo.hu/techbazis/20150329-legenda-bizonyitva-raengedtuk-a-szupertechnologiat-a-verses-kotetekre.html |archivedate=2017-03-03 |accessdate=2017-03-02 |publisher=Origó Techbázis,}}</ref> Ilyen ma már ritkán használt [[Köznyelv|köznyelvi]] szavak például a műveiben előforduló olyan állatnevek, mint a toportyán ([[aranysakál]], ''Toldi'' – Negyedik ének)<ref>{{cite web |author=Arany János |title=Toldi Negyedik ének |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/tnegyedi.htm |accessdate=2016-10-29 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>) és a pitypalaty ([[fürj]], ''Télben'' című vers).<ref>{{cite web |author= |title=Arany János – Télben |url=http://meseld.hu/magyar-koltok-versei/arany-janos/542-arany-janos-telben |archiveurl=https://web.archive.org/web/20161030001018/http://meseld.hu/magyar-koltok-versei/arany-janos/542-arany-janos-telben |archivedate=2016-10-30 |accessdate=2016-10-29 |publisher=meseld.hu |language=magyar}}</ref>
=== Elbeszélő költeményei ===
Arany [[Elbeszélő költemény|elbeszélő költemények]], más néven verses vagy költői elbeszélések, illetve az ő idejében használatos elnevezéssel költői beszélyek formájában írta meg már az első komolyabb irodalmi alkotását is. Ez volt ''Az elveszett alkotmány''. Ezzel a Kisfaludy Társaság pályázatát elnyerte, de [[Vörösmarty Mihály]] még fenntartással fogadta Arany János bemutatkozását. A későbbi irodalmi szempontból sokkal jelentősebb költeményei azonban már meghozták a költői hírnevet és az általános elismerést.{{refhely|Gyulai Pál 1884}} [[Fájl:A Toldi kézirata.jpg|bélyegkép|200px|jobbra|A [[Toldi]] kézirata ([[Arany László (költő)|Arany László]] ajándékozta 1886-ban [[Lehr Albert|Lehr Albertnak]] annak emlékére, hogy Lehr Toldi-kommentárja megnyerte az [[Magyar Tudományos Akadémia|Akadémia]]<nowiki> nagyjutalmát)]]</nowiki>
A legjelentősebb – és mind közül kiemelkedik terjedelmében is – elbeszélő költeménye a ''Toldi-trilógia,'' mely ''a [[Toldi]]'' (1847), a ''[[Toldi estéje]]'' (1854) és a ''[[Toldi szerelme]]'' (1879) részekből áll össze. A művekben szereplő [[Toldi Miklós (nemes)|Toldi Miklóst]] sokáig kitalált személynek gondolták. Bebizonyosodott azonban, hogy Arany által a magyar hősök közé emelt, valóban kivételes fizikai adottságú bihari birtokos nemes valós személy volt. A trilógia nagy része történeti tényekkel is alátámasztható, azonban vélhetően vannak kitalált részek is benne, ilyen lehet például a testvérével kialakult konfliktusa, harca a [[Szürke farkas|farkasokkal]] vagy a cseh vitézzel vívott sajátos párbaja.<ref>{{cite web |author= |date=2015-09-16 |title=Ki volt valójában Toldi Miklós? |url=http://mult-kor.hu/ki-volt-valojaban-toldi-miklos-20150916 |accessdate=2016-11-08 |publisher=mult-kor.hu |language=magyar}}</ref>
Ez a trilógia azonban nemcsak Toldi nevét emelte magasba, hanem a szerzőét is halhatatlanná tette. Érdekesség, hogy a trilógia három része három különböző időpontban – teljesen más történelmi korszakokban – született, és nem a történések időrendjében készült el. Hasonló nagyszabású munka lehetett volna a [[Hunok|hun]] eredettörténetből vett ''Csaba-trilógia'' de ennek csak az első része, a ''[[Buda halála]]'' készült el teljesen.<ref name="Toldi trilógia">{{cite web |author= |title=Toldi trilógia |url=https://mek.oszk.hu/00500/00597/html/toldi.htm |accessdate=2016-11-07 |publisher=Arany János összes költeménye |language=magyar}}</ref>
Aranyt nemcsak szépíróként foglalkoztatta a verses elbeszélői forma, kortárs és klasszikus eposzértelmezéseiben, kritikáiban is írt a műfajról. Visszatérő elvárásként fogalmazta meg a „vérré válás” normáját. Ez alatt azt értette, hogy az [[eposz]] hitelét, értékét a közösségi befogadás biztosítja, a népi szájhagyományba való visszaépülés ugyanolyan műfaji követelmény, mint az [[eposzi kellékek]]. [[Takáts József (irodalomtörténész)|Takáts József]] irodalomtörténész hívta rá fel a figyelmet, hogy ez az eposzelmélet Arany [[Szokásjog|szokásjogi]] gondolkodására vezethető vissza. Lehetséges forrásként Arany másodjegyzőként szerzett jogi tapasztalatára hivatkozik, de meggyőző példákat hoz Arany nyelvészeti témájú írásaiból is. Mindkét esetben egy alulról érkező, gyakorlatból és közhasználatból építkező szabályrendszer érvényesül egy kívülről előírottal szemben. Innen jól látható, hogy Arany egyedi eposzfelfogása a korban jellemző szokásjogi gondolkodáson alapszik.<ref>{{Cite journal |author=Takáts József |title=Arany János szokásjogi gondolkodása |url=http://itk.iti.mta.hu/megjelent/2002-34/takats.pdf |journal=Irodalomtörténeti Közlemények |volume=CVI. |issue=3–4. |pages=295–313. |accessdate=2024-01-12}}</ref>
Jelentősebb elbeszélő költeményeinek rövid bemutatása:
* ''[[Toldi]]'' (1847): A Kisfaludy Társaság pályázatára készített, műfaját tekintve elbeszélő költemény, melyet vélhetően az előző pályázaton díjnyertes ''Az elveszett alkotmányt'' ért Vörösmarty bírálat is inspirált. A történet ihletét vélhetően [[Ilosvai Selymes Péter]] ''Az híres nevezetes Tholdi Miklósnak cselekedeteiről és bajnokságáról való história'' című krónikája adta. A kiírt pályázaton a mű nemcsak a díjat nyerte meg, hanem példátlan módon a kitűzött tizenöt aranyat kivételesen húszra emelték. Arany ezzel az alkotásával ünnepelt költővé vált, és jeles írók figyelme fordult felé. A tizenkét énekből álló költemény költői képekben gazdag, melyek közül az egyik legszebb az álom-[[allegória]]: ''„Majd az édes álom pillangó képében / Elvetődött arra tarka köntösében...”''<ref name="Toldi trilógia" /><ref>{{cite web |author= |title=A Toldi felépítése |url=http://tudasbazis.sulinet.hu/hu/magyar-nyelv-es-irodalom/irodalom/irodalom-6-osztaly/a-toldi-keletkezese-es-forrasai/a-toldi-szerkezete |accessdate=2016-11-07 |publisher=tudasbazis.sulinet.hu |language=magyar}}</ref>
* ''[[Toldi estéje]]'' (1854): A Toldi váratlanul nagy sikere ösztönözte az újabb mű megírására. Levelében értesítette barátját, [[Petőfi Sándor|Petőfi Sándort]], hogy „Egy ''Toldit'' akarok még írni, ''Toldi Estéjét…''” A kéziratot 1848. április 1-jén elküldte Petőfi Sándornak, de a forradalmi események miatt csak 1854 tavaszán jelent meg. A mű az irodalmivá emelt népnyelven íródott. Fogadtatása a késedelem ellenére lelkes volt. [[Eötvös József (író)|Eötvös József]] rögtön a megjelenés után Aranynak küldött levelében így írt: ''„Ha valaha művet láttam, mely minden követeléseimnek megfelelt: Toldi Estéje az…”'' [[Gyulai Pál (irodalomtörténész)|Gyulai Pál]], az egyébként rettenthetetlen kritikus nem kevesebbet állított, minthogy: ''„Arany Jánosé az első hely a magyar költészetben.”''<ref name="Toldi trilógia" /><ref>{{cite book |author=Arany János |title=Toldi estéje |publisher=Franklin Társulat |others=Magyarázta: Lehr Albert |year=1905 |edition= |location=Budapest |pages=5–12., 50–53 |language=magyar |id=}}</ref><ref>{{cite web |author= |title=Toldi estéje (1848) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyac.htm |accessdate=2016-12-02 |publisher=tudasbazis.sulinet.hu |language=magyar}}</ref>
* ''[[Buda halála]]'' (1863): Arany a [[kiegyezés]] előtti években írta Pesten. A mű a tervezett hun-trilógia egyedül befejezett része, melynek műfaját nem lehet egyértelműen meghatározni. A történetben Buda király megosztja hatalmát öccsével, Etelével. Ez a lemondás vezet aztán a király későbbi halálához. A [[Tragikomédia|tragikum]] kifejezése, a metaforákban gazdag fordulatok, nagy művészi hatású és korszerű alkotássá tette a költeményt.{{refhely|Sőtér István IV. kötet||Csáky Zsolt|}}<ref>{{cite web |author= |date=2013-04-12 |title=Arany János (1817-1882): BUDA HALÁLA |url=http://csicsada-irodalom-birodalom.blogspot.hu/2013/04/arany-janos-1817-1882-buda-halala.html |accessdate=2016-11-07 |publisher=Irodalom és művészetek birodalma |language=magyar}}</ref>
* ''[[A nagyidai cigányok]]'' (1851): A vers az 1848–49-es szabadságharc egyfajta ironikus értékelése, műfaja szatirikus eposz. A [[magyar nemesség]] azon liberális álláspontjával értett egyet, amely hitt a lassú, de szerves fejlődésben. Kossuth Lajos nézeteit nem fogadta el maradéktalanul, és álmodozónak gondolta. Ironikus szatírájának és világképének változásában [[Kemény Zsigmond]] ''Forradalom után'' című 1850-ben írt röpiratának volt nagy szerepe. A versben a groteszk hangvételt nagy nyelvi igénnyel szedte versbe, például ilyen, akár már komikusnak ható fordulatokkal: ''„Ló, három, szilajok, valamint a csiga, … Dicsőségünk nem fér papirosomra, Nohát nem is bántom. … Lenyakazva egymást, szépen megbékéltek. …Köröskörnyül immár meg van rakva sebbel, Mint az ángol ember kaputrokja zsebbel;”'' [[Reviczky Gyula]] szerint ez volt Arany legtöbbet vitatott és legzseniálisabb műve is egyben.{{refhely|Sőtér István IV. kötet||Csáky Zsolt|}}<ref>{{cite web |author= |date=2013-04-12 |title=A nagyidai cigányok (1851) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyad.htm |accessdate=2016-11-07 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* A ''[[Bolond Istók (elbeszélő költemény, Arany János)|Bolond Istók]]'' első éneke 1850-ben, míg a második 1878-ban készült el. A műfaja elbeszélő költemény, a cselekmény pedig Arany vándorszínészi élményein alapult. A vers a szerencsétlen sorsú alsó néposztályok életét mutatja be.{{refhely|Sőtér István IV. kötet||Csáky Zsolt|}}<ref>{{cite web |author= |title=Arany János összes költeményei |url=https://mek.oszk.hu/00500/00597/html/elbeszel.htm |accessdate=2016-10-30 |publisher=mek.oszk.hu |language=magyar}}</ref><ref>{{cite web |author= |title=Arany János elbeszélő költeményei |url=https://sites.google.com/site/magyarirokaranyjanos/home/versek-1847-1849/versek-1850-1852/versek-1865-1876/versek-1877-1882/aranynak-tulajdonitott/toldi-trilogia/elbeszelo-koeltemenyek |archive-url=https://web.archive.org/web/20161022233717/https://sites.google.com/site/magyarirokaranyjanos/home/versek-1847-1849/versek-1850-1852/versek-1865-1876/versek-1877-1882/aranynak-tulajdonitott/toldi-trilogia/elbeszelo-koeltemenyek |archiveurl=https://web.archive.org/web/20161022233717/https://sites.google.com/site/magyarirokaranyjanos/home/versek-1847-1849/versek-1850-1852/versek-1865-1876/versek-1877-1882/aranynak-tulajdonitott/toldi-trilogia/elbeszelo-koeltemenyek |archive-date=2016-10-22 |archivedate=2016-10-22 |accessdate=2016-10-30 |publisher=sites.google.com |language=magyar}}</ref>
* ''[[Toldi szerelme]]'' (1879): Élete vége felé a költő nagy vállalkozásai közül befejezett mű. Jóval terjedelmesebb és meséjében is bonyodalmasabb, mint bármelyik másik Arany-költemény. Nagy sikert aratott alkotás, első kiadása két hónap alatt elfogyott. A [[Magyar Tudományos Akadémia]] és a Kisfaludy Társaság is a jutalmával tüntette ki.<ref name="Toldi trilógia" /><ref>{{cite web |author= |title=Toldi szerelme |url=https://mek.oszk.hu/02200/02228/html/04/69.html |accessdate=2016-10-30 |publisher=A magyar irodalom története. |language=magyar}}</ref>
=== Lírai költeményei ===
Arany pályája több korszakra is felosztható, azonban [[Líra (műnem)|lírai]] költészetének darabjai minden egyes alkotói szakaszában megtalálhatóak. A majdnem fél évszázados költői tevékenységében ezek mennyiségileg és minőségileg is egyenetlen eloszlásúak. Jelentős és kiemelkedő korszak a nagykőrösi időszak. Az 1860-as években a lírai költészet a [[Bach-korszak]] bukásával talaját vesztette, és Pestre költözésétől ez nála is megfigyelhető, hiszen költészete másként bontakozik ki. Az 1861–1877 közötti időszakban átélt élmények lírai megörökítése ugyan elmaradt, de egyfajta kárpótlásként lírai szövegek azért előfordulnak az [[Őszikék]] versciklusában.<ref name="Lírája">{{cite web |author= |title=Arany János lírája |url=http://tudasbazis.sulinet.hu/hu/magyar-nyelv-es-irodalom/irodalom/irodalom-10-osztaly/arany-janos/arany-janos-liraja |accessdate=2016-10-30 |publisher=sulinet |language=magyar}}</ref><ref>{{cite web |author=Bori Imre |title=Az első "modern" verseskönyv: az Őszikék |url=https://mek.oszk.hu/00500/00596/html/tanulmanyok/bori85.html |accessdate=2016-12-07 |publisher=A magyar irodalom modern irányai I., Újvidék, 1985. 93-100 |language=magyar}}</ref> [[Fájl:Arany János 1867-ben (Simonyi Antal felvétele).jpg|bélyegkép|balra|250px|Arany János 1867-ben]] A szabadságharc utáni időkben a [[vallás]] szerepe a [[Természettudomány|természettudományok]] fejlődésével a korábbiakhoz képest bizonyos mértékben visszaszorult. A [[Mennyország|túlvilágba]] vetett hit és a földöntúli élet léte megkérdőjeleződött, és így megrázó élménnyé vált a [[halál]] véglegessége. Arany átérezte korának nagy világnézeti válságát és lélektani hatását, és költészetére az is hatott, hogy az európai szabadságküzdelmek mind sorra elbuktak. A magyar szabadságharc elvesztése miatt érzett kiábrándultság és az elvesztett remény lírai költészetére is jelentős hatást gyakorolt.<ref name="Lírája" />
Korai darabjai között két igazán kiemelkedő vers van: ''A rab gólya'' (1847) és a ''Nemzetőrdal'' (1848).
* ''[[A rab gólya]]'' (1847): Az 1847-ben írt népies költeménye a lírai kisepika szép példája. A versben szereplő rab madár egy [[fehér gólya]]. A madarak általában a szabadságot jelképezik, de itt a törött szárnyú gólya vélhetően a költő lelkiállapotát jeleníti meg. Ő ez időben Szalontán élt egyfajta vidéki elszigeteltségben, és valószínűleg ennek az érzésnek ad hangot a költemény.{{refhely|Csáky Zsolt}}<ref>{{cite web |author=Girasek Edmond |title=Madár-motívumok Arany János költészetében |url=http://www.doksi.hu/elemzes.php?order=Show&id=231 |accessdate=2016-11-09 |publisher=doksi.hu |language=magyar}}</ref>
* ''[[Nemzetőrdal (csárdás)|Nemzetőrdal]]'' (1848): A forradalmi lelkesedés és a népies dalköltészet egyesülése, mely a [[Verbunkos|katonatoborzók]] hangulatát idézi meg. Első sorában mindjárt előtör a nemzeti büszkeség is: ''„Ne félj, babám, nem megyek világra: / Nemzetemnek vagyok katonája.”'' Ez a költemény megzenésítését követően népdallá is vált.<ref name="Lírája" /><ref name="Nemzetőrdalok">{{cite web |author=Tary Lujza |title=Nemzetőrdalok |url=http://48asdalok.btk.mta.hu/peldatar/nemzetordalok |accessdate=2016-11-09 |publisher=48asdalok.btk.mta.hu |language=magyar}}</ref>
A későbbi és az [[1850-es évek|ötvenes évek]] első felének lírája javarészt [[Nagykőrös|Nagykőrösh]]öz köthető. A ''Letészem a lantot'' (1850) ugyan még a költözés előttire datálható, de ezeket a költeményeit a szabadságharc bukása érlelte lírikussá. E korszak (1849–1866) jelentősebb versei az alábbiak:<ref>{{cite web |author= |title=Lírája a nagykőrösi években |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/ajpalya3.htm |accessdate=2016-10-30 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[Letészem a lantot]]'' (1850): A mű fél évvel a szabadságharc leverése után íródott. A műfaja [[elégia]], és már a címe is beszédes, hiszen a költő tart a megtorlástól, és arra készül, hogy felhagy az írással. Két létállapotot állít szembe, egy értékben gazdag múltat és egy értékszegény világot, a jelent. A versszakok végén refrénként tér vissza a fájdalom: ''„Hová lettél, hová levél, Ó lelkem ifjúsága?”''{{refhely|Csáky Zsolt}}<ref>{{cite web |author= |title=Arany János: Letészem a lantot (verselemzés) |url=http://tananyag.net/irodalom/magyar-irodalom/arany-janos-leteszem-a-lantot-verselemzes |archiveurl=https://web.archive.org/web/20161108052236/http://tananyag.net/irodalom/magyar-irodalom/arany-janos-leteszem-a-lantot-verselemzes |archivedate=2016-11-08 |accessdate=2016-11-07 |publisher=tananyag.net |language=magyar}}</ref>
* ''[[Családi kör (költemény)|Családi kör]]'' (1851): Arany lirizált kisepikájának egyik legismertebb és méltán népszerű verse. A benne lévő bensőséges idill teljesen más, mint az ötvenes évek más ilyen jellegű lírai költeményeié. Olyan képi ábrázolást alkotott meg, amely a nép egyszerű fiának is eligazodást ad a nehéz időkre, és buzdít is egyben. Apaközpontú világával a ''Toldit'' idézi meg, és egyfajta hangulatos életképben ünnepi megvilágítást kap a család mindennapos együttléte, ahova a vendégként fogadott ''„béna harcfi”'' képében betör a történelmi valóság is.<ref>{{cite web |author= |title=Családi kör (1851) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyae.htm |accessdate=2016-10-30 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[Kertben]]'' (1851): [[Pesszimizmus|Pesszimista]] életszemléletű irásainak egyikke. A mű szavait idézve: ''„Közönyös a világ… az élet – Egy összezsúfolt táncterem, … Nagy részvétel, ha némelyikünk – Az ismerőst … megismeri.”'' A költeményben feltör a szabadságharc leverése miatt érzett elkeseredés, amelyet a költő iróniával fejez ki. A [[Világosi fegyverletétel|fegyverletétel]] után ugyan fejlődésnek indult a [[Kapitalizmus|tőkés rendszer]], de az elsősorban nem magyar érdekeket szolgált. A polgárosodástól a [[Magyarok|magyarság]] többsége csak hátrányokat szenvedett. Az [[Alexander Bach]] nevével fémjelzett korszak tönkretette a személyes kapcsolatokat, úrrá lett sokakon az [[elidegenedés]], hiszen ez a rendszer egyfajta gépnek tekintette az embereket. Ez a vers ennek a fásultságnak egyfajta bemutatása.{{refhely|Csáky Zsolt}}<ref>{{cite web |author= |title=Kertben (1851) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyaf.htm |accessdate=2016-11-08 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[Visszatekintés]]'' (1852): A versben megjelenik az illúziók köddé válása, a céltalanság, a kiüresedés, az [[idill]] elérhetetlen messzesége, és az is, hogy már a halál sem megoldás. Stílusában kevert hangnemű, egyszerre elégikus és ironikus, a puritán életvitelt kudarcként ábrázolja. A mű befejezésében a költő a ''„[[Hit (vallás)|Hit]] – [[Remény (érzelem)|Remény]] – [[Szeretet]]”'' hármasságnak a [[biedermeier]] almanach-költészet bibliai hagyományához nyúl vissza.{{refhely|Csáky Zsolt}}<ref>{{cite web |author= |title=Visszatekintés (1852) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyag.htm |accessdate=2016-11-08 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[A lejtőn]]'' (1852–57): Ez a költeménye is elégikus hangnemben íródott dalszerű vers. Két olyan irodalmi műre utalnak első és utolsó sorai, amelyek fontos szerepet töltöttek be a szerző élményvilágában. A vers kezdete [[Edgar Allan Poe]] ''[[A holló]]'' című híres költeményét idézi fel. A záró rész azokra a sorokra emlékeztet, amelyek a [[Hamlet, dán királyfi|''Hamlet''ben]] Ophelia halálának körülményeit mutatják meg.{{refhely|Csáky Zsolt}}<ref>{{cite web |author= |title=A lejtőn (1857) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyah.htm |accessdate=2016-11-08 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref><ref>{{cite web |author= |title=Arany János összes költeményei |url=https://mek.oszk.hu/00500/00597/html/index.htm |accessdate=2016-10-30 |publisher=mek.oszk.hu |language=magyar}}</ref>
=== Balladái ===
[[Fájl:Nagykőrös múzeum emléktábla.JPG|bélyegkép|jobbra|250px|2001-es emléktábla a nagykőrösi [[Arany János Közérdekű Muzeális Gyűjtemény|Arany János Múzeum]]<nowiki> falán]] A </nowiki>[[ballada]] (a [[Provanszál dialektus|provanszál]] ''balada, azaz „tánc”'' szóból eredeztetik) a szépirodalomban meghatározását tekintve az [[Epika|epikának]] egy [[Líra (műnem)|lírai]] jegyeket is mutató költői műfaja. [[Greguss Ágost]] szerint ''„tragédia dalban elbeszélve.”'' Arany elsősorban lírikus költő volt, de a gondolatibb líra felé vonzódott. A ''[[Toldi estéje]]'' és a balladái jó példák erre. 1853 után kezdett rendre balladákat írni, főleg nagykőrösi tanársága idején, és kétségtelenül ezek a legjobban szerkesztett költemények életművében. Végigkomponáltságuk egyedülálló, és ilyen típusú balladákkal a [[Magyar irodalom|magyar irodalomban]] majd [[Ady Endre|Ady Endrénél]] lehet megint találkozni.<ref name="A nagykőrösi évek balladái">{{cite web |title=A nagykőrösi évek balladái |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/ajpalya4.htm |accessdate=2016-11-18 |publisher=magyar-irodalom.elte.hu}}</ref>
Már 1847-ben is kísérletezett a balladával, de ezen verstípusait a nagykőrösi években emelte igazán magas színvonalra. Közel állt hozzá a történetet kihagyásokkal, párbeszédekkel dramatizáló ballada, amelyet a skót és a székely népköltészetből ismert meg. Nem úgy, mint a történetet lassabban adagoló [[Románc (irodalmi műfaj)|románcot]], melyet a latin népek (elsősorban spanyolok) költészetéből és még talán a németektől ismerhetett meg. Jól bizonyítható ez a Hunyadi-balladakör két megírt részének: az ''V. László''nak (1853) és a ''Mátyás anyjá''nak (1854) összehasonlításakor, mivel az előbbit lényegesen nagyobb igénnyel írta meg.{{refhely|Sőtér István IV. kötet||Csáky Zsolt|}}
Balladatípusai három szerkezeti megoldást tartalmaznak. Az elsőt egyszólamú, vonalszerűen előrehaladó balladának lehet nevezni. Ez áll legközelebb a románchoz, nevezik még népies balladának is. Ide tartoznak első balladakísérletei: ''A varró leányok'' (1847), ''Az egri lány'' (1853) és két nagy vers: ''Zách Klára'' (1855) és ''A walesi bárdok'' (1857).<ref name="A nagykőrösi évek balladái" /> Korai balladái közül a fontosabbak:
* ''[[Mátyás anyja]]'' (1854): A vers arról szól, hogy az aggódó [[Szilágyi Erzsébet (kormányzóné)|Szilágyi Erzsébet]] levélben próbál hírt kapni Prágában raboskodó fiáról. A műben [[Allegória|allegorikus]] a hírvivőként szerepel a holló, a [[Hunyadi-család]] címerállata.<ref>{{cite web |author= |title=Mátyás anyja |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/matyany.htm |accessdate=2016-11-18 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[Zách Klára (ballada)|Zách Klára]]'' (1855): A magyar történelem egyik leghírhedtebb merényletét [[Záh Felicián]] követte el, akinek családját különös kegyetlenséggel [[I. Károly magyar király|I. Károly Róbert]] parancsára kivégezték. Többek közt Zách lányát, Klárát is. Arany a tömbszerűen szaggatott történetmondással lelassítja az elbeszélést. A lépcsőzetes szerkezetet a bosszúálló királyné szavainak idézése zárja le, és az utolsó sorokban a magyar haza kilátástalan helyzetén kesereg a költő.<ref>{{cite web |author= |title=Zách Klára |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/zacs.htm |accessdate=2016-11-21 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[A walesi bárdok]]''. (1861 körül)<ref>Utóbbi ballada keletkezéséről a [[2000-es évek]] közepéig azt gondolták, hogy Ferenc József és [[Wittelsbach Erzsébet magyar királyné|Erzsébet királyné]] 1857-es magyarországi látogatása alkalmából készült. A 2000-es évek közepén viszont [[Milbacher Róbert]] rekonstruálta ''A walesi bárdok'' keletkezésének körülményeit, és ennek kapcsán arra a következtetésre jutott, hogy a balladát 1861 körül írhatta vagy legalábbis fejezhette be, részben [[Széchenyi István]] ''Ein Blick'' című pamfletjének hatására, részben pedig azért, mert megtudta, hogy egy másik költő, Tóth Endre ''Ötszáz gael dalnok'' címmel ugyancsak megírta a walesi bárdok történetét.</ref><ref name="Milbacher Róbert" /><ref>{{cite web |author= |title=A walesi bárdok kézirata |url=http://real-ms.mtak.hu/16/ |accessdate=2016-11-21 |publisher=MTA KIK |language=magyar}}</ref> Versformája az úgynevezett skót ballada. Több versében a bűn és bűnhődés gondolatát állította középpontba, és ezekhez tartozik a walesi bárdok is. A szakaszos tördeltség benyomását erősítő belső ismétlések itt is uralkodó szerepet játszanak, mind az elbeszélésben, mind a párbeszédben, sőt közöttük is. Történeti tények egyébként nem támasztják alá, amit Arany ebben a balladában megénekelt.<ref>{{cite web |author= |title=A walesi bárdok elemzése |url=http://tudasbazis.sulinet.hu/hu/e0803548-666b-7010-0020-6b726f6e696b_e0803601-6c70-8020-0000-6b726f6e696b |archiveurl=https://web.archive.org/web/20170105191352/http://tudasbazis.sulinet.hu/hu/e0803548-666b-7010-0020-6b726f6e696b_e0803601-6c70-8020-0000-6b726f6e696b |archivedate=2017-01-05 |accessdate=2016-11-21 |publisher=tudasbazis.sulinet.hu |language=magyar}}</ref>
A második csoportba sorolható balladáit történelminek lehet nevezni. Ezeknek a balladáknak távolibb a rokonsága a románccal. Történelmi balladái politikai célzatosságot hordoznak magukban. Az [[1850-es évek|1850-es években]] fel kellett rázni a [[Magyarok|nemzetet]] fásultságából, és Arany ebben nagy szerepet vállalt. Az ''V. László'' végszavaival – ''„De visszajő a rab…!”'' – vélhetően az osztrák császár börtöneiben raboskodó magyar hazafiak hozzátartozóiba próbált lelket önteni, a ''Zách Klára'' [[Julius Jacob von Haynau|Haynau táborszernagy]] kegyetlen bosszúját idézte fel, a ''Szondi két apródja'' és ''A walesi bárdok'' arra emlékeztetett, hogy a nemzetét szerető magyar költőnek nincs miért dicsőítenie [[I. Ferenc József magyar király|Ferenc Józsefet]]. Arany a nemzeti önrendelkezést akkor állította középpontba, amikor a magyar függetlenséget eltörölték, és történeti példázataival egyszerre tanított a megalkuvás elutasítására és a sorssal szembeszegülő kemény próbatételre is. Két jelentős verse sorolható egyértelműen ebbe a balladatípusba, az ''V. László'' és a ''Szondi két apródja'', de ide köthető még az [[Ágnes asszony]] (1853) és ''Az örök zsidó'' (1860) is:{{refhely|Sőtér István IV. kötet||Csáky Zsolt|}}
* ''[[V. László (ballada)|V. László]]'' (1853): Történelmi tárgyú, Nagykőrösön írt ballada. A Hunyadi-balladakör elsőként megírt része. Több szálon fut a történet , melynek írásmódja töredékes mondatszerkesztésű. A költemény tördeltsége fokozódik attól kezdve, hogy a [[Fogoly (személy)|foglyok]] megszöknek, a király pedig elmenekül [[Prága|Prágába]]. A bűn és bűnhődés motívum kiváló példája, amikor a menekülő király hűsítőt kér hű szolgájától, aki e szavakkal adja át neki a kelyhet: ''„Itt a kehely, igyál, Uram, László király, Enyhít… mikép a sír!”''<ref>{{cite web |title=Arany János – V. László (1853) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyaj.htm |accessdate=2016-11-25 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[Szondi két apródja]]'' (1856): Történelmi ballada, melyben vezérmotívum a kétszólamúság. A történet alapja [[Drégely vára|Drégely várának]] 1552-es török ostroma. Az apródok a múltat idézik fel, míg Ali szolgája a jelent. A költemény arra keres válaszokat, hogy a bátor és hős várvédők tragikus bukásából milyen erkölcsi tanulságokat lehet levonni.<ref>{{cite web |title=Arany balladái – Szondi két apródja |url=http://tudasbazis.sulinet.hu/hu/magyar-nyelv-es-irodalom/irodalom/irodalom-8-osztaly/arany-balladai/szondi-ket-aprodja |accessdate=2016-11-25 |publisher=tudasbazis.sulinet.hu |language=magyar}}</ref>
* ''[[Ágnes asszony]]'' (1853): Nagykőrösön írt balladáinak egyike, műfaját tekintve keretes szerkezetű ballada. Az erősen lirizált versnek a megalkotásakor az egyén sorsának egyetemes kérdései foglalkoztatták a költőt. Arany e művében a [[Bűn|bűnt]] teszi kérdésessé, a mű témája a lelkiismereti konfliktus. A férjgyilkost bírái szabadon engedik, mert elmebajos.<ref>{{cite web |title=Arany János – Ágnes asszony (1853) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyal.htm |accessdate=2016-11-25 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[Az örök zsidó]]'' (1860): A legjelentősebb alkotói korszakát lezáró nagy verse. Műfaját tekintve elégikus líra és tragikus ballada ötvözete. Az örök zsidó (ismertebb nevén [[a bolygó zsidó]]) legendájáról szóló történet [[Párizsi Máté]] angol szerzetes 13. századi krónikájából ismert.<ref>Karthaphilos, [[Quintus Pontius Pilatus|Pilátus]] ajtónállója a halálra ítélt [[Jézus|Krisztust]] a palotából kiléptekor megütötte, és ezt mondta: ''Menj már, miért késlekedsz.'' Krisztus így felelt neki: ''Én megyek, de te várj, míg visszatérek.'' Forrás: Csáky Zsolt: ''Az önkényuralomtól a kiegyezésig. Arany János (1817–1882)''.</ref> Ez a történet másokat, például [[Vörösmarty Mihály|Vörösmartyt]] is foglalkoztatta, de erről írt költeménye töredékben maradt csak fenn. Arany új verstípust alakított ki ebben a művében, ami csak a 19. század közepén jelent meg az európai költészetben. Az örök zsidó reménye szerint egyszer talán megáll a végtelen rohanás.<ref>A költemény művészi hatása összefügg azzal, hogy Arany kínzó kérdésként fogalmazza meg és egyetemes jelképbe kivetítve tárgyiasítja a belső feszültségét, ami döntő szerepet játszott élményvilágában.</ref><ref>{{cite web |title=Arany János – Az örök zsidó (1860) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyam.htm |accessdate=2016-11-25 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
Harmadik típusú, ''nagyvárosi'' balladái a késői korszakának „[[Őszikék]]”-balladái. E korszakban előtérbe kerültek misztikus [[Babona|babonás]] motívumok, felerősödött költészetében az [[Erkölcs|erkölcsi]] szigor, és megjelent a [[Város|nagyváros-ellenesség]]. Ezekben az 1877-ben keletkezett balladákban kevesebbnek tűnik a drámai rész, és a párbeszédeket magánbeszédekkel helyettesíti a költő. Erre a korszakra az is jellemző, hogy pár hónap alatt több költeményt ír, mint előtte hosszú évek során.<ref>{{cite web |title=Arany János – Az Őszikék balladái |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/ajpalya8.htm |accessdate=2016-11-25 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref> Az Őszikék korszak fontosabb balladái: [[Fájl:Gyárfás, Jenő - The Ordeal of the Bier (1881).jpg|250px|bélyegkép|jobbra|[[Gyárfás Jenő]]: ''Tetemrehívás''<nowiki> (1883)]]</nowiki>
* ''[[Tetemre hívás]]'': Késői korszakának egyik legnépszerűbb és talán legtöbbet vitatott balladája. A [[Középkor|középkori]] kis faluban játszódó történetben egy apa keresi késsel megölt fia gyilkosát úgy, hogy segítségül hívja az [[Istenítélet|istenítéletet]]. Az olvasót magával ragadja a sajátos ritmika és a [[Misztika|misztikus]] történet. A hatás nem maradt el, hiszen [[Gyárfás Jenő|Gyárfás Jenőt]] oly módon megihlette, hogy megfestette a ''Tetemrehívást''. A képére nézve és Arany sorait olvasva ''„...döbbenet által a szív ere fagy...”'', ki lehet jelenteni, hogy tapintható a drámai feszültség. A [[Hiedelemmonda|néphit]] szerint ugyanis a halott sebe gyilkosának jelenlétében újra vérezni kezd.<ref>{{cite web |title=Tetemre hívás |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/tetemre.htm |accessdate=2016-12-02 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref><ref>{{cite web |title=Arany és XIX. századi történeti festészetünk |url=https://mek.oszk.hu/00500/00596/html/festeszet/festeszet.html |accessdate=2016-12-02 |publisher=mek.oszk.hu |language=magyar}}</ref> A műből 1909-ben zenekölteményt írt [[Würtzler Béla (hegedűs)|Würtzler Béla]].<ref>{{cite web |author=HarpPost |date=2023-01-12 |title=Adalékok id. Würtzler Béla életútjához |url=https://harppost.blogspot.com/2023/01/adalekok-id-wurtzler-bela-eletutjahoz.html |accessdate=2023-01-22}}</ref>
* ''[[Tengerihántás]]'': A műben két elbeszélő szerepel. Egyikük csak a keretnek tekinthető első és utolsó versszakban szólal meg. A kereten belüli történet folyamán az ellenszólam egyaránt olvasható a keretként szolgáló helyzet betű szerinti leírásának és a kereten belüli történet metaforikus értelmezésének: ''„Dalos Eszti a mezőre kiment ő, / Aratókkal puha fűvön pihent ő; / De ha álom ért reájok, / Odahagyta kis tanyájok. / – Töri a vadkan az „irtást” – / Ne tegyétek, ti leányok!”'' Még az utolsó előtti versszak sem kivétel: a jelen betű szerinti leírása itt is a múlt metaforája.<ref>{{cite web |title=Arany János – Tengeri-hántás (1877) |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/palyav.htm |accessdate=2016-11-25 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[Híd-avatás]]'': Egy évvel a [[Margit híd]] zászlódíszes avatása után írta, amely időközben az [[Öngyilkosság|öngyilkosságra]] készülő emberek egyik lehetséges helyszínévé vált. Áll az új híd, és sorban emberek érkeznek hozzá. Éjszaka és csend van, azonban egyszerre tömeg gyűlik a hídhoz mindenféle kor- és [[Társadalmi osztály|társadalmi osztályb]]ól, és mintegy önmagukból kikelve, bűvölet alatt, avatásként a mélybe vetik magukat. Valójában ők a modern nagyváros elesettjei, a [[pénz]] világának áldozatai. Felbukkanni látszik az a régi, [[Középkor|középkori]] babona is, amely szerint az elmúlás előtt a [[halál]] egy [[Haláltánc (műfaj)|utolsó táncra]] viszi a haldoklót. Az egész abszurd helyzet egyfajta tánc könnyedségével zajlik a költeményben.<ref>{{cite web |title=Arany János – Híd-avatás |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/hid.htm |accessdate=2016-11-25 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[Vörös Rébék (vers)|Vörös Rébék]]'': A késői balladái közül talán ez a legeredetibb. Egy népmondai töredék alapján íródott, mely a vers első két sorában idézetként szerepel. A [[Kormos varjú|varjú]] és a [[boszorkány]] azonosítása népi hiedelmen alapul. A cím egy asszonyra, [[Rebeka|Rebekára]] utalhat, akinek vörös haja van. Ez a ballada a paraszti életet és a misztikumot idézi, és egy sajátságos kapcsolatra mutat rá.<ref>{{cite web |title=Arany János – Vörös Rébék |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/vorosr.htm |accessdate=2016-11-25 |publisher=magyar-irodalom.elte.hu |language=magyar}}</ref>
* ''[[A kép-mutogató]]'': A vásári [[Képmutogatás|képmutogatásr]]ól szól a költemény, mely Arany János utolsó balladája. A történet két fontos szereplő és két polaritás köré szerveződik. Az egyik ilyen szövegalkotó tényező [[Petőfi Sándor]], a másik pedig vélhetően [[Széchenyi István]].<ref>{{cite web |author=Sárkány János |title=Adalékok Arany utolsó balladájához |url=https://hu.wikibooks.org/wiki/S%C3%A1rk%C3%A1ny_J%C3%A1nos:Adal%C3%A9kok_Arany_utols%C3%B3_ballad%C3%A1j%C3%A1hoz |archiveurl=https://web.archive.org/web/20161126131542/https://hu.wikibooks.org/wiki/S%C3%A1rk%C3%A1ny_J%C3%A1nos:Adal%C3%A9kok_Arany_utols%C3%B3_ballad%C3%A1j%C3%A1hoz |archivedate=2016-11-26 |accessdate=2016-11-26 |publisher=wikibooks.org |language=magyar}}</ref>
== Arany és a zene ==
{{Sticky header}}
{| class="wikitable sortable sticky-header" align="right" style="margin-left: 20pt"
|+17 dal a 19-ből
!Cím
!Szövegíró
|-
|A hegedű száraz fája{{jegyzet*|Zeneszerzők: Tóth János István, valamint Vásárhelyi Zoltán}}
|Arany János
|-
|A tudós macskája{{jegyzet*|ISWC: T-007.202.109-0, zeneszerző: Radványi Balázs}}
|Arany János
|-
|Igyunk biz azt egy-egy kicsit{{jegyzet*|ISWC: T-007.204.560-3, zeneszerző: Tóth János István}}
|Arany János
|-
|Zách Klára
|Arany János
|-
|A toronyban delet harangoznak
|[[Petőfi Sándor]]
|-
|A tintás üveg
|[[Petőfi Sándor]]
|-
|Csokonai
|[[Petőfi Sándor]]
|-
|Éji dal
|[[Petőfi Sándor]]
|-
|[[A szép fényes katonának]]
|[[Amade László]]
|-
|Bú kél velem
|[[Kölcsey Ferenc]]
|-
|Esteledik, szól a gulya kolompja
|[[Bartalus István]]
|-
|Zöld erdőben, zöld mezőben sétál
|ismeretlen
|-
|[[Erdő mellett estvéledtem]]
|ismeretlen
|-
|Szép jóestét
|ismeretlen
|-
|Túl a hegyen
|ismeretlen
|-
|Én ültettem a cédrusfát
|ismeretlen
|-
|Elveszett a tarka tyúkom
|ismeretlen
|}
Arany János már gyermekkorában [[Gitár|gitározott]] és [[Zongora|zongorázott]]. Saját elmondása szerint, amikor Debrecenben felcsapott színésznek, szép, csengő hangja volt. Értett a [[Kottaírás|kottaíráshoz]] is, de nem tudni, kitől tanulta. Életének utolsó éveiben, az 1870-es évek elején névnapjára gitárt kapott ajándékba a barátaitól. Emlékezetből leírta ifjúkorának mindegy 150 kedvelt dalát. Gitározás közben [[Petőfi Sándor]], [[Kölcsey Ferenc]], [[Amade László]] és a saját verseire született, kíséret nélküli melódiákat papírra vetett, és azzal adta át [[Bartalus István]] barátjának, hogy csak halála után hozhatja nyilvánosságra. Bartalus 1883. január 31-én a [[Kisfaludy Társaság]] ülésén jelentette be az Arany hagyatékából maradt dalokat, és [[Láng Fülöp]] operaénekes előadásában, Bartalus zongorakíséretében tízet elő is adott közülük.{{refhely|Leszler János}}<ref name="Lakatos Vince">{{cite journal |author=Lakatos Vince |year=1919 |title=Arany János mint zeneszerző |url=http://epa.oszk.hu/02500/02518/00042/pdf/EPA02518_irodalomtortenet_1919_01-02_040-043.pdf |format=pdf |language=magyar |issue=Irodalomtörténet |pages=40–43. p. |accessdate=2016-06-30}}</ref>
[[Jakab István (drámaíró)|Jakab István]] zenésítette meg a ''Nemzetőr-dal'' (1848) című versét, mely [[Népdal|népdall]]á vált.<ref name="Nemzetőrdalok" /> Arany Jánosnak az 1874–82 közötti évekből 19 saját dala maradt fenn, ezek közül tíz megjelent nyomtatásban 1883-ban Bartalus István zongorakíséretével. Arany néhány dalszöveget is írt. 1849-ben [[Festetics Leó]] zenéjére írta a [[Kondorosi csárda mellett]] című versét. 1856. április 17-én küldte el <cite>Hej iharfa, juharfa</cite> című versét [[Simonffy Kálmán]] zeneszerzőnek. Ugyancsak 1856-ban írta <cite>Volt nekem egy rigószőrű paripám</cite> kezdetű versét, melyet [[Egressi Samu]] zenésített meg.{{refhely|Leszler János}}<ref name="Lakatos Vince" />
''Pázmán lovag'' című vígballadájának témája [[Johann Strauss (zeneszerző, 1825–1899)|ifj. Johann Strauss]] egyedüli operájának{{wd|Q2632179}} volt témája, [[Dóczy Lajos]] átírásában.<ref name="A nagykőrösi évek balladái" />
== Művei ==
* [https://mek.oszk.hu/00500/00597/html/ Arany János Összes verse]
* [https://mek.oszk.hu/00500/00596/html/ Őszikék] Elektronikus kiállítás a Magyar Elektronikus Könyvtárban
* [http://www.gutenberg.org/ebooks/author/41307 Művei a Project Gutenbergen]
* [https://web.archive.org/web/20080516113521/http://www.akonyv.hu/klasszikus.htm Arany János művei a Mercator Stúdió Elektronikus Könyvkiadónál]
* [http://tudastar.googlepages.com/arany Arany versek neves előadóktól (online hallgatható)] {{Wayback|url=http://tudastar.googlepages.com/arany|date=20070430200326}}
* [http://www.babelmatrix.org/index.php?page=authorPage&auth_id=118 Arany János versei műfordításokban] Bábel Web Antológia
* [http://real-eod.mtak.hu/3578/ Arany János prózai dolgozatai] MTA
* [http://real-ms.mtak.hu/18072/ Kapcsos könyv] (kézirat)
* [http://real-eod.mtak.hu/view/series/Arany_J=E1nos_=F6sszes_m==0171vei.html Arany János összes művei], Akadémiai Kiadó
== Műfordításai ==
Kezdetben latin, görög és német nyelvű munkákból fordított, de ahogy haladt előre az angol nyelvben, úgy ért oda élete legjelentősebb fordításaihoz. Műfordításainak eredménye, hogy nevéhez köthető a magyar műfordítás-irodalom fellendítése. 1860-ban lett a Kisfaludy Társaság igazgatója, és az ő irányításával alakult meg a társaság [[Magyar Shakespeare Bizottság|Shakespeare-bizottsága]]. Ez indította meg a legnagyobb arányú magyar műfordítási vállalkozást, a teljes Shakespeare-kiadást. Tizenkilenc kötetben, 1864 és 1879 között jelentek meg a sorozat részei, melynek kiadási költségeit [[Tomori Anasztáz]] vállalta magára. Arany a már régebben megkezdett [[János király|''János királly''al]] és a ''[[Szentivánéji álom]]''mal szerepelt, illetve a sorozathoz készítette el a klasszikussá vált [[Hamlet, dán királyfi|''Hamlet''-fordítását]].<ref>{{cite book |author=Sőtér István |url=https://mek.oszk.hu/02200/02228/html/04/315.html |title=A magyar irodalom története – 52. A MŰFORDÍTÁS-IRODALOM |publisher=Akadémiai Kiadó, |year=1965 |isbn=963 05 1643 5 |language=magyar |accessdate=2016-11-26 |city=Budapest}}</ref>
Jelentősebb műfordításai:
=== Versek ===
* ''Sir Patrick Spens'' (skót ballada); kínai népballadák (angolból)
* néhány vers, ballada, epigramma [[Quintus Horatius Flaccus|Horatiustól]], [[Ludwig August Frankl von Hochwart|Ludwig August Frankltól]], [[Robert Burns (költő)|Robert Burnstől]], [[Johann Wolfgang von Goethe|Goethétől]], [[George Byron|Byrontól]] (Az új görög dalnok – a ''Don Juan'' című elbeszélő költemény részlete), [[Thomas Moore (költő)|Thomas Moore-tól]].
=== Színművek ===
* [http://real-eod.mtak.hu/4213/ Arisztophanész vígjátékai]
* [[William Shakespeare|Shakespeare]]
** ''[[Hamlet, dán királyfi]]''<ref>A ''[[Hamlet, dán királyfi]]'' Arany János kedvenc olvasmányai közé tartozott, és nem véletlen, hogy az ő remek fordításában vált a magyar irodalom szerves részévé. Arany fordítása után sokáig csak jelentéktelen fordítások születtek: Zigány Árpád (1899, prózafordítás), Telekes Béla (1904), Szabó T. Attila (1929, prózafordítás).</ref>
** ''[[János király]]''
** ''[[Szentivánéji álom]]''
{{wikiforrás|Kategória:Arany János fordításai}}
=== Prózafordítások ===
* [[Nyikolaj Vasziljevics Gogol|Nyikolaj Gogol]]: ''A köpönyeg'' (német nyelvű kiadás alapján)
== Egyesületi, testületi tagságai ==
* A Magyar Tudományos Akadémia tiszteletbeli főtitkára, igazgatója és rendes tagja
* A Kisfaludy Társaság igazgatója és rendes tagja
* A Concordia budapesti jótékonysági egylet tiszteletbeli tagja
* A bölcsészhallgatókat segítő egyesület bizottságának tiszteletbeli tagja
== Emlékezete ==
{{Képdia|Kép:Arany János sírja.jpg|Arany János és [[Arany László (költő)|Arany László]] síremléke [[Budapest]]en. [[Fiumei úti sírkert|Kerepesi temető]]: 14-sziget. [[Strobl Alajos]] szobrászművész és [[Kallina Mór]] építész alkotása. Kivitelezők: [[Kauser József|Kauser-cég]], [[Strozzi]]-cég<ref group="m">A temető egész területe az állami tulajdonú védett síremlékekkel együtt műemlék.</ref>|Kép:Ref. kollégium (5236. számú műemlék) 3.jpg|A [[Debreceni Református Kollégium]] bejárata|Kép:Arany János plaque (Nagykőrös Hősök tere 6).jpg|Arany János mellszobra (Debrecen, Hajó utca, [[Juha Richárd]] alkotása)|Kép:Arany János emléktáblája V kerület Arany János utca 1.JPG|[[Budapest V. kerülete|Budapest V. kerület]] Arany János utca 1. szám alatti emléktábla|Kép:Arany János mellszobor, Szeged UNJ.jpg|Arany János portrészobra Szegeden|Kép:Slač - kúpele, pamätná tabuľa.JPG|Arany János és [[Madách Imre (író)|Madách Imre]] emléktáblája [[Szliácsfürdő]]n|Kép:Arany János tűzfalportré.jpg|Portréja a XII. kerület, Alkotás - Márvány utca sarkán egy ház tűzfalán|Fájl:Arany János-emlékpad.gif|Arany János-emlékpad, ''Toldi estéje''<br />([[Göd|Alsógöd]], [[Városvédők Egyesülete]])|cím=Arany János emlékezete}} {{idézet2|''A nyelv a nép nyelve, de stilizált népnyelv. Mintegy a népnyelv quinta essentiája, oly tömény oldat, hogy maga a nép már nem is értheti meg. Arany jegyzetekkel magyarázza kifejezéseit, talán érzi, hogy Buda halála nemsokára a magyar irodalom legnehezebb olvasmányai közé fog tartozni. Nyelvészkedő szorgalmának gyümölcse ez a nyelv, melyet csillagmérföldek választanak el Petőfi közvetlenségétől. Aki a hunokról ír, nem is beszélhet a XIX. század változandó nyelvén; aki az örök magyar sorsot akarja kifejezni, annak az örök magyar nyelvet, a lényegnyelvet kell megteremtenie.''|[[Szerb Antal]]: ''Arany János''}} Műveinek teljes gyűjteményét a költő halála után csakhamar kiadta régi kiadója, [[Ráth Mór]]; összes munkáit nyolc kötetben [[1884]]–1885-ben, hátrahagyott iratait és levelezését pedig fia, [[Arany László (költő)|Arany László]] szerkesztésében és jegyzeteivel, négy kötetben 1887 és 1889 között. 1895 és 1898 között jelentek meg négy kötetben a [[Zichy Mihály]] által illusztrált Arany-balladák. Ezt a sorozatot hasonmás kiadásban a 2017-es [[Arany János-emlékév]] nyitányára ismét kiadták.<ref>[[c:Category:Illustrations to János Arany's ballads by Mihály Zichy|''Arany János Balladái Zichy Mihály rajzaival'' a Wikimédia Commonson]]</ref><ref>{{cite web |date=2016-11-25 |title=Hasonmás kiadásban jelentek meg Arany János Zichy Mihály által illusztrált balladái |url=http://mta.hu/sajtoszemle/hasonmas-kiadasban-jelentek-meg-arany-janos-zichy-mihaly-altal-illusztralt-balladai-107140 |accessdate=2016-12-02 |publisher=mta.hu |language=magyar}}</ref>
[[Arany János-szobor (Budapest)|Arany János bronzszobrát]] a költő műveiből vett alakokkal (Toldi, Rozgonyi Piroska) [[Strobl Alajos]] mintázta, a [[Magyar Nemzeti Múzeum]] előtt állították fel, és [[1893]] tavaszán leplezték le. Tiszteletére portrészobrot avattak a [[Szeged|szegedi]] Nemzeti Emlékcsarnokban, a Dóm tér keleti oldalán. (A szobor szintén Strobl alkotása.) Szintén szobrot állított tiszteletére szülővárosa, [[Nagyszalonta]] is, és itt található a helyiek által Csonkatoronynak nevezett [[Arany János Emlékmúzeum]].<ref name="partiumimuzeumok">{{cite web |date= |title=Nagyszalonta Arany János Emlékmúzeum |url=http://partiumimuzeumok.ro/nagyszalonta/index.html |archiveurl=https://web.archive.org/web/20160425183234/http://partiumimuzeumok.ro/nagyszalonta/index.html |archivedate=2016-04-25 |accessdate=2016-10-29 |publisher=partiumimuzeumok.ro |language=magyar-román-angol}}</ref>
Szalontai szülőháza nem maradt meg, de a helyére a város önkormányzata építtetett egy tájjellegű épületet. A benne kialakított, néprajzi jellegű helytörténeti kiállítást 2010 júniusában adták át.<ref name="partiumimuzeumok" /> [[Arany János emlékezete Erdélyben|Erdélyben emlékezete]] külön figyelmet kap, és évfordulós megemlékezéseket, ünnepi eseményeket és koszorúzásokat szerveznek.<ref>{{RMIL|1||a.htm#AranyJánosemlékezete}} [Arany János emlékezete]</ref><ref>{{cite web |date=2015-10-26 |title=Arany János emlékezete Nagyszalontán |url=http://www.reggeliujsag.ro/arany-janos-emlekezete-nagyszalontan/ |archiveurl=https://web.archive.org/web/20161029235500/http://www.reggeliujsag.ro/arany-janos-emlekezete-nagyszalontan/ |archivedate=2016-10-29 |accessdate=2016-10-29 |publisher=reggeliujsag.ro |language=magyar}}</ref> 1903–1948 között Temesváron működött az [[Arany János Társaság]], mely a költő emlékének ápolását és az irodalom- és a nyelvművelést tűzte ki célul.<ref>{{cite journal |author=Pomogáts Béla |title=Temesvár a magyar irodalomban |url=http://www.forrasfolyoirat.hu/1604/pomogats.pdf |format=pdf |language=magyar |issue=Forrásfolyóirat |pages=52-60 old. |authorlink=Pomogáts Béla |accessdate=2016-05-05 |archiveurl=https://web.archive.org/web/20161101164400/http://www.forrasfolyoirat.hu/1604/pomogats.pdf |archivedate=2016-11-01}}</ref> 1955-ben Nagyszalontán az anyanyelvi kultúra ápolására és a magyar irodalom terjesztésére alakult meg az [[Arany János Irodalmi Kör (Nagyszalonta)|Arany János Irodalmi Kör]].<ref>{{RMIL|1||a.htm#AranyJánosIrodalmiKör}} [Arany János Irodalmi Kör]</ref> [[Kép:Budapest-margitsziget-arany-1.jpg|bélyegkép|Arany János mellszobra a [[Margit-sziget|Margit-szigeti]] tölgyek alatt<ref>[https://www.nevezetesfak.hu/magyar/oldalak/arany_janos_tolgyei/ Arany János tölgyei] {{Wayback|url=https://www.nevezetesfak.hu/magyar/oldalak/arany_janos_tolgyei/|date=20190807110557}}, nevezetesfak.hu</ref><ref>[https://gallery.hungaricana.hu/hu/BudapestGyujtemeny/11465/?img=0 A margitszigeti Arany János-szobor], gallery.hungaricana.hu</ref><nowiki>]] </nowiki>[[Nagykőrös]]ön nevét viseli az Arany János Református Gimnázium, Szakközépiskola és Kollégium,<ref>{{cite web |title=Az Arany János Református Gimnázium, Szakközépiskola és Kollégium weboldala |url=http://www.ajrg.hu/ |archiveurl=https://web.archive.org/web/20190930165816/http://www.ajrg.hu/ |archivedate=2019-09-30 |accessdate=2016-10-29 |publisher=ajrg.hu |language=magyar}}</ref> az [[Arany János Közérdekű Muzeális Gyűjtemény]],<ref>{{cite web |title=Az Arany János Közérdekű Muzeális Gyűjtemény weboldala |url=http://www.korosikultura.hu/ |accessdate=2016-12-19 |publisher=korosikultura.hu |language=magyar}}</ref> és a városban működik az irodalmi, tudományos és művészi tevékenységgel foglalkozó Arany János Társaság.<ref>{{cite web |title=Arany János Társaság honlapja |url=http://aranytarsasag.ajrg.hu/ |archiveurl=https://web.archive.org/web/20161029174627/http://aranytarsasag.ajrg.hu/ |archivedate=2016-10-29 |accessdate=2016-10-29 |publisher=aranytarsasag.ajrg.hu |language=magyar}}</ref> A magyarországi települések többségében lehet találni róla elnevezett utcát, teret – például [[Arany János utca metróállomás]], [[Arany János tér (Debrecen)]].
* Magyarország több pontján [[iskola]] viseli a nevét (például: [[Budapest|Budapesten]],<ref>{{cite web |title=Sashegyi Arany János Általános Iskola és Gimnázium |url=https://ajgm.mozanaplo.hu/portal |accessdate=2016-06-30 |publisher=ajgm.mozanaplo.hu |language=magyar}}</ref> [[Szeged|Szegeden]],<ref>{{cite web |title=Szegedi Arany János Általános Iskola |url=https://arany-szeged.mozanaplo.hu/portal |accessdate=2016-06-30 |publisher=arany-szeged.mozanaplo.hu |language=magyar}}</ref> [[Bonyhád|Bonyhádon]],<ref>{{cite web |title=Arany János Gimnáziumi Intézményegység |url=http://aranyjanosiskola.hu/ |archiveurl=https://web.archive.org/web/20160828062332/http://aranyjanosiskola.hu/ |archivedate=2016-08-28 |accessdate=2016-06-30 |publisher=aranyjanosiskola.hu |language=magyar}}</ref> [[Nyíregyháza|Nyíregyházán]],<ref>{{cite web |title=Nyíregyházi Arany János Gimnázium, Általános Iskola és Kollégium |url=http://nyharany.hu/wp/ |accessdate=2016-06-30 |publisher=nyharany.hu |language=magyar}}</ref> [[Dunaújvárosi Arany János Általános Iskola|Dunaújvárosban]]),<ref>{{cite web |title=Dunaújvárosi Arany János Általános Iskola |url=https://www.oktatas.hu/hivatali_ugyek/kir_intezmenykereso/!Intezmenykereso/Intezmeny/Index/030037 |archiveurl=https://web.archive.org/web/20180122235115/https://www.oktatas.hu/hivatali_ugyek/kir_intezmenykereso/!Intezmenykereso/Intezmeny/Index/030037 |archivedate=2018-01-22 |accessdate=2016-12-19 |publisher=oktatas.hu |language=magyar}}</ref> Gyöngyösön ([[Arany János Általános Iskola (Gyöngyös)|Arany János Általános Iskola]]), Százhalombattán ([[Arany János Általános Iskola és Gimnázium (Százhalombatta)|Arany János Általános Iskola és Gimnázium]]), továbbá a környező országokban is (például: Arany János Líceum, [[Nagyszalonta]],<ref>{{cite web |title=Arany János Líceum |url=http://www.gsaranyjanos.ro/ |archiveurl=https://web.archive.org/web/20170622082509/http://www.gsaranyjanos.ro/ |archivedate=2017-06-22 |accessdate=2016-11-08 |publisher=gsaranyjanos.ro |language=magyar-román}}</ref> Arany János Alapiskola, [[Ekecs]],<ref>{{cite web |title=Arany János Alapiskola |url=http://www.suli.sk/organization.php?organization=98§ion=ais |accessdate=2016-11-08 |publisher=suli.sk |language=magyar-román}}</ref> Arany János Általános Iskola, [[Oromhegyes]],<ref>{{cite web |title=Arany János Általános Iskola |url=http://www.aranyjanos.edu.rs/ez-egy-minta-oldal/ |accessdate=2016-11-08 |publisher=aranyjanos.edu.rs |language=magyar-szerb}}</ref>) de még a tengerentúlon is, [[Kanada]] [[Hamilton (Ontario)|Hamilton]] városában<ref>{{cite web |title=Arany Janos Magyar Iskola / Hungarian School |url=http://www.hun-suli.itgo.com/index.html |accessdate=2016-06-30 |publisher=hun-suli.itgo.com |language=angol}}</ref> és az Amerikai Egyesült Államokban, [[New York|New Yorkban]].<ref>{{cite web |title=Arany János Magyar Iskola |url=http://www.aranyjanosiskola.org/ |archiveurl=https://web.archive.org/web/20160516232651/http://www.aranyjanosiskola.org/ |archivedate=2016-05-16 |accessdate=2016-06-30 |publisher=aranyjanosiskola.org |language=magyar}}</ref>
* 1985–1994 között működött Arany János Színház néven a Budapesti Gyermekszínház társulata a Paulay Ede u. 35. sz. alatti épületben.<ref>{{cite web |title=Arany János Színház |url=https://mek.oszk.hu/02100/02139/html/sz01/193.html |accessdate=2016-06-30 |publisher=MAGYAR SZÍNHÁZMŰVÉSZETI LEXIKON |language=magyar}}</ref><ref>{{cite web |title=Parisiana-tól az Új Színházig |url=http://www.ujszinhaz.hu/page25.php |archiveurl=https://web.archive.org/web/20160808083433/http://ujszinhaz.hu/page25.php |archivedate=2016-08-08 |accessdate=2016-06-30 |publisher=ujszinhaz.hu |language=magyar}}</ref>
* [[Kisbolygó|Kisbolygót]] neveztek el róla: a [[89973 Aranyjános|89973 Aranyjánost]]. Az apró, 1–2 km átmérőjű, 3,29 éves keringési idejű égitestet, melyet 2002. szeptember 8-án fedezett fel [[Sárneczky Krisztián]].<ref>{{cite web |title=Aranyról, Jókairól és Ganzról neveztek el kisbolygókat |url=http://hvg.hu/tudomany/20100122_arany_janos_jokai_mor_tittel_kisbolygo |accessdate=2016-06-30 |publisher=hvg.hu |language=magyar}}</ref>
* Számos későbbi klasszikus költő elevenítette fel versében Arany János alakját vagy stílusát, a legismertebb [[Weöres Sándor|Weöres Sándort]]ól a ''Negyedik Szimfónia''<ref>{{cite journal |author=Margócsy István |year=2010 |title=Weöres Sándor: Negyedik szimfónia – Értelmezési kísérlet |url=http://ketezer.hu/2010/12/margocsy-istvan-weores-sandor-negyedik-szimfonia-ertelmezesi-kiserlet/ |language=magyar |issue=2000 Irodalmi és társadalmi havi lap Lapszám: 12 |accessdate=2016-06-30}}</ref> és [[Babits Mihály|Babits Mihályt]]ól az ''Arany Jánoshoz''.<ref>{{cite web |author=Babits Mihály |authorlink=Babits Mihály |title=Változatok egy gyerekdalra |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/babitsaj.htm |accessdate=2016-06-30 |publisher=sulinet |language=magyar}}</ref> Paródiák is születtek: [[Varró Dániel|Varró Dánielt]]ől a ''Változatok egy gyermekdalra'' Arany János-i változata,<ref>{{cite web |author=Varró Dániel |title=Változatok egy gyerekdalra |url=http://dokk.hu/versek/olvas.php?id=235 |accessdate=2016-06-30 |publisher=dokk.hu |language=magyar}}</ref> a Lőwy Árpád néven alkotó [[Réthy László|Réthy Lászlónak]] tulajdonított trágár átdolgozás<ref>{{cite web |title=Toldi trágár átírása |url=http://dtp.atomki.hu/~ecsedi/Lowy/Toldi.html |archiveurl=https://web.archive.org/web/20160325152539/http://dtp.atomki.hu/~ecsedi/Lowy/Toldi.html |archivedate=2016-03-25 |accessdate=2016-06-30 |publisher=atomki.hu |language=magyar}}</ref> és [[Kőrizs Imre|Kőrizs Imrétől]] a ''Toldi éjszakája''.<ref>{{cite web |title=Kőrizs Imre: TOLDI ÉJSZAKÁJA |url=http://www.holmi.org/2007/11/korizs-imre-puzzle |accessdate=2016-06-30 |publisher=HOLMI online kiadás |language=magyar}}</ref>
* [[2001]]-ben a [[Magyar Nemzeti Bank]] [[Emlékérme|emlékpénzérme]]-sorozatot jelentetett meg [[Szlávics László (szobrász, 1959)|ifj. Szlávics László]] tervei alapján, ''[[A magyar ifjúsági irodalom alakjai (emlékérmesor)|A magyar ifjúsági irodalom alakjai]]'' címmel. A 200 forintos címlettel készült emlékérmék egyikén Arany János ''[[Toldi]]'' című művének illusztrációja látható.<ref>{{cite web |title=A magyar ifjúsági irodalom sorozatban Arany János:Toldi emlékérem |url=http://penzvero.hu/termekek/termekcsomagok/ifjusagi-irodalom-csomag-bu.html# |archiveurl=https://web.archive.org/web/20160821201002/http://penzvero.hu/termekek/termekcsomagok/ifjusagi-irodalom-csomag-bu.html |archivedate=2016-08-21 |accessdate=2016-06-23 |publisher=penzvero.hu |language=magyar}}</ref>
* Az 5000 fő alatti kistelepülésen, tanyán élő, tehetséges és szociálisan rászoruló gyermekek támogatására hozták létre a nevét viselő Arany János Tehetséggondozó Programot.<ref>{{cite web |title=Arany János Tehetséggondozó Program honlapja |url=http://www.ajtp.hu/start |archiveurl=https://web.archive.org/web/20160915171745/http://www.ajtp.hu/start |archivedate=2016-09-15 |accessdate=2016-09-29 |publisher=ajtp.hu |language=magyar}}</ref>
* A [[Magyar Tudományos Akadémia]] külföldi magyar tudósok jutalmazására hívta életre az [[Arany János-díj a tudományos kutatásért]] kitüntetést és az [[Arany János-érem|Arany János-érmet]].<ref>{{cite web |title=Arany János-díj és -érem 2012 |url=http://old.mta.hu/data/cikk/12/29/71/cikk_122971/Arany_dijazottak-2012_webreEZAJO.pdf |archiveurl=https://web.archive.org/web/20161109083459/http://old.mta.hu/data/cikk/12/29/71/cikk_122971/Arany_dijazottak-2012_webreEZAJO.pdf |archivedate=2016-11-09 |accessdate=2016-10-08 |publisher=Tudomány és Magyarság 3. |language=magyar |format=pdf}}</ref><ref>{{cite web |title=Arany János-érem |url=http://mta.hu/dijak-kituntetesek/arany-janos-erem-105813 |accessdate=2016-09-29 |publisher=Magyar Tudományos Akadémia |language=magyar}}</ref><ref>{{cite web |title=Arany János-díj a tudományos kutatásért |url=http://mta.hu/dijak-kituntetesek/arany-janos-dij-a-tudomanyos-kutatasert-105812 |accessdate=2016-09-29 |publisher=Magyar Tudományos Akadémia |language=magyar}}</ref>
* A [[Magyar Írószövetség]] Arany János Alapítványának kuratóriuma által 1996 és 2003 között kiosztott irodalmi díj volt az [[Arany János-jutalom]], és 1996 óta adományozzák az [[Arany János-díj|Arany János-díjat]].<ref>{{cite web |title=Arany János-díj |url=http://www.aranyjanosalapitvany.hu/dij.html |accessdate=2016-11-08 |publisher=aranyjanosalapitvany.hu/dij.html |language=magyar}}</ref>
* A [[Magyar Posta Zrt.|Magyar Posta]] emlékére 1932-ben és 1957-ben adott ki portréképével ellátott 2 filléres, illetve 2 forintos bélyeget.<ref>{{cite web |date=2009-04-15 |title=Arany János portréképével kiadott 1932-es 2 filléres postabélyeg |url=http://www.catawiki.com/catalog/stamps/countries-regions-territories/hungary-hun/1407399-janos-arany?area=ca2f9de386421ac5979510fe8da8efb5d09f4914 |accessdate=2016-03-06 |publisher=catawiki.com |language=angol}}</ref><ref>{{cite web |date=2009-04-15 |title=Arany János portréképével kiadott 1957-es 2 forintos postabélyeg |url=http://www.philatelia.net/classik/stamps/?id=11515 |accessdate=2016-03-06 |publisher=philatelia.net |language=angol}}</ref>
* A [[Dalriada]] soproni [[Folk-metal|folkmetal-együttes]] Arany János balladáit zenésítette meg 2009-ben kiadott ''[[Arany-album]]'' című lemezén.
* [[2017]]-ben, a költő születésének bicentenáriumának alkalmából [[Arany János-emlékév|Arany János-emlékévet]] rendeztek.<ref>{{cite web |date=2016-09-16 |title=Arany János-emlékév |url=http://nepszava.hu/cikk/1106054-arany-janos-emlekev/ |archiveurl=https://web.archive.org/web/20160916234414/http://nepszava.hu/cikk/1106054-arany-janos-emlekev/ |archivedate=2016-09-16 |accessdate=2016-09-16 |publisher=nepszava.hu |language=magyar}}</ref>
* 2017. március 2-án, Arany János születésének 200. évfordulóján Eric Fairbrother, a [[Wales|walesi]] [[Montgomery (Powys)|Montgomery]]{{wd|Q1311946}} polgármestere a ''Freeman of Montgomery'' címet adományozta A walesi bárdok szerzőjének.<ref>{{cite web |date=2017-03-04 |title=Walesi díszpolgár lett Arany János |url=http://www.hirado.hu/2017/03/04/walesi-diszpolgar-lett-arany-janos/ |accessdate=2017-03-04 |publisher=hirado.hu |language=magyar}}</ref><ref>{{cite web |date=2017-03-02 |title=Hungary celebrates legendary tale of Welsh bards' slaughter |url=http://www.bbc.com/news/uk-wales-mid-wales-39136034 |accessdate=2017-03-04 |publisher=bbc.com |language=angol}}</ref>
* 2018. március 28-án leplezték le tűzfal[[Arckép|portréját]]; az Alkotás és Márvány utca sarkán.<ref>http://www.kultura.hu/tuzfalfestmeny-arany KULTURA.HU</ref>
== Megjegyzések ==
<references group="m" />
== Dalainak adatai ==
{{megjegyzések}}
== Szakirodalom ==
* [[Gyulai Pál (irodalomtörténész)|Gyulai Pál]]: ''Arany János balladái''
* [[Riedl Frigyes]]: ''Arany János,'' Budapest, 1887 ([https://archive.org/stream/aranyjnos00rieduoft#page/n5/mode/2up Online elérhetőség])
* [[Péterfy Jenő]]: [https://mek.oszk.hu/00500/00596/html/tanulmanyok/peterfy1888.html ''Arany János Őszikéi,'' Budapesti Szemle, 1888. május, 54. köt. 137. sz. / P.J. ''Válogatott Művei,'' Budapest, 1983. 632–638.], mek.oszk.hu
* [[Szinnyei Ferenc]]: ''Arany János,'' Budapest, 1909 ([https://archive.org/stream/aranyjnos00szin#page/n5/mode/2up Online elérhetőség])
* [[Haraszti Gyula]]: ''Arany János,'' Budapest, 1912 ([https://archive.org/stream/aranyjnos00hara#page/n1/mode/2up Online elérhetőség])
* [[Négyesy László]]: ''Arany,'' Budapest, 1917 ([https://archive.org/stream/aranykltszle00nguoft#page/n3/mode/2up Online elérhetőség])
* [[Keresztury Dezső]]: ''így élt Arany János,'' Akadémiai Kiadó, Budapest, 1974
* [[Németh G. Béla]]: ''Arany János,'' in: Uő, ''Mű és személyiség,'' Budapest, 1970, 7–41.
* [[Dávidházi Péter]]: ''Hunyt mesterünk.'' Arany János kritikusi öröksége, Argumentum Kiadó, Budapest, 1994
* [[Keresztury Dezső]]: [https://mek.oszk.hu/01300/01360/01360.htm ''Arany János''], mek.oszk.hu
* [http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/gyulaaj2.htm Arany János – Szakirodalom], magyar-irodalom.elte.hu
== Jegyzetek ==
{{jegyzetek}}
== Források ==
* {{hely|Pintér Jenő hatodik kötet}} {{cite book |author=Pintér Jenő |url=https://mek.oszk.hu/15300/15384/pdf/15384_6.pdf |title=Magyar Irodalomtörténet I. A MAGYAR IRODALOM A XIX. SZÁZAD MÁSODIK HARMADÁBAN. |year=1933 |location=Budapest |pages=409-546 |format=pdf |authorlink=Pintér Jenő (irodalomtörténész)}}
* {{hely|Sőtér István IV. kötet}} {{cite book |author=Sőtér István |url=https://mek.oszk.hu/02200/02228/html/04/55.html |title=A MAGYAR IRODALOM TÖRTÉNETE 1849-TŐL 1905-IG |publisher=AKADÉMIAI KIADÓ |year=1965 |location=Budapest |pages= |authorlink=Sőtér István}} ''Arany János (1817–1882)'' c. fejezet.
* {{hely|Gyulai Pál 1884}} {{cite book |author=Gyulai Pál |url=https://mek.oszk.hu/07200/07299/07299.pdf |title=Gyulai Pál bírálatai 1861–1903 – Arany János életrajza |publisher=A Magyar Tudományos Akadémia Könyvkiadóvállalata, Franklin Társulat Nyomdája – UJ FOLYAM 1911–1913. CYCLUS |location=Budapest |pages=250-270 |format=pdf |authorlink=Gyulai Pál (irodalomtörténész)}}
* {{hely|Arany János}} {{cite web |title=Életrajza és egyebek |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/aranyj.htm |accessdate=2016-03-02 |publisher=magyar-irodalom.elte.hu}}
* {{hely|Csáky Zsolt}} {{cite web |title=Az önkényuralomtól a kiegyezésig Arany János (1817–1882) |url=https://erettsegi.com/tetelek/irodalom/arany-janos-az-onkenyuralomtol-a-kiegyezesig |accessdate=2026-04-09 |3=publisher}}
* {{hely|Pintér Jenő hetedik kötet}} {{cite book |author=Pintér Jenő |url=https://mek.oszk.hu/15300/15384/pdf/15384_7.pdf |title=Magyar Irodalomtörténet I. A MAGYAR IRODALOM A XIX. SZÁZAD UTOLSÓ HARMADÁBAN. |year=1934 |location=Budapest |pages= |format=pdf |authorlink=Pintér Jenő (irodalomtörténész)}}
* {{hely|SZTE Egyetemi Könyvtár}} {{cite web |author=Dr. Kokas Károly és Tóth Margit |title=Arany János élete |url=http://www.bibl.u-szeged.hu/oszikek/pallas/elete.html |accessdate=2016-10-29 |publisher=bibl.u-szeged.hu |language=magyar}}
* {{hely|Szinnyei József}} {{cite web |author=Szinnyei József |authorlink=Szinnyei József (bibliográfus) |title=Arany János |url=https://mek.oszk.hu/03600/03630/html/a/a00413.htm |accessdate=2016-03-03 |work=Magyar írók élete és munkái |publisher=Budapest: Hornyánszky}}
* {{hely|Leszler János}} {{CitLib|tit=Nótakedvelőknek|aut=Leszler József|red=Zeneműkiadó|loc=Budapest|ann=1986|isbn=963 330 599 3|pag=21–22}}
== További információk ==
{{Wikidézet|Arany János}} {{wikiforrásszerző}}
* [[Koltai Virgil]] 1886: Arany János élete és költészete. In: Értesítő a Pannonhalmi Sz.-Benedek-rend győri Főgymnasiumáról az 1885-86. tanév végén. Győr
* {{cite web |title=Alkotói portrék a magyar irodalomból >> Arany János |url=http://magyar-irodalom.elte.hu/sulinet/igyjo/setup/portrek/arany/aranyj.htm |accessdate=2016-11-26 |publisher=magyar-irodalom.elte.hu |language=magyar}}
* {{cite web |title=Kokas Károly - Tóth Margit: Őszikék. Összeállítás Arany János öregkori ciklusáról |url=https://mek.oszk.hu/00500/00596/ |accessdate=2016-12-02 |publisher=mek.oszk.hu |language=magyar}}
* {{Cite book |title=Arany János Összes művei |year=1951 |editor=Voinovich Géza, Keresztury Dezső |edition=Az MTA kritikai kiadása |location=Budapest}}
* {{Cite book |author=Arany János |title=Tanulmányok és kritikák |publisher=Kossuth Egyetemi Kiadó |year=1998 |isbn=963 472 257 1 |editor=S. Varga Pál |location=Debrecen}}
* {{cite web |author=[[Tolnai Vilmos]] |title=Adalékok Arany János forrásaihoz |url=http://epa.oszk.hu/00000/00001/00057/pdf/ITK_1902_03_257-271.pdf |accessdate=2018-09-14 |publisher=epa.oszk.hu |language=magyar}}
* {{Cite web |author=[[Voinovich Géza]] |year=1929 |title=Arany János életrajza 1-2-3. kötet |url=http://real-eod.mtak.hu/3141/ |accessdate=2020-03-15 |publisher=A Magyar Tudományos Akadémia Könyvkiadó Vállalata. Új folyam . Magyar Tudományos Akadémia |location=Budapest}}
* [[Wojatsek Károly]] 1991: Arany János hatása a szlovák irodalomra. In: A magyar nyelv és kultúra a Duna völgyében – Kapcsolatok és kölcsönhatások a 19-20. század fordulóján. Budapest, 722-734.
* [http://publicatio.bibl.u-szeged.hu/12837/ Kokas Károly: A könyv meséje] – Kísérő tanulmány a "kapcsos könyv"-ről és az [[Őszikék|Őszikékr]]ől a [[Kapcsos könyv]] 2017-es (Kossuth) kiadásához. (Hozzáférés: 2022. szeptember 11.)
=== Arany János-linkek ===
* [https://real-eod.mtak.hu/view/creators/Arany=3AJ=E1nos=3A=3A.html Arany János művei a REAL-EOD-ban]
* [http://aranyjanos.lap.hu// Arany János.lap.hu]
* [https://web.archive.org/web/20140403135319/http://muemlekek.info/muemlek/arany-janos-sirja.php Arany János sírja]
* [https://www.urbanlegends.hu/tag/arany-janos/ Arany Jánossal kapcsolatos irodalmi tévhitek, anekdoták ellenőrzése]
[[Category:Magyar írók]]
e0uy1l35nofzam8yun6f5r3am4m5oll
Category:Magyar írók
14
178161
759913
2026-09-02T06:38:56Z
Dj
51146
Created blank page
759913
wikitext
text/x-wiki
phoiac9h4m842xq45sp7s6u21eteeq1
Petőfi Sándor
0
178162
759914
2026-09-02T06:39:28Z
Dj
51146
Created page with "'''Petőfi Sándor''' (született ''Petrovics Sándor'', [[Kiskőrös]], [[1823]]. [[január 1.]] – [[Fehéregyháza]] környékén, [[1849]]. [[július 31.]]) magyar [[költő]], forradalmár, nemzeti hős, a magyar [[költészet]] egyik legismertebb és egyik legkiemelkedőbb alakja. Rövid élete alatt közel ezer verset írt, ebből körülbelül nyolcszázötven maradt az utókorra; az ismertebbeket számos nyelvre lefordították.<ref>{{cite web |url=http://mek.o..."
759914
wikitext
text/x-wiki
'''Petőfi Sándor''' (született ''Petrovics Sándor'', [[Kiskőrös]], [[1823]]. [[január 1.]] – [[Fehéregyháza]] környékén, [[1849]]. [[július 31.]]) magyar [[költő]], forradalmár, nemzeti hős, a magyar [[költészet]] egyik legismertebb és egyik legkiemelkedőbb alakja. Rövid élete alatt közel ezer verset írt, ebből körülbelül nyolcszázötven maradt az utókorra; az ismertebbeket számos nyelvre lefordították.<ref>{{cite web |url=http://mek.oszk.hu/01000/01006/ |title=Petőfi Sándor összes költeményei |accessdate=2015-04-02 |author=Petőfi Sándor |date=| publisher=Magyar Elektronikus Könyvtár}}</ref>
A tanulást tizennyolc esztendős korában abbahagyva színész lett, és ekkor kezdett verseket írni. 1844-től élt [[Pest (történelmi település)|Pesten]], majd 1846-tól baráti körével [[irodalom|irodalmi]] társaságot szervezett. Fiatal kora ellenére ekkorra már országos ismertségre tett szert. A „[[márciusi ifjak]]” egyik vezetőjeként részt vett az [[1848]]. [[március 15.|március 15-i]] forradalomban, amelynek valóságos [[szimbólum]]ává vált. A 26 éves költő ezután bekapcsolódott a [[1848–49-es forradalom és szabadságharc|szabadságharc]] küzdelmeibe, melynek során – a [[történettudomány]] mai álláspontja szerint – életét áldozta hazájáért, a magyar szabadságért: [[1849]]. [[július 31.|július 31-én]], a [[Segesvári csata|segesvári csatát]] követő fejvesztett menekülés közben, amikor a [[Grigorij Jakovlevics Szkarjatyin|Szkarjatyin]] tábornok halálán felbőszült [[kozákok|kozák]] [[ulánus]]ok az üldözött honvédeket kíméletlenül lemészárolták, ő is elesett. Eltűnésének pontos körülményei azonban tisztázatlanok.
80f7a9th5p1231chqc9ddl4urxalw5a
759916
759914
2026-09-02T06:43:56Z
Dj
51146
759916
wikitext
text/x-wiki
'''Petőfi Sándor''' (született ''Petrovics Sándor'', [[Kiskőrös]], [[1823]]. [[január 1.]] – [[Fehéregyháza]] környékén, [[1849]]. [[július 31.]]) magyar [[költő]], forradalmár, nemzeti hős, a magyar [[költészet]] egyik legismertebb és egyik legkiemelkedőbb alakja. Rövid élete alatt közel ezer verset írt, ebből körülbelül nyolcszázötven maradt az utókorra; az ismertebbeket számos nyelvre lefordították.<ref>{{cite web |url=http://mek.oszk.hu/01000/01006/ |title=Petőfi Sándor összes költeményei |accessdate=2015-04-02 |author=Petőfi Sándor |date=| publisher=Magyar Elektronikus Könyvtár}}</ref>
A tanulást tizennyolc esztendős korában abbahagyva színész lett, és ekkor kezdett verseket írni. 1844-től élt [[Pest (történelmi település)|Pesten]], majd 1846-tól baráti körével [[irodalom|irodalmi]] társaságot szervezett. Fiatal kora ellenére ekkorra már országos ismertségre tett szert. A „[[márciusi ifjak]]” egyik vezetőjeként részt vett az [[1848]]. [[március 15.|március 15-i]] forradalomban, amelynek valóságos [[szimbólum]]ává vált. A 26 éves költő ezután bekapcsolódott a [[1848–49-es forradalom és szabadságharc|szabadságharc]] küzdelmeibe, melynek során – a [[történettudomány]] mai álláspontja szerint – életét áldozta hazájáért, a magyar szabadságért: [[1849]]. [[július 31.|július 31-én]], a [[Segesvári csata|segesvári csatát]] követő fejvesztett menekülés közben, amikor a [[Grigorij Jakovlevics Szkarjatyin|Szkarjatyin]] tábornok halálán felbőszült [[kozákok|kozák]] [[ulánus]]ok az üldözött honvédeket kíméletlenül lemészárolták, ő is elesett. Eltűnésének pontos körülményei azonban tisztázatlanok.
[[Category:Magyar írók]]
i4bvz8nm576evz8wjtk9okmcjsowxjn
Molnár Ferenc
0
178163
759917
2026-09-02T06:46:45Z
Dj
51146
Created page with "Molnár Ferenc (született: Neumann Ferenc, külföldön gyakran Franz Molnar; Budapest, Józsefváros, 1878. január 12.[17] – New York, 1952. április 1.) magyar író, drámaíró, újságíró, haditudósító. Bár Molnár Ferenc neve legtöbbeknek a Pál utcai fiúk népszerű ifjúsági kisregényével kapcsolódik össze, személyében olyan kaliberű alkotóról van szó, akinek a műveit világszerte előadták, akinek az 50. születésnapját fényes kerete..."
759917
wikitext
text/x-wiki
Molnár Ferenc (született: Neumann Ferenc, külföldön gyakran Franz Molnar; Budapest, Józsefváros, 1878. január 12.[17] – New York, 1952. április 1.) magyar író, drámaíró, újságíró, haditudósító.
Bár Molnár Ferenc neve legtöbbeknek a Pál utcai fiúk népszerű ifjúsági kisregényével kapcsolódik össze, személyében olyan kaliberű alkotóról van szó, akinek a műveit világszerte előadták, akinek az 50. születésnapját fényes keretek közt a New York-i Broadwayn ünnepelték, akit az Egyesült Államok elnöke, Calvin Coolidge személyesen fogadott a Fehér Házban, s aki az 1920-30-as években becslések szerint több mint 1 millió amerikai dollárt keresett évente.
„Molnár a magyar irodalom előkelő idegene” – mondta róla Németh Andor (1891–1953) kortárs író, míg Schöpflin Aladár (1872–1950) irodalomtörténész, műkritikus és műfordító így emlékezett: „Ő az egyetlen magyar író, aki egész erejével nemzetközi ellenőrzés alatt áll, s akiről mindenütt kialakult egy főpontjaiban egységes vélemény. Útját ennek a sikernek tagadhatatlanul a szórakoztató képessége egyengette, de ami irodalmi szempontból figyelemre méltóvá teszi s magasan kiemeli azoknak sorai fölé, akik éppen csak hogy szórakoztatják az embereket, az valami több, valami értékesebb. Az, hogy benne megérett és kifejezésre jutott a világ dolgainak s az embernek egy olyan szemléleti módja, amely teljesen és egyedül az övé s ennek kifejezésére olyan formai eszközöket talált, melyek saját, egyéni tulajdonai. […] Tagadhatatlan, hogy Molnár mondanivalója különbözik mindenki másétól, csak ő tudja elmondani s a formái, különösen a drámában, lényeges pontokon különböznek mindenki más formájától”.
[[Category:Magyar írók]]
5z45amwj4o5ommq0ubme49kpt0xxkq0
User:Max/NPPChecklistProto.js
2
178164
759921
2026-09-02T07:59:36Z
Max
57656
Created page with "//<nowiki> $(() => { const NPPChecklist = { userAgent: 'NPPChecklistHelper.js', version: '1.2', sectionTitle: 'NPP review checklists', fields: [ { key: 'checked_for_copyvio', label: 'Checked for copyright violations' }, { key: 'checked_CSD_criteria', label: 'Checked speedy deletion criteria' }, { key: 'checked_whether_to_draftify', label: 'Checked whether to draftify' }, { key: 'checked_notability', label: 'Checked notability' }, { key: 'checked_t..."
759921
javascript
text/javascript
//<nowiki>
$(() => {
const NPPChecklist = {
userAgent: 'NPPChecklistHelper.js',
version: '1.2',
sectionTitle: 'NPP review checklists',
fields: [
{ key: 'checked_for_copyvio', label: 'Checked for copyright violations' },
{ key: 'checked_CSD_criteria', label: 'Checked speedy deletion criteria' },
{ key: 'checked_whether_to_draftify', label: 'Checked whether to draftify' },
{ key: 'checked_notability', label: 'Checked notability' },
{ key: 'checked_title', label: 'Checked the article title' }
],
iconNames: ['cdxIconEye', 'cdxIconEyeClosed', 'cdxIconEdit', 'cdxIconHistory', 'cdxIconClose'],
icons: {},
api: null,
vm: null,
init() {
if (mw.config.get('wgNamespaceNumber') !== 0) return;
if (mw.config.get('wgArticleId') === 0) return;
if (mw.config.get('wgIsRedirect')) return;
mw.loader.using(['vue', '@wikimedia/codex', 'mediawiki.util', 'mediawiki.api']).then((require) => {
this.Vue = require('vue');
this.Codex = require('@wikimedia/codex');
this.api = new mw.Api({ ajax: { headers: { 'Api-User-Agent': this.userAgent } } });
this.run();
});
},
async run() {
const unreviewed = await this.isUnreviewed();
if (!unreviewed) return;
await this.loadIcons();
mw.util.addPortletLink('p-cactions', '#', 'NPP Checklist', 'ca-npp-checklist', 'Fill out the NPP review checklist for this article');
$('#ca-npp-checklist a').on('click', (e) => {
e.preventDefault();
this.openDialog();
});
},
async loadIcons() {
try {
const data = await this.api.get({
action: 'query',
list: 'codexicons',
names: this.iconNames.join('|'),
formatversion: 2
});
this.icons = (data && data.query && data.query.codexicons) || {};
} catch (e) {
this.icons = {};
}
},
async isUnreviewed() {
try {
const data = await this.api.get({
action: 'pagetriagelist',
page_id: mw.config.get('wgArticleId')
});
const pages = data.pagetriagelist && data.pagetriagelist.pages;
if (!pages || !pages.length) return false;
return Number(pages[0].patrol_status) === 0;
} catch (e) {
return false;
}
},
buildTemplateText(values, comments) {
const lines = ['{{NPP checklist'];
this.fields.forEach((f) => {
lines.push('|' + f.key + ' = ' + (values[f.key] || ''));
});
lines.push('|comments = ' + (comments || ''));
lines.push('|sign = ~~~~');
lines.push('}}');
return lines.join('\n');
},
buildSubsectionText(username, templateText) {
return '=== ' + username + ' ===\n' + templateText;
},
legacySectionTitles: ['NPP review checklists', 'NPP review checklist'],
extractUsernameFromSignature(text) {
const m = text.match(/\[\[\s*User(?:[ _]talk)?\s*:\s*([^|\]/]+)/i);
if (m) return m[1].trim().replace(/_/g, ' ');
return null;
},
getTalkTitle() {
const title = mw.config.get('wgPageName').replace(/_/g, ' ');
const t = new mw.Title(title);
const ns = t.getNamespaceId();
const talkNs = ns % 2 === 0 ? ns + 1 : ns; //for testing in diff. ns
return new mw.Title(t.getMainText(), talkNs).getPrefixedText();
},
extractContent(apiData) {
const pages = apiData && apiData.query && apiData.query.pages;
if (!pages || !pages[0] || !pages[0].revisions || !pages[0].revisions[0]) return null;
return pages[0].revisions[0].content;
},
parseHeadings(lines) {
const headingRe = /^(={1,6})\s*(.+?)\s*\1\s*$/;
const result = [];
lines.forEach((line, index) => {
const m = line.match(headingRe);
if (m) result.push({ level: m[1].length, title: m[2].trim(), index });
});
return result;
},
findSectionBounds(lines, level, title) {
const headings = this.parseHeadings(lines);
const target = headings.find((h) => h.level === level && h.title === title);
if (!target) return null;
const after = headings.find((h) => h.index > target.index && h.level <= level);
const end = after ? after.index : lines.length;
return { start: target.index, end };
},
getSubsections(lines, bounds) {
const headings = this.parseHeadings(lines).filter(
(h) => h.index > bounds.start && h.index < bounds.end && h.level === 3
);
return headings.map((h, i) => {
const nextIndex = i + 1 < headings.length ? headings[i + 1].index : bounds.end;
const body = lines.slice(h.index + 1, nextIndex).join('\n');
return { username: h.title, body };
});
},
extractTemplateBlocks(text) {
const blocks = [];
const re = /\{\{\s*NPP[ _]checklist/gi;
let match;
while ((match = re.exec(text)) !== null) {
const start = match.index;
let depth = 0;
let end = -1;
for (let i = start; i < text.length; i++) {
const ch = text[i];
if (ch === '{') depth++;
else if (ch === '}') {
depth--;
if (depth === 0) {
end = i + 1;
break;
}
}
}
if (end === -1) break;
blocks.push(text.substring(start, end));
re.lastIndex = end;
}
return blocks;
},
getPreviewComponent() {
return {
components: {
CdxProgressBar: this.Codex.CdxProgressBar
},
props: {
wikitext: { type: String, default: '' },
pageTitle: { type: String, default: '' }
},
data() {
return { previewHtml: '', haveHtml: false };
},
methods: {
loadPreview(text) {
if (!text || !text.trim()) {
this.previewHtml = '';
this.haveHtml = false;
return;
}
new mw.Api().get({
action: 'parse',
formatversion: 2,
title: this.pageTitle || mw.config.get('wgPageName'),
text,
prop: 'text',
pst: true,
disablelimitreport: true,
disableeditsection: true,
contentmodel: 'wikitext'
}).then((res) => {
if (res && res.parse && res.parse.text) {
this.previewHtml = res.parse.text;
this.haveHtml = true;
}
});
}
},
watch: {
wikitext: {
immediate: true,
handler(newValue) {
this.previewHtml = '';
this.haveHtml = false;
this.loadPreview(newValue);
}
}
},
template: `
<div class="npp-cl-preview">
<div v-if="!haveHtml" class="npp-cl-preview-loading">
<cdx-progress-bar inline aria-label="Loading preview"></cdx-progress-bar>
</div>
<div v-else class="npp-cl-preview-content" v-html="previewHtml"></div>
</div>
`
};
},
openDialog() {
if (this.vm) {
this.vm.show();
return;
}
const container = $('<div>').attr('id', 'npp-checklist-app').appendTo('body')[0];
const self = this;
const app = this.Vue.createMwApp({
components: {
CdxDialog: self.Codex.CdxDialog,
CdxField: self.Codex.CdxField,
CdxRadio: self.Codex.CdxRadio,
CdxTextInput: self.Codex.CdxTextInput,
CdxTextArea: self.Codex.CdxTextArea,
CdxMessage: self.Codex.CdxMessage,
CdxButton: self.Codex.CdxButton,
CdxIcon: self.Codex.CdxIcon,
CdxCheckbox: self.Codex.CdxCheckbox,
previewRenderer: self.getPreviewComponent()
},
data() {
return {
open: false,
saving: false,
saveError: '',
saved: false,
reloadAfterSave: true,
talkTitle: '',
newComment: '',
rows: [],
version: self.version,
activeView: 'form',
showWikitextPreview: false,
showRenderedPreview: false,
existingChecklists: {
loading: false,
loaded: false,
error: '',
items: []
},
eyeIcon: self.icons.cdxIconEye || null,
eyeClosedIcon: self.icons.cdxIconEyeClosed || null,
editIcon: self.icons.cdxIconEdit || null,
historyIcon: self.icons.cdxIconHistory || null,
closeIcon: self.icons.cdxIconClose || null,
radioOptions: [
{ value: '', label: 'Not checked' },
{ value: 'y', label: 'Yes' },
{ value: 'no', label: 'No' },
{ value: '?', label: 'Unsure' },
{ value: 'unknown', label: 'Unknown' }
]
};
},
computed: {
allChecked() {
return this.rows.length > 0 && this.rows.every((r) => r.choice || r.note.trim());
},
missingCount() {
return this.rows.filter((r) => !r.choice && !r.note.trim()).length;
},
completeCount() {
return this.rows.filter((r) => r.choice || r.note.trim()).length;
},
wikitextToggleLabel() {
return this.showWikitextPreview ? 'Hide wikitext' : 'Show wikitext';
},
renderedToggleLabel() {
return this.showRenderedPreview ? 'Hide preview' : 'Show preview';
},
pendingComments() {
return this.newComment.trim();
},
previewTemplateText() {
return self.buildTemplateText(this.collectValues(), this.pendingComments);
},
currentUser() {
return mw.config.get('wgUserName');
},
finalSubsectionText() {
return self.buildSubsectionText(this.currentUser, this.previewTemplateText);
}
},
methods: {
show() {
this.talkTitle = self.getTalkTitle();
this.rows = self.fields.map((field) => ({
key: field.key,
label: field.label,
choice: '',
note: ''
}));
this.newComment = '';
this.showWikitextPreview = false;
this.showRenderedPreview = false;
this.activeView = 'form';
this.reloadAfterSave = true;
this.saving = false;
this.saveError = '';
this.saved = false;
this.existingChecklists = { loading: false, loaded: false, error: '', items: [] };
this.open = true;
// codex's dialog auto focuses the first tabbable element on open, which
// ends up being our custom close button since the native one is hidden,
// https://github.com/focus-trap/focus-trap#createfocustrap)
this.$nextTick(() => {
requestAnimationFrame(() => {
if (this.$refs.dialogHeading) this.$refs.dialogHeading.focus({ preventScroll: true });
});
});
},
onPrimary() {
this.submit();
},
onDefault() {
this.open = false;
},
onUpdateOpen(value) {
this.open = value;
},
switchView(view) {
this.activeView = view;
if (view === 'existing') this.loadExistingChecklists();
},
onChoiceInput(row, value) {
row.choice = value;
if (row.note.trim()) {
row.choice = '';
}
},
onNoteInput(row, value) {
row.note = value;
if (value.trim() && row.choice) {
row.choice = '';
}
},
collectValues() {
const values = {};
this.rows.forEach((row) => {
values[row.key] = row.choice || row.note.trim();
});
return values;
},
async loadExistingChecklists() {
if (this.existingChecklists.loaded || this.existingChecklists.loading) return;
this.existingChecklists.loading = true;
this.existingChecklists.error = '';
try {
const data = await self.api.get({
action: 'query',
prop: 'revisions',
rvprop: 'content',
titles: this.talkTitle,
formatversion: 2
});
const page = data && data.query && data.query.pages && data.query.pages[0];
if (!page || page.missing || !page.revisions || !page.revisions[0]) {
this.existingChecklists.items = [];
} else {
const content = page.revisions[0].content;
const lines = content.split('\n');
const items = [];
self.legacySectionTitles.forEach((headingTitle) => {
const bounds = self.findSectionBounds(lines, 2, headingTitle);
if (!bounds) return;
const subs = self.getSubsections(lines, bounds);
subs.forEach((sub) => {
self.extractTemplateBlocks(sub.body).forEach((block) => {
items.push({ username: sub.username, wikitext: block });
});
});
const firstSubIndex = subs.length
? self.parseHeadings(lines).find(
(h) => h.level === 3 && h.index > bounds.start && h.index < bounds.end
).index
: bounds.end;
const directBody = lines.slice(bounds.start + 1, firstSubIndex).join('\n');
self.extractTemplateBlocks(directBody).forEach((block) => {
const username = self.extractUsernameFromSignature(block) || 'Unknown editor';
items.push({ username, wikitext: block });
});
});
this.existingChecklists.items = items;
}
} catch (e) {
this.existingChecklists.error = 'error loading existing checklists from the talk page';
} finally {
this.existingChecklists.loading = false;
this.existingChecklists.loaded = true;
}
},
async submit() {
this.saving = true;
this.saveError = '';
const templateText = this.previewTemplateText;
const subsectionText = self.buildSubsectionText(this.currentUser, templateText);
try {
let sectionIndex = null;
try {
const sectionsData = await self.api.get({
action: 'parse',
page: this.talkTitle,
prop: 'sections',
formatversion: 2
});
const sections = (sectionsData && sectionsData.parse && sectionsData.parse.sections) || [];
const match = sections.find(
(s) => Number(s.level) === 2 && s.line.trim() === self.sectionTitle
);
if (match) sectionIndex = match.index;
} catch (e) {
sectionIndex = null;
}
let response;
if (sectionIndex !== null) {
const contentData = await self.api.get({
action: 'query',
prop: 'revisions',
rvprop: 'content',
rvsection: sectionIndex,
titles: this.talkTitle,
formatversion: 2
});
const sectionText = self.extractContent(contentData) || ('== ' + self.sectionTitle + ' ==');
const trimmed = sectionText.replace(/\s+$/, '');
const newSectionText = trimmed + '\n\n' + subsectionText;
response = await self.api.postWithEditToken({
action: 'edit',
title: this.talkTitle,
section: sectionIndex,
text: newSectionText,
summary: 'NPP checklist: recording page review'
});
} else {
response = await self.api.postWithEditToken({
action: 'edit',
title: this.talkTitle,
section: 'new',
sectiontitle: self.sectionTitle,
text: subsectionText,
summary: 'NPP checklist: recording page review'
});
}
this.saved = true;
this.saving = false;
const newRevId = response && response.edit && response.edit.newrevid;
if (this.reloadAfterSave && newRevId) {
window.location.href = mw.util.getUrl('Special:Diff/' + newRevId);
return;
}
setTimeout(() => { this.open = false; }, 900);
} catch (e) {
this.saveError = 'error saving to the talk page.';
this.saving = false;
}
}
},
template: `
<cdx-dialog
v-model:open="open"
title="NPP Checklist"
:use-close-button="false"
class="npp-cl-dialog"
@update:open="onUpdateOpen"
>
<div class="npp-cl-header-row">
<div class="npp-cl-header-title" ref="dialogHeading" tabindex="-1">NPP Checklist<span class="npp-cl-version">v{{ version }}</span></div>
<cdx-button weight="quiet" aria-label="Close" @click="open = false">
<cdx-icon v-if="closeIcon" :icon="closeIcon"></cdx-icon>
<span v-else>×</span>
</cdx-button>
</div>
<div class="npp-cl-tabbar">
<cdx-button
:weight="activeView === 'form' ? 'primary' : 'normal'"
:action="activeView === 'form' ? 'progressive' : 'default'"
@click="switchView('form')"
>
<cdx-icon v-if="editIcon" :icon="editIcon"></cdx-icon>
Fill checklist
</cdx-button>
<cdx-button
:weight="activeView === 'existing' ? 'primary' : 'normal'"
:action="activeView === 'existing' ? 'progressive' : 'default'"
@click="switchView('existing')"
>
<cdx-icon v-if="historyIcon" :icon="historyIcon"></cdx-icon>
Existing checklists
</cdx-button>
</div>
<template v-if="activeView === 'form'">
<cdx-message :type="allChecked ? 'success' : 'notice'" :allow-user-dismiss="false" class="npp-cl-progress-message">{{ completeCount }} of {{ rows.length }} items complete, {{ missingCount }} remaining.</cdx-message>
<div v-for="(row, index) in rows" :key="row.key" class="npp-cl-form-row">
<cdx-field class="npp-cl-field">
<template #label>{{ index + 1 }}. {{ row.label }}</template>
<div class="npp-cl-radio-group">
<cdx-radio
v-for="opt in radioOptions"
:key="opt.value"
:model-value="row.choice"
@update:model-value="onChoiceInput(row, $event)"
:input-value="opt.value"
:name="'npp-cl-' + row.key"
>{{ opt.label }}</cdx-radio>
</div>
<cdx-text-input
:model-value="row.note"
@update:model-value="onNoteInput(row, $event)"
placeholder="Or enter a short note instead"
></cdx-text-input>
</cdx-field>
</div>
<cdx-field class="npp-cl-field">
<template #label>Add a comment</template>
<cdx-text-area v-model="newComment" :rows="3"></cdx-text-area>
</cdx-field>
<cdx-checkbox v-model="reloadAfterSave" class="npp-cl-field">
Go to the diff of this edit after saving
</cdx-checkbox>
<div class="npp-cl-preview-toggle-row">
<cdx-button weight="quiet" @click="showWikitextPreview = !showWikitextPreview">
<cdx-icon v-if="showWikitextPreview ? eyeClosedIcon : eyeIcon" :icon="showWikitextPreview ? eyeClosedIcon : eyeIcon"></cdx-icon>
{{ wikitextToggleLabel }}
</cdx-button>
<cdx-button weight="quiet" @click="showRenderedPreview = !showRenderedPreview">
<cdx-icon v-if="showRenderedPreview ? eyeClosedIcon : eyeIcon" :icon="showRenderedPreview ? eyeClosedIcon : eyeIcon"></cdx-icon>
{{ renderedToggleLabel }}
</cdx-button>
</div>
<pre v-if="showWikitextPreview" class="npp-cl-final-wikitext">{{ finalSubsectionText }}</pre>
<div v-if="showRenderedPreview" class="npp-cl-rendered-preview-wrapper">
<preview-renderer :wikitext="previewTemplateText" :page-title="talkTitle"></preview-renderer>
</div>
<cdx-message v-if="saved" type="success" :allow-user-dismiss="false">Saved to the talk page.</cdx-message>
<cdx-message v-if="saveError" type="error" :allow-user-dismiss="false">{{ saveError }}</cdx-message>
</template>
<template v-else>
<div v-if="existingChecklists.loading" class="npp-cl-existing-loading">Loading existing checklists…</div>
<cdx-message v-else-if="existingChecklists.error" type="error" :allow-user-dismiss="false">{{ existingChecklists.error }}</cdx-message>
<cdx-message v-else-if="!existingChecklists.items.length" type="notice" :allow-user-dismiss="false">No existing checklist was found on the talk page yet.</cdx-message>
<div v-else class="npp-cl-existing-list">
<div v-for="(item, idx) in existingChecklists.items" :key="idx" class="npp-cl-existing-item">
<div class="npp-cl-existing-username">{{ item.username }}</div>
<preview-renderer :wikitext="item.wikitext" :page-title="talkTitle"></preview-renderer>
</div>
</div>
</template>
<div class="npp-cl-footer">
<div class="npp-cl-footer-links">
<a
href="https://en.wikipedia.org/wiki/Wikipedia:New_pages_patrol"
target="_blank"
rel="noopener"
class="npp-cl-footer-link"
>New pages patrol</a>
<span class="npp-cl-footer-link-sep">•</span>
<a
href="https://en.wikipedia.org/wiki/Wikipedia:New_pages_patrol#Reviewing_articles"
target="_blank"
rel="noopener"
class="npp-cl-footer-link"
>Reviewing articles</a>
</div>
<div class="npp-cl-footer-actions">
<cdx-button :disabled="saving" @click="onDefault">Cancel</cdx-button>
<cdx-button
weight="primary"
action="progressive"
:disabled="saving || activeView !== 'form'"
@click="onPrimary"
>Save to talk page</cdx-button>
</div>
</div>
</cdx-dialog>
`
});
this.vm = app.mount(container);
this.vm.show();
}
};
mw.util.addCSS(`
.cdx-dialog.npp-cl-dialog {
max-width: 52rem;
height: auto;
}
.npp-cl-dialog .cdx-dialog__body {
max-height: 78vh;
overflow-y: auto;
}
.npp-cl-dialog .cdx-dialog__header {
padding: 0 !important;
min-height: 0 !important;
border: 0 !important;
}
.npp-cl-dialog .cdx-dialog__header__title {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
.npp-cl-header-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
margin-bottom: 14px;
}
.npp-cl-header-title {
font-size: 17px;
font-weight: bold;
outline: none;
}
.npp-cl-header-title:focus {
outline: none;
}
.npp-cl-version {
font-size: 11px;
font-weight: normal;
color: var(--color-subtle, #54595d);
margin-left: 6px;
}
.npp-cl-header-row .cdx-button:focus:not(:focus-visible) {
outline: none;
box-shadow: none;
}
.npp-cl-footer {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
flex-wrap: wrap;
margin-top: 16px;
padding-top: 14px;
border-top: 1px solid var(--border-color-subtle, #eaecf0);
}
.npp-cl-footer-links {
display: flex;
align-items: center;
gap: 6px;
flex-wrap: wrap;
}
.npp-cl-footer-link {
font-size: 12px;
font-family: Georgia, 'Times New Roman', Cambria, serif;
color: var(--color-progressive, #36c);
text-decoration: none;
}
.npp-cl-footer-link:hover {
text-decoration: underline;
}
.npp-cl-footer-link-sep {
font-size: 12px;
font-family: Georgia, 'Times New Roman', Cambria, serif;
color: var(--color-subtle, #54595d);
}
.npp-cl-footer-actions {
display: flex;
gap: 8px;
flex-wrap: wrap;
}
.npp-cl-tabbar {
display: flex;
gap: 8px;
margin-bottom: 16px;
flex-wrap: wrap;
}
.npp-cl-progress-message {
margin: 16px 0 22px;
}
.npp-cl-field { margin-bottom: 18px; }
.npp-cl-radio-group { display: flex; flex-wrap: wrap; gap: 16px; margin-bottom: 6px; }
.npp-cl-preview-toggle-row {
display: flex;
gap: 8px;
margin: 14px 0;
flex-wrap: wrap;
}
.npp-cl-final-wikitext {
white-space: pre-wrap;
background: var(--background-color-base, #fff);
padding: 10px;
border-radius: 2px;
border: 1px solid var(--border-color-subtle, #eaecf0);
}
.npp-cl-rendered-preview-wrapper {
background: var(--background-color-base, #fff);
padding: 10px;
border-radius: 2px;
border: 1px solid var(--border-color-subtle, #eaecf0);
margin-top: 8px;
}
.npp-cl-preview-loading {
display: flex;
align-items: center;
gap: 8px;
color: var(--color-subtle, #54595d);
font-size: 0.88em;
}
.npp-cl-preview-content {
font-size: 0.95em;
line-height: 1.6;
}
.npp-cl-existing-loading {
color: var(--color-subtle, #54595d);
font-size: 0.9em;
padding: 8px 0;
}
.npp-cl-existing-list {
display: flex;
flex-direction: column;
gap: 16px;
}
.npp-cl-existing-item {
border: 1px solid var(--border-color-subtle, #eaecf0);
border-radius: 2px;
padding: 10px 12px;
}
.npp-cl-existing-username {
font-weight: bold;
margin-bottom: 6px;
}
`);
NPPChecklist.init();
});
//</nowiki>
12zteeoof8e085x13cbas42j0p53qkl
Talk:Test234
1
178165
759923
2026-09-02T08:15:30Z
Max
57656
NPP checklist: recording page review
759923
wikitext
text/x-wiki
== NPP review checklists ==
=== Max ===
{{NPP checklist
|checked_for_copyvio = y
|checked_CSD_criteria = y
|checked_whether_to_draftify = y
|checked_notability = y
|checked_title = y
|comments = Good.
|sign = – [[User:DreamRimmer|<span style="color:#5A4FCF">'''Dream'''Rimmer</span>]] [[User talk:DreamRimmer|<span style="color:##5A4FCF;">■</span>]] 08:15, 2 September 2026 (UTC)
}}
1kk49r7xkky0u6shjpafihijhtthype
File:East Asia orthographic projection flattened - 2.svg
6
178167
759930
2026-09-02T10:33:00Z
Ladsgroup
2217
Flattened version of [[File:East Asia orthographic projection.svg]]
759930
wikitext
text/x-wiki
== Summary ==
Flattened version of [[File:East Asia orthographic projection.svg]]
0kiljmqiivykj4u5jn8956g6c9ixbgi
Wikipedia:Sandbox/MoveIt e2e 2026-09-02T11-14-21-554Z
4
178168
759931
2026-09-02T11:14:23Z
Closed Limelike Curves
60396
MoveIt end-to-end test (2026-09-02T11-14-21-554Z), safe to delete
759931
wikitext
text/x-wiki
== Requested move: MoveIt e2e 2026-09-02T11-14-21-554Z ==
MoveIt end-to-end test, safe to delete (2026-09-02T11-14-21-554Z)
<nowiki>{{subst:RMassist | 1 = Example page | 2 = Example page (renamed) | reason = MoveIt end-to-end test, safe to delete}}</nowiki>
== Tail sentinel 2026-09-02T11-14-21-554Z ==
Sentinel: a section-targeted append must land above this heading.
tperxn6rxyyqmuyrnpss2yz000i5cie
759932
759931
2026-09-02T11:14:25Z
Closed Limelike Curves
60396
MoveIt end-to-end section append (2026-09-02T11-14-21-554Z), safe to delete
759932
wikitext
text/x-wiki
== Requested move: MoveIt e2e 2026-09-02T11-14-21-554Z ==
MoveIt end-to-end test, safe to delete (2026-09-02T11-14-21-554Z)
<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-09-02T11-14-21-554Z)
== Tail sentinel 2026-09-02T11-14-21-554Z ==
Sentinel: a section-targeted append must land above this heading.
dl1xd6h3e08z4ptjzndskitf082qdxs
759933
759932
2026-09-02T11:14:27Z
Closed Limelike Curves
60396
MoveIt live test teardown: blanking the throwaway test subpage
759933
wikitext
text/x-wiki
phoiac9h4m842xq45sp7s6u21eteeq1
Wikipedia:Sandbox/MoveIt moved 2026-09-02T11-14-27-729Z
4
178169
759934
2026-09-02T11:14:29Z
Closed Limelike Curves
60396
MoveIt live rename test: creating the page to be renamed
759934
wikitext
text/x-wiki
Throwaway page for the Move It live rename test (2026-09-02T11-14-27-729Z). Safe to delete.
4gc89x0n4iigpohihphqgvdg4hxkg9l
759935
759934
2026-09-02T11:14:30Z
Closed Limelike Curves
60396
Closed Limelike Curves moved page [[Wikipedia:Sandbox/MoveIt move 2026-09-02T11-14-27-729Z]] to [[Wikipedia:Sandbox/MoveIt moved 2026-09-02T11-14-27-729Z]]: Move It live rename test (via Move It browser extension)
759934
wikitext
text/x-wiki
Throwaway page for the Move It live rename test (2026-09-02T11-14-27-729Z). Safe to delete.
4gc89x0n4iigpohihphqgvdg4hxkg9l
759938
759935
2026-09-02T11:14:33Z
Closed Limelike Curves
60396
MoveIt live rename test teardown
759938
wikitext
text/x-wiki
phoiac9h4m842xq45sp7s6u21eteeq1
Wikipedia:Sandbox/MoveIt move 2026-09-02T11-14-27-729Z
4
178170
759936
2026-09-02T11:14:30Z
Closed Limelike Curves
60396
Closed Limelike Curves moved page [[Wikipedia:Sandbox/MoveIt move 2026-09-02T11-14-27-729Z]] to [[Wikipedia:Sandbox/MoveIt moved 2026-09-02T11-14-27-729Z]]: Move It live rename test (via Move It browser extension)
759936
wikitext
text/x-wiki
#REDIRECT [[Wikipedia:Sandbox/MoveIt moved 2026-09-02T11-14-27-729Z]]
{{Redirect category shell|
{{R from move}}
}}
px7olf6m9geq34d780gvg2917y5laxx
759937
759936
2026-09-02T11:14:32Z
Closed Limelike Curves
60396
MoveIt live rename test teardown
759937
wikitext
text/x-wiki
phoiac9h4m842xq45sp7s6u21eteeq1
User:John Vandenberg/createonly/1788349696.196911
2
178171
759944
2026-09-02T11:48:25Z
Pywikibot-test
23124
Pywikibot 11.8.0.dev0
759944
wikitext
text/x-wiki
phoiac9h4m842xq45sp7s6u21eteeq1