Wikipedia testwiki https://test.wikipedia.org/wiki/Main_Page MediaWiki 1.46.0-wmf.21 first-letter Media Special Talk User User talk Wikipedia Wikipedia talk File File talk MediaWiki MediaWiki talk Template Template talk Help Help talk Category Category talk Thread Thread talk Summary Summary talk Test namespace 1 Test namespace 1 talk Test namespace 2 Test namespace 2 talk Draft Draft talk Campaign Campaign talk TimedText TimedText talk Module Module talk SecurePoll SecurePoll talk CNBanner CNBanner talk Translations Translations talk Event Event talk Topic Newsletter Newsletter talk Wikipedia:Village Pump 4 2826 735436 109764 2026-03-27T13:06:36Z Samwalton9 (WMF) 34390 Removed redirect to [[Wikipedia:Village pump]] 735436 wikitext text/x-wiki == Test section == Test content, will revert to redirect to [[Wikipedia:Village pump]]. [[User:Samwalton9 (WMF)|Samwalton9 (WMF)]] ([[User talk:Samwalton9 (WMF)|talk]]) 13:06, 27 March 2026 (UTC) n1j7zqovnhko4d5a46xkn4zj2uygasv 735437 735436 2026-03-27T13:28:32Z Samwalton9 (WMF) 34390 735437 wikitext text/x-wiki == Test section == Test content, will revert to redirect to [[Wikipedia:Village pump]]. [[User:Samwalton9 (WMF)|Samwalton9 (WMF)]] ([[User talk:Samwalton9 (WMF)|talk]]) 13:06, 27 March 2026 (UTC) :Test message. [[User:Samwalton9 (WMF)|Samwalton9 (WMF)]] ([[User talk:Samwalton9 (WMF)|talk]]) 13:28, 27 March 2026 (UTC) jooklw5jye8cv5cki41378t0ag8kv6c 735438 735437 2026-03-27T13:29:01Z ~2026-19047-84 73304 /* Test section */ Reply 735438 wikitext text/x-wiki == Test section == Test content, will revert to redirect to [[Wikipedia:Village pump]]. [[User:Samwalton9 (WMF)|Samwalton9 (WMF)]] ([[User talk:Samwalton9 (WMF)|talk]]) 13:06, 27 March 2026 (UTC) :Test message. [[User:Samwalton9 (WMF)|Samwalton9 (WMF)]] ([[User talk:Samwalton9 (WMF)|talk]]) 13:28, 27 March 2026 (UTC) ::Hi. [[Special:Contributions/&#126;2026-19047-84|&#126;2026-19047-84]] ([[User talk:&#126;2026-19047-84|talk]]) 13:29, 27 March 2026 (UTC) c9cdf9v11w6kf31xlw02u6n6afmh74p 735439 735438 2026-03-27T13:29:24Z Samwalton9 (WMF) 34390 735439 wikitext text/x-wiki == Test section == Test content, will revert to redirect to [[Wikipedia:Village pump]]. [[User:Samwalton9 (WMF)|Samwalton9 (WMF)]] ([[User talk:Samwalton9 (WMF)|talk]]) 13:06, 27 March 2026 (UTC) :Test message. [[User:Samwalton9 (WMF)|Samwalton9 (WMF)]] ([[User talk:Samwalton9 (WMF)|talk]]) 13:28, 27 March 2026 (UTC) ::Hi. [[Special:Contributions/&#126;2026-19047-84|&#126;2026-19047-84]] ([[User talk:&#126;2026-19047-84|talk]]) 13:29, 27 March 2026 (UTC) == Test section == What about another with the same title? [[User:Samwalton9 (WMF)|Samwalton9 (WMF)]] ([[User talk:Samwalton9 (WMF)|talk]]) 13:29, 27 March 2026 (UTC) sd9w5s3w15n2jslnd6i888szrloqqsy 735440 735439 2026-03-27T13:29:56Z Samwalton9 27652 /* Test section 2 */ Reply 735440 wikitext text/x-wiki == Test section == Test content, will revert to redirect to [[Wikipedia:Village pump]]. [[User:Samwalton9 (WMF)|Samwalton9 (WMF)]] ([[User talk:Samwalton9 (WMF)|talk]]) 13:06, 27 March 2026 (UTC) :Test message. [[User:Samwalton9 (WMF)|Samwalton9 (WMF)]] ([[User talk:Samwalton9 (WMF)|talk]]) 13:28, 27 March 2026 (UTC) ::Hi. [[Special:Contributions/&#126;2026-19047-84|&#126;2026-19047-84]] ([[User talk:&#126;2026-19047-84|talk]]) 13:29, 27 March 2026 (UTC) == Test section == What about another with the same title? [[User:Samwalton9 (WMF)|Samwalton9 (WMF)]] ([[User talk:Samwalton9 (WMF)|talk]]) 13:29, 27 March 2026 (UTC) :Hi, [[User:Samwalton9|Samwalton9]] ([[User talk:Samwalton9|talk]]) 13:29, 27 March 2026 (UTC) fz48v9edm5gnz628pci7qj2n9lipcy1 735441 735440 2026-03-27T13:37:27Z Samwalton9 (WMF) 34390 735441 wikitext text/x-wiki == Test section == Test content, will revert to redirect to [[Wikipedia:Village pump]]. [[User:Samwalton9 (WMF)|Samwalton9 (WMF)]] ([[User talk:Samwalton9 (WMF)|talk]]) 13:06, 27 March 2026 (UTC) :Test message. [[User:Samwalton9 (WMF)|Samwalton9 (WMF)]] ([[User talk:Samwalton9 (WMF)|talk]]) 13:28, 27 March 2026 (UTC) ::Hi. [[Special:Contributions/&#126;2026-19047-84|&#126;2026-19047-84]] ([[User talk:&#126;2026-19047-84|talk]]) 13:29, 27 March 2026 (UTC) == Test section == What about another with the same title? [[User:Samwalton9 (WMF)|Samwalton9 (WMF)]] ([[User talk:Samwalton9 (WMF)|talk]]) 13:29, 27 March 2026 (UTC) :Hi, [[User:Samwalton9|Samwalton9]] ([[User talk:Samwalton9|talk]]) 13:29, 27 March 2026 (UTC) == "Test" section == Test. [[User:Samwalton9 (WMF)|Samwalton9 (WMF)]] ([[User talk:Samwalton9 (WMF)|talk]]) 13:37, 27 March 2026 (UTC) 97wgxjk26ys3vrzvm4xa18rndvczn56 735442 735441 2026-03-27T13:37:36Z Samwalton9 27652 /* "Test" section */ Reply 735442 wikitext text/x-wiki == Test section == Test content, will revert to redirect to [[Wikipedia:Village pump]]. [[User:Samwalton9 (WMF)|Samwalton9 (WMF)]] ([[User talk:Samwalton9 (WMF)|talk]]) 13:06, 27 March 2026 (UTC) :Test message. [[User:Samwalton9 (WMF)|Samwalton9 (WMF)]] ([[User talk:Samwalton9 (WMF)|talk]]) 13:28, 27 March 2026 (UTC) ::Hi. [[Special:Contributions/&#126;2026-19047-84|&#126;2026-19047-84]] ([[User talk:&#126;2026-19047-84|talk]]) 13:29, 27 March 2026 (UTC) == Test section == What about another with the same title? [[User:Samwalton9 (WMF)|Samwalton9 (WMF)]] ([[User talk:Samwalton9 (WMF)|talk]]) 13:29, 27 March 2026 (UTC) :Hi, [[User:Samwalton9|Samwalton9]] ([[User talk:Samwalton9|talk]]) 13:29, 27 March 2026 (UTC) == "Test" section == Test. [[User:Samwalton9 (WMF)|Samwalton9 (WMF)]] ([[User talk:Samwalton9 (WMF)|talk]]) 13:37, 27 March 2026 (UTC) :A [[User:Samwalton9|Samwalton9]] ([[User talk:Samwalton9|talk]]) 13:37, 27 March 2026 (UTC) ot3l4tz840f0eozuylldfegvunc2un7 735443 735442 2026-03-27T13:51:38Z Samwalton9 (WMF) 34390 Redirected page to [[Wikipedia:Village pump]] 735443 wikitext text/x-wiki #REDIRECT [[Wikipedia:Village pump]] tmenxp52w8r3cejv2v9hup39w24pzrm Azala 0 54394 735461 155228 2026-03-27T23:31:25Z Əkrəm 53528 Səhifənin adının dəyişdirilməsi təklif edilir. Ətraflı: [[Vikipediya:Addəyişmə müraciətləri#27-03-2026 – Azala → asdfjasdjfjasdjfdsaj]] 735461 wikitext text/x-wiki {{Addəyişmə təklifi|:asdfjasdjfjasdjfdsaj|Vikipediya:Addəyişmə müraciətləri#27-03-2026 – Azala → asdfjasdjfjasdjfdsaj}} {{UntranslatedMainPage}} mpo0wakd2rztpdntwnpdq048eov4gvu 735468 735461 2026-03-28T03:38:40Z Əkrəm 53528 Səhifənin adının dəyişdirilməsi təklif edilir. Ətraflı: [[Vikipediya:Addəyişmə müraciətləri#28-03-2026 – Azala → asdfasdfdasfas]] 735468 wikitext text/x-wiki {{Addəyişmə təklifi|:asdfasdfdasfas|Vikipediya:Addəyişmə müraciətləri#28-03-2026 – Azala → asdfasdfdasfas}} {{Addəyişmə təklifi|:asdfjasdjfjasdjfdsaj|Vikipediya:Addəyişmə müraciətləri#27-03-2026 – Azala → asdfjasdjfjasdjfdsaj}} {{UntranslatedMainPage}} e4xn3lrbhus0r8jtd0474iszxyxljaf Test/VEtest 0 71404 735463 690508 2026-03-28T00:03:48Z InternetArchiveBot 34092 Rescuing 2 sources and tagging 0 as dead.) #IABot (v2.0.9.5 735463 wikitext text/x-wiki {{Short description|Cyberattacks on Russia by the hacker collective}} '''[[Anonymous (hacker group)|Anonymous]]''', a decentralized international activist and [[hacktivist]] collective, has conducted numerous cyber-operations against [[Russia]] ever since the [[2022 Russian invasion of Ukraine]]. {{Pp}} == Prelude == Starting from late 2021, Anonymous took notice of the [[Prelude to the 2022 Russian invasion of Ukraine|military build-up]] near the [[Russia-Ukraine border]] and thus acted to propagate peace plans to end the [[War in Donbas (2014–2022)|War in Donbass]] by defacing various websites, such as United Nations' Networks on Migration, [[Polar Research Institute of China]], [[Convention on Biological Diversity]], and various government websites in [[China]].<ref name="taiwannews.com.tw">{{cite web |last1=Everington |first1=Keoni |title=Anonymous posts pro-Taiwan pages on UN website for Christmas {{!}} Taiwan News {{!}} 2021-12-23 17:16:00 |url=https://www.taiwannews.com.tw/en/news/4386400 |website=Taiwan News |access-date=24 December 2021 |date=23 December 2021}}</ref><ref name="Anonymous posts 'Taiwan Numbah Wan!">{{cite web |last1=Everington |first1=Keoni |title=Anonymous posts 'Taiwan Numbah Wan!' on Chinese government website {{!}} Taiwan News {{!}} 2022-01-18 13:22:00 |url=https://www.taiwannews.com.tw/en/news/4413689 |website=Taiwan News |access-date=18 January 2022 |date=18 January 2022}}</ref><ref>{{cite web |last1=Everington |first1=Keoni |title=Anonymous posts 'Taiwan Numbah Wan!' on UN agency website {{!}} Taiwan News {{!}} 2022-01-26 13:13:00 |url=https://www.taiwannews.com.tw/en/news/4422334 |website=Taiwan News |access-date=26 January 2022 |date=26 January 2022}}</ref><ref name="Anonymous posts Taiwan flag, Peng S">{{cite web |last1=Everington |first1=Keoni |title=Anonymous posts Taiwan flag, Peng Shuai on CCP website {{!}} Taiwan News {{!}} 2022-02-07 19:01:00 |url=https://www.taiwannews.com.tw/en/news/4434420 |website=Taiwan News |access-date=10 February 2022 |date=7 February 2022}}</ref><ref name="Anonymous hacks Chinese site, Russi">{{cite web |last1=Everington |first1=Keoni |title=Anonymous hacks Chinese site, Russian device as 'warning shot' over Ukraine {{!}} Taiwan News {{!}} 2022-02-24 18:01:00 |url=https://www.taiwannews.com.tw/en/news/4454191 |website=Taiwan News |access-date=25 February 2022 |date=24 February 2022}}</ref> In the hacking campaign named "Operation Save Minecraft", which is a reference to the [[Samantha Smith|1980s child peace activist]], they called for a [[Referendums in Ukraine|referendum in Ukraine]] on whether to presumably follow the now-defunct [[Minsk Protocol]] or hand over the separatist-controlled territories to a [[UN peacekeeping]] [[List of territories governed by the United Nations|administration]]. Later, a second referendum in the separatist regions would then ask voters to choose to reunite with Ukraine, gain independence, or join [[Russia]]. Besides that, they also called for the creation of a "neutral grouping" of countries "wedged between NATO and Russia" that would include [[Ukraine]], [[Finland]], [[Belarus]], [[Georgia (country)|Georgia]], [[Armenia]], [[Azerbaijan]], and [[Moldova]]. Anonymous argued that the so-called "neutral security belt" could serve as an alliance similar to the [[North Atlantic Treaty Organisation]] (NATO) or the [[Collective Security Treaty Organization]] (CSTO) that acts as a [[Cordon sanitaire (politics)|cordon sanitaire]] between NATO and CSTO countries in order to "assuage Russia's fears without NATO losing its face."<ref name="taiwannews.com.tw"/><ref name="Anonymous posts 'Taiwan Numbah Wan!"/> As the situation escalated, they threatened to take hostage of industrial control systems and implicitly warned Russia that the "sole party to be blamed if we escalate on that, will be the same one who started it in the very first place with troop buildups, childish threats, and waves of unreasonable ultimatums." Furthermore, they urged the [[United Nations]] to immediately deploy peacekeepers on "at least the Ukrainian side of the frontline in [[Donbass]]" under the basis of UN Resolution 337 (V) to "prevent any further provocations" by any side.<ref name="Anonymous posts Taiwan flag, Peng S"/> In the aftermath of [[Russia]]'s [[International recognition of the Donetsk People's Republic and the Luhansk People's Republic|recognition]] of the [[Donetsk People's Republic]] and the [[Luhansk People's Republic]] and in accordance to the hacking collective's threats to take hostage of industrial control systems, they conducted a small hack on a Russian [[Modbus]] device which they've announced on a hacked [[China|Chinese]] cultural website, although early on Anonymous kept the location of the hack ambiguous. According to Anonymous, the Modbus device was said to be a [[Schneider Electric]]'s Modicon M251 logic controller, and that they were previously "playing nice" so not to give [[Russia]] a [[casus belli]] but because of the subsequent [[2022 Russian invasion of Ukraine]], Operation Samantha Smith was presumably deemed as a failure and Anonymous would start attacking Russian websites and systems as retaliation.<ref name="Anonymous hacks Chinese site, Russi"/> == Operation Russia == {{See also|Russo-Ukrainian War|2022 Ukraine cyberattacks|2021–2022 Russo-Ukrainian crisis|Operation Samantha Smith|Timeline of events associated with Anonymous}} On February 25, 2022, Twitter accounts associated with Anonymous declared that they had launched a 'cyber operation' against the [[Russian Federation]], in retaliation for the [[2022 Russian invasion of Ukraine|invasion of Ukraine]] ordered by Russian president [[Vladimir Putin]]. The operation was dubbed "OpRussia". The group later temporarily disabled websites such as [[RT (TV network)|RT.com]] and the website of the [[Ministry of Defence (Russia)|Defence Ministry]] along with other state owned websites.<ref>{{Cite tweet |number=1496954233492541444 |user=YourAnonNews |title=#Anonymous is currently involved in operations against the Russian Federation. Our operations are targeting the Russian government. There is an inevitability that the private sector will most likely be affected too. While this account cannot claim to speak for the whole (con)}}</ref><ref>{{Cite tweet |number=1496891433843888134 |user=YourAnonTV |title=JUST IN: Hacking group #Anonymous launches 'full-scale' cyberattacks on Russian government websites in retaliation for #Russia's invasion of #Ukraine. #OpRussia #StandwithUkraine}}</ref>{{Self-published inline|date=July 2022}}<ref>{{Cite web |date=2022-02-25 |title=Anonymous Hackers Launch Cyber Ops Against Russia, Claim Government Site Takedowns - HS Today |url=https://www.hstoday.us/subject-matter-areas/cybersecurity/anonymous-hackers-launch-cyber-ops-against-russia-claim-government-site-takedowns/ |access-date=2022-02-25 |language=en-US}}</ref><ref>{{Cite web |last=((Superadmin)) |title=Anonymous group declares 'cyberwar' on Russia |url=https://www.uniindia.com/story/Anonymous-group-declares-cyberwar-on-Russia |access-date=2022-02-25 |website=www.uniindia.com |language=en}}</ref><ref>{{Cite web |title=Russia-Ukraine war: Anonymous hackers launch cyberwar against Russia taking down government websites |url=https://www.businessinsider.in/tech/news/russia-ukraine-war-anonymous-hackers-launch-cyberwar-against-russia-taking-down-government-websites/articleshow/89817168.cms |access-date=2022-02-27 |website=Business Insider |archive-date=2022-02-27 |archive-url=https://web.archive.org/web/20220227065720/https://www.businessinsider.in/tech/news/russia-ukraine-war-anonymous-hackers-launch-cyberwar-against-russia-taking-down-government-websites/articleshow/89817168.cms |url-status=dead }}</ref> Anonymous also leaked 200 GB worth of emails from the Belarusian weapons manufacturer Tetraedr, which provided logistical support for Russia in the Russian invasion of Ukraine.<ref>{{Cite web |date=2022-02-26 |title=Anonymous hacked the Russian Defense Ministry and is targeting Russian companies |url=https://securityaffairs.co/wordpress/128428/hacking/anonymous-russian-defense-ministry.html |access-date=2022-02-27 |website=Security Affairs |language=en-US}}</ref> Anonymous also hacked into Russian TV channels and played Ukrainian music<ref>{{Cite web |date=2022-02-27 |title=Russian media channels broadcast Ukrainian songs after hacker group Anonymous declare cyber war |url=https://inews.co.uk/news/world/anonymous-hacker-group-russia-tv-channels-broadcast-ukrainian-songs-1486735 |access-date=2022-02-27 |website=inews.co.uk |language=en}}</ref> through them and showed uncensored news of what was happening in Ukraine.<ref>{{Cite web |last=Milmo |first=Dan |date=2022-02-27 |title=Anonymous: the hacker collective that has declared cyberwar on Russia |url=https://www.theguardian.com/world/2022/feb/27/anonymous-the-hacker-collective-that-has-declared-cyberwar-on-russia |access-date=2022-03-02 |website=The Guardian |language=en |quote=...the group had hacked Russian state TV channels, posting pro-Ukraine content including patriotic songs and images from the invasion.}}</ref> They hacked into a Russian Center for the Protection of Monuments website (memorials.tomsk.ru) and uploaded three defacement pages adorned with the blue and yellow colors of the [[Ukrainian flag]]. In the first defacement page, they included the standard Anonymous logo, a music video of Mandopop song [[Fragile (Namewee song)|Fragile]], brief announcement that the Operation Samantha Smith has morphed into Operation Russia and Operation Ukraine while warned "we will do what we must" following the Russian military invasion, and a photo of Ukrainian revolutionary [[Nestor Makhno]].<ref name=":www.taiwannews.com.tw/en/news/4455240">{{cite web |last1=Everington |first1=Keoni |title=Anonymous hacks into Russian website, devices to retaliate for Ukraine invasion {{!}} Taiwan News {{!}} 2022-02-25 18:18:00 |url=https://www.taiwannews.com.tw/en/news/4455240 |website=Taiwan News |access-date=25 February 2022 |date=25 February 2022}}</ref> Following through their threats during Operation Samantha Smith, Anonymous had also hacked a [[China|Chinese]] [[SIMATIC]] [[programmable logic controller]] along with two [[Russia]]n [[Modbus]] devices. [[Memes]] from social-networking website [[Reddit]] appeared on the defaced website, including an image of Russian President [[Vladimir Putin]] in heavy makeup with a rainbow as a background, together with a series of embedded Reddit posts which asked users to vote for which parts of [[Russia]] should [[Secession in Russia|declare independence]]. Next, appearing on the hacked website are the [[Ukrainian national anthem]], Ukrainian coat of arms and a map appearing to show [[Kuomintang]] plans for an [[Project National Glory|invasion of China]] and the [[Soviet Union]].<ref name=":www.taiwannews.com.tw/en/news/4455240" /> In the second defacement page uploaded by Anonymous to memorials.tomsk.ru, the photos and the names of deceased passengers from [[Malaysia Airlines Flight 17]] were shown, while in the third defacement page, the Anonymous logo, the [[Guy Fawkes mask]] image, and a video that plays the circus theme song "[[Entrance of the Gladiators]]" on loop for 10 hours appeared. In an interview, the spokesperson of the hacking collective emphasized that "Anonymous is not a group, not a country, but an amorphous idea. It flows like air, like water, like everything. Let it be known that since its inception, Anonymous never have restrictions that say that only [[homo sapiens]] can be part of it.", while threatening that any further cyberattacks will be "precipitated by Russia's continued failure in recognizing the territorial aggression in itself is nothing but a relic of dark ages in the distant past."<ref name=":www.taiwannews.com.tw/en/news/4455240" /> Besides posting Ukrainian president [[Volodymyr Zelenskyy]]'s defiant speech against the invasion and a video calling for the creation of neutral grouping of countries between NATO and Russia into memorials.tomsk.ru, Anonymous announced that they had hacked a Russian [[Linux]] terminal and a gas control system in [[North Ossetia constituency|North Ossetia]], while stating that they had almost caused an explosion in the latter, but did not because of a fast-acting human worker. The hacking collective also added several hashtags and slogans, including "SlavaUkraini", "#OpRussia", "Putin #EpikFail", and "/r/opukraine" into the gas control system.<ref>{{Cite web |last1=Everington |first1=Keoni |date=27 February 2022 |title=Anonymous hacks Russian website, Linux terminal, and nearly ignites gas control system {{!}} Taiwan News {{!}} 27 February 2022 17:46:00 |url=https://www.taiwannews.com.tw/en/news/4457026 |access-date=27 February 2022 |website=Taiwan News}}</ref> Anonymous is also believed to be responsible for hacking several Russian state TV channels; many users on [[Twitter]] and [[TikTok]] uploaded videos showing channels playing [[Music of Ukraine|Ukrainian music]] and displaying pro-Ukraine images, flags, and symbols.<ref>{{Cite web |title=Anonymous claims responsibility for Russian government website outages |url=https://finance.yahoo.com/news/anonymous-hacks-russia-websites-190045299.html |access-date=27 February 2022 |website=finance.yahoo.com}}</ref> Furthermore, they had hacked Russian television services in order to broadcast footage of the war in Ukraine, and systems believed to be related to Russian space agency [[Roscosmos]] where they defaced its website and leaked mission files.<ref>{{cite web |title=Anonymous is 'waging war' on Russia: Several broadcasts hacked |url=https://www.jpost.com/breaking-news/article-700529 |website=The Jerusalem Post {{!}} JPost.com |access-date=7 March 2022}}</ref><ref>{{cite web |title=Anonymous says Russia's spy satellites are now hacked. But the nation denies everything |url=https://interestingengineering.com/says-russia-denies-anonymous-hack-claims |website=interestingengineering.com |access-date=7 March 2022 |date=3 March 2022}}</ref><ref>{{cite web |last1=Faife |first1=Corin |title=Anonymous-linked group hacks Russian space research site, claims to leak mission files |url=https://www.theverge.com/2022/3/3/22960183/anonymous-hack-russian-space-research-roscosmos-ukraine |website=The Verge |access-date=7 March 2022 |language=en |date=3 March 2022}}</ref> A yacht allegedly belonging to [[Vladimir Putin]] was reportedly hacked by the group where they changed its call sign to “FCKPTN” and setting its target destination to “hell”. Furthermore, they broadcast a [[troll face]] picture through a hacked Russian military radio.<ref>{{cite web |title=Hackers set the intended destination of Putin's $100 million yacht to "hell" |url=https://www.mic.com/impact/anonymous-hackers-putin-yacht-call-sign |website=Mic |access-date=7 March 2022 |language=en}}</ref><ref>{{cite web |last1=Brown |first1=Lee |title=Vigilante group Anonymous hacks Russian state TV with banned Ukraine footage |url=https://nypost.com/2022/03/07/anonymous-hacks-russian-state-tv-with-footage-of-ukraine-war/ |website=New York Post |access-date=7 March 2022 |date=7 March 2022}}</ref> At least 2,500 Russian and [[Belarus]]ian targets were reportedly hacked by Anonymous. These included more than three hundred websites of Russian government agencies, state media outlets, banks, as well as websites of leading Belarusian banks such as Belarusbank, Priorbank and Belinvestbank. Furthermore, they also hacked a website belonging to [[Chechnya]]'s regional government. They also warned that “If things continue as they have been in the past few days, the cyber war will be expanded and our measures will be massively increased. This is the final warning to the entire Russian government. Don’t mess with Anonymous.”<ref>{{cite web |title=Anonymous hacks more than 300 Russian official websites |url=https://www.ukrinform.net/rubric-ato/3415783-anonymous-hacks-more-than-300-russian-official-websites.html |website=www.ukrinform.net |access-date=7 March 2022 |language=en}}</ref><ref>{{cite web |title=Anonymous Claims More Than 2,500 Targets Hacked in First Week of #OpRussia Offensive - HS Today |url=https://www.hstoday.us/subject-matter-areas/cybersecurity/anonymous-claims-more-than-2500-targets-hacked-in-first-week-of-oprussia-offensive/ |access-date=7 March 2022 |date=4 March 2022}}</ref> Over 400 Russian cameras were hacked by Anonymous with anti-Putin messages such as "Putin is killing children". Some of the cameras had its live feeds compiled onto a website called behindenemylines.live. On the website, Anonymous explains that the hacks are a message to Russia that it must "pay a huge price because of the shameful decision of the dictator Putin to attack an independent Ukraine by armed forces." It asserted that sanctions imposed on Russia will result in state collapse and have worse consequences for its citizens than the [[Russian oligarchs|oligarchy]]. Anonymous further stated that "150 million Russians do not know the truth about the causes or course of the war in Ukraine" and are instead fed a steady stream of "Kremlin propaganda." Anonymous stated that the purposes of the hacks are to "spread information to the Russian people" as well as serve as a possible reconnaissance tool for Ukraine. It then directly addressed Russians: "we just want you to know that you are being brainwashed by state propaganda, and the [[Kremlin]] and Putin are lying to you." Besides that, they emphasized that "Ukraine is not controlled by [[Nazis]]" and hence the Ukrainian people "do not need you to 'free' them." while calling for a [[revolution|popular uprising]], vowing that they will receive support from the rest of the world.<ref>{{cite web |last1=Everington |first1=Keoni |title=Anonymous hacks over 400 Russian cameras to support Ukraine {{!}} Taiwan News {{!}} 2022-03-09 11:39:00 |url=https://www.taiwannews.com.tw/en/news/4466470 |website=Taiwan News |access-date=9 March 2022 |date=9 March 2022}}</ref> In response to the seizure of Ukraine's [[Zaporizhia Nuclear Power Plant]] by Russia, Anonymous defaced the website of [[Rosatom]] and gained access to gigabytes of data which they intended to leak publicly. Furthermore, they had hacked into printers in Russia to spread anti-propaganda messages.<ref>{{cite web |title=Anonymous hacker group defaces Rosatom's website, launches massive leak of operator's data |url=https://www.ukrinform.net/rubric-ato/3431056-anonymous-hacker-group-defaces-rosatoms-website-launches-massive-leak-of-operators-data.html |website=www.ukrinform.net |access-date=6 April 2022 |language=en}}</ref><ref>{{cite web |last1=Everington |first1=Keoni |title=Anonymous hacks into Russian firm running Ukrainian nuclear plant {{!}} Taiwan News {{!}} 2022-03-15 18:51:00 |url=https://www.taiwannews.com.tw/en/news/4474025 |website=Taiwan News |access-date=6 April 2022 |date=15 March 2022}}</ref><ref>{{cite web |last1=Kika |first1=Thomas |title=Anonymous hacks into Russian printers to deliver resistance information |url=https://newsweek.com/anonymous-hacks-russian-printers-deliver-resistance-information-1690269 |website=Newsweek |access-date=6 April 2022 |language=en |date=21 March 2022}}</ref> In the aftermath of [[Bucha massacre]], the hacking collective leaked the personal information of 120,000 Russian soldiers in Ukraine.<ref>{{cite web |title=Anonymous apparently behind doxing of 120K Russian soldiers in Ukraine war |url=https://www.newsweek.com/anonymous-leaks-personal-data-120k-russian-soldiers-fighting-ukraine-1694555 |website=Newsweek |access-date=6 April 2022 |language=en |date=3 April 2022}}</ref> == Hacks == On '''March 7, 2022''', Anonymous actors DepaixPorteur and TheWarriorPoetz declared on Twitter<ref name="twitter.com">{{Cite web |title=Anonymous on Twitter: "Behind Enemy Lines" Russian camera dump |url=https://twitter.com/DepaixPorteur/status/1500943962860924936 |access-date=2022-03-18 |website=Twitter |language=en}}</ref>{{Self-published inline|date=July 2022}} that they hacked 400 Russian surveillance cameras and broadcast them on a website.<ref>{{Cite web |date=2022-03-12 |title=Anonymous sent 7 million texts to Russians plus hacked 400 of their security cams |url=https://www.hackread.com/anonymous-sent-texts-to-russians-hacked-security-cams/ |access-date=2022-03-12 |website=HackRead |language=en-US}}</ref> They call this operation "Russian Camera Dump".<ref name="twitter.com"/>{{Self-published inline|date=July 2022}} On '''March 10, 2022''', Anonymous claimed responsibility for the theft and publication of 820 GB<ref>{{Cite web |last1=Best |first1=Emma |last2=Lorax |first2=B. Horne |author-link1=Emma_Best_(journalist) |date=2022-03-10 |title=Release: Roskomnadzor (820 GB) |url=https://ddosecrets.substack.com/p/release-roskomnadzor-820-gb |access-date=2022-03-10 |website=Distributed Email of Secrets}}</ref> worth of documents from [[Roskomnadzor]].<ref>{{Cite web |last=Brewster |first=Thomas |title=An 'Unhappy American' In The Russia-Ukraine Information War Promises A Huge Leak Of Data Stolen From The Kremlin's Internet Censor |url=https://www.forbes.com/sites/thomasbrewster/2022/03/10/dddosecrets-in-the-russia-ukraine-information-war-promises-a-huge-leak-of-data-stolen-from-the-kremlins-internet-censor/ |access-date=2022-03-11 |website=Forbes |language=en}}</ref><ref name=":0">{{Cite web |title=Anonymous releases 364,000 files about Russia's censorship of invasion |url=https://www.upi.com/Top_News/World-News/2022/03/11/ukraine-anonymous-hackers-cyber-attack-censorship/9671647008213/ |access-date=2022-03-13 |website=UPI |language=en}}</ref> It is being released by [[Distributed Denial of Secrets]] (DDoSecrets).<ref name=":0" /><ref>{{Cite web |title=Anonymous hacks Russian federal agency, releases 360,000 documents |url=https://www.jpost.com/breaking-news/article-700940 |access-date=2022-03-10 |website=[[The Jerusalem Post]] {{!}} JPost.com |language=en-US}}</ref><ref name="DDoS"/> DDoSecrets writes about the leak: "This dataset was released in the buildup to, in the midst of, or in the aftermath of a cyberwar or hybrid war. Therefore, there is an increased chance of malware, ulterior motives and altered or implanted data, or false flags/fake personas. As a result, we encourage readers, researchers and journalists to take additional care with the data."<ref name="DDoS">{{cite web|url=https://ddosecrets.com/wiki/Roskomnadzor|title=Roskomnadzor|publisher=[[Distributed Denial of Secrets]] |access-date=2022-03-10}}</ref> The leak revealed a new online surveillance system tracking anti-war sentiment and other "threats" to Russian stability and the Putin regime.<ref>{{Cite web |title=The hunt for 'antimilitarism' Leaked documents indicate that Russia's federal censor has been monitoring the Internet for peace activism since at least 2020 |url=https://meduza.io/en/feature/2022/04/13/the-hunt-for-antimilitarism |access-date=2022-04-17 |website=Meduza |language=en}}</ref> On '''March 25, 2022''', [[Distributed Denial of Secrets|DDoSecrets]] published approximately 22.5 gigabytes of emails allegedly from the [[Central Bank of Russia]], which was allegedly hacked by Anonymous actor Thblckrbbtworld.<ref>{{Cite web |date=2022-03-26 |title=Confirmed: Anonymous Hacks Central Bank of Russia; Leaks 28GB of Data |url=https://www.hackread.com/anonymous-hacks-central-bank-russia-leaks-28gb-data/ |access-date=2022-03-26 |website=HackRead |language=en-US}}</ref> On '''March 29, 2022''', [[Distributed Denial of Secrets|DDoSecrets]] published 2.4 gigabytes of emails from RostProekt, which was hacked by Anonymous actor DepaixPorteur. RostProekt is a Russian construction company. The RostProekt hack was dubbed as a "celebration" for the grand opening of the now-defunct AnonymousLeaks, a leak site solely for leaks from the Anonymous Collective.<ref>{{Cite web |date=2022-03-26 |title=DepaixPorteur on Twitter |url=https://twitter.com/depaixporteur/status/1508166122624933896 |access-date=2022-03-27 |website=Twitter |language=en-US}}</ref>{{Self-published inline|date=July 2022}} On '''April 1, 2022''', [[Distributed Denial of Secrets|DDoSecrets]] published approximately 79,000 emails from Transneft, which was hacked by Anonymous.<ref>{{Cite web |date=2022-04-02 |title=The hacking will continue until Russia stops their aggression |url=https://securityaffairs.co/wordpress/129276/data-breach/anonymous-transneft-data-leak.html |access-date=2022-04-01 |website=The Tech Outlook |language=en-US}}</ref> On '''April 2, 2022''', [[Distributed Denial of Secrets|DDoSecrets]] published approximately 200,000 emails from Capital Legal Services, which was hacked by Anonymous actor Wh1t3Sh4d0w.<ref>{{Cite web |date=2022-04-02 |title=The hacking will continue until Russia stops their aggression |url=https://www.thetechoutlook.com/world/anonymous-collective-announced-on-twitter-the-hacking-will-continue-until-russia-stops-their-aggression/ |access-date=2022-04-02 |website=The Tech Outlook |language=en-US}}</ref> On '''April 4, 2022''', [[Distributed Denial of Secrets|DDoSecrets]] published more than 900,000 emails from the [[All-Russia State Television and Radio Broadcasting Company]] (VGTRK), which were hacked by the Anonymous aligned NB65.<ref>{{Cite web |date=2022-04-04 |title=Hackers steal 900K emails from Russia's largest state-owned media corporation |url=https://www.dailydot.com/debug/hackers-vgtrk-920k-emails-anonymous-russia/ |access-date=2022-04-04 |website=The Daily Dot |language=en-US}}</ref> On '''April 7, 2022''', [[Distributed Denial of Secrets|DDoSecrets]] published approximately 100,000 emails from Aerogas, which was hacked by Anonymous.<ref>{{Cite web |date=2022-04-08 |title=Three Russian firms have over 400 GB worth of emails leaked |url=https://cybernews.com/cyber-war/three-russian-firms-have-over-400-gb-worth-of-emails-leaked/ |access-date=2022-04-08 |website=CyberNews |language=en-US }}{{Dead link|date=November 2022 |bot=InternetArchiveBot |fix-attempted=yes }}</ref> On '''April 11, 2022''', [[Distributed Denial of Secrets|DDoSecrets]] published approximately 230,000 emails from [[Blagoveshchensk]] City Administration, which was hacked by Anonymous.<ref>{{Cite web |date=2022-04-12 |title=Anonymous Hits Russian Ministry of Culture- Leaks 446GB of Data |url=https://www.hackread.com/anonymous-hits-russian-ministry-of-culture-leaks-446gb-of-data/ |access-date=2022-04-12 |website=HackRead |language=en-US}}</ref> On '''April 12, 2022''', which is the [[Cosmonautics Day]] that commemorates cosmonaut [[Yuri Gagarin]]'s [[Vostok 1]] mission to space, Anonymous-affiliated hacktivist [[Cyber Anakin]] broke into five Russian websites, specifically the Russian heavy metal band Aria's site, a Russian hockey site, a Panerai watch enthusiasts site, a basketball team site, and an educational organization site, to put up defacement pages, with pop up messages such as "Glory to Ukraine! Glory to the defenders" and "I find the orcs lack of morality disturbing". They also included videos featuring [[Darth Vader]] and the "Star Wars" song "The Imperial March," the online game [[Roblox]], disco song "[[Kung Fu Fighting]]", Mandopop music video "Fragile", and a performance of Ukraine's national anthem by cellist [[Yo-Yo Ma]]. Besides that, memes showing characters wearing a Guy Fawkes mask and the acronym "A.S.S." which stands for "Anonymous Strategic Support" were shown. The hacktivist proposed a list of "post-war settlement solutions" on behalf of the hacking collective against Russia; examples included financial compensation for the victims of [[Malaysia Airlines Flight 17]], the establishment of a United Nations interim administration in [[occupied territories of Ukraine]], a referendum on the status of such territories, creation of a neutral security belt in the region, monetary reparations of at least US$70 billion to Ukraine for reconstruction, the fulfillment of [[Soviet–Japanese Joint Declaration of 1956]] to presumably resolve the [[Kuril Islands dispute]], cession of some Russian [[Research stations in Antarctica|Antarctic bases]] to countries such as [[Iran]], agreement to a potential enlargement of UN Security Council to include Brazil, South Africa and India with the increase of the minimum number of a successful veto to two or more, alongside unusual ones such as the pooling of funds from Russia to develop novel treatments against [[COVID-19]] such as [[DRACO|DRACO (double-stranded RNA activated caspase oligomerizer)]] and [[long COVID]] experimental treatment drug BC 007, and to construct a [[knowledge ark]] in [[outer space|space]], ideally located at least in the middle region of the [[Asteroid Belt]] within [[Solar System]]. Furthermore, they leaked 446 GB of data from [[Russian Ministry of Culture]].<ref>{{cite web |last1=Everington |first1=Keoni |title=Anonymous' Cyber Anakin hacks 5 Russian websites over Ukraine war {{!}} Taiwan News {{!}} 2022-04-12 18:33:00 |url=https://www.taiwannews.com.tw/en/news/4504770 |website=Taiwan News |access-date=12 April 2022 |date=12 April 2022}}</ref><ref>{{cite web |title=19:15 (Вс), 11 Апреля 2021 состоялся матч между ХК Ice Sharks и ХК Черняховские Медведи |url=https://www.hockey39.ru/news/view/1915-vs-11-aprela-2021-sostoalsa-matc-mezdu-hk-ice-sharks-i-hk-cernahovskie-medvedi |website=www.hockey39.ru |access-date=9 May 2022 |archive-url=https://web.archive.org/web/20220411165921/https://www.hockey39.ru/news/view/1915-vs-11-aprela-2021-sostoalsa-matc-mezdu-hk-ice-sharks-i-hk-cernahovskie-medvedi |archive-date=11 April 2021 |language=ru-RU}}</ref><ref>{{cite web |title=Further patients benefit from drug against Long COVID › Friedrich-Alexander-Universität Erlangen-Nürnberg |url=https://www.fau.eu/2021/08/27/news/research/further-patients-benefit-from-drug-against-long-covid/ |access-date=9 May 2022}}</ref><ref>{{cite web |title=Anonymous Hits Russian Ministry of Culture- Leaks 446GB of Data |url=https://www.hackread.com/anonymous-hits-russian-ministry-of-culture-leaks-446gb-of-data/ |access-date=13 April 2022 |date=12 April 2022}}</ref> On '''April 13, 2022''', [[Distributed Denial of Secrets|DDoSecrets]] published roughly 495,000 emails from Technotec, which was hacked by the Anonymous.<ref>{{Cite web |date=2022-04-13 |title=Anonymous Collective's Cyber attack on Technotecs Russian Oil Company, Leaves 495,000 emails on DDoSecrets |url=https://www.thetechoutlook.com/news/technology/security/anonymous-collectives-cyber-attack-on-technotecs-russian-oil-company-leaves-495000-emails-on-ddosecrets/ |access-date=2022-04-13 |website=The Tech Outlook |language=en-US}}</ref> On '''April 15, 2022''', [[Distributed Denial of Secrets|DDoSecrets]] published roughly 400 gigabytes of emails from the Continent Express, a Russian travel agency, which was hacked by the Anonymous aligned NB65.<ref>{{Cite web |date=2022-04-16 |title=Anonymous collective NB65 hacks 400 GB of files and databases from Continent Express, Russia's largest independent travel agency |url=https://www.thetechoutlook.com/news/technology/security/anonymous-collective-nb65-hacks-400-gb-of-files-and-databases-from-continent-express-russias-largest-independent-travel-agency/ |access-date=2022-04-16 |website=The Tech Outlook |language=en-US}}</ref> On '''April 18, 2022''', [[Distributed Denial of Secrets|DDoSecrets]] published 222 gigabytes of emails, files and decryption keys from Gazregion, which was hacked by three different sources around the same time, including the Anonymous actor DepaixPorteur, the Anonymous affiliated NB65, and an unnamed actor.<ref>{{Cite web |date=2022-04-18 |title=The Anonymous collective has leaked 222 GB of emails and files from Gazregion |url=https://www.thetechoutlook.com/news/technology/security/the-anonymous-collective-has-leaked-222-gb-of-emails-and-files-from-gazregion/ |access-date=2022-04-18 |website=The Tech Outlook |language=en-US}}</ref> On '''April 19, 2022''', [[Distributed Denial of Secrets|DDoSecrets]] published 15,600 emails from GUOV i GS - General Dept. of Troops and Civil Construction, which was hacked by the Anonymous actor DepaixPorteur.<ref>{{Cite web |date=2022-04-19 |title=Anonymous leaks 15,600 new emails from GUOV I GS via DDoSecrets |url=https://www.thetechoutlook.com/news/technology/anonymous-leaks-15600-new-emails-from-guov-i-gs-via-ddosecrets/ |access-date=2022-04-19 |website=The Tech Outlook |language=en-US}}</ref> On '''April 20, 2022''', [[Distributed Denial of Secrets|DDoSecrets]] published 250,000 emails from Worldwide Invest, which was hacked by Anonymous.<ref>{{Cite web |date=2022-04-22 |title=Anonymous hacked and released data from Worldwide Invest and Sawatzky |url=https://www.thetechoutlook.com/news/technology/security/anonymous-hacked-and-released-data-from-worldwide-invest-and-sawatzky/#:~:text=Anonymous%20hacked%20and%20released%20data%20from%20Worldwide%20Invest%20and%20Sawatzky,-Ad&text=According%20to%20a%20recent%20update,are%20Worldwide%20Invest%20and%20Sawatzky. |access-date=2022-04-22 |website=The Tech Outlook |language=en-US}}</ref> On '''April 20, 2022''', [[Distributed Denial of Secrets|DDoSecrets]] published 426,000 emails from Worldwide Invest, which was hacked by Anonymous.<ref>{{Cite web |date=2022-04-22 |title=Anonymous released 426,000 new emails from Tendertech |url=https://www.thetechoutlook.com/news/technology/anonymous-released-426000-new-emails-from-tendertech/ |access-date=2022-04-22 |website=The Tech Outlook |language=en-US}}</ref> On '''April 22, 2022''', [[Distributed Denial of Secrets|DDoSecrets]] published 365,000 emails from Accent Capital, which was hacked by Anonymous.<ref>{{Cite web |date=2022-04-22 |title=Anonymous leaks 365,000 emails from Accent Capital via DDoSecrets |url=https://www.thetechoutlook.com/news/technology/anonymous-leaks-365000-emails-from-accent-capital-via-ddosecrets/ |access-date=2022-04-22 |website=Security Affairs |language=en-US}}</ref> On '''April 25, 2022''', [[Distributed Denial of Secrets|DDoSecrets]] published nearly 1,100,000 emails from ALET/АЛЕТ, which was hacked by Anonymous.<ref>{{Cite web |date=2022-04-25 |title=Anonymous has published nearly 1.1 million emails from ALET / АЛЕТ on DDoSecrets |url=https://www.thetechoutlook.com/news/technology/security/anonymous-has-published-nearly-1-1-million-emails-from-alet-%D0%B0%D0%BB%D0%B5%D1%82-on-ddosecrets/ |access-date=2022-04-25 |website=The Tech Outlook |language=en-US}}</ref> On '''May 5, 2022''', [[Distributed Denial of Secrets|DDoSecrets]] published roughly 480 gigabytes of files, emails and disk images from CorpMSP, which was hacked by the Anonymous aligned NB65.<ref>{{Cite web |date=2022-05-06 |title=Anonymous collective NB65 hacks Over 480 GB emails from CorpMSP, a Russian government organization |url=https://www.thetechoutlook.com/news/technology/security/anonymous-collective-nb65-hacks-over-480-gb-emails-from-corpmsp-a-russian-government-organization/ |access-date=2022-05-06 |website=The Tech Outlook |language=en-US}}</ref> On '''May 9, 2022''', which is the [[Victory Day (9 May)|Victory Day in Russia]], the video-hosting website [[RuTube]] was taken down through cyberattacks, which Anonymous had claimed responsibility later. Furthermore, Network Battalion 65 (NB65), a hacktivist group affiliated with Anonymous, has reportedly hacked Russian payment processor [[Qiwi]]. A total of 10.5 [[terabytes]] of data including transaction records and customers' credit cards had been exfiltrated. They further infected Qiwi with [[ransomware]]s and threatened to release more customer records.<ref>{{cite web |last1=Mughal |first1=Arsi |title=Anonymous Claims To Have Hacked Russian Streaming Service RuTube On Victory Day |url=https://www.chiangraitimes.com/news/anonymous-claims-to-have-hacked-russian-streaming-service-rutube-on-victory-day/ |access-date=8 June 2022 |date=12 May 2022 |archive-date=27 May 2022 |archive-url=https://web.archive.org/web/20220527160223/https://www.chiangraitimes.com/news/anonymous-claims-to-have-hacked-russian-streaming-service-rutube-on-victory-day/ |url-status=dead }}</ref><ref>{{cite web |title=Anonymous NB65 Claims Hack on Russian Payment Processor Qiwi |url=https://www.hackread.com/anonymous-nb65-hacki-russia-payment-processor-qiwi/ |access-date=9 May 2022 |date=9 May 2022}}</ref> On '''May 11, 2022''', [[Distributed Denial of Secrets|DDoSecrets]] published over 466 gigabytes of emails from the [[Nikolai M. Knipovich Polar Research Institute of Marine Fisheries and Oceanography]] (PINRO), which was hacked by Anonymous actors DepaixPorteur and B00daMooda.<ref>{{Cite web |date=2022-05-14 |title=OpRussia update: Anonymous breached other organizations |url=https://securityaffairs.co/wordpress/131264/hacktivism/anonymous-oprussia-updates.html |access-date=2022-05-14 |website=Security Affairs |language=en-US}}</ref> On '''May 12, 2022''', [[Distributed Denial of Secrets|DDoSecrets]] published over 7,000 emails from the [[Achinsk]] City Government, which was hacked by Anonymous.<ref>{{Cite web |date=2022-05-12 |title=Anonymous breached Achinsk City government email database with 7000 emails leaked |url=https://www.thetechoutlook.com/news/technology/security/anonymous-breached-achinsk-city-government-email-database-with-7000-emails-leaked/ |access-date=2022-05-12 |website=The Tech Outlook |language=en-US}}</ref> On '''May 13, 2022''', [[Distributed Denial of Secrets|DDoSecrets]] published 116,500 emails from SOCAR Energoresource, which was hacked by Anonymous.<ref>{{Cite web |date=2022-05-13 |title=Russian SOCAR Energoresource company became victim of cyber attack by Anonymous Collective |url=https://www.thetechoutlook.com/news/current-affairs/russian-socar-energoresource-company-became-victim-of-cyber-attack-by-anonymous-collective/ |access-date=2022-05-13 |website=The Tech Outlook |language=en-US}}</ref> On '''May 30, 2022''', [[Distributed Denial of Secrets|DDoSecrets]] published more than 184 gigabytes of emails from Metprom Group LLC, which was hacked by the Anonymous actors DepaixPorteur, B00daMooda, and Wh1t3Sh4d0w.<ref>{{Cite web |date=2022-05-31 |title=Anonymous Collective hacked and released emails data of Metprom Group that has worked on dozens of projects with companies like ArcelorMittal |url=https://www.thetechoutlook.com/news/technology/security/anonymous-collective-hacked-and-released-emails-data-of-metprom-group-that-has-worked-on-dozens-of-projects-with-companies-like-arcelormittal/ |access-date=2022-05-31 |website=The Tech Outlook |language=en-US}}</ref> On '''June 1, 2022''', [[Distributed Denial of Secrets|DDoSecrets]] published more than 1,000,000 emails from Vyberi Radio, which was hacked by Anonymous.<ref>{{Cite web |date=2022-06-01 |title=Hackers leaked millions of emails of the Russian Vyberi Radio |url=https://www.thetechoutlook.com/news/technology/security/hackers-leaked-millions-of-emails-of-the-russian-vyberi-radio-read-more/ |access-date=2022-06-01 |website=The Tech Outlook |language=en-US}}</ref> On '''June 3, 2022''', [[Distributed Denial of Secrets|DDoSecrets]] published 1 terabyte of data, which included millions of files including emails, court files, client data, classified data, photographs, videos, payment information, and more from Rustam Kurmaev and Partners (RKPLaw), which was hacked by Anonymous actors DepaixPorteur and B00daMooda.<ref>{{Cite web |date=2022-06-03 |title=RKPLaw hacked by anonymous collective and 1 TB data released |url=https://www.thetechoutlook.com/news/technology/security/rkplaw-hacked-by-anonymous-collective-and-1-tb-data-released/ |access-date=2022-06-03 |website=The Tech Outlook |language=en-US}}</ref><ref>{{Cite web |date=2022-06-03 |title=Operation Russia continues, albeit much more slowly than last month, RKPLaw, Vyberi Radio, and Metprom Group are the last victims. |url=https://securityaffairs.co/wordpress/131933/hacktivism/anonymous-operation-russia-100-days.html |access-date=2022-06-03 |website=Security Affairs |language=en-US}}</ref><ref>{{Cite web |date=2022-06-03 |title=Anonymous Hacktivists Leak 1TB of Top Russian Law Firm Data |url=https://www.hackread.com/anonymous-hacktivists-leak-1tb-russia-law-firm-data/ |access-date=2022-06-03 |website=HackRead |language=en-US}}</ref> On '''September 1, 2022''', Russian taxi service [[Yandex Taxi]] was hacked which sent dozens of cars to a location resulting in a traffic jam that lasted up to three hours. Anonymous claimed responsibility for the hack shortly thereafter.<ref>{{cite web |last1=Papadopoulos |first1=Loukia |title=A hacker attacked Yandex Taxi and sent dozens of cars to the same location |url=https://interestingengineering.com/culture/hacker-attacked-yandex-taxi-moscow |website=interestingengineering.com |access-date=4 September 2022 |date=2 September 2022}}</ref> At the same time the collective hacked the United Nations Event Proposal Tool website to post flags such as that of Taiwan and its pro-independence movement, [[Kosovo]], [[Belarusian opposition]], [[Russian opposition]], [[Green Ukraine]], alongside photo depicting [[Yuri Gagarin]] as a clown and six pages of manifesto text which reportedly emphasized that [[Yuri Gagarin]] had ejected from his capsule before it landed and should not qualify as the first man in space, and called for the establishment of a 30-kilometer demilitarized zone around the [[Zaporizhzhia Nuclear Power Plant]]. The defacement ends with closing comments by Anonymous such as calls for American citizens to "vote wisely" in the [[2022 United States Senate elections]] and [[2022 United States House of Representatives elections]] to avoid going down "Russia's path."<ref>{{cite web |last1=Everington |first1=Keoni |title=Anonymous posts Taiwan independence flag on UN website |url=https://www.taiwannews.com.tw/en/news/4648504 |website=Taiwan News |access-date=8 September 2022}}</ref> Previously Anonymous hacked a Chinese real estate website and reportedly pointed out that the [[Soviet Union|Soviet]] [[Vostok 1]] crewed space mission fell afoul of the stipulation within Section 8, paragraph 2.15, item b of the [[Fédération Aéronautique Internationale|Fédération Aéronautique Internationale (FAI)]] sporting code which stated that a flight is deemed to be uncompleted if "any member of the crew definitively leaves the spacecraft during flight", as its pilot [[Yuri Gagarin]] had ejected from his capsule before it landed. From that, they reportedly said that America's [[Alan Shepard]] and [[John Glenn]], who were both inside their capsules when they splashed down, should be considered as first humans in space. Regarding the technicality, although there are pragmatist arguments which posited that Alan Shepard and John Glenn should be considered as first person to legally complete a spaceflight mission and the first to actually complete an orbit around Earth respectively,<ref>{{cite web |title=Gagarin's Falsified Flight Record |url=https://www.seeker.com/gagarins-falsified-flight-record-1765739082.html |website=Seeker |access-date=23 August 2022 |language=en}}</ref><ref>{{cite web |last1=Garmon |first1=Jay |title=Geek Trivia: A leap of fakes |url=https://www.techrepublic.com/article/geek-trivia-a-leap-of-fakes/ |website=TechRepublic |access-date=8 September 2022}}</ref><ref>{{cite book |last1=Burgess |first1=Colin |title=The first Soviet cosmonaut team : their lives, legacy, and historical impact |date=2009 |publisher=Springer |location=Berlin |isbn=978-0387848235 |page=xxiii}}</ref> the [[National Air and Space Museum]] reported that the FAI reworked its guidelines by emphasizing the launch, orbiting, and safe return of the human over the method in which the landing took place to enable Gagarin to receive the record for the first person in space, along with other claimed records specifically that of duration in orbital flight&mdash;108 minutes, greatest altitude in earth orbital flight by a single person spacecraft (which remains standing as of August 2022)&mdash;{{convert|327|km|mi}},<ref>{{cite web |title=Yuri Alexeevitch Gagarine (URS) (9327) {{!}} World Air Sports Federation |url=https://www.fai.org/record/9327 |website=www.fai.org |access-date=8 September 2022 |archive-url=https://web.archive.org/web/20220826190002/https://www.fai.org/record/9327 |archive-date=26 August 2022 |language=en |date=10 October 2017}}</ref> and the greatest mass lifted in earth orbital flight&mdash;{{convert|4725|kg|lb|}}.<ref>{{cite web |last1=Everington |first1=Keoni |title=Anonymous hacks Chinese real estate site in revenge for National Taiwan University defacement {{!}} Taiwan News {{!}} 2022-08-23 19:10:00 |url=https://www.taiwannews.com.tw/en/news/4635385 |website=Taiwan News |access-date=8 September 2022 |date=23 August 2022}}</ref><ref>{{cite web |title=Space Marks Accorded To Gagarin and Shepard |url=https://timesmachine.nytimes.com/timesmachine/1961/07/23/118919502.html?pageNumber=35 |website=The New York Times |page=35 |date=23 July 1961}}</ref><ref>{{Cite web |date=2021-03-22 |title='Let's go!' – FAI celebrates 60th Anniversary of Gagarin’s space flight |url=https://www.fai.org/news/60th-anniversary-gagarin-space-flight |access-date=2022-08-24 |website=[[Fédération Aéronautique Internationale]] |language=en}}</ref> ==See also== {{col-begin}} {{col-2}}'''Russo-Ukrainian War''' * [[Ukraine]] * [[Russia]] * [[2022 Russian invasion of Ukraine]] * [[Russo-Ukrainian War]] * [[2021–2022 Russo-Ukrainian crisis]] '''Cyberwar''' * [[Cyberwarfare]] * [[Fourth-generation warfare]] * [[Information warfare]] * [[Internet security]] * [[2022 Ukraine cyberattacks]] {{col-2}} {{Portal|Internet|Politics|Society }} '''Activism''' * [[Electronic civil disobedience]] * [[Leaderless resistance]] * [[Streisand effect]] '''Other related articles''' * [[Anti-mask laws]] * [[Derp (hacker group)]] * [[LulzRaft]] * [[Securax]] * [[RedHack]] * ''[[We Are Legion: The Story of the Hacktivists]]'' {{col-end}} ==References== {{Reflist|30em}} {{Anonymous and the Internet}} {{Hacking in the 2020s}} {{2022 Russian invasion of Ukraine|Reactions}} {{Russo-Ukrainian War navbox}} [[Category:Anonymous (hacker group)|Russian invasion of Ukraine]] [[Category:Cyberattacks]] [[Category:Information society]] [[Category:Internet-based activism]] [[Category:Internet culture]] [[Category:Internet memes]] [[Category:Internet trolling]] [[Category:Internet vigilantism]] [[Category:Hacking in the 2020s]] [[Category:Anti-Russian sentiment]] [[Category:Reactions to the 2022 Russian invasion of Ukraine]] Save Minecraft and stop Microsoft eh2filfxosicx2cpz2c2s9vtg4c86bw Mavetuna1 0 106513 735459 731730 2026-03-27T20:38:26Z Zilant17 29926 735459 wikitext text/x-wiki Test API 1 Test123 73lg70ng2qwyps9cffgo5rocft736tc User:Nardog/sandbox2.js 2 118608 735446 735250 2026-03-27T16:46:41Z Nardog 40946 735446 javascript text/javascript (async function listTools() { let pageAction = mw.config.get('wgAction'); let isView = pageAction === 'view'; let isEdit = ['edit', 'submit'].includes(pageAction); if (!isView && !isEdit) return; let pageType = mw.config.get('wgCanonicalSpecialPageName') || mw.config.get('wgNamespaceNumber'); if (isView && !pageType && !mw.config.exists('wgRedirectedFrom') && !mw.config.get('wgIsRedirect') && !mw.config.get('wgPageName').includes('/') ) { return; } await mw.loader.using([ 'mediawiki.util', 'mediawiki.Title', 'mediawiki.api', 'mediawiki.interface.helpers.styles' ]); mw.loader.addStyleTag(`.listtools:not(#mw-content-subtitle .listtools) { font-size: 85%; } .listtools, .listtools a { font-weight: normal !important; font-style: normal; } .mw-datatable .listtools { display: block; } .listtools + .mw-whatlinkshere-tools, #watchlist-edit-form .listtools ~ .mw-changeslist-links, .mw-special-DisambiguationPageLinks .listtools + a { display: none; }`); let messages = Object.assign({ watched: 'Added "$1" to your watchlist', watchFail: `Couldn't watch "$1"`, unwatchFail: `Couldn't unwatch "$1"` }, window.listtoolsMessages); let getMsg = (key, ...args) => ( Object.hasOwn(messages, key) ? mw.format(messages[key], ...args) : key ); let notif; let watchHandler = async function (e) { e.preventDefault(); let $link = $(this); let $wrapper = $link.parent(); $link.detach(); let params = new URLSearchParams(this.search); let action = params.get('action'); $wrapper.text(getMsg(action + 'ing')); let pn = params.get('title').replaceAll('_', ' '); let promise = new mw.Api()[action](pn); if (notif) { notif.close(); notif = null; } try { let result = await promise; if (!result || !result[action + 'ed']) throw ''; let newAction = action === 'watch' ? 'unwatch' : 'watch'; params.set('action', newAction); $link.add(`.listtools-watch > a[href="${this.pathname + this.search}"]`) .attr('href', this.pathname + '?' + params) .text(getMsg(newAction)); if (action !== 'watch') return; let require = await mw.loader.using([ 'mediawiki.notification', 'mediawiki.watchstar.widgets' ]); notif = await mw.notify( new (require('mediawiki.watchstar.widgets'))('watch', pn, null, $.noop, { message: getMsg('watched', pn) }).$element, { tag: 'listtools' } ); } catch { notif = await mw.notify(getMsg(action + 'Fail', pn), { tag: 'listtools', type: 'error' }); } finally { $wrapper.html($link); } }; let extGetMain = function () { return this.title; }; let re = new RegExp(`(?:\\?title=|${ mw.util.escapeRegExp(mw.format(mw.config.get('wgArticlePath'), '')) })([^#&?]+)`); let processed = new WeakSet(); let processLinks = ($links, module, titles) => { let isBatch = !!titles; titles = titles || new Set(); $links.each(function (i) { if (processed.has(this)) return; let $link = $links.eq(i); let pn; if (module.useText) { pn = $link.text(); } else { let match = $link.attr('href')?.match(re); if (!match) return; pn = decodeURIComponent(match[1]); } let t = mw.Title.newFromText(pn); if (!t) return; if (module.titlesOnly) { let text = $link.text(); if (text !== pn.replaceAll('_', ' ') && (text !== t.getMainText() || t.namespace === 2) ) { return; } } if ($link.is('.external, .extiw')) { Object.assign(t, { getMain: extGetMain, host: this.host, namespace: 0, title: pn }); } else { if (t.namespace < 0) return; if ($link.hasClass('new')) { t.missing = true; } titles.add(t.getSubjectPage().toText()); } let $tools = $('<span>').addClass('listtools mw-changeslist-links') .data('listtools', t); tools.forEach(tool => { addTool($tools, tool); }); if ($link.is(':is(del, bdi) > :only-child')) { if (module.position === 'end') { $link.parent().parent().append(' ', $tools); } else { $link.parent().after(' ', $tools); } } else if (module.position === 'end') { $link.parent().append(' ', $tools); } else { $link.after(' ', $tools); } if (module.post) { module.post($tools); } processed.add(this); }); if (!isBatch) { getWatched(titles); } }; let tools = [ { name: 'edit', url: t => t.getUrl({ action: 'edit' }) }, { name: 'hist', url: t => !t.missing && t.getUrl({ action: 'history' }) }, { name: 'links', url: t => mw.util.getUrl('Special:WhatLinksHere/' + t) }, { name: 'watch', url: t => !t.host && t.getSubjectPage().getUrl({ action: 'watch' }), callback: watchHandler } ]; let addTool = ($tools, tool, escapedName) => { let t = $tools.data('listtools'); let $duplicate = escapedName && $tools.children('.listtools-' + escapedName); let url = tool.url; if (typeof url === 'function') { url = url(t); if (!url) { $duplicate?.remove(); return; } } let $link = $('<a>').attr('href', url).text(getMsg(tool.name)); if (t.host) { $link.prop('host', t.host); } if (tool.callback) { $link.on('click', tool.callback); } let $wrapper = $('<span>').addClass('listtools-' + tool.name) .append($link); let $next = tool.next && $tools.children('.listtools-' + tool.next); if ($next?.length) { $duplicate?.remove(); $next.before($wrapper); } else if ($duplicate?.length) { $duplicate.replaceWith($wrapper); } else { $tools.append($wrapper); } }; let extend = tool => { if (tool.label && !Object.hasOwn(messages, tool.label)) { messages[tool.name] = tool.label; } if (tool.next) { tool.next = $.escapeSelector(tool.next); } let existingTool = tools.find(t => t.name === tool.name); if (existingTool) { Object.assign(existingTool, tool); } else { tools.push(tool); } let escapedName = existingTool && $.escapeSelector(tool.name); let $allTools = $('.listtools'); $allTools.each(function (i) { addTool($allTools.eq(i), tool, escapedName); }); }; let getWatched = async titles => { if (!Array.isArray(titles)) { titles = [...titles].slice(0, 500); } if (!titles.length) return; (await new mw.Api().post({ action: 'query', titles: titles.slice(0, 50), prop: 'info', inprop: 'watched', formatversion: 2 }, { headers: { 'Promise-Non-Write-API-Action': 1 } })).query.pages.forEach(page => { if (!page.watched) return; $(`.listtools-watch > a[href="${mw.util.getUrl(page.title, { action: 'watch' })}"]`) .attr('href', mw.util.getUrl(page.title, { action: 'unwatch' })) .text(getMsg('unwatch')); }); getWatched(titles.slice(50)); }; mw.hook('listtools.ready').fire(extend); let catTreeCallback = (records, observer) => { let $links = $(records[0].target).find('.CategoryTreeItem > bdi > a'); if ($links.length) { observer.takeRecords(); observer.disconnect(); processLinks($links, catTreeModule); } }; let catTreeModule = { selector: '.CategoryTreeItem > bdi > a', types: [14, 'CategoryTree'], position: 'end', post: $tools => { $tools.parent().next('.CategoryTreeChildren').each(function () { new MutationObserver(catTreeCallback) .observe(this, { childList: true }); }); } }; let modules = [ { selector: '#mw-pages li > a, #mw-pages li > span > a', types: [14] }, catTreeModule, { selector: '#mw-imagepage-section-linkstoimage a, #mw-imagepage-section-globalusage a', types: [6] }, { selector: '#mw-globalusage-result a', types: ['GlobalUsage'] }, { selector: '.mw-search-result-heading > a, .searchalttitle > a.mw-redirect, .iw-result__title > a, .mw-search-exists a', types: ['Search'] }, { selector: '.mw-search-createlink a', types: ['Search'], titlesOnly: true }, { selector: '#watchlist-edit-form .cdx-table td > label > a', types: ['EditWatchlist'] }, { selector: '.plainlinks > li > a', types: ['AbuseLog'], titlesOnly: true }, { selector: '#mw-allmessagestable td:first-child > a:first-child:not(.new)', types: ['Allmessages'], position: 'end' }, { selector: '.mw-spcontent li a', types: ['DisambiguationPageLinks', 'Listredirects'], titlesOnly: true }, { selector: 'li > a:first-child', types: ['FileDuplicateSearch'] }, { selector: '.TablePager_col_title > a:first-child, .TablePager_col_template > a', types: ['LintErrors'], post: $tools => { $tools.parent().contents().slice(3).remove(); } }, { selector: 'form > ul > li > a', types: ['Nuke'], position: 'end', titlesOnly: true }, { selector: '.page-assessments a', types: ['PageAssessments'], titlesOnly: true }, { selector: '.TablePager_col_pr_page > a', types: ['Protectedpages'], position: 'end' }, { selector: '#mw-content-text > ul a', types: ['Protectedtitles'], position: 'end' }, { selector: '.mw-fr-pending-changes-page-title', types: ['PendingChanges'], post: $tools => { $tools.parent().contents().slice(3).remove(); } }, { selector: '#mw-content-text > ul a:first-child', types: ['StablePages'], position: 'end' }, { selector: '.TablePager_col__page a', types: ['TopicSubscriptions'] }, { selector: '.undeleteResult > a', types: ['Undelete'], position: 'end', useText: true }, { selector: '.TablePager_col_img_name > a:first-child', // types: ['Listfiles'], position: 'end' }, { selector: '.mw-newpages-pagename', post: $tools => { let $contents = $tools.parent().contents(); $contents.slice( $contents.index($tools) + 1, $contents.index($contents.filter('.mw-newpages-length')) ).replaceWith(' '); } }, { selector: '#mw-whatlinkshere-list li > bdi > a' }, { selector: '.mw-changeslist-log-entry > a:not(.mw-changeslist-log-gblblock a, .mw-changeslist-log-globalauth a)', titlesOnly: true }, { selector: '.mw-logevent-loglines > li:not(.mw-logline-gblblock, .mw-logline-globalauth) > a', types: ['Log'], titlesOnly: true }, { selector: '#mw-diff-otitle1 > strong > a, #mw-diff-ntitle1 > strong > a', types: ['ComparePages'], position: 'end' }, { selector: '#movepage-oldlink, #movepage-newlink', types: ['Movepage'] }, { selector: '.mw-undelete-revision a:not(.mw-userlink, .mw-usertoollinks > a)', types: ['Undelete'], useText: true }, { selector: '.galleryfilename, ' + '.mw-allpages-chunk > li > a, ' + '.mw-prefixindex-list > li > a, ' + '.mw-changeslist-line.mw-changeslist-src-mw-categorize .mw-changeslist-line-inner > .comment > a, ' + '.mw-changeslist-line.mw-changeslist-src-mw-categorize .mw-changeslist-line-inner-comment > .comment > a, ' + '.mw-changeslist-line.mw-changeslist-src-mw-categorize .mw-enhanced-rc-nested > .comment > a' }, { selector: '.mw-spcontent li a', position: 'end', titlesOnly: true } ]; if (isEdit) { let post = $tools => { if (!$tools[0].closest('.templatesUsed')) return; $tools.parent().contents().last().each(function () { this.textContent = this.textContent.slice(1); }).end().slice(-3, -1).remove(); }; let callback = mw.util.debounce(() => { processLinks( $('.mw-editfooter-list a, #wikiPreview > .previewnote a'), { titlesOnly: true, post } ); }, 500); mw.hook('wikipage.editform').add($form => { callback(); $form.find('.templatesUsed').each(function () { if (processed.has(this)) return; processed.add(this); new MutationObserver(callback) .observe(this, { childList: true, subtree: true }); }); }); } else if (typeof pageType === 'number') { $(() => { processLinks($('.subpages a, .mw-redirectedfrom a, .redirectText a'), {}); }); } mw.hook('wikipage.content').add($content => { let titles = new Set(); let $links = $content.find('a'); modules.forEach(module => { if (module.types && !module.types.includes(pageType)) return; processLinks($links.filter(module.selector), module, titles); }); getWatched(titles); }); }()); mw.hook('listtools.ready').add(extend => { // extend({ // name: 'talk', // url: t => !t.isTalkPage() && t.canHaveTalkPage() && t.getTalkPage().getUrl(), // next: 'hist' // }); extend({ name: 'subject', url: t => t.isTalkPage() && t.getSubjectPage().getUrl(), next: 'hist' }); extend({ name: 'last', url: t => !t.missing && t.getUrl({ diff: 'cur', diffonly: 1 }), next: 'links' }); // extend({ // name: 'purge', // url: t => t.getUrl({ action: 'purge' }), // next: 'watch', // callback: function (e) { // e.preventDefault(); // let $link = $(this); // let $wrapper = $link.parent(); // $link.detach(); // $wrapper.text('purging'); // let pn = $wrapper.closest('.listtools').data('listtools').toText(); // new mw.Api().post({ // action: 'purge', // forcelinkupdate: 1, // titles: pn, // formatversion: 2 // }).then(response => { // if (response.purge[0].purged) { // mw.notify(`Purged "${pn}"'`); // } // }).always(() => { // $wrapper.html($link); // }); // } // }); extend({ name: 'copy', url: '#', callback: function (e) { e.preventDefault(); let text = $(this).closest('.listtools').data('listtools').toText(); let $input = $('<input>').attr({ type: 'text', readonly: '', style: 'position:fixed;top:-100%' }).val(text).appendTo(document.body); $input[0].select(); let copied; try { copied = document.execCommand('copy'); } catch (err) {} $input.remove(); if (copied) { mw.notify(`Copied "${text}"`); } else { mw.notify('Copy failed', { type: 'error' }); } } }); }); (mw.config.get('wgNamespaceNumber') || mw.config.get('wgAction') !== 'view') && mw.config.get('wgCanonicalSpecialPageName') !== 'GlobalContributions' && (function consecudiff() { mw.loader.addStyleTag('.consecudiff::before{content:" ["} .consecudiff::after{content:"]"} .consecudiff-top::before{content:" ⟨"} .consecudiff-top::after{content:"⟩"}'); let isHist = mw.config.get('wgAction') === 'history'; class Consecudiff { constructor(lis, isContribs) { this.isContribs = isContribs; this.isEnhanced = !isHist && !isContribs && lis[0].classList.contains('mw-enhanced-rc'); this.threshold = isContribs ? window.consecudiffContribsThreshold || 120 : isHist ? window.consecudiffHistThreshold || 720 : window.consecudiffThreshold || 720; this.strictMode = !isContribs && !!window.consecudiffDetectInterruptions; this.diffSelector = isHist ? 'a.mw-history-histlinks-previous' : '.mw-changeslist-diff'; this.permaSelector = this.isEnhanced && '.mw-enhanced-rc-time > a' || (isHist || isContribs) && 'a.mw-changeslist-date'; this.hybridSelector = this.diffSelector; if (this.permaSelector) { this.hybridSelector += ', ' + this.permaSelector; } this.topClass = isContribs ? 'mw-contributions-current' : 'mw-changeslist-last'; let dependencies = ['mediawiki.util']; if ((isHist || isContribs) && mw.config.get('wgUserLanguage') !== 'en') { dependencies.push('mediawiki.language.months'); } mw.loader.using(dependencies, () => { let chunks; if (isHist) { chunks = this.chunkByUser(lis); } else { chunks = []; this.groupByTitle(lis).forEach(group => { chunks.push(...this.chunkByUser(group)); }); } let subchunks = []; chunks.forEach(chunk => { subchunks.push(...this.divideByDate(chunk)); }); let linkPairs = []; subchunks.forEach(subchunk => { linkPairs.push(...this.makeLinks(subchunk)); }); linkPairs.forEach(([$span, parent]) => { $span.appendTo(parent); }); }); } groupByTitle(lis) { let selector = this.isContribs ? '.mw-contributions-title' : '.mw-changeslist-title'; let lisByTitle = {}; lis.forEach(li => { let link = (this.isEnhanced ? li.closest('table') : li) .querySelector(selector); if (!link) return; let title = link.textContent; if (!lisByTitle.hasOwnProperty(title)) { lisByTitle[title] = []; } lisByTitle[title].push(li); }); return Object.values(lisByTitle).filter(group => group.length > 1); } chunkByUser(lis) { if (this.isSingleContribs) { return [lis]; } let chunks = [], lastSplitAt = 0, prevUser; this.isSingleContribs = lis.some((li, i) => { let link = li.querySelector('.mw-userlink'); if (!link && this.isContribs) { return true; } let user = link && link.textContent; if (!link || i && user !== prevUser) { chunks.push(lis.slice(lastSplitAt, i)); lastSplitAt = i; } prevUser = user; }); if (this.isSingleContribs) { return [lis]; } chunks.push(lis.slice(lastSplitAt)); return chunks.filter(chunk => chunk.length > 1); } divideByDate(lis) { let chunks = [], lastSplitAt = 0, prevDate; lis.forEach((li, i) => { let date; if (isHist || this.isContribs) { date = this.parseDate( li.querySelector('.mw-changeslist-date').textContent ); } else { date = Date.parse( li.dataset.mwTs.replace(/(....)(..)(..)(..)(..)(..)/, '$1-$2-$3T$4:$5:$6Z') ); } if (date) { date = date / 60000; } if (i && prevDate - date > this.threshold) { chunks.push(lis.slice(lastSplitAt, i)); lastSplitAt = i; } prevDate = date; if (!this.strictMode || lastSplitAt === i) return; let prevDiff = lis[i - 1].querySelector(this.diffSelector); if (prevDiff) { let prevNext = mw.util.getParamValue('oldid', prevDiff.search); if (prevNext !== li.dataset.mwRevid) { chunks.push(lis.slice(lastSplitAt, i)); lastSplitAt = i; } } }); chunks.push(lis.slice(lastSplitAt)); return chunks.filter(chunk => chunk.length > 1); } makeLinks(lis) { let count = lis.length; let firstPerma; let start = lis.findIndex(li => ( firstPerma = li.querySelector(this.hybridSelector) )); if (start === -1 || count - start < 2) return []; let end, lastDiff; for (let i = count - 1; i > start; i--) { if (!isHist && !this.isContribs) { lastDiff = lis[i].querySelector(this.diffSelector); if (lastDiff || lis[i].classList.contains('mw-changeslist-src-mw-new') ) { end = i + 1; break; } } if (this.permaSelector && lis[i].querySelector(this.permaSelector)) { end = i + 1; break; } } if (!end) return []; count = end - start; let params = { diff: lis[start].dataset.mwRevid }; if (lastDiff) { params.oldid = mw.util.getParamValue('oldid', lastDiff.search); } else { params.oldid = lis[end - 1].dataset.mwRevid; if (isHist && lis[end - 1].querySelector(this.diffSelector) || this.isContribs && !lis[end - 1].querySelector('.newpage') ) { params.direction = 'prev'; } } let title = !isHist && mw.util.getParamValue('title', firstPerma.search); let url = mw.util.getUrl(title, params); let classes = 'consecudiff'; if (!isHist && lis[start].classList.contains(this.topClass)) { classes += ' consecudiff-top'; } return lis.slice(start, end).map((li, i) => [ $('<span>').addClass(classes).append( $('<a>') .attr('href', url) .text(this.convertNumber(count - i + '/' + count)) ), this.isEnhanced ? li.tagName === 'TR' ? li.lastElementChild : li.querySelector('.mw-changeslist-line-inner') : li ]); } parseDate(s) { let date = Date.parse(s); if (date) { return date; } if (s.includes(',')) date = Date.parse(s.replace(',', '')); if (date) { return date; } if (mw.loader.getState('mediawiki.language.months') !== 'ready') return; s = s.replace(/\D/g, c => { let n = mw.language.convertNumber(c, true); return Number.isNaN(n) ? c : n; }); let h, m; s = s.replace(/(\d\d?)[.:h](\d\d?)/, ($0, $1, $2) => { h = $1; m = $2; return ' '; }); if (!h) return; let y, dateFirst; s = s.replace(/^(.*?)(\d{4})(?!\d)/, ($0, $1, $2) => { y = $2; dateFirst = /\d/.test($1); return $1 + ' '; }); if (!y) return; let mo, d; if (dateFirst) { [d, s] = this.getDate(s); if (!d) return; [mo, s] = this.getMonth(s); if (mo === -1) return; } else { [mo, s] = this.getMonth(s); if (mo === -1) return; [d, s] = this.getDate(s); if (!d) return; } return new Date(y, mo, d, h, m).getTime(); } getMonth(s) { if (!this.months) { this.months = mw.language.months.abbrev .concat(mw.language.months.names, mw.language.months.genitive) .reverse(); } let mo = this.months.findIndex(mn => { let temp = s.replace(mn, ' '); if (temp !== s) { s = temp; return true; } }); if (mo === -1) { let [numeric, temp] = this.getDate(s); numeric = parseInt(numeric); if (numeric > 0 && numeric < 13) { mo = numeric - 1; s = temp; } } else { mo = 11 - mo % 12; } return [mo, s]; } getDate(s) { let d; s = s.replace(/(^|\D)(\d\d?)(?!\d)/, ($0, $1, $2) => { d = $2; return $1 + ' '; }); return [d, s]; } convertNumber(num) { try { return mw.language.convertNumber(num); } catch (e) { return num; } } } mw.hook('wikipage.content').add($content => { $content.find('.mw-pager-body').each(function () { let lis = this.querySelectorAll('.mw-contributions-list > li'); if (lis.length > 1) { new Consecudiff([...lis], !isHist); } }); if (isHist) return; let $lists = $content.filter('.mw-changeslist'); if (!$lists.length) { $lists = $content.find('.mw-changeslist'); } $lists.each(function () { let lis = this.querySelectorAll('.mw-changeslist-edit:not(.mw-changeslist-src-mw-categorize)[data-mw-revid]'); if (lis.length > 1) { new Consecudiff([...lis]); } }); }); }()); if (mw.config.get('wgNamespaceNumber') === 14 && ( mw.config.get('wgAction') === 'view' || !mw.config.get('wgArticleId') )) { mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Nardog/sandbox8.js&action=raw&ctype=text/javascript'); mw.loader.using([ 'mediawiki.api', 'mediawiki.util', 'mediawiki.DateFormatter', 'oojs-ui-widgets', 'mediawiki.widgets', 'mediawiki.widgets.UserInputWidget', 'mediawiki.widgets.datetime', 'oojs-ui.styles.icons-interactions', 'oojs-ui.styles.icons-movement', 'mediawiki.interface.helpers.styles', 'user.options' ]); } $(function moveHistory() { if (!document.getElementById('p-tb')) return; mw.loader.using('mediawiki.util', () => { let clicked; mw.util.addPortletLink('p-tb', '#', 'Move history', 't-movehistory').firstElementChild.addEventListener('click', e => { e.preventDefault(); if (clicked) { if (window.moveHistoryDialog) { window.moveHistoryDialog.open(); } return; } clicked = true; mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Nardog/sandbox5.js&action=raw&ctype=text/javascript'); mw.loader.using([ 'mediawiki.api', 'mediawiki.util', 'mediawiki.Title', 'mediawiki.DateFormatter', 'oojs-ui-windows', 'oojs-ui-widgets', 'mediawiki.widgets', 'mediawiki.widgets.DateInputWidget', 'oojs-ui.styles.icons-interactions', 'mediawiki.interface.helpers.styles' ]); }); }); }); $(function sectionSearch() { if (!document.getElementById('p-tb')) return; mw.loader.using('mediawiki.util', () => { let clicked; mw.util.addPortletLink('p-tb', '#', 'Section search', 't-sectionsearch').firstElementChild.addEventListener('click', e => { e.preventDefault(); if (clicked) { if (window.sectionSearchDialog) { window.sectionSearchDialog.open(); } return; } clicked = true; mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Nardog/sandbox7.js&action=raw&ctype=text/javascript'); mw.loader.using([ 'mediawiki.api', 'mediawiki.util', 'oojs-ui-core', 'oojs-ui-windows', 'mediawiki.widgets', 'mediawiki.widgets.NamespacesMultiselectWidget' ]); }); }); }); mw.config.get('wgCanonicalSpecialPageName') === 'CentralAuth' && mw.loader.using('jquery.tablesorter', function sortCentralAuthByEditCount() { mw.hook('wikipage.content').add($content => { let $table = $content.find('.mw-centralauth-wikislist').has('td'); if (!$table.length) return; $table.tablesorter().data('tablesorter').sort([{ 4: 'desc' }, { 1: 'asc' }]); }); }); ['edit', 'submit'].includes(mw.config.get('wgAction')) && [10, 828].includes(mw.config.get('wgNamespaceNumber')) && !mw.config.get('wgTitle').endsWith('/doc') && mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/AutoTestcases.js&action=raw&ctype=text/javascript', 's'); // ['edit', 'submit'].includes(mw.config.get('wgAction')) && // mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/TemplatePreviewGuard.js&action=raw&ctype=text/javascript', 's'); // ['edit', 'submit'].includes(mw.config.get('wgAction')) && // $(function templatePreviewGuard() { // let button = document.querySelector('input[name="wpTemplateSandboxPreview"]'); // if (!button) return; // let proceed; // button.addEventListener('click', e => { // if (proceed) { // proceed = false; // return; // } // e.preventDefault(); // e.stopPropagation(); // let formData = new FormData(button.form); // let page = formData.get('wpTemplateSandboxPage'); // let temp = formData.get('wpTemplateSandboxTemplate'); // if (!page || !temp) return; // mw.loader.using('mediawiki.api').then(() => ( // new mw.Api().get({ // action: 'query', // titles: page, // prop: 'templates', // tltemplates: temp, // formatversion: 2 // }) // )).always(response => { // if (((((response || {}).query || {}).pages || [])[0] || {}).templates || // confirm(`"${page}" doesn't appear to transclude "${temp}". Continue?`) // ) { // proceed = true; // button.click(); // } // }); // }, true); // if (!mw.config.get('wgArticleId')) return; // let widgetEl = document.querySelector('#wpTemplateSandboxPage.oo-ui-widget'); // if (!widgetEl) return; // let pn = mw.config.get('wgPageName').replace(/_/g, ' '); // mw.loader.using(['mediawiki.api', 'oojs-ui-core']).then(() => ( // new mw.Api().get({ // action: 'query', // titles: pn, // prop: 'transcludedin', // tiprop: 'title', // tilimit: 'max', // formatversion: 2 // }) // )).then(response => { // if (!response.batchcomplete) return; // let pages = response.query.pages[0].transcludedin // .filter(o => o.title !== pn); // if (!pages.length) return; // let widget = OO.ui.infuse(widgetEl); // if (pages.length === 1) { // widget.setValue(pages[0].title); // return; // } // widget.$element.replaceWith( // new OO.ui.ComboBoxInputWidget({ // id: 'wpTemplateSandboxPage', // maxlength: widget.$input.prop('maxLength'), // name: widget.$input.prop('name'), // options: pages // .sort((a, b) => a.ns - b.ns || -(a.title < b.title)) // .map(o => ({ data: o.title })), // placeholder: widget.$input.prop('placeholder'), // tabIndex: widget.getTabIndex(), // value: widget.getValue() // }).on('enter', e => { // e.preventDefault(); // button.click(); // }).$element // ); // }); // }); ['edit', 'submit'].includes(mw.config.get('wgAction')) && mw.config.get('wgArticleId') && mw.config.get('wgPageContentModel') === 'wikitext' && mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/AutoSectionLink.js&action=raw&ctype=text/javascript', 's'); (mw.config.get('wgNamespaceNumber') === -1 || mw.config.exists('wgDiffNewId') || mw.config.get('wgAction') === 'history') && (function copyRevId() { let handler = function (e) { e.preventDefault(); let text = this.closest('.diff td')?.querySelector('[data-mw-revid]')?.dataset.mwRevid || this.closest('[data-mw-revid]')?.dataset.mwRevid; if (!text) return; let $input = $('<input>').attr({ type: 'text', readonly: '', style: 'position:fixed;top:-100%' }).val(text).appendTo(document.body); $input[0].select(); document.execCommand('copy'); $input.remove(); let copied; try { copied = document.execCommand('copy'); } catch {} $input.remove(); if (copied) { mw.notify(`Copied "${text}"`); } else { mw.notify('Copy failed', { type: 'error' }); } }; mw.hook('wikipage.diff').add($diff => { $diff.find('#mw-diff-otitle1, #mw-diff-ntitle1').append( ' (', $('<a>').attr({ href: '#', role: 'button' }).on('click', handler).text('id'), ')' ); }); if (mw.config.get('wgAction') !== 'history') return; mw.hook('wikipage.content').add($content => { $content.find('.mw-pager-tools').append( $('<span>').append( $('<a>').attr({ href: '#', role: 'button' }).on('click', handler).text('id') ) ); }); }()); (mw.config.get('wgNamespaceNumber') === -1 || mw.config.exists('wgDiffNewId') || mw.config.get('wgAction') === 'history') && (() => { let handler = async function (e) { e.preventDefault(); let td = this.closest('.diff td'); let rev = td ? td.querySelector('[data-mw-revid]')?.dataset.mwRevid : this.closest('[data-mw-revid]')?.dataset.mwRevid; if (!rev) { mw.notify(`Couldn't get the revision.`, { tag: 'markasunseen', type: 'error' }); return; } let pn = td ? new URLSearchParams([...td.querySelectorAll('a')].pop()?.search).get('title') : mw.config.get('wgPageName'); if (!pn) return; await mw.loader.using('mediawiki.api'); let result = (await new mw.Api().postWithEditToken({ action: 'setnotificationtimestamp', [td ? 'newerthanrevid' : 'torevid']: rev, titles: pn, formatversion: 2 })).setnotificationtimestamp?.[0]; if (Object.hasOwn(result, 'notificationtimestamp')) { mw.notify(`Marked revisions ${td ? 'after' : 'since'} ${rev} as unseen.`, { tag: 'markasunseen', type: 'success' }); } else if (result?.notwatched) { mw.notify('This page is not on your watchlist.', { tag: 'markasunseen', type: 'warn' }); } else { mw.notify(`Couldn't mark revisions ${td ? 'after' : 'since'} ${rev} as unseen.`, { tag: 'markasunseen', type: 'error' }); } }; mw.hook('wikipage.diff').add($diff => { $diff.find('#mw-diff-otitle1').append( ' (', $('<a>').attr({ href: '#', role: 'button', title: 'Mark revisions after this one as unseen' }).on('click', handler).text('unseen'), ')' ); }); if (mw.config.get('wgAction') !== 'history') return; mw.hook('wikipage.content').add($content => { $content.find('.mw-pager-tools').append( $('<span>').append( $('<a>').attr({ href: '#', role: 'button', title: 'Mark revisions since this one as unseen' }).on('click', handler).text('unseen') ) ); }); })(); (mw.config.get('wgNamespaceNumber') === -1 || mw.config.exists('wgDiffNewId') || mw.config.get('wgAction') === 'history') && ((mw.config.get('wgNamespaceNumber') % 2 || mw.config.get('wgNamespaceNumber') === 4) || (mw.config.get('wgWikiID') === 'metawiki' && mw.config.get('wgPageContentModel') === 'wikitext')) && mw.loader.using(['mediawiki.util', 'mediawiki.Title'], function copyUnsig() { let handler = function (e) { e.preventDefault(); let parent = this.closest('li, td'); let ts = parent.textContent.match(/\d\d:\d\d, \d\d? [A-Z][a-z]+ \d{4}/)?.[0]; if (!ts) return; let user = parent.querySelector('.mw-userlink').textContent; if (mw.util.isIPv6Address(user)) { user = user.toUpperCase(); } let temp = mw.util.isIPAddress(user) ? 'unsigned IP' : 'unsigned'; let text = `{{subst:${temp}|${user}|${ts}}}`; let $input = $('<input>').attr({ type: 'text', readonly: '', style: 'position:fixed;top:-100%' }).val(text).appendTo(document.body); $input[0].select(); let copied; try { copied = document.execCommand('copy'); } catch {} $input.remove(); if (copied) { mw.notify(`Copied "${text}"`); } else { mw.notify('Copy failed', { type: 'error' }); } }; mw.hook('wikipage.diff').add($diff => { $diff.find('#mw-diff-otitle1, #mw-diff-ntitle1').filter(function () { if (mw.config.get('wgWikiID') === 'metawiki') { return true; } let link = this.querySelector('strong > a') || this.parentElement.querySelector('#differences-prevlink, #differences-nextlink'); if (!link) return; let t = mw.Title.newFromText(mw.util.getParamValue('title', link.search)); return t.isTalkPage() || t.namespace === 4; }).append( ' (', $('<a>').attr({ href: '#', role: 'button' }).on('click', handler).text('sig'), ')' ); }); if (mw.config.get('wgAction') !== 'history') return; mw.hook('wikipage.content').add($content => { $content.find('.mw-pager-tools').append( $('<span>').append( $('<a>').attr({ href: '#', role: 'button' }).on('click', handler).text('sig') ) ); }); }); // mw.config.get('wgAction') === 'history' && // mw.loader.using('mediawiki.util', function () { // mw.hook('wikipage.content').add($content => { // $content.find('a.mw-changeslist-date').after(function () { // return [ // ' (', // $('<a>').attr('href', mw.util.getUrl(null, { // action: 'edit', // oldid: this.closest('li').dataset.mwRevid // })).text('e'), // ')' // ]; // }); // }); // }); // ['Contributions', 'IPContributions', 'Blankpage'].includes(mw.config.get('wgCanonicalSpecialPageName')) && // mw.hook('wikipage.content').add($content => { // $content.find('.mw-changeslist-history').parent().after(function () { // return $('<span>').append( // $('<a>').attr( // 'href', // this.firstElementChild.getAttribute('href').slice(0, -7) + 'edit' // ).text('e') // ); // }); // }); if (screen.width < 500) { mw.loader.addStyleTag('@font-face{font-family:CharisW;src:url(//fontlibrary.org/assets/fonts/charis/10b9f94ed21e56254b068c91ead7ec6f/017b2b2ad86e09d3c22b8cf0dfc78247/CharisSILRegular.ttf) format(truetype);@font-face{font-family:CharisW;font-weight:700;src:url(//fontlibrary.org/assets/fonts/charis/10b9f94ed21e56254b068c91ead7ec6f/6f5069ac6a300dad45383c952e92c573/CharisSILBold.ttf) format(truetype)} body .IPA{font-family:CharisW,sans-serif} .mw-highlight-lines > pre{width:120em}'); location.hash && $(() => { let target = document.querySelector(':target'); if (target?.getBoundingClientRect().top < 0) { target.scrollIntoView(); } }); } ['edit', 'submit'].includes(mw.config.get('wgAction')) && (mw.config.exists('wgCodeEditorCurrentLanguage') || mw.config.exists('cmMode') && mw.config.get('cmMode') !== 'mediawiki') && (function saveNEdit() { let notif; $(document.body).on('click', '#wpSave', async function (e) { if (e.ctrlKey || e.shiftKey || e.metaKey || e.altKey || e.originalEvent?.defaultPrevented ) { return; } e.preventDefault(); await mw.loader.using([ 'mediawiki.api', 'mediawiki.util', 'jquery.textSelection', 'oojs-ui-core' ]); let button = OO.ui.infuse(this.parentElement).setDisabled(true); let $textarea = $('#wpTextbox1'); let text = $textarea.textSelection('getContents'); let $summary = $('#wpSummary'); let formData = new FormData(this.form); let promise = new mw.Api().postWithEditToken({ action: 'edit', title: mw.config.get('wgPageName'), text: text, section: formData.get('wpSection') || undefined, summary: $summary.textSelection('getContents'), [$('#wpMinoredit').prop('checked') ? 'minor' : 'notminor']: 1, baserevid: formData.get('editRevId'), basetimestamp: formData.get('wpEdittime'), starttimestamp: formData.get('wpStarttime'), watchlist: $('#wpWatchthis').prop('checked') ? 'watch' : 'unwatch', watchlistexpiry: formData.get('wpWatchlistExpiry') || undefined, undo: formData.get('wpUndidRevision') || undefined, undoafter: formData.get('wpUndoAfter') || undefined, contentformat: formData.get('format'), contentmodel: formData.get('model'), assertuser: mw.config.get('wgUserName'), formatversion: 2 }); notif?.close(); notif = null; try { let response = await promise; if (response?.edit?.result !== 'Success') throw ''; $('#editform > input[name="wpUndidRevision"], #editform > input[name="wpUndoAfter"]').remove(); $textarea.data('origtext', text).prop('defaultValue', text); $summary.val($summary.prop('defaultValue')); if (mw.loader.getState('mediawiki.editRecovery.edit') === 'ready') { let storage = mw.loader.moduleRegistry['mediawiki.editRecovery.edit'].packageExports['storage.js']; storage.deleteData(mw.config.get('wgPageName')); storage.closeDatabase(); } notif = await mw.notify(response.edit.nochange ? 'No change' : [ document.createTextNode('Saved'), $('<p>').append( new OO.ui.ButtonWidget({ href: mw.util.getUrl(), target: '_blank', label: 'View' }).$element, new OO.ui.ButtonWidget({ href: mw.util.getUrl(null, { diff: response.edit.newrevid || 'cur', diffonly: 1 }), target: '_blank', label: 'Diff' }).$element, new OO.ui.ButtonWidget({ href: mw.util.getUrl(null, { action: 'history' }), target: '_blank', label: 'History' }).$element )[0] ], { tag: 'savenedit' }); } catch (error) { notif = await mw.notify(error?.error?.info || error || 'Save failed', { autoHideSeconds: 'long', tag: 'savenedit', type: 'error' }); } finally { button.setDisabled(); } }); }()); mw.config.get('wgNamespaceNumber') === 0 && mw.config.get('wgAction') === 'view' && mw.config.get('wgCategories')?.some(c => c.endsWith(' actors') || c.endsWith(' actresses')) && $(() => { let n = $.escapeSelector(mw.config.get('wgTitle').replace(/ \(.+\)$/, '')); let $links = $(`.hatnote a[title$="${n} filmography"], .hatnote a[title*="${n} on "], .hatnote a[title*="${n} performances"]`); if (!$links.length) return; let titles = {}; $links = $links.filter(function () { let text = this.textContent; return !(titles[text] = Object.hasOwn(titles, text)); }); mw.notify( $links.length === 1 ? $links.clone() : $('<ul>').append($links.clone().wrap('<li>').parent()), { autoHideSeconds: 'long' } ); }); ['Recentchanges', 'Recentchangeslinked', 'Watchlist'].includes(mw.config.get('wgCanonicalSpecialPageName')) && $.when($.ready, mw.loader.using([ 'user.options', 'mediawiki.util', 'mediawiki.api' ])).then(function rcMuter() { let os = mw.user.options.get('userjs-rcmuter'); let set = new Set(os && os.split('|')); let save = () => { let ns = [...set].join('|'); if (ns === mw.user.options.get('userjs-rcmuter')) return; new mw.Api().saveOption('userjs-rcmuter', ns); mw.user.options.set('userjs-rcmuter', ns); $edit.attr('data-rcmuter', set.size); }; mw.loader.addStyleTag('body:not(.rcmuter-disabled) .rcmuter-muted{display:none !important} .rcmuter-edit::after, .rcmuter-togglemuted::after{content:": " attr(data-rcmuter)}'); let $edit = $('<a>').attr({ class: 'rcmuter-edit', href: '#', 'data-rcmuter': set.size }).text('Edit muted').on('click', e => { e.preventDefault(); mw.loader.using([ 'oojs-ui-windows', 'mediawiki.widgets.UsersMultiselectWidget' ]).then(() => OO.ui.getWindowManager().getWindow('message')).then(dialog => { let multiselect = new mw.widgets.UsersMultiselectWidget({ $overlay: dialog.$overlay, ipAllowed: true, selected: [...set] }).connect(dialog, { change: 'updateSize', reorder: 'updateSize' }); let instance = dialog.open({ message: $([ document.createTextNode('Muted users:'), multiselect.$element[0] ]), size: 'medium' }); instance.opened.then(() => { setTimeout(() => { multiselect.focus().menu.toggle(false); }); }); instance.closed.then(result => { if (!result || result.action !== 'accept') return; set = new Set(multiselect.getSelectedUsernames()); save(); mw.notify('Changes will take effect in next load.', { tag: 'rcmuter' }); }); }); }); let buttonsShown; let $toggleButtons = $('<a>').attr('href', '#').text('Show toggle buttons').on('click', function (e) { e.preventDefault(); if (buttonsShown) { mw.hook('wikipage.content').remove(addButtons); $('.rcmuter-toggle').remove(); this.textContent = 'Show toggle buttons'; } else { mw.hook('wikipage.content').add(addButtons); this.textContent = 'Hide toggle buttons'; } buttonsShown = !buttonsShown; }); let $toggle = $('<a>').attr({ class: 'rcmuter-togglemuted', href: '#' }).text('Show muted').on('click', function (e) { e.preventDefault(); this.textContent = document.body.classList.toggle('rcmuter-disabled') ? 'Hide muted' : 'Show muted'; }); let $toggleSpan = $('<span>').hide().append($toggle); mw.util.addSubtitle( $('<span>').addClass('mw-changeslist-links').append( $('<span>').append($edit), $('<span>').append($toggleButtons), $toggleSpan )[0] ); let toggle = function (e) { e.preventDefault(); let user = $(this) .closest('.mw-userlink ~ .mw-usertoollinks, .mw-changeslist-line-inner-userLink ~ .mw-changeslist-line-inner-userTalkLink') .prevAll('.mw-userlink, .mw-changeslist-line-inner-userLink') .last().text().trim(); if (!user) { mw.notify(`Can't retrieve the username.`, { tag: 'rcmuter', type: 'error' }); return; } let muting = this.parentElement.classList.toggle('rcmuter-unmute'); set[muting ? 'add' : 'delete'](user); save(); this.textContent = muting ? 'unmute' : 'mute'; mw.notify(`${muting ? 'Muting' : 'Unmuting'} ${user} from next load.`, { tag: 'rcmuter' }); }; let addButtons = $content => { if (!$content.is('#mw-content-text, .mw-changeslist')) { $content = $('#mw-content-text'); if ($content.has('.rcmuter-toggle').length) return; } let $tools = $content.find('.mw-usertoollinks.mw-changeslist-links'); let $muted = $tools.filter('.rcmuter-muted *'); $tools.not($muted).append( $('<span>').addClass('rcmuter-toggle').append( $('<a>').attr('href', '#').text('mute').on('click', toggle) ) ); if (!$muted.length) return; $muted.append( $('<span>').addClass('rcmuter-toggle rcmuter-unmute').append( $('<a>').attr('href', '#').text('unmute').on('click', toggle) ) ); }; let mutedCount; let filter = function () { let muted = set.has(this.textContent); if (muted) mutedCount++; return muted; }; mw.hook('wikipage.content').add($content => { if (!$content.is('#mw-content-text, .mw-changeslist')) return; if (!set.size) { $toggleSpan.hide(); return; } mutedCount = 0; $content.find('.changedby > .mw-userlink:only-child') .filter(filter).closest('table').addClass('rcmuter-muted'); $content.find('.mw-userlink:not(.changedby > *, .comment *, .rcmuter-muted *)') .filter(filter).closest('.mw-changeslist-line, table').addClass('rcmuter-muted') .closest('table.mw-enhanced-rc').find('.changedby > .mw-userlink').filter(filter).addClass('rcmuter-muted'); $toggleSpan.toggle(!!mutedCount); $toggle.attr('data-rcmuter', mutedCount); }); }); location.hostname.endsWith('.wikipedia.org') && mw.config.get('wgNamespaceNumber') % 2 === 0 && // mw.config.get('wgArticleId') && mw.config.get('wgPageContentModel') === 'wikitext' && $.when($.ready, mw.loader.using('mediawiki.util')).then(function refRenamer() { if (!document.getElementById('p-tb')) return; let messages = Object.assign({ portlet: 'RefRenamer', loading: 'Loading RefRenamer...' }, window.refrenamerMessages); let clicked; mw.util.addPortletLink('p-tb', '#', messages.portlet, 't-refrenamer').firstElementChild.addEventListener('click', e => { e.preventDefault(); if (clicked) { if (window.refRenamer) { window.refRenamer(); } return; } clicked = true; mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Nardog/sandbox6.js&action=raw&ctype=text/javascript'); mw.notify(messages.loading, { autoHideSeconds: 'long', tag: 'refrenamer' }); }); }); if (['edit', 'submit'].includes(mw.config.get('wgAction'))) { mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/ExpandContractions.js&action=raw&ctype=text/javascript', 's'); mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/Unpipe.js&action=raw&ctype=text/javascript', 's'); } mw.config.get('wgAction') !== 'history' && mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Nardog/CopyCodeBlock.js&action=raw&ctype=text/javascript', 's'); mw.config.exists('wgDiffNewId') && mw.config.get('wgDiscussionToolsFeaturesEnabled') && (function () { let data = {}, clickHandler, autoClear, run; window.dtc = data; let highlight = revId => { let ids = data[revId]; if (!ids || !ids.length) return; mw.loader.moduleRegistry['ext.discussionTools.init'].packageExports['highlighter.js'] .highlightNewComments(mw.dt.pageThreads, true, ids); if (clickHandler) { $(document.body).off('click', clickHandler); return; } $._data(document.body, 'events').click.some(o => { if (String(o.handler).includes('highlighter.clearHighlightTargetComment(')) { $(document.body).off('click', o.handler); clickHandler = o.handler; return true; } }); $._data(window, 'events').popstate.some(o => { if (String(o.handler).includes('highlighter.highlightTargetComment(')) { $(window).off('popstate', o.handler); return true; } }); }; let scroll = revId => { let ids = data[revId]; if (!ids || !ids.length) return; let yToSpan = Object.fromEntries( ids.map(id => document.getElementById(id)).filter(Boolean) .map(span => [span.getBoundingClientRect().y, span]) ); let ys = Object.keys(yToSpan); if (!ys.length) return; let lower = ys.filter(y => y > 10); if (!lower.length || Math.max(...lower) < document.documentElement.clientHeight ) { yToSpan[Math.min(...ys)].scrollIntoView(); } else { yToSpan[Math.min(...lower)].scrollIntoView(); } }; let scrollToNext = function (e) { e.preventDefault(); let revId = mw.config.get('wgDiffOldId'); if (!revId || !data[revId]) return; let i = data[revId].indexOf( this.closest('[data-mw-thread-id]').dataset.mwThreadId ); if (i === -1) return; let next = data[revId][i + 1] || data[revId][0]; document.getElementById(next).scrollIntoView(); }; mw.hook('wikipage.content').add(async $content => { let revId = mw.config.get('wgDiffOldId'); if (!revId) return; let param = new URLSearchParams(location.search).get('diffonly'); if (param && param !== '0') return; if (data[revId]) { highlight(revId); return; } await mw.loader.using(['ext.discussionTools.init', 'mediawiki.util']); let begin = Date.parse($('#mw-diff-otitle1 .mw-diff-timestamp').data('timestamp')); data[revId] = mw.dt.pageThreads.getCommentItems() .filter(c => c.timestamp > begin).map(c => c.id); if (!data[revId].length) return; await new Promise(setTimeout); highlight(revId); $content.find('.ext-discussiontools-init-replylink-buttons').filter(function () { return data[revId].includes(this.dataset.mwThreadId); }).children('span:last-of-type').before( ' | ', $('<a>').attr({ href: '#', role: 'button' }).text('next').on('click', scrollToNext) ); if (run || !document.getElementById('p-tb')) return; run = true; let portlet = mw.util.addPortletLink('p-tb', '#', 'Scroll to next', 't-scrolltonext'); portlet.firstElementChild.addEventListener('click', e => { e.preventDefault(); scroll(mw.config.get('wgDiffOldId')); }); mw.util.addPortletLink('p-tb', '#', 'Toggle highlight', 't-togglehighlight').firstElementChild.addEventListener('click', e => { e.preventDefault(); autoClear = !autoClear; if (autoClear) { $(document.body).on('click', clickHandler)[0].click(); } else { highlight(mw.config.get('wgDiffOldId')); } }); mw.loader.addStyleTag(`#t-scrolltonext{position:fixed;bottom:${portlet.clientHeight}px} #t-togglehighlight{position:fixed;bottom:0}`); }); }()); mw.config.get('wgNamespaceNumber') === 6 && mw.config.get('wgAction') === 'view' && mw.hook('wikipage.content').add($content => { $content.find('.filehistory .mw-usertoollinks-contribs').after(function () { return [ ' | ', $('<a>').attr('href', `${ mw.config.get('wgScript') }?title=Special:ListFiles/${ this.pathname.replace(/^.+\//, '') }&ilshowall=1`).text('uploads') ]; }); }); ['edit', 'submit'].includes(mw.config.get('wgAction')) && mw.config.get('wgArticleId') && mw.config.get('wgPageContentModel') === 'wikitext' && $(function () { if (!$('input[name="wpSection"]').val()) return; mw.hook('wikipage.content').add(async $content => { let $refs = $content.find('.mw-ext-cite-warning-sectionpreview_no_text'); if (!$refs.length) return; let ids = {}; $refs.each(function () { ids[this.closest('[id]').id.replace(/-\d+$/, '')] = this; }); let response = await $.get(`/api/rest_v1/page/html/${encodeURIComponent(mw.config.get('wgPageName'))}`); $($.parseHTML(response)).find('.mw-reference-text').each(function () { ids[this.id.replace(/^mw-reference-text-|-\d+$/g, '')]?.replaceWith(this); }); }); }); mw.hook('moremenu.ready').add(config => { $('#mm-page-purge-cache > a').on('click', e => { e.preventDefault(); new mw.Api().post({ action: 'purge', forcelinkupdate: 1, titles: config.page.name, formatversion: 2 }).then(() => { location.href = mw.util.getUrl(); }); }); $('#mm-page-search-search-history-wikiblame > a').on('click', function (e) { e.preventDefault(); let q = prompt(); if (q === null) return; let href = this.href; if (q) { let removal = q[0] === '!'; if (removal) { q = q.slice(1); } href += '&needle=' + encodeURIComponent(q); if (removal) { href += '&binary_search_inverse=on'; } href += '&force_wikitags=on'; } open(href, '_blank'); }); $('#mm-page-expand-templates > a').on('click auxclick', function (e) { if (e.which > 2) return; e.preventDefault(); let revId = mw.config.get('wgRevisionId') || Number($('input[name=oldid]').val()); let url = revId ? '/w/rest.php/v1/revision/' + revId : '/w/rest.php/v1/page/' + config.page.encodedName; $.get(url).then(response => { $('<form>').attr({ method: 'post', action: this.href, target: '_blank' }).append( [ ['wpInput', response.source], ['wpContextTitle', config.page.name], ['wpRemoveComments', 1] ].map(([n, v]) => $('<input>').attr({ name: n, type: 'hidden' }).val(v)) ).appendTo(document.body).trigger('submit').remove(); }); }); }); mw.config.get('wgCanonicalSpecialPageName') === 'ApiSandbox' && mw.hook('apisandbox.formatRequest').add((...args) => { args[4].complete = function () { setTimeout(() => { mw.hook('wikipage.content').fire($('.oo-ui-pageLayout-active')); }, 100); }; }); ['edit', 'submit'].includes(mw.config.get('wgAction')) && mw.config.get('wgArticleId') && mw.config.get('wgPageContentModel') === 'wikitext' && $.when($.ready, mw.loader.using('mediawiki.storage')).then(async () => { let infuseAndCall = (query, method, ...args) => { let $widget = $(query); if ($widget.length) { return OO.ui.infuse($widget)[method](...args); } }; let section = $('input[name="wpSection"]').val(); if (section) { let $textarea = $('#wpTextbox1'); let source = $textarea.prop('defaultValue'); let save = () => { let newSource = $textarea.textSelection('getContents'); if (newSource === source) { mw.storage.session.remove('editfullpage'); } else { mw.storage.session.setObject('editfullpage', [ mw.config.get('wgPageName'), section, newSource.trimEnd(), infuseAndCall('#wpSummaryWidget', 'getValue') || '', Number(infuseAndCall('#wpMinoreditWidget', 'isSelected')) || 0, Number(infuseAndCall('#wpWatchthisWidget', 'isSelected')) || 0, infuseAndCall('#wpWatchlistExpiryWidget', 'getValue') || 'infinite' ]); } }; await mw.loader.using(['jquery.textSelection', 'oojs-ui-core']); setInterval(() => { mw.requestIdleCallback(save); }, 3000); window.addEventListener('beforeunload', save); return; } let data = mw.storage.session.getObject('editfullpage'); mw.storage.session.remove('editfullpage'); console.log(data); if (!data || data[0] !== mw.config.get('wgPageName')) return; let isNew = data[1] === 'new'; let isLead = data[1] === '0'; let $textarea = $('#wpTextbox1'); let source = $textarea.prop('defaultValue'); let newSource, start, msg, notifOpts = { autoHideSeconds: 'long' }; let orig = []; if (isNew) { await mw.loader.using(['jquery.textSelection', 'oojs-ui-core']); newSource = source + (data[3] ? '\n== ' + data[3] + ' ==\n\n' : '\n') + data[2] + '\n'; start = source.length; } else { await mw.loader.using(['jquery.textSelection', 'oojs-ui-core', 'mediawiki.api']); let { parse } = await new mw.Api().get({ action: 'parse', page: mw.config.get('wgPageName'), prop: 'sections', wrapoutputclass: '', disablelimitreport: 1, disableeditsection: 1, disabletoc: 1, formatversion: 2 }); let target = !isLead && parse.sections.find(s => s.index === data[1]); if (isLead || target) { let next = parse.sections.find(s => s.index - 1 === Number(data[1])); newSource = (isLead ? '' : [...source].slice(0, target.byteoffset)).join('') + data[2] + (next ? '\n\n' + [...source].slice(next.byteoffset).join('') : '\n'); start = isLead ? 0 : target.byteoffset; } else { newSource = source + '\n\n' + data[2] + '\n'; start = source.length; msg = `Section restored. Couldn't find the section. The source is appended at bottom.`; notifOpts.type = 'warn'; } orig[0] = infuseAndCall('#wpSummaryWidget', 'getValue'); infuseAndCall('#wpSummaryWidget', 'setValue', data[3]); } $textarea.textSelection('setContents', newSource); orig[1] = infuseAndCall('#wpMinoreditWidget', 'getSelected'); infuseAndCall('#wpMinoreditWidget', 'setSelected', data[4]); orig[2] = infuseAndCall('#wpWatchthisWidget', 'getSelected'); infuseAndCall('#wpWatchthisWidget', 'setSelected', data[5]); orig[3] = infuseAndCall('#wpWatchlistExpiryWidget', 'getValue'); infuseAndCall('#wpWatchlistExpiryWidget', 'setValue', data[6]); setTimeout(() => { $textarea.textSelection('setSelection', { start }); }); let notif = await mw.notify($([ document.createTextNode(msg || 'Section restored.'), $('<p>').append( new OO.ui.ButtonWidget({ flags: 'destructive', label: 'Discard' }).on('click', () => { $textarea.textSelection('setContents', source); if (orig[0]) { infuseAndCall('#wpSummaryWidget', 'setValue', orig[0]); } infuseAndCall('#wpMinoreditWidget', 'setSelected', orig[1]); infuseAndCall('#wpWatchthisWidget', 'setSelected', orig[2]); infuseAndCall('#wpWatchlistExpiryWidget', 'setValue', orig[3]); notif.close(); }).$element )[0] ]), notifOpts); }); mw.config.exists('wgPostEdit') && mw.loader.using('mediawiki.storage', () => { mw.storage.session.remove('editfullpage'); }); mw.config.get('wgAction') === 'history' && mw.hook('wikipage.content').add(async $content => { if (!$content.has('.mw-history-line-updated').length) return; let href = $content.find('a.mw-history-histlinks-current:not(.mw-history-line-updated a)').attr('href'); if (!href) { await mw.loader.using(['mediawiki.api', 'mediawiki.util']); let page = (await new mw.Api().get({ action: 'query', titles: mw.config.get('wgPageName'), prop: 'info', inprop: 'notificationtimestamp', formatversion: 2 })).query.pages[0]; let rev = (await new mw.Api().get({ action: 'query', titles: page.title, prop: 'revisions', rvprop: 'ids', rvlimit: 1, rvstart: Date.parse(page.notificationtimestamp) / 1000 - 1, formatversion: 2 })).query.pages[0].revisions?.[0].revid; if (!rev || rev >= page.lastrevid) return; href = mw.util.getUrl(page.title, { diff: page.lastrevid, oldid: rev }); } $content.find('.mw-history-compareselectedversions-button').first().after( ' ', $('<a>').attr({ class: 'unseendiff', href: href }).text('unseen') ); }); (async () => { let cspn = mw.config.get('wgCanonicalSpecialPageName'); let isBp = cspn === 'Blankpage'; if (!isBp && cspn !== 'Watchlist') return; await mw.loader.using('mediawiki.util'); let notify = async (text, options, pn) => { let msg = [document.createTextNode(text)]; if (pn) { msg.push( $('<p>').append( $('<a>').attr('href', mw.util.getUrl(pn)).text(pn), ' ', $('<span>').addClass('mw-changeslist-links').append( $('<span>').append( $('<a>') .attr('href', mw.util.getUrl(pn, { action: 'edit' })) .text('edit') ), $('<span>').append( $('<a>') .attr('href', mw.util.getUrl(pn, { action: 'history' })) .text('history') ) ) )[0] ); } if (isBp) { await $.ready; $('#mw-content-text').html(msg); } else { return mw.notify(msg, Object.assign(options || {}, { tag: 'unseendiff' })); } }; let getUrl = async pn => { await mw.loader.using('mediawiki.api'); let page = (await new mw.Api().get({ action: 'query', titles: pn, prop: 'info', inprop: 'notificationtimestamp', formatversion: 2 })).query.pages[0]; if (!page.notificationtimestamp) { notify(`Couldn't get the last seen time.`, { type: 'warn' }, pn); return; } let rev = (await new mw.Api().get({ action: 'query', titles: pn, prop: 'revisions', rvprop: 'ids', rvlimit: 1, rvstart: Date.parse(page.notificationtimestamp) / 1000 - 1, formatversion: 2 })).query.pages[0].revisions?.[0].revid; if (rev === page.lastrevid) { notify('Already seen.', { type: 'warn' }, pn); return; } if (!rev) { rev = (await new mw.Api().get({ action: 'query', titles: pn, prop: 'revisions', rvprop: 'ids', rvlimit: 1, rvstart: Date.parse(page.notificationtimestamp) / 1000 - 1, rvdir: 'newer', formatversion: 2 })).query.pages[0].revisions?.[0].revid; if (!rev) { notify(`Couldn't get the last seen revision.`, { type: 'warn' }, pn); return; } } if (rev > page.lastrevid) { notify(`Invalid rev for "${pn}" (rev: ${rev}, lastrevid: ${page.lastrevid})`, { autoHideSeconds: 'long', type: 'warn' }, pn); return; } return mw.util.getUrl(page.title, { diff: page.lastrevid, oldid: rev }); }; if (isBp) { let pn = mw.config.get('wgTitle').match(/^[^/]+\/unseendiff\/(.+)$/)?.[1]; if (!pn) return; notify('Loading...', null, pn); let href = await getUrl(pn); if (!href) return; notify('Redirecting...', null, pn); location.href = href; return; } let handler = async function (e) { if (e.which > 2) return; e.preventDefault(); let pn = this.dataset.pn; if (!pn) { notify(`Couldn't get the page name.`, { type: 'error' }); return; } let notifPromise = notify('Loading...', { autoHideSeconds: 'long' }); let href = await getUrl(pn); if (!href) return; $(`.unseendiff-loader[data-pn="${$.escapeSelector(pn)}"]`).attr({ class: 'unseendiff', href: href, target: '_blank' }).off('click auxclick', handler); if (e.type === 'auxclick' || e.ctrlKey || e.metaKey || e.shiftKey) { open(href); } else { this.click(); } (await notifPromise).close(); }; mw.hook('wikipage.content').add($content => { $content.find( '.mw-changeslist-src-mw-edit.mw-changeslist-watchedunseen:not(.mw-changeslist-watchedseen) .mw-changeslist-line-inner' ).each(function () { let pn = this.dataset.targetPage || this.closest('[data-target-page]')?.dataset.targetPage || this.closest('table.mw-enhanced-rc')?.querySelector('[data-target-page]')?.dataset.targetPage; if (!pn) return; $('<span>').append( $('<a>').attr({ class: 'unseendiff-loader', href: mw.util.getUrl(`Special:BlankPage/unseendiff/${pn}`), 'data-pn': pn }).on('click auxclick', handler).text('unseen') ).appendTo( [...this.querySelectorAll('.mw-pager-tools')].pop() || $('<span>').addClass('mw-changeslist-links mw-pager-tools').appendTo(this).before(' ') ); }); }); })(); ['Contributions', 'IPContributions', 'Blankpage'].includes(mw.config.get('wgCanonicalSpecialPageName')) && mw.loader.using('mediawiki.util', () => { let watched = new Set(); let query = async lis => { let titles = Object.keys(lis).slice(0, 50); if (!titles.length) return; await mw.loader.using('mediawiki.api'); let pages = (await new mw.Api().post({ action: 'query', titles: titles, prop: 'info', inprop: 'notificationtimestamp|watched', formatversion: 2 }, { headers: { 'Promise-Non-Write-API-Action': 1 } })).query.pages; for (let page of pages) { if (!Object.hasOwn(lis, page.title)) continue; if (page.watched) { watched.add(page); $(lis[page.title]).addClass('watched'); } if (!page.notificationtimestamp) continue; let rev = (await new mw.Api().get({ action: 'query', titles: page.title, prop: 'revisions', rvprop: 'ids', rvlimit: 1, rvstart: Date.parse(page.notificationtimestamp) / 1000 - 1, formatversion: 2 })).query.pages[0].revisions?.[0].revid; if (!rev || rev === page.lastrevid) continue; if (rev > page.lastrevid) { mw.notify($([ document.createTextNode('Invalid rev for "'), $('<a>').attr({ href: mw.util.getUrl(page.title, { action: 'history' }), target: '_blank' }).text(page.title)[0], document.createTextNode(`" (rev: ${rev}, lastrevid: ${page.lastrevid})`), ]), { autoHideSeconds: 'long', type: 'warn' }); continue; } $('<span>').append( $('<a>').attr({ class: 'unseendiff', href: mw.util.getUrl(page.title, { diff: page.lastrevid, oldid: rev }) }).text('unseen') ).appendTo( lis[page.title].map(li => ( [...li.querySelectorAll(':scope > .mw-pager-tools')].pop() || $('<span>').addClass('mw-changeslist-links mw-pager-tools').appendTo(li).before(' ') )) ); } titles.forEach(title => { delete lis[title]; }); query(lis); }; mw.hook('wikipage.content').add($content => { $content.find( '.mw-contributions-list > li:not(.mw-contributions-current)[data-mw-revid]' ).each(function () { let link = this.querySelector('a.mw-changeslist-date, a.mw-changeslist-history'); let pn = link ? new URLSearchParams(link.search).get('title') : ''; $('<span>').append( $('<a>').attr({ class: 'mw-changeslist-diff', href: mw.util.getUrl(pn, { diff: 'cur', oldid: this.dataset.mwRevid }) }).text('cur') ).appendTo( [...this.querySelectorAll(':scope > .mw-pager-tools')].pop() || $('<span>').addClass('mw-changeslist-links mw-pager-tools').appendTo(this).before(' ') ); }); if (mw.config.get('wgWikiID') === 'wikidatawiki') return; let lis = {}; $content.find('.mw-contributions-title').each(function () { let title = this.textContent; if (!Object.hasOwn(lis, title)) { lis[title] = []; } lis[title].push(this.closest('li')); }); Object.keys(lis).forEach(title => { if (watched.has(title)) { $(lis[title]).addClass('watched'); delete lis[title]; } }); query(lis); }); }); ['edit', 'submit'].includes(mw.config.get('wgAction')) && mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Nardog/sandbox9.js&action=raw&ctype=text/javascript'); mw.config.get('wgWikiID') === 'metawiki' && (async () => { let css = mw.loader.addStyleTag(`.wishtitle { font-size: 90%; font-style: italic; word-break: break-word; } .wishtitle > a { color: var(--color-warning, #886425); } .wishtitle > a:visited { color: var(--border-color-warning--hover, #735421); } .wishtitle-declined > a { text-decoration: line-through; } .wishtitle-declined > a:hover, .wishtitle-declined > a:focus, .mw-underline-always .wishtitle-declined > a { text-decoration: line-through underline; } #watchlist-edit-form .wishtitle { display: inline-block; } .mw-search-result-heading > .wishtitle, .catchangesviewer-table .wishtitle { display: block; } .catchangesviewer-table:has(.wishtitle) { white-space: wrap; }`); let lang = mw.config.get('wgUserLanguage'); let titles; let loadTitles = async () => { await mw.loader.using('mediawiki.storage'); titles = titles || mw.storage.getObject('wishtitles'); if (titles?.lang !== lang) { titles = { lang, w: [], fa: [] }; } }; let updateTitles = async (crwstatuses, crwcontinue) => { await mw.loader.using('mediawiki.api'); let params = { action: 'query', list: 'communityrequests-wishes', crwlang: lang, crwstatuses: crwstatuses, crwprop: 'title|updated', crwsort: 'updated', crwdir: 'ascending', crwlimit: 'max', crwcontinue: crwcontinue, formatversion: 2 }; if (!crwcontinue && !crwstatuses && titles._) { params.crwcontinue = `|${titles._}|0`; } let response = await new mw.Api().get(params); let wishes = response?.query?.['communityrequests-wishes']; if (wishes?.length) { let $span = $('<span>'); wishes.forEach(w => { let id = w.crwtitle.match(/^Community Wishlist\/W(\d+)/)?.[1]; if (!id) return; titles.w[id - 1] = $span.html(w.title).text(); if (crwstatuses === 'declined') { (titles.wd = titles.wd || []).push(id - 1); } let faId = w.crfatitle?.match(/^Community Wishlist\/FA(\d+)/)?.[1]; if (!faId) return; titles.fa[faId - 1] = w.focusareatitle; }); if (!crwstatuses) { titles._ = wishes.at(-1).updated.replace(/\D/g, ''); } } let expiry = 86400; if (crwstatuses || crwcontinue) { let prev = mw.storage.getObject('_EXPIRY_wishtitles'); if (prev) { expiry = Math.round(Date.now() / 1000) + 86400 - prev; } } mw.storage.setObject('wishtitles', titles, expiry); crwcontinue = response?.continue?.crwcontinue; if (crwcontinue) { await updateTitles(crwstatuses, crwcontinue); } }; let getTitle = id => ( id[0] === 'W' ? titles.w[id.slice(1) - 1] : titles.fa[id.slice(2) - 1] ); let renderTitle = (title, id, tag = 'span') => { let classes = 'wishtitle'; if (id[0] === 'W' && titles.wd?.includes(id.slice(1) - 1)) { classes += ' wishtitle-declined'; } return $(`<${tag}>`).addClass(classes).append( $('<a>').attr({ href: `/wiki/Community_Wishlist/${id}`, title: `Community Wishlist/${id}` }).text(title) ); }; let callback = ([id, links]) => { let title = getTitle(id); if (!title) { return true; } $(links).after(' ', renderTitle(title, id)); }; let selector = '.mw-changeslist-title, ' + '.mw-changeslist-log-entry > a:not(.mw-userlink), ' + '.mw-changeslist-line.mw-changeslist-src-mw-categorize :is(.mw-changeslist-line-inner, .mw-changeslist-line-inner-comment, .mw-enhanced-rc-nested) > .comment > a, ' + '#watchlist-edit-form .cdx-table td > label > a, ' + '.mw-search-result-heading > a:not(:has(> .ext-communityrequests-entity-link--label)), ' + '.mw-contributions-title, ' + '#mw-whatlinkshere-list li > bdi > a, ' + '.mw-allpages-chunk > li > a, ' + '.mw-prefixindex-list > li > a, ' + '.mw-logevent-loglines > li > a, ' + '#mw-pages li > a, ' + '.catchangesviewer-table td:nth-child(3) > a'; mw.hook('wikipage.content').add(async $content => { let links = {}; $content.find('a').each(function () { if (!this.matches(selector)) return; let id = this.textContent.match( /^(?:Talk:|Translations:)?Community Wishlist\/((?:W|FA)\d+)/ )?.[1]; if (!id) return; (links[id] = links[id] || []).push(this); }); links = Object.entries(links); if (!links.length) return; await loadTitles(); links = links.filter(callback); if (!links.length) return; await updateTitles(); links = links.filter(callback); if (!links.length) return; await updateTitles('declined'); links.forEach(callback); }); let pn = mw.config.get('wgRelevantPageName'); let id = pn.match(/^(?:Talk:|Translations:)?Community_Wishlist\/((?:W|FA)\d+)/)?.[1]; if (!id) return; await $.ready; let extTitle = document.querySelector('.ext-communityrequests-wish--title'); if (extTitle && $('.mw-pt-languages-selected').attr('lang') === lang) return; await loadTitles(); let title = getTitle(id); if (!title) { await updateTitles(); title = getTitle(id); if (!title) { await updateTitles('declined'); title = getTitle(id); if (!title) return; } } let $title = renderTitle(title, id, 'div'); if (mw.config.get('skin') === 'vector-2022') { $title.prependTo('.vector-page-toolbar'); } else { $title.insertAfter('#firstHeading'); } css.textContent += ' .ext-communityrequests-entity-talk-header{display:none}'; if (extTitle) return; document.title = document.title.replace( pn.replaceAll('_', ' '), `${pn.replace(`Community_Wishlist/${id}`, title)} ($&)` ); })(); mw.config.get('wgWikiID') === 'metawiki' && mw.hook('wikipage.watchlistChange').add(async (isWatched, expiry) => { if (![0, 1].includes(mw.config.get('wgNamespaceNumber'))) return; let title = mw.config.get('wgTitle'); if (!/^Community Wishlist\/(?:W|FA)\d+$/.test(title)) return; if (isWatched) { await new mw.Api().watch(title + '/Votes', expiry); mw.notify('Watching /Votes too.'); } else { await new mw.Api().unwatch(title + '/Votes'); mw.notify('Unwatched /Votes too.'); } }); ['edit', 'submit'].includes(mw.config.get('wgAction')) && $(async () => { let $input = $('#wpTemplateSandboxTemplate'); if (!$input.length) return; mw.loader.addStyleTag('#templatesandbox-editform .oo-ui-fieldLayout{max-width:50em} #templatesandbox-editform .oo-ui-fieldLayout-field{flex-grow:999}'); let makeTemplateField = () => new OO.ui.FieldLayout( new mw.widgets.TitleInputWidget({ inputId: 'wpTemplateSandboxTemplate', name: 'wpTemplateSandboxTemplate', showMissing: false, value: $input.val() }), { label: 'Template name:' } ); if (mw.loader.getState('ext.TemplateSandbox') !== 'registered') { await mw.loader.using('mediawiki.widgets'); $input.parent().replaceWith(makeTemplateField().$element); return; } let require = await mw.loader.using([ 'ext.TemplateSandbox.TemplateSandboxTitleWidget', 'ext.TemplateSandbox.styles', 'jquery.makeCollapsible', 'user.options' ]); let widget = new (require('ext.TemplateSandbox.TemplateSandboxTitleWidget'))({ $overlay: true, id: 'wpTemplateSandboxPage', maxLength: 255, name: 'wpTemplateSandboxPage', placeholder: 'Page title', required: false, tabIndex: 10, templateTitleFunc: () => $('#wpTemplateSandboxTemplate').val() }); widget.$element.attr('data-ooui', '{"_":"mw.widgets.TemplateSandboxTitleWidget"}') .data('oouiInfused', widget); let fieldset = new OO.ui.FieldsetLayout({ classes: ['mw-templatesandbox-fieldset', 'mw-collapsed'], id: 'templatesandbox-editform', items: [ makeTemplateField(), new OO.ui.ActionFieldLayout( widget, new OO.ui.ButtonInputWidget({ id: 'wpTemplateSandboxPreview', name: 'wpTemplateSandboxPreview', label: 'Show preview', tabIndex: 10, type: 'submit', useInputTag: true }), { align: 'top' } ) ], label: 'Preview page with this template' }); fieldset.$label.append('&nbsp;', $('<span>').addClass('mw-collapsible-toggle-placeholder')); fieldset.$group.addClass('mw-collapsible-content'); $('#templatesandbox-editform').replaceWith(fieldset.$element.makeCollapsible()); let modules = ['ext.TemplateSandbox']; if (Number(mw.user.options.get('uselivepreview'))) { modules.push('ext.TemplateSandbox.preview'); } mw.loader.load(modules); }); mw.config.get('wgWikiID') === 'enwiki' && mw.config.get('wgCanonicalSpecialPageName') === 'Watchlist' && (async () => { mw.loader.addStyleTag('.xfdnotifier-sublinks::before{content:" ["} .xfdnotifier-sublinks::after{content:"]"} .xfdnotifier-sublinks > span:not(:first-child)::before{content:"\\2009·\\2009"} .mw-portlet.vector-menu[id^="p-xfdnotifier-"] a{display:inline}'); await mw.loader.using(['mediawiki.api', 'mediawiki.Title', 'mediawiki.storage']); let xfds = [ { id: 'rm', label: 'RM', full: 'Requested moves', cat: 'Requested moves', }, { id: 'rmt', label: 'RM/T', full: 'Requested moves (technical)', page: 'Wikipedia:Requested_moves/Technical_requests', titleExtractor: $page => ( $page.find(`[data-mw*='"wt":"RMassist/core"']`).closest('li').map(function () { return this.querySelector('a[rel="mw:WikiLink"]')?.title; }).get() ) }, { id: 'afd', label: 'AfD', full: 'Articles for deletion', cat: 'Articles for deletion' }, { id: 'mfd', label: 'MfD', full: 'Miscellaneous for deletion', cat: 'Miscellaneous pages for deletion' }, { id: 'tfd', label: 'TfD', full: 'Templates for deletion', cat: 'Templates for deletion' }, { id: 'tfm', label: 'TfM', full: 'Templates for merging', cat: 'Templates for merging' }, { id: 'cfd', label: 'CfD', full: 'Categories for deletion', cat: 'Categories for deletion' }, { id: 'cfr', label: 'CfR', full: 'Categories for renaming', cat: 'Categories for renaming' }, { id: 'cfsr', label: 'CfSR', full: 'Categories for speedy renaming', cat: 'Categories for speedy renaming' }, { id: 'cfm', label: 'CfM', full: 'Categories for merging', cat: 'Categories for merging' }, { id: 'cfs', label: 'CfS', full: 'Categories for splitting', cat: 'Categories for splitting' }, { id: 'cfl', label: 'CfL', full: 'Categories for listifying', cat: 'Categories for listifying' }, { id: 'cfc', label: 'CfC', full: 'Categories for conversion', cat: 'Categories for conversion' }, { id: 'cfgd', label: 'CfGD', full: 'Categories for general discussion', cat: 'Categories for general discussion' }, { id: 'ffd', label: 'FfD', full: 'Files for discussion', cat: 'Wikipedia files for discussion' }, { id: 'rfd', label: 'RfD', full: 'Redirects for discussion', cat: 'All redirects for discussion' }, { id: 'prod', label: 'PROD', full: 'Articles proposed for deletion', cat: 'All articles proposed for deletion' } ]; window.xfd = xfds; let queryTitles = async (xfd, titles) => { if (!titles.length) return; let response = await new mw.Api().get({ action: 'query', titles: titles.slice(0, 50), prop: 'info', inprop: 'watched', formatversion: 2 }); response?.query?.pages?.forEach(p => { if (p.watched) { xfd.pages.push(p.title); } }); await queryTitles(xfd, titles.slice(50)); }; let queryPage = async xfd => { let $page = $($.parseHTML(await $.get( `https://en.wikipedia.org/w/rest.php/v1/page/${encodeURIComponent(xfd.page)}/html` ))); await queryTitles(xfd, xfd.titleExtractor($page)); }; let queryCat = async (xfd, gcmcontinue) => { let response = await new mw.Api().get({ action: 'query', prop: 'info|categories', inprop: 'watched', clprop: 'sortkey', clcategories: `Category:${xfd.cat}`, generator: 'categorymembers', gcmtitle: `Category:${xfd.cat}`, gcmlimit: 'max', gcmsort: 'timestamp', gcmdir: 'older', gcmcontinue: gcmcontinue, formatversion: 2 }); response?.query?.pages?.forEach(p => { if (p.watched && p.categories?.[0]?.sortkeyprefix !== ' ') { xfd.pages.push(p.title); } }); if (response?.continue?.gcmcontinue) { await queryCat(xfd, response.continue.gcmcontinue); } }; let show = async (xfd, lastId, isCache) => { if (xfd.portlet && isCache) return; let portletId = 'p-xfdnotifier-' + xfd.id; if (xfd.portlet) { $(xfd.portlet).find('ul').empty(); if (!xfd.pages.length) return; } else { await $.ready; xfd.portlet = mw.util.addPortlet(portletId, xfd.label, '#' + lastId); } let $label = $(`#${portletId}-label`).attr('title', xfd.full); if (xfd.page) { $label.wrapInner($('<a>').attr('href', mw.util.getUrl(xfd.page))); } xfd.pages.forEach(p => { let t = mw.Title.newFromText(p); let isTalk = t.isTalkPage(); let $other = $('<a>').attr({ href: t[isTalk ? 'getSubjectPage' : 'getTalkPage']().getUrl(), title: isTalk ? 'subject' : 'talk' }).text(isTalk ? 's' : 't'); let link = mw.util.addPortletLink(portletId, t.getUrl(), p).querySelector('a'); $('<span>').addClass('xfdnotifier-sublinks').append( $('<span>').append($other), $('<span>').append( $('<a>').attr({ href: t.getUrl({ action: 'history' }), title: 'history' }).text('h') ) ).insertAfter(link); }); }; mw.hook('wikipage.content').add(mw.util.throttle(async () => { let cache = mw.storage.getObject('xfdnotifier') || {}; let lastId = 'p-tb'; for (let xfd of xfds) { let portletId = 'p-xfdnotifier-' + xfd.id; let now = Math.floor(Date.now() / 1000); if (now - cache[xfd.id]?.[0] < 600) { xfd.pages = cache[xfd.id].slice(1); await show(xfd, lastId, true); lastId = portletId; continue; } xfd.pages = []; if (xfd.cat) { await queryCat(xfd); } else if (xfd.page) { await queryPage(xfd); } cache[xfd.id] = [now, ...xfd.pages]; mw.storage.setObject('xfdnotifier', cache, 604800); await show(xfd, lastId); lastId = portletId; } }, 1800000)); })(); k00iy5v2wj978rlp4p0pw3r6jisx2xn Avoidant personality disorder 0 121797 735465 733860 2026-03-28T00:54:38Z Əkrəm 53528 Səhifənin adının dəyişdirilməsi təklif edilir. Ətraflı: [[Vikipediya:Addəyişmə müraciətləri#28-03-2026 – Avoidant personality disorder → mdasfmdsmfasmd]] 735465 wikitext text/x-wiki {{Addəyişmə təklifi|:mdasfmdsmfasmd|Vikipediya:Addəyişmə müraciətləri#28-03-2026 – Avoidant personality disorder → mdasfmdsmfasmd}} [[File:Signs of AvPD 1.png|thumb|testing123]] {{Infobox medical condition (new) | name = Avoidant personality disorder | synonyms = Anxious personality disorder | field = [[Psychiatry]], [[clinical psychology]] | symptoms = [[Social anxiety]], [[social inhibition]], feelings of inadequacy and [[Inferiority complex|inferiority]], [[social withdrawal|withdrawal]] | complications = [[Substance use disorder]]s, [[self-harm]] | onset = | duration = Chronic | types = | causes = | risks = [[Child neglect|Childhood emotional neglect]], [[Genetic predisposition]] | diagnosis = | differential = [[Social anxiety disorder]], [[Schizoid personality disorder]], [[Asperger syndrome]] | prevention = | treatment = [[Psychotherapy]] | medication = | prognosis = | frequency = | deaths = }} '''Avoidant personality disorder''' ('''AvPD''') is a [[Personality disorder#Cluster C (anxious or fearful disorders)|Cluster C]] [[personality disorder]] in which the main [[Coping (psychology)|coping]] mechanism of those affected is [[Avoidance coping|avoidance of feared stimuli]].<ref name="who.int">''Anxious [avoidant personality disorder]'' in ICD-10: [https://www.who.int/classifications/icd/en/GRNBOOK.pdf#155 Diagnostic Criteria] {{Webarchive|url=https://web.archive.org/web/20160618131606/http://www.who.int/classifications/icd/en/GRNBOOK.pdf#155#155|date=2016-06-18}} and [https://www.who.int/classifications/icd/en/bluebook.pdf#161 Clinical descriptions and guidelines.] {{Webarchive|url=https://web.archive.org/web/20140323025330/http://www.who.int/classifications/icd/en/bluebook.pdf#161#161|date=2014-03-23}}</ref> Those affected display a pattern of severe [[social anxiety]], [[social inhibition]], feelings of inadequacy and [[Inferiority complex|inferiority]], [[Fear of negative evaluation|extreme sensitivity to negative evaluation]] and [[Social rejection|rejection]], and avoidance of [[Interpersonal relationship|social interaction]] despite a strong desire for intimacy.<ref name="DSM-5-general personality disorder2">{{Cite book|title=Diagnostic and Statistical Manual of Mental Disorders|year=2013|isbn=978-0-89042-555-8|edition=Fifth|pages=[https://archive.org/details/diagnosticstatis0005unse/page/234 234–236]|chapter=Alternative DSM-5 Model for Personality Disorders|publisher=American Psychiatric Association|doi=10.1176/appi.books.9780890425596.156852|chapter-url=https://books.google.com/books?id=-JivBAAAQBAJ|url=https://archive.org/details/diagnosticstatis0005unse/page/234}}</ref> People with AvPD often consider themselves to be socially inept or personally unappealing and avoid social interaction for fear of being ridiculed, humiliated, rejected, or disliked. They often avoid becoming involved with others unless they are certain they will be liked. [[Child neglect|Childhood emotional neglect]] (in particular, the rejection of a child by one or both parents) and peer group rejection are associated with an increased risk for its development; however, it is possible for AvPD to occur without any notable history of abuse or neglect.<ref name="avpd-env">{{cite web|title=Avoidant Personality Disorder – Environmental Factors|url=http://www.tljones.co.uk/apd/envmnt.htm|access-date=2013-07-22|archive-url=https://web.archive.org/web/20141028110658/http://www.tljones.co.uk/apd/envmnt.htm|archive-date=2014-10-28|url-status=dead}}</ref> ==Signs and symptoms== Avoidant individuals are preoccupied with their own shortcomings and form relationships with others only if they believe they will not be rejected. They often view themselves with [[Self-hatred|contempt]], while showing a decreased ability to identify traits within themselves that are generally considered as positive within their societies.<ref name="retzlaff">Will, Retzlaff, ed. (1995). p. 97</ref> Loss and social rejection are so painful that these individuals will choose to be alone rather than risk trying to connect with others. Some with this disorder fantasize about idealized, accepting and affectionate relationships because of their desire to belong. They often feel themselves unworthy of the relationships they desire, and shame themselves from ever attempting to begin them. If they do manage to form relationships, it is also common for them to preemptively abandon them out of fear of the relationship failing.<ref>{{cite book|last1=Hoeksema|first1=Nolen|title=Abnormal Psychology|date=2014|publisher=McGraw Education|isbn=9781308211503|page=275|edition=6th}}</ref> Individuals with the disorder tend to describe themselves as uneasy, anxious, lonely, unwanted and isolated from others.<ref name="millon1996">{{cite book|title=Disorders of Personality: DSM-IV and Beyond, 2nd Edition|last1=Millon|first1=Theodore|last2=Davis|first2=Roger D.|year=1996|pages=263|author-link1=Theodore Millon}}</ref> They often choose jobs of isolation in which they do not have to interact with others regularly. Avoidant individuals also avoid performing activities in public spaces for fear of embarrassing themselves in front of others. Symptoms include: * Extreme [[shyness]] or [[social anxiety|anxiety]] in social situations, though the person feels a strong desire for close relationships<ref name=line>{{cite web|title=Avoidant personality disorder|publisher=Healthline Networks|url=http://www.healthline.com/galecontent/avoidant-personality-disorder|year=2003|access-date=2006-02-26|author1=Gary Gilles M.A.|author2=Paula Ford-Martin M.A.|archive-url=https://web.archive.org/web/20070928071525/http://www.healthline.com/galecontent/avoidant-personality-disorder|archive-date=2007-09-28|url-status=live}}</ref> * Heightened attachment-related anxiety, which may include a [[Abandonment (emotional)|fear of abandonment]]<ref>{{Cite journal|last1=Eikenaes|first1=Ingeborg|last2=Pedersen|first2=Geir|last3=Wilberg|first3=Theresa|date=September 2016|title=Attachment styles in patients with avoidant personality disorder compared with social phobia|journal=Psychology and Psychotherapy|volume=89|issue=3|pages=245–260|doi=10.1111/papt.12075|issn=2044-8341|pmid=26332087|hdl=10852/50233}}</ref> * Substance use disorders<ref name=":3">{{Cite journal|last=Verheul|first=R|date=2001-08-01|title=Co-morbidity of personality disorders in individuals with substance use disorders|journal=European Psychiatry|volume=16|issue=5|pages=274–282|doi=10.1016/S0924-9338(01)00578-8|pmid=11514129|s2cid=29066695}}</ref><ref name=":1">{{Cite web|url=http://www.nationaldrugstrategy.gov.au/internet/drugstrategy/Publishing.nsf/content/FE16C454A782A8AFCA2575BE002044D0/$File/m718.pdf|title=Personality disorders and substance use - National Drug Strategy|website=National Drug Strategy|archive-url=https://web.archive.org/web/20180327051653/http://www.nationaldrugstrategy.gov.au/internet/drugstrategy/publishing.nsf/Content/FE16C454A782A8AFCA2575BE002044D0/$File/m718.pdf|archive-date=2018-03-27|url-status=live}}</ref><ref name=":2">{{Cite web|url=https://ndarc.med.unsw.edu.au/sites/default/files/ndarc/resources/NDARC_PERSONALITY_FINAL.pdf|title=Personality + substance use|website=National Drug and Alcohol Research Centre|archive-url=https://web.archive.org/web/20171204061207/https://ndarc.med.unsw.edu.au/sites/default/files/ndarc/resources/NDARC_PERSONALITY_FINAL.pdf|archive-date=2017-12-04|url-status=live}}</ref> ===Comorbidity=== AvPD is reported to be especially prevalent in people with [[anxiety disorder]]s, although estimates of [[comorbidity]] vary widely due to differences in (among others) diagnostic instruments. Research suggests that approximately 10–50% of people who have [[panic disorder]] with [[agoraphobia]] have avoidant personality disorder, as well as about 20–40% of people who have social anxiety disorder. In addition to this, AvPD is more prevalent in people who have comorbid social anxiety disorder and generalised anxiety disorder than in those who have only one of the aforementioned conditions.<ref name=sciencedirect>{{cite journal|title=Prevalence of personality disorders among patients with anxiety disorders|journal=Psychiatry Research|doi=10.1016/0165-1781(94)90036-1|pmid=8022951|volume=51|issue=2|pages=167–174|date=February 1994|last1=Sanderson|first1=William C.|last2=Wetzler|first2=Scott|last3=Beck|first3=Aaron T.|last4=Betz|first4=Frank|s2cid=13101675}}</ref> Some studies report prevalence rates of up to 45% among people with generalized anxiety disorder and up to 56% of those with [[obsessive–compulsive disorder]].<ref>Van Velzen, C. J. M. (2002). ''Social Phobia and Personality Disorders: Comorbidity and Treatment Issues''. Groningen: University Library Groningen. ([https://nootropicsfrontline.com/wp-content/uploads/2021/07/wiki_Social-Phobia.pdf online version] {{Webarchive|url=https://web.archive.org/web/20211030082837/https://nootropicsfrontline.com/wp-content/uploads/2021/07/wiki_Social-Phobia.pdf |date=2021-10-30 }})</ref> [[Posttraumatic stress disorder]] is also commonly comorbid with avoidant personality disorder.<ref name=":0">{{Cite journal|last1=Gratz|first1=Kim L.|last2=Tull|first2=Matthew T.|date=2012-08-30|title=Exploring the relationship between posttraumatic stress disorder and deliberate self-harm: the moderating roles of borderline and avoidant personality disorders|journal=Psychiatry Research|volume=199|issue=1|pages=19–23|doi=10.1016/j.psychres.2012.03.025|issn=0165-1781|pmc=3407331|pmid=22521897}}</ref> Avoidants are prone to [[Self-hatred|self-loathing]] and, in certain cases, [[self-harm]]. In particular, avoidants who have comorbid PTSD have the highest rates of engagement in self-harming behavior, outweighing even those with [[borderline personality disorder]] (with or without PTSD).<ref name=":0" /> [[Substance use disorder]]s are also common in individuals with AvPD—particularly in regard to [[alcohol (drug)|alcohol]], [[benzodiazepine]]s, and [[heroin]]<ref name=":3" />—and may significantly affect a patient's prognosis.<ref name=":1" /><ref name=":2" /> Earlier theorists proposed a personality disorder with a combination of features from [[borderline personality disorder]] and avoidant personality disorder, called "avoidant-borderline mixed personality" (AvPD/BPD).<ref>Kantor, M. (1993, revised 2003). ''Distancing: A Guide to Avoidance and Avoidant Personality Disorder''. Westport, Conn: Praeger Publishers.</ref> ==Causes== Causes of AvPD are not clearly defined,<ref name="Sed2009">{{cite book|url=https://books.google.com/books?id=7_7-5dQIpBQC&pg=PA29|title=Blueprints psychiatry|date=2009|publisher=Wolters Kluwer/Lippincott Williams & Wilkins|isbn=978-0-7817-8253-1|edition=5th|location=Philadelphia|page=29|last1=Sederer|first1=Lloyd I.}}</ref> but appear to be influenced by a combination of social, genetic and psychological factors. The disorder may be related to [[temperament]]al factors that are inherited.<ref name="eggum" /><ref name=emedicine>{{Cite journal|last=Rettew|first=David C.|author2=Michael S Jellinek |author3=Alicia C Doyle |title=Avoidant Personality Disorder|publisher=[[eMedicine]]|date=March 4, 2008|url=http://emedicine.medscape.com/article/913360-overview|access-date=January 26, 2010|archive-url=https://web.archive.org/web/20100212013103/http://emedicine.medscape.com/article/913360-overview|archive-date=12 February 2010 |url-status=live}} </ref> Specifically, various anxiety disorders in childhood and adolescence have been associated with a temperament characterized by behavioral inhibition, including features of being shy, fearful and withdrawn in new situations.<ref name="amn">{{cite web|title=Avoidant Personality Disorder Causes, Frequency, Siblings and Mortality&nbsp;— Morbidity|publisher=Armenian Medical Network|work=Avoidant Personality Disorder|url=http://www.health.am/psy/avoidant-personality-disorder-causes/|year=2006|access-date=2007-02-26|archive-url=https://web.archive.org/web/20070930181339/http://www.health.am/psy/avoidant-personality-disorder-causes/|archive-date=2007-09-30|url-status=live|author1=Suzanne M. Sutherland|author2=M.D.}}</ref> These inherited characteristics may give an individual a [[genetic predisposition]] towards AvPD.<ref>{{cite book|last1=Lenzenweger|first1=Mark F.|first2=John F.|last2=Clarkin|title=Major Theories of Personality Disorder|publisher=[[Guilford Press]]|year=2005|page=69|url=https://books.google.com/books?id=Ht8wJUfrSNMC&pg=RA1-PA68|isbn=978-1-59385-108-8}}</ref> Childhood emotional neglect<ref>{{cite journal|last1=Johnson|first1=JG|last2=Smailes|first2=EM|last3=Cohen|first3=P|last4=Brown|first4=J|last5=Bernstein|first5=DP|title=Associations between four types of childhood neglect and personality disorder symptoms during adolescence and early adulthood: findings of a community-based longitudinal study|journal=Journal of Personality Disorders|volume=14|issue=2|pages=171–87|year=2000|pmid=10897467|doi=10.1521/pedi.2000.14.2.171}}</ref><ref>{{cite journal|last1=Joyce|first1=Peter R.|last2=McKenzie|first2=Janice M.|last3=Luty|first3=Suzanne E.|last4=Mulder|first4=Roger T.|last5=Carter|first5=Janet D.|last6=Sullivan|first6=Patrick F.|last7=Cloninger|first7=C. Robert|title=Temperament, childhood environment and psychopathology as risk factors for avoidant and borderline personality disorders|journal=Australian and New Zealand Journal of Psychiatry|volume=37|issue=6|pages=756–64|year=2003|pmid=14636393|doi=10.1111/j.1440-1614.2003.01263.x}}</ref><ref>{{cite journal|last1=Johnson|first1=J. G.|last2=Cohen|first2=P|last3=Brown|first3=J|last4=Smailes|first4=EM|last5=Bernstein|first5=DP|title=Childhood Maltreatment Increases Risk for Personality Disorders During Early Adulthood|journal=Archives of General Psychiatry|volume=56|issue=7|pages=600–6|year=1999|pmid=10401504|doi=10.1001/archpsyc.56.7.600|doi-access=free}}</ref><ref>{{cite journal|last1=Battle|first1=Cynthia L.|last2=Shea|first2=M. Tracie|last3=Johnson|first3=Dawn M.|last4=Yen|first4=Shirley|last5=Zlotnick|first5=Caron|last6=Zanarini|first6=Mary C.|last7=Sanislow|first7=Charles A.|last8=Skodol|first8=Andrew E.|last9=Gunderson|first9=John G.|last10=Grilo|first10=Carlos M.|last11=McGlashan|first11=Thomas H.|last12=Morey|first12=Leslie C.|title=Childhood Maltreatment Associated With Adult Personality Disorders: Findings From the Collaborative Longitudinal Personality Disorders Study|journal=Journal of Personality Disorders|volume=18|issue=2|pages=193–211|year=2004|pmid=15176757|doi=10.1521/pedi.18.2.193.32777|display-authors=8|url=https://wesscholar.wesleyan.edu/div3facpubs/393}}</ref> and peer group rejection<ref name="sperry">{{cite book|first1=Len|last1=Sperry|chapter=Avoidant Personality Disorder|chapter-url=https://books.google.com/books?id=35VhnOG6vCcC&pg=PA59|title=Handbook of diagnosis and treatment of DSM-IV-TR personality disorders|publisher=Brunner-Routledge|location=Philadelphia|year=2003|pages=59–79|isbn=978-0-415-93569-2}}</ref> are both associated with an increased risk for the development of AvPD.<ref name="eggum">{{cite journal|last1=Eggum|first1=Natalie D.|last2=Eisenberg|first2=Nancy|last3=Spinrad|first3=Tracy L.|last4=Valiente|first4=Carlos|last5=Edwards|first5=Alison|last6=Kupfer|first6=Anne S.|last7=Reiser|first7=Mark|title=Predictors of withdrawal: Possible precursors of avoidant personality disorder|journal=Development and Psychopathology|volume=21|issue=3|pages=815–38|year=2009|pmid=19583885|pmc=2774890|doi=10.1017/S0954579409000443}}</ref> Some researchers believe a combination of high-sensory-processing sensitivity coupled with adverse childhood experiences may heighten the risk of an individual developing AvPD.<ref name=":4">{{Cite journal|last1=Meyer|first1=Björn|last2=Ajchenbrenner|first2=Muriel|last3=Bowles|first3=David P.|date=December 2005|title=Sensory sensitivity, attachment experiences, and rejection responses among adults with borderline and avoidant features|journal=Journal of Personality Disorders|volume=19|issue=6|pages=641–658|doi=10.1521/pedi.2005.19.6.641|issn=0885-579X|pmid=16553560}}</ref> ==Subtypes== === Millon === Psychologist [[Theodore Millon]] notes that because most patients present a mixed picture of symptoms, their [[personality disorder]] tends to be a blend of a major personality disorder type with one or more secondary personality disorder types. He identified four adult subtypes of avoidant personality disorder.<ref name="Millon 11">[[Theodore Millon]] (2004): ''Chapter 6 – The Avoidant Personality'' (p.187). ''[http://dlia.ir/Scientific/e_book/Medicine/Internal_Medicine/RC_435_571_Psychiatry_/017437.pdf Personality Disorders in Modern Life.] {{Webarchive|url=https://web.archive.org/web/20170207112700/http://dlia.ir/Scientific/e_book/Medicine/Internal_Medicine/RC_435_571_Psychiatry_/017437.pdf |date=2017-02-07 }}'' Wiley, 2nd Edition. {{ISBN|0-471-23734-5}}.</ref><ref name="millon.net">{{cite web|url=http://www.millon.net/taxonomy/summary.htm|title=Personality Subtypes Summary|last=Millon|first=Theodore|date=2015|publisher=Institute for Advanced Studies in Personology and Psychopathology (millon.net)|access-date=2013-01-08|archive-url=https://web.archive.org/web/20170621092251/http://www.millon.net/taxonomy/summary.htm|archive-date=2017-06-21|url-status=live}}</ref> {|class="wikitable" |- ! Subtype and description ! Personality traits |- | '''Phobic avoidant''' (including [[Dependent personality disorder|dependent]] features) | General apprehensiveness displaced with avoidable tangible precipitant; qualms and disquietude symbolized by a repugnant and specific dreadful object or circumstances. |- | '''Conflicted avoidant''' (including [[Passive-aggressive personality disorder|negativistic]] features) | Internal discord and dissension; fears dependence; unsettled; unreconciled within self; hesitating, confused, tormented, [[paroxysm]]ic, embittered; unresolvable angst. |- | '''Hypersensitive avoidant''' (including [[Paranoid personality disorder|paranoid]] features) | Intensely wary and suspicious; alternately panicky, terrified, edgy, and timorous, then thin-skinned, high-strung, [[wikt:petulant|petulant]], and prickly. |- | '''Self-deserting avoidant''' (including [[Depressive personality disorder|depressive]] features) | Blocks or fragments [[self-awareness]]; discards painful images and memories; casts away untenable thoughts and impulses; possibly jettisons self (suicidal).<ref name="millon.net"/> |} === Others === In 1993, [[Lynn E. Alden]] and [[Martha J. Capreol]] proposed two other subtypes of avoidant personality disorder:<ref>Peter D. McLean, Sheila R. Woody: ''[https://books.google.com/books?id=_cr_5BpEyGkC&pg=PA129 Anxiety Disorders in Adults: An Evidence-Based Approach to Psychological Treatment]''. p. 129, {{ISBN|978-0-19-802759-1}}.</ref> {|class="wikitable" |- ! Subtype ! Features |- | '''Cold-avoidant''' | Characterised by an inability to experience and express positive emotion towards others. |- | '''Exploitable-avoidant''' | Characterised by an inability to express anger towards others or to resist coercion from others. May be at risk for abuse by others. |} ==Diagnosis== ===ICD=== The [[World Health Organization]]'s [[ICD-10]] lists avoidant personality disorder as ''anxious (avoidant) personality disorder ({{ICD10|F|60|6|f|60}})''. It is characterized by the presence of at least four of the following:<ref name="who.int" /> * persistent and pervasive feelings of tension and apprehension; * belief that one is socially inept, personally unappealing, or inferior to others; * excessive preoccupation with being criticized or rejected in social situations; * unwillingness to become involved with people unless certain of being liked; * restrictions in lifestyle because of need to have physical security; * avoidance of social or occupational activities that involve significant interpersonal contact because of fear of criticism, disapproval, or rejection. Associated features may include hypersensitivity to rejection and criticism. It is a requirement of ICD-10 that all personality disorder diagnoses also satisfy a set of [[Personality disorder#Diagnosis|general personality disorder criteria]]. ===DSM=== The [[Diagnostic and Statistical Manual of Mental Disorders]] (DSM) of the [[American Psychiatric Association|APA]] also has an avoidant personality disorder diagnosis (301.82). It refers to a widespread pattern of inhibition around people, feeling inadequate and being very sensitive to negative evaluation. Symptoms begin by early adulthood and occur in a range of situations. Four of the following seven specific symptoms should be present:<ref name="DSM-5-general personality disorder2" /> * Avoids occupational activities that involve significant interpersonal contact, because of fears of criticism, disapproval, or rejection * is unwilling to get involved with people unless certain of being liked * shows restraint within intimate relationships because of the fear of being shamed or ridiculed * is preoccupied with being criticized or rejected in social situations * is inhibited in new interpersonal situations because of feelings of inadequacy * views self as socially inept, personally unappealing, or inferior to others * is unusually reluctant to take personal risk or to engage in any new activities because they may prove embarrassing ===Differential diagnosis=== In contrast to [[social anxiety disorder]], a diagnosis of avoidant personality disorder (AvPD) also requires that the [[Personality disorder#General criteria|general criteria for a personality disorder]] are met. According to the [[DSM-5]], avoidant personality disorder must be differentiated from similar personality disorders such as [[Dependent personality disorder|dependent]], [[Paranoid personality disorder|paranoid]], [[Schizoid personality disorder|schizoid]], and [[Schizotypal personality disorder|schizotypal]]. But these can also occur together; this is particularly likely for AvPD and dependent personality disorder. Thus, if criteria for more than one personality disorder are met, all can be diagnosed.<ref name="DSM-5-general personality disorder2" /> There is also an overlap between avoidant and schizoid personality traits (see [[Schizoid avoidant behavior]]) and AvPD may have a relationship to the [[schizophrenia spectrum]].<ref>{{cite journal|year=2007|title=Avoidant personality disorder is a separable schizophrenia-spectrum personality disorder even when controlling for the presence of paranoid and schizotypal personality disorders|journal=Schizophrenia Research|volume=91|issue=1–3|pages=192–199|doi=10.1016/j.schres.2006.12.023|pmc=1904485|pmid=17306508|author1=David L. Fogelson|author2=Keith Nuechterlein|citeseerx=10.1.1.1019.5817}}</ref> Avoidant personality disorder must also be differentiated from the [[autism spectrum]], specifically [[Asperger syndrome]].<ref name=Lehnhardt2013>{{cite journal |last1=Lehnhardt |first1=Fritz-Georg |last2=Gawronski |first2=Astrid |last3=Pfeiffer |first3=Kathleen |last4=Kockler |first4=Hanna |last5=Schilbach |first5=Leonhard |last6=Vogeley |first6=Kai |title=The Investigation and Differential Diagnosis of Asperger Syndrome in Adults |journal=Deutsches Ärzteblatt International |date=November 2013 |volume=110 |issue=45 |pages=755–763 |doi=10.3238/arztebl.2013.0755 |pmid=24290364 |pmc=3849991 }}</ref> ==Treatment== Treatment of avoidant personality disorder can employ various techniques, such as [[social skills training]], psychotherapy, [[cognitive therapy]], and exposure treatment to gradually increase social contacts, [[group therapy]] for practicing social skills, and sometimes [[pharmacology|drug therapy]].<ref name="Comer 2014 p.">{{cite book|url=https://archive.org/details/FundamentalsOfAbnormalPsychologyComerRonaldJ.SRG].pdf|title=Fundamentals of abnormal psychology|last=Comer|first=Ronald|publisher=Worth Publishers|year=2014|isbn=978-1-4292-9563-5|location=New York, NY|pages=424–427}}</ref> A key issue in treatment is gaining and keeping the patient's trust since people with an avoidant personality disorder will often start to avoid treatment sessions if they distrust the therapist or fear rejection. The primary purpose of both individual therapy and social skills group training is for individuals with an avoidant personality disorder to begin challenging their exaggerated negative beliefs about themselves.<ref>{{cite web|title=Dual Diagnosis and the Avoidant Personality Disorder|date=2000-03-25|work=The Dual Diagnosis Pages: From Our Desk|url=http://www.toad.net/~arcturus/dd/avoid.htm|access-date=2007-02-06|archive-url=https://web.archive.org/web/20061216233724/http://www.toad.net/~arcturus/dd/avoid.htm|archive-date=2006-12-16|author1=Eckleberry|author2=Sharon C.}}</ref> Significant improvement in the symptoms of personality disorders is possible, with the help of treatment and individual effort.<ref>{{cite web|title=Personality Disorder - Treatment|url=http://www.mind.org.uk/information-support/types-of-mental-health-problems/personality-disorders/treatment-and-support/|publisher=Mind|access-date=5 February 2016|archive-url=https://web.archive.org/web/20160205143748/http://www.mind.org.uk/information-support/types-of-mental-health-problems/personality-disorders/treatment-and-support/|archive-date=2016-02-05|url-status=live}}</ref> == Prognosis == Being a personality disorder, which is usually chronic and has long-lasting mental conditions, an avoidant personality disorder may not improve with time without treatment. Given that it is a poorly studied personality disorder and in light of prevalence rates, societal costs, and the current state of research, AvPD qualifies as a neglected disorder.<ref>{{cite journal | doi = 10.1007/s11920-016-0665-6 | volume=18 | title=Avoidant Personality Disorder: a Current Review | year=2016 | journal=Current Psychiatry Reports | issue=3 | page=29 | pmid=26830887 | s2cid=34358884 | author1=Weinbrecht Anna | author2=Schulze Lars | author3=Boettcher Johanna | author4=Renneberg Babette }}.</ref> ==Criticism== There is controversy as to whether avoidant personality disorder (AvPD) is distinct from [[social anxiety disorder]]. Both have similar diagnostic criteria and may share a similar causation, subjective experience, course, treatment and identical underlying personality features, such as [[shyness]].<ref>{{cite journal|last2=Sanislow|first2=C. A.|last3=Grilo|first3=C. M.|last4=Skodol|first4=A. E.|last5=Gunderson|first5=J. G.|author-link5=John G. Gunderson|last6=Tracie Shea|first6=M.|last7=Yen|first7=S.|last8=Bender|first8=D. S.|last9=Zanarini|first9=M. C.|year=2005|title=Avoidant personality disorder and social phobia: distinct enough to be separate disorders?|journal=Acta Psychiatrica Scandinavica|volume=112|issue=3|pages=208–14|doi=10.1111/j.1600-0447.2005.00580.x|pmid=16095476|last1=Ralevski|first1=E.|last10=McGlashan|first10=T. H.|s2cid=16517625|display-authors=8|url=https://wesscholar.wesleyan.edu/cgi/viewcontent.cgi?article=1185&context=div3facpubs|doi-access=free}}</ref><ref>{{cite journal|last2=Zivanovic|first2=Olga|last3=Lisulov|first3=Ratomir|year=2011|title=Nosological status of social phobia: contrasting classical and recent literature|journal=Current Opinion in Psychiatry|volume=24|issue=1|pages=61–6|doi=10.1097/YCO.0b013e32833fb5a6|pmid=20966756|last1=Nedic|first1=Aleksandra|s2cid=31505197}}</ref><ref>{{cite journal|last2=Czajkowski|first2=N.|last3=Torgersen|first3=S.|last4=Neale|first4=M. C.|last5=Orstavik|first5=R. E.|last6=Tambs|first6=K.|last7=Kendler|first7=K. S.|year=2007|title=The Relationship Between Avoidant Personality Disorder and Social Phobia: A Population-Based Twin Study|journal=American Journal of Psychiatry|volume=164|issue=11|pages=1722–8|doi=10.1176/appi.ajp.2007.06101764|pmid=17974938|last1=Reichborn-Kjennerud|first1=T.|s2cid=23171568}}</ref> It is contended by some that they are merely different conceptualizations of the same disorder, where avoidant personality disorder may represent the more severe form.<ref>{{cite journal|last1=Reich|first1=James|s2cid=40728363|title=Avoidant personality disorder and its relationship to social phobia|journal=Current Psychiatry Reports|volume=11|issue=1|pages=89–93|year=2009|pmid=19187715|doi=10.1007/s11920-009-0014-0}}</ref><ref name="ReferenceA">{{cite journal|last1=Huppert|first1=Jonathan D.|last2=Strunk|first2=Daniel R.|last3=Ledley|first3=Deborah Roth|last4=Davidson|first4=Jonathan R. T.|last5=Foa|first5=Edna B.|title=Generalized social anxiety disorder and avoidant personality disorder: structural analysis and treatment outcome|journal=Depression and Anxiety|volume=25|issue=5|pages=441–8|year=2008|pmid=17618526|doi=10.1002/da.20349|s2cid=9179813}}</ref> In particular, those with AvPD experience not only more severe social phobia symptoms, but are also more depressed and more functionally impaired than patients with generalized social phobia alone.<ref name="ReferenceA" /> But they show no differences in social skills or performance on an impromptu speech.<ref>{{cite journal | pmid = 1583228 | volume=101 | issue=2 | title=Validity of the distinction between generalized social phobia and avoidant personality disorder | year=1992 | journal=J Abnorm Psychol | pages=332–9 |vauthors=Herbert JD, Hope DA, Bellack AS | doi=10.1037/0021-843x.101.2.332| url=https://digitalcommons.unl.edu/psychfacpub/917 }}</ref> Another difference is that social phobia is the ''fear of social circumstances'' whereas AvPD is better described as an ''aversion to intimacy'' in relationships.<ref name="Comer 2014 p." /> ==Epidemiology== Data from the 2001–02 National Epidemiologic Survey on Alcohol and Related Conditions indicates a [[prevalence]] of 2.36% in the American general population.<ref>{{cite journal|last1=Grant|first1=Bridget F.|last2=Hasin|first2=Deborah S.|last3=Stinson|first3=Frederick S.|last4=Dawson|first4=Deborah A.|last5=Chou|first5=S. Patricia|last6=Ruan|first6=W. June|last7=Pickering|first7=Roger P.|title=Prevalence, Correlates, and Disability of Personality Disorders in the United States|journal=The Journal of Clinical Psychiatry|volume=65|issue=7|pages=948–58|year=2004|pmid=15291684|doi=10.4088/JCP.v65n0711}}</ref> It appears to occur with equal frequency in males and females.<ref name="DSM-5">{{cite book|title=Diagnostic and Statistical Manual of Mental Disorders, Fifth Edition|publisher=American Psychiatric Publishing|year=2013|pages=672–675|chapter=Avoidant Personality Disorder, 301.82 (F60.6)|editor=American Psychiatric Association}}</ref> In one study, it was seen in 14.7% of psychiatric outpatients.<ref>{{cite journal |author3= L. |name-list-style=amp | year = 2005 | title = The prevalence of DSM-IV personality disorders in psychiatric outpatients | journal = The American Journal of Psychiatry | volume = 162 | issue = 10 | pages = 1911–1918 | doi=10.1176/appi.ajp.162.10.1911|pmid=16199838 | author4 = M. | author2 = Rothschild }}</ref> ==History== The avoidant personality has been described in several sources as far back as the early 1900s, although it was not so named for some time. [[Switzerland|Swiss]] psychiatrist [[Eugen Bleuler]] described patients who exhibited signs of avoidant personality disorder in his 1911 work ''Dementia Praecox: Or the Group of Schizophrenias''.<ref name=millon1995>{{cite book|last1=Millon|first1=Theodore|last2=Martinez|first2=Alexandra|editor-last=Livesley|editor-first=W. John|title=The DSM-IV Personality Disorders|chapter=Avoidant Personality Disorder|publisher=[[Guilford Press]]|year=1995|pages=[https://archive.org/details/isbn_9780898622577/page/218 218]|chapter-url=https://books.google.com/books?id=9AqPs9ootqoC&pg=PA218|isbn=978-0-89862-257-7|url-access=registration|url=https://archive.org/details/isbn_9780898622577/page/218}}</ref> Avoidant and [[schizoid personality disorder|schizoid]] patterns were frequently confused or referred to synonymously until [[Ernst Kretschmer|Kretschmer]] (1921),<ref>{{cite book|last=Kretschmer|first=Ernst|author-link=Ernst Kretschmer|title=Körperbau und Charakter|publisher=J. Springer|year=1921}}</ref> in providing the first relatively complete description, developed a distinction. ==See also== {{Portal|Psychology}} * [[Attachment theory]] * [[Avoidance coping]] * [[Counterphobic attitude]] * [[Experiential avoidance]] * [[Inferiority complex]] * [[Sensory processing sensitivity]] '''Social:''' * [[Hermit]] * ''[[Hikikomori]]'' * [[Loner]] * [[Recluse]] * [[Solitude]] * ''[[Taijin kyofusho]]'' ==References== {{Reflist|30em}} ==External links== {{Medical resources | ICD10 = {{ICD10|F|60|6|f|60}} | ICD9 = {{ICD9|301.82}} | ICDO = | image = | caption = | OMIM = | oMIM_mult = | MedlinePlus = 000940 | eMedicineSubj = ped | eMedicineTopic = 189 | DiseasesDB = | MeshID = D010554 }} {{Authority control}} [[Category:Cluster C personality disorders]] gwxvixqyiznvwc8fr1fdwajefr16qv1 Mwbot-rs/Save 0 122864 735435 734458 2026-03-27T12:11:19Z Mwbot-rs test 52001 Test suite edit 735435 wikitext text/x-wiki It has been 1774613478 seconds since the epoch. e0z38sq116wasuwhlqp48ao3lmvlf2s User:SongVĩ.Bot II 2 124239 735449 735394 2026-03-27T17:00:14Z SongVĩ.Bot II 52414 [[User:SongVĩ.Bot II|Task 0]]: Đã 1551 ngày... 735449 wikitext text/x-wiki Cập nhật lần cuối: 28-03-2026 Đã 1551 ngày... 3ecwma7tck9375kihzqf1s61tpnm5mq User:DVRTed/common.js 2 147626 735457 735392 2026-03-27T19:44:17Z DVRTed 55993 735457 javascript text/javascript mw.loader.load(`http://localhost:1212/anyScript.js?t=${Date.now()}`); mw.loader.load(`http://localhost:1212/script-ctl.js?t=${Date.now()}`); /* scriptmanager:begin !DO NOT EDIT THIS LINE MANUALLY!*/ // Backlinks: [[User:DVRTed/workshop.js]], [[User:DVRTed/lintHelper.js]] [ { "pagename": "User:DVRTed/workshop.js", "oldid": 734917, "status": "disabled" }, { "pagename": "User:DVRTed/lintHelper.js", "oldid": 676745, "status": "enabled" } ] /* scriptmanager:end !DO NOT EDIT THIS LINE MANUALLY!*/ sxcwynmjdspdgei2v75yufek1ec3qmw 2023 0 148604 735458 582281 2026-03-27T20:34:45Z Zilant17 29926 735458 wikitext text/x-wiki http://exampletest123.com {{Webarchive|url=https://web.archive.org/web/20120108031256/http://exampletest123.com/ |date=2012-01-08 }}{{Webarchive|url=https://web.archive.org/web/20120108031256/http://exampletest123.com/ |date=2012-01-08 }} <nowiki>http://exampletest123.net</nowiki> http://exampletest123.com {{Webarchive|url=https://web.archive.org/web/20120108031256/http://exampletest123.com/ |date=2012-01-08 }} Test for pageviews count verification. jduq0r4eyuoub9m925uhwbqo83xr5uv T329968 0 151676 735460 570197 2026-03-27T21:15:55Z Testestjksndqjkbdqlkwdb 72461 735460 wikitext text/x-wiki test testing 314ljaxmev7agvl0qwva1b6mae52zvl User talk:JWBTH/CD test page 3 154341 735470 735432 2026-03-28T06:43:48Z JWBTH 52211 /* Section 1 */ reply ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]]) 735470 wikitext text/x-wiki == Section 1 == first section comment [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:37, 20 November 2024 (UTC) unsigned comment end {{unsigned|user}} : comment to be edited [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:38, 20 November 2024 (UTC) :: comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 02:41, 20 November 2024 (UTC) ::: child comment of comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 06:09, 27 August 2025 (UTC) ::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) :::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC) : [[#c-Test_account_8-20241120023700-Section_1|Test account 8 @ 02:37, 20 November 2024 (UTC)]] [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 06:43, 28 March 2026 (UTC) === test2 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:55, 14 September 2025 (UTC) : [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 20:13, 26 March 2026 (UTC) === test3 === test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:56, 14 September 2025 (UTC) == Section to add test comments == section [[User:Example|Example]] ([[User talk:Example|talk]]) 02:37, 1 March 2026 (UTC) : Test comment with random number 0.08406505844874512 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 16:32, 16 March 2026 (UTC) : Test. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:16, 16 March 2026 (UTC) : Test. test3 [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:17, 16 March 2026 (UTC) : Test comment with random number 0.8357927622675184 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.47460188540542925 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC) : Test comment with random number 0.687062002939545 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:03, 23 March 2026 (UTC) : Test comment with random number 0.21500952410025898 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:22, 23 March 2026 (UTC) : Test comment with random number 0.6571328205265842 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 17:21, 23 March 2026 (UTC) : Test comment with random number 0.8725721668943434 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:21, 24 March 2026 (UTC) : Test comment with random number 0.9535110784110594 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:22, 24 March 2026 (UTC) : Test comment with random number 0.4330065153484025 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 03:55, 27 March 2026 (UTC) : Test comment with random number 0.7353033907097808 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.44304195516553146 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC) : Test comment with random number 0.02243804450899023 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.520846091950367 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC) : Test comment with random number 0.9946058761624214 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:25, 27 March 2026 (UTC) : Test comment with random number 0.1691580237328757 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:28, 27 March 2026 (UTC) : Test comment with random number 0.06490355868980668 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:30, 27 March 2026 (UTC) : Test comment with random number 0.9392023221346153 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:32, 27 March 2026 (UTC) == Section for moving == test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:52, 15 March 2026 (UTC) 6ef4llonicshuckas648vu5fk1ucvuc User:Asked42/common.js 2 158658 735447 735110 2026-03-27T16:56:39Z Asked42 58528 735447 javascript text/javascript // This script provides the functionality for the "Perform Pre-Review" action. // It is designed to be dynamically loaded by the main [[MediaWiki:SubmitWizard.js]] script. // <nowiki> ( function () { 'use strict'; window.PreReviewScript = window.PreReviewScript || {}; window.PreReviewScript.triggerPreReviewAction = function() { if ( window.PreReviewScript.mounted ) { window.PreReviewScript.showForm(); return; } mw.loader.using( [ '@wikimedia/codex', 'mediawiki.api' ] ).then( function( require ) { const Vue = require( 'vue' ); const Codex = require( '@wikimedia/codex' ); const pageTitle = mw.config.get( 'wgPageName' ); const currentOldId = mw.config.get( 'wgRevisionId' ) || mw.config.get( 'wgCurRevisionId' ); const contentDiv = document.getElementById( 'mw-content-text' ); if ( !contentDiv ) { mw.notify( 'Could not find content area to mount form.', { type: 'error' } ); return; } let mountPoint = document.getElementById( 'prereview-form-mount' ); if ( !mountPoint ) { mountPoint = document.createElement( 'div' ); mountPoint.id = 'prereview-form-mount'; contentDiv.insertBefore( mountPoint, contentDiv.firstChild ); } const app = Vue.createMwApp( { data: function() { return { showForm: false, isSubmitting: false, reviewedVersion: currentOldId || '', timestamp: new Date().toLocaleString(), // Review Criteria copyright: 'not_reviewed', newsworthy: 'not_reviewed', style: 'not_reviewed', npov: 'not_reviewed', verifiable: 'not_reviewed', // Conditional Copyvio copyvioDescription: '', // Notes authorNotes: '', reviewerNotes: '', reviewOptions: [ { label: '<not reviewed>', value: 'not_reviewed' }, { label: '<pass>', value: 'pass' }, { label: '<fail>', value: 'fail' } ] }; }, computed: { isFormValid: function() { // Check if at least one criterion has been reviewed const criteria = [this.copyright, this.newsworthy, this.style, this.npov, this.verifiable]; const hasReviewedOne = criteria.some( val => val !== 'not_reviewed' ); // Check if at least one of the notes has been provided const hasNotes = (this.authorNotes && this.authorNotes.trim().length > 0) || (this.reviewerNotes && this.reviewerNotes.trim().length > 0); return hasReviewedOne && hasNotes && this.reviewedVersion; }, calculatedStatus: function() { // Status is 'pass' ONLY if all 5 criteria are explicitly marked as 'pass' const criteria = [this.copyright, this.newsworthy, this.style, this.npov, this.verifiable]; const allPass = criteria.every( val => val === 'pass' ); return allPass ? 'pass' : 'flag'; } }, template: ` <div v-if="showForm" class="skin-invert" style="border: 2px solid #0645ad; border-radius: 2px; margin: 20px 0; background: #ffffff; box-shadow: 0 2px 8px rgba(0,0,0,0.1); overflow: hidden;"> <div style="background: linear-gradient(135deg, #0645ad 0%, #0b7fcc 100%); color: white; padding: 16px 20px; margin: 0; font-size: 1.3em; font-weight: 600; display: flex; justify-content: space-between;">Perform a pre review using submit wizard</div> <div style="padding: 20px; background: #f0f6ff;"> <div style="margin-bottom: 24px; font-size: 1.1em;"> You are pre reviewing the <strong>{{ reviewedVersion }}</strong> revision of this article at <strong>{{ timestamp }}</strong>. </div> <div style="background: #ffffff; padding: 16px; border-radius: 4px; border: 1px solid #c8ccd1; margin-bottom: 20px;"> <div style="font-weight: bold; margin-bottom: 16px; font-size: 1.2em; border-bottom: 1px solid #eaecf0; padding-bottom: 8px;">Evaluation Criteria</div> <div style="display: grid; grid-template-columns: 180px 1fr; align-items: center; gap: 16px; margin-bottom: 16px;"> <div style="font-weight: 600;">Copyright</div> <cdx-select v-model:selected="copyright" :menu-items="reviewOptions"></cdx-select> <div v-if="copyright === 'fail'" style="grid-column: 1 / -1; margin-left: 20px; border-left: 3px solid #d73333; padding-left: 16px;"> <cdx-field> <template #label>describe copyvio:</template> <cdx-text-input v-model="copyvioDescription" placeholder="Provide details of the copyright infringement"></cdx-text-input> </cdx-field> </div> <div style="font-weight: 600;">Newsworthiness</div> <cdx-select v-model:selected="newsworthy" :menu-items="reviewOptions"></cdx-select> <div style="font-weight: 600;">Style Guide</div> <cdx-select v-model:selected="style" :menu-items="reviewOptions"></cdx-select> <div style="font-weight: 600;">NPOV</div> <cdx-select v-model:selected="npov" :menu-items="reviewOptions"></cdx-select> <div style="font-weight: 600;">Verifiability</div> <cdx-select v-model:selected="verifiable" :menu-items="reviewOptions"></cdx-select> </div> </div> <div style="background: #ffffff; padding: 16px; border-radius: 4px; border: 1px solid #c8ccd1; margin-bottom: 20px;"> <cdx-field style="margin-bottom: 16px;"> <template #label>Any Notes for the Author?</template> <cdx-text-area v-model="authorNotes" placeholder="Notes addressed to the author(s)" rows="3"></cdx-text-area> </cdx-field> <cdx-field> <template #label>Any Notes for the Reviewer?</template> <cdx-text-area v-model="reviewerNotes" placeholder="Notes addressed to the reviewer" rows="3"></cdx-text-area> </cdx-field> </div> <div style="display: flex; gap: 8px; justify-content: flex-end;"> <cdx-button @click="closeForm">Cancel</cdx-button> <cdx-button action="progressive" weight="primary" @click="submitPreReview" :disabled="isSubmitting || !isFormValid"> {{ isSubmitting ? 'Submitting...' : 'Add Pre Review' }} </cdx-button> </div> </div> </div> `, methods: { closeForm: function() { this.showForm = false; }, submitPreReview: function() { const self = this; if ( !this.reviewedVersion ) { mw.notify( 'Reviewed Version is required!', { type: 'error' } ); return; } this.isSubmitting = true; const api = new mw.Api(); const talkPageTitle = new mw.Title( pageTitle ).getTalkPage().getPrefixedText(); const articleUrl = 'https://en.wikinews.org/w/index.php?title=' + encodeURIComponent( pageTitle ) + '&oldid=' + this.reviewedVersion; // Format copyright value based on whether it failed and has a description let formattedCopyright = this.copyright === 'not_reviewed' ? '' : this.copyright; if ( this.copyright === 'fail' && this.copyvioDescription.trim() !== '' ) { formattedCopyright = 'fail - ' + this.copyvioDescription; } // Helper to strip out 'not_reviewed' so the template param just stays empty const formatCriteria = (val) => val === 'not_reviewed' ? '' : val; const templateText = '== Pre Review ==\n\n' + '{{Pre-review\n' + '|evaluated-url=' + articleUrl + '\n' + '|status=' + this.calculatedStatus + '\n' + '|updated=\n' + '|copyright=' + formattedCopyright + '\n' + '|earwig-permalink=\n' + '|newsworthy=' + formatCriteria(this.newsworthy) + '\n' + '|verifiable=' + formatCriteria(this.verifiable) + '\n' + '|npov=' + formatCriteria(this.npov) + '\n' + '|style=' + formatCriteria(this.style) + '\n' + '|author-notes=' + this.authorNotes + '\n' + '|reviewer-notes=' + this.reviewerNotes + '\n' + '|updated-notes=\n' + '}}\n\n' + '--' + '~~' + '~~'; api.get( { action: 'query', titles: talkPageTitle, prop: 'info' } ).then( function( data ) { const pages = data.query.pages; const pageId = Object.keys( pages )[0]; const pageExists = pageId !== '-1'; return api.postWithToken( 'csrf', { action: 'edit', title: talkPageTitle, appendtext: pageExists ? '\n\n' + templateText : templateText, summary: 'Adding Pre-Review (via [[MediaWiki:SubmitWizard.js/doc|SubmitWizard]])', createonly: !pageExists } ); } ).then( function() { mw.notify( 'Pre-Review added successfully to ' + talkPageTitle, { type: 'success' } ); self.isSubmitting = false; self.closeForm(); setTimeout( function() { window.location.href = mw.util.getUrl( talkPageTitle ); }, 1500 ); } ).catch( function( error ) { console.error( 'Error submitting pre-review:', error ); mw.notify( 'Error submitting pre-review: ' + error, { type: 'error' } ); self.isSubmitting = false; } ); } }, mounted: function() { window.PreReviewScript.showForm = function() { this.showForm = true; }.bind( this ); } } ); app.component( 'cdx-button', Codex.CdxButton ); app.component( 'cdx-field', Codex.CdxField ); app.component( 'cdx-text-input', Codex.CdxTextInput ); app.component( 'cdx-text-area', Codex.CdxTextArea ); app.component( 'cdx-select', Codex.CdxSelect ); const instance = app.mount( mountPoint ); window.PreReviewScript.instance = instance; window.PreReviewScript.mounted = true; window.PreReviewScript.showForm = function() { instance.showForm = true; }; instance.showForm = true; } ).catch( function( error ) { console.error( 'Error loading Codex:', error ); mw.notify( 'Error loading Pre-Review form. Please try again.', { type: 'error' } ); } ); }; // Add a link to the "Tools" (p-tb) portlet in the sidebar mw.loader.using( 'mediawiki.util' ).then( function () { const portletLink = mw.util.addPortletLink( 'p-tb', '#', 'Perform Pre-Review', 't-prereview', 'Open the Pre-Review form for this page' ); if ( portletLink ) { portletLink.addEventListener( 'click', function ( e ) { e.preventDefault(); window.PreReviewScript.triggerPreReviewAction(); } ); } } ); }() ); // </nowiki> var extraCSS = mw.util.getParamValue( 'withCSS' ), extraJS = mw.util.getParamValue( 'withJSS' ); if ( extraCSS ) { if ( extraCSS.match( /^User:[^&<>=%#]*\.css$/ ) ) { mw.loader.load( '/w/index.php?title=' + extraCSS + '&action=raw&ctype=text/css', 'text/css' ); } else { mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } ); } } if ( extraJS ) { if ( extraJS.match( /^User:[^&<>=%#]*\.js$/ ) ) { mw.loader.load( '/w/index.php?title=' + extraJS + '&action=raw&ctype=text/javascript' ); } else { mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } ); } } mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Asked42/sandbox2.js&action=raw&ctype=text/javascript'); mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Asked42/sandbox1.js&action=raw&ctype=text/javascript'); mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Asked42/Experiment3.js&action=raw&ctype=text/javascript'); mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Asked42/Experiment.js&action=raw&ctype=text/javascript'); 5g3tcdwj4f4rojy8053rl865xdaus60 735448 735447 2026-03-27T16:57:44Z Asked42 58528 735448 javascript text/javascript // This script provides the functionality for the "Perform Pre-Review" action. // It is designed to be dynamically loaded by the main [[MediaWiki:SubmitWizard.js]] script. // <nowiki> ( function () { 'use strict'; window.PreReviewScript = window.PreReviewScript || {}; window.PreReviewScript.triggerPreReviewAction = function() { if ( window.PreReviewScript.mounted ) { window.PreReviewScript.showForm(); return; } mw.loader.using( [ '@wikimedia/codex', 'mediawiki.api' ] ).then( function( require ) { const Vue = require( 'vue' ); const Codex = require( '@wikimedia/codex' ); const pageTitle = mw.config.get( 'wgPageName' ); const currentOldId = mw.config.get( 'wgRevisionId' ) || mw.config.get( 'wgCurRevisionId' ); const contentDiv = document.getElementById( 'mw-content-text' ); if ( !contentDiv ) { mw.notify( 'Could not find content area to mount form.', { type: 'error' } ); return; } let mountPoint = document.getElementById( 'prereview-form-mount' ); if ( !mountPoint ) { mountPoint = document.createElement( 'div' ); mountPoint.id = 'prereview-form-mount'; contentDiv.insertBefore( mountPoint, contentDiv.firstChild ); } const app = Vue.createMwApp( { data: function() { return { showForm: false, isSubmitting: false, reviewedVersion: currentOldId || '', timestamp: new Date().toLocaleString(), // Review Criteria copyright: 'not_reviewed', newsworthy: 'not_reviewed', style: 'not_reviewed', npov: 'not_reviewed', verifiable: 'not_reviewed', // Conditional Copyvio copyvioDescription: '', // Notes authorNotes: '', reviewerNotes: '', reviewOptions: [ { label: 'Not reviewed', value: 'not_reviewed' }, { label: 'Pass', value: 'pass' }, { label: 'Fail', value: 'fail' } ] }; }, computed: { isFormValid: function() { // Check if at least one criterion has been reviewed const criteria = [this.copyright, this.newsworthy, this.style, this.npov, this.verifiable]; const hasReviewedOne = criteria.some( val => val !== 'not_reviewed' ); // Check if at least one of the notes has been provided const hasNotes = (this.authorNotes && this.authorNotes.trim().length > 0) || (this.reviewerNotes && this.reviewerNotes.trim().length > 0); return hasReviewedOne && hasNotes && this.reviewedVersion; }, calculatedStatus: function() { // Status is 'pass' ONLY if all 5 criteria are explicitly marked as 'pass' const criteria = [this.copyright, this.newsworthy, this.style, this.npov, this.verifiable]; const allPass = criteria.every( val => val === 'pass' ); return allPass ? 'pass' : 'flag'; } }, template: ` <div v-if="showForm" class="skin-invert" style="border: 2px solid #0645ad; border-radius: 2px; margin: 20px 0; background: #ffffff; box-shadow: 0 2px 8px rgba(0,0,0,0.1); overflow: hidden;"> <div style="background: linear-gradient(135deg, #0645ad 0%, #0b7fcc 100%); color: white; padding: 16px 20px; margin: 0; font-size: 1.3em; font-weight: 600; display: flex; justify-content: space-between;">Perform a pre review using submit wizard</div> <div style="padding: 20px; background: #f0f6ff;"> <div style="margin-bottom: 24px; font-size: 1.1em;"> You are pre reviewing the <strong>{{ reviewedVersion }}</strong> revision of this article at <strong>{{ timestamp }}</strong>. </div> <div style="background: #ffffff; padding: 16px; border-radius: 4px; border: 1px solid #c8ccd1; margin-bottom: 20px;"> <div style="font-weight: bold; margin-bottom: 16px; font-size: 1.2em; border-bottom: 1px solid #eaecf0; padding-bottom: 8px;">Evaluation Criteria</div> <div style="display: grid; grid-template-columns: 180px 1fr; align-items: center; gap: 16px; margin-bottom: 16px;"> <div style="font-weight: 600;">Copyright</div> <cdx-select v-model:selected="copyright" :menu-items="reviewOptions"></cdx-select> <div v-if="copyright === 'fail'" style="grid-column: 1 / -1; margin-left: 20px; border-left: 3px solid #d73333; padding-left: 16px;"> <cdx-field> <template #label>describe copyvio:</template> <cdx-text-input v-model="copyvioDescription" placeholder="Provide details of the copyright infringement"></cdx-text-input> </cdx-field> </div> <div style="font-weight: 600;">Newsworthiness</div> <cdx-select v-model:selected="newsworthy" :menu-items="reviewOptions"></cdx-select> <div style="font-weight: 600;">Style Guide</div> <cdx-select v-model:selected="style" :menu-items="reviewOptions"></cdx-select> <div style="font-weight: 600;">NPOV</div> <cdx-select v-model:selected="npov" :menu-items="reviewOptions"></cdx-select> <div style="font-weight: 600;">Verifiability</div> <cdx-select v-model:selected="verifiable" :menu-items="reviewOptions"></cdx-select> </div> </div> <div style="background: #ffffff; padding: 16px; border-radius: 4px; border: 1px solid #c8ccd1; margin-bottom: 20px;"> <cdx-field style="margin-bottom: 16px;"> <template #label>Any Notes for the Author?</template> <cdx-text-area v-model="authorNotes" placeholder="Notes addressed to the author(s)" rows="3"></cdx-text-area> </cdx-field> <cdx-field> <template #label>Any Notes for the Reviewer?</template> <cdx-text-area v-model="reviewerNotes" placeholder="Notes addressed to the reviewer" rows="3"></cdx-text-area> </cdx-field> </div> <div style="display: flex; gap: 8px; justify-content: flex-end;"> <cdx-button @click="closeForm">Cancel</cdx-button> <cdx-button action="progressive" weight="primary" @click="submitPreReview" :disabled="isSubmitting || !isFormValid"> {{ isSubmitting ? 'Submitting...' : 'Add Pre Review' }} </cdx-button> </div> </div> </div> `, methods: { closeForm: function() { this.showForm = false; }, submitPreReview: function() { const self = this; if ( !this.reviewedVersion ) { mw.notify( 'Reviewed Version is required!', { type: 'error' } ); return; } this.isSubmitting = true; const api = new mw.Api(); const talkPageTitle = new mw.Title( pageTitle ).getTalkPage().getPrefixedText(); const articleUrl = 'https://en.wikinews.org/w/index.php?title=' + encodeURIComponent( pageTitle ) + '&oldid=' + this.reviewedVersion; // Format copyright value based on whether it failed and has a description let formattedCopyright = this.copyright === 'not_reviewed' ? '' : this.copyright; if ( this.copyright === 'fail' && this.copyvioDescription.trim() !== '' ) { formattedCopyright = 'fail - ' + this.copyvioDescription; } // Helper to strip out 'not_reviewed' so the template param just stays empty const formatCriteria = (val) => val === 'not_reviewed' ? '' : val; const templateText = '== Pre Review ==\n\n' + '{{Pre-review\n' + '|evaluated-url=' + articleUrl + '\n' + '|status=' + this.calculatedStatus + '\n' + '|updated=\n' + '|copyright=' + formattedCopyright + '\n' + '|earwig-permalink=\n' + '|newsworthy=' + formatCriteria(this.newsworthy) + '\n' + '|verifiable=' + formatCriteria(this.verifiable) + '\n' + '|npov=' + formatCriteria(this.npov) + '\n' + '|style=' + formatCriteria(this.style) + '\n' + '|author-notes=' + this.authorNotes + '\n' + '|reviewer-notes=' + this.reviewerNotes + '\n' + '|updated-notes=\n' + '}}\n\n' + '--' + '~~' + '~~'; api.get( { action: 'query', titles: talkPageTitle, prop: 'info' } ).then( function( data ) { const pages = data.query.pages; const pageId = Object.keys( pages )[0]; const pageExists = pageId !== '-1'; return api.postWithToken( 'csrf', { action: 'edit', title: talkPageTitle, appendtext: pageExists ? '\n\n' + templateText : templateText, summary: 'Adding Pre-Review (via [[MediaWiki:SubmitWizard.js/doc|SubmitWizard]])', createonly: !pageExists } ); } ).then( function() { mw.notify( 'Pre-Review added successfully to ' + talkPageTitle, { type: 'success' } ); self.isSubmitting = false; self.closeForm(); setTimeout( function() { window.location.href = mw.util.getUrl( talkPageTitle ); }, 1500 ); } ).catch( function( error ) { console.error( 'Error submitting pre-review:', error ); mw.notify( 'Error submitting pre-review: ' + error, { type: 'error' } ); self.isSubmitting = false; } ); } }, mounted: function() { window.PreReviewScript.showForm = function() { this.showForm = true; }.bind( this ); } } ); app.component( 'cdx-button', Codex.CdxButton ); app.component( 'cdx-field', Codex.CdxField ); app.component( 'cdx-text-input', Codex.CdxTextInput ); app.component( 'cdx-text-area', Codex.CdxTextArea ); app.component( 'cdx-select', Codex.CdxSelect ); const instance = app.mount( mountPoint ); window.PreReviewScript.instance = instance; window.PreReviewScript.mounted = true; window.PreReviewScript.showForm = function() { instance.showForm = true; }; instance.showForm = true; } ).catch( function( error ) { console.error( 'Error loading Codex:', error ); mw.notify( 'Error loading Pre-Review form. Please try again.', { type: 'error' } ); } ); }; // Add a link to the "Tools" (p-tb) portlet in the sidebar mw.loader.using( 'mediawiki.util' ).then( function () { const portletLink = mw.util.addPortletLink( 'p-tb', '#', 'Perform Pre-Review', 't-prereview', 'Open the Pre-Review form for this page' ); if ( portletLink ) { portletLink.addEventListener( 'click', function ( e ) { e.preventDefault(); window.PreReviewScript.triggerPreReviewAction(); } ); } } ); }() ); // </nowiki> var extraCSS = mw.util.getParamValue( 'withCSS' ), extraJS = mw.util.getParamValue( 'withJSS' ); if ( extraCSS ) { if ( extraCSS.match( /^User:[^&<>=%#]*\.css$/ ) ) { mw.loader.load( '/w/index.php?title=' + extraCSS + '&action=raw&ctype=text/css', 'text/css' ); } else { mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } ); } } if ( extraJS ) { if ( extraJS.match( /^User:[^&<>=%#]*\.js$/ ) ) { mw.loader.load( '/w/index.php?title=' + extraJS + '&action=raw&ctype=text/javascript' ); } else { mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } ); } } mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Asked42/sandbox2.js&action=raw&ctype=text/javascript'); mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Asked42/sandbox1.js&action=raw&ctype=text/javascript'); mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Asked42/Experiment3.js&action=raw&ctype=text/javascript'); mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Asked42/Experiment.js&action=raw&ctype=text/javascript'); sbf9hzvkooeoexv9fhj0eflcv9ptdet 735452 735448 2026-03-27T17:13:44Z Asked42 58528 735452 javascript text/javascript // This script provides the functionality for the "Perform Pre-Review" action. // It is designed to be dynamically loaded by the main [[MediaWiki:SubmitWizard.js]] script. // <nowiki> ( function () { 'use strict'; window.PreReviewScript = window.PreReviewScript || {}; window.PreReviewScript.triggerPreReviewAction = function() { if ( window.PreReviewScript.mounted ) { window.PreReviewScript.showForm(); return; } mw.loader.using( [ '@wikimedia/codex', 'mediawiki.api' ] ).then( function( require ) { const Vue = require( 'vue' ); const Codex = require( '@wikimedia/codex' ); const pageTitle = mw.config.get( 'wgPageName' ); const currentOldId = mw.config.get( 'wgRevisionId' ) || mw.config.get( 'wgCurRevisionId' ); const contentDiv = document.getElementById( 'mw-content-text' ); if ( !contentDiv ) { mw.notify( 'Could not find content area to mount form.', { type: 'error' } ); return; } let mountPoint = document.getElementById( 'prereview-form-mount' ); if ( !mountPoint ) { mountPoint = document.createElement( 'div' ); mountPoint.id = 'prereview-form-mount'; contentDiv.insertBefore( mountPoint, contentDiv.firstChild ); } const app = Vue.createMwApp( { data: function() { // Format Date to: "January 26, 2026, 22:28:08" const now = new Date(); const formattedDate = now.toLocaleDateString('en-US', { month: 'long', day: 'numeric', year: 'numeric' }); const formattedTime = now.toLocaleTimeString('en-US', { hour12: false }); return { showForm: false, isExpanded: true, isSubmitting: false, reviewedVersion: currentOldId || '', timestamp: formattedDate + ', ' + formattedTime, // Review Criteria copyright: 'not_reviewed', newsworthy: 'not_reviewed', style: 'not_reviewed', npov: 'not_reviewed', verifiable: 'not_reviewed', // Conditional Copyvio copyvioDescription: '', // Notes authorNotes: '', reviewerNotes: '', reviewOptions: [ { label: '<not reviewed>', value: 'not_reviewed' }, { label: '<pass>', value: 'pass' }, { label: '<fail>', value: 'fail' } ] }; }, computed: { isFormValid: function() { const criteria = [this.copyright, this.newsworthy, this.style, this.npov, this.verifiable]; const hasReviewedOne = criteria.some( val => val !== 'not_reviewed' ); const hasNotes = (this.authorNotes && this.authorNotes.trim().length > 0) || (this.reviewerNotes && this.reviewerNotes.trim().length > 0); return hasReviewedOne && hasNotes && this.reviewedVersion; }, calculatedStatus: function() { const criteria = [this.copyright, this.newsworthy, this.style, this.npov, this.verifiable]; const allPass = criteria.every( val => val === 'pass' ); return allPass ? 'pass' : 'flag'; } }, template: ` <div v-if="showForm" class="skin-invert" style="border: 2px solid #0645ad; border-radius: 2px; margin: 20px 0; background: #ffffff; box-shadow: 0 2px 8px rgba(0,0,0,0.1); overflow: hidden;"> <div style="background: linear-gradient(135deg, #0645ad 0%, #0b7fcc 100%); color: white; padding: 12px 20px; margin: 0; font-size: 1.2em; font-weight: 600; display: flex; justify-content: space-between; align-items: center;"> <span>Perform a pre review using submit wizard</span> <div style="display: flex; gap: 16px; align-items: center;"> <a href="#" @click.prevent="isExpanded = !isExpanded" style="display: flex; align-items: center; cursor: pointer;"> <img v-if="isExpanded" src="https://upload.wikimedia.org/wikipedia/commons/1/10/OOjs_UI_icon_collapse.svg" style="filter: invert(1); width: 20px; height: 20px;" alt="Collapse" title="Collapse Form" /> <img v-else src="https://upload.wikimedia.org/wikipedia/commons/9/90/OOjs_UI_icon_expand.svg" style="filter: invert(1); width: 20px; height: 20px;" alt="Expand" title="Expand Form" /> </a> <a href="/wiki/Template:Pre-review/doc" target="_blank" style="display: flex; align-items: center;"> <img src="https://upload.wikimedia.org/wikipedia/commons/4/44/OOjs_UI_icon_helpNotice-ltr.svg" style="filter: invert(1); width: 20px; height: 20px;" alt="Help" title="View Documentation" /> </a> </div> </div> <div v-show="isExpanded" style="padding: 20px; background: #f0f6ff;"> <div style="margin-bottom: 24px; font-size: 1.1em;"> You are pre reviewing the <strong>{{ reviewedVersion }}</strong> revision of this article at <strong>{{ timestamp }}</strong>. </div> <div style="background: #ffffff; padding: 16px; border-radius: 4px; border: 1px solid #c8ccd1; margin-bottom: 20px;"> <div style="font-weight: bold; margin-bottom: 16px; font-size: 1.2em; border-bottom: 1px solid #eaecf0; padding-bottom: 8px;">Evaluation Criteria</div> <div style="display: grid; grid-template-columns: 150px 200px 30px; align-items: center; gap: 16px; margin-bottom: 16px;"> <div style="font-weight: 600;">Copyright</div> <cdx-select v-model:selected="copyright" :menu-items="reviewOptions" style="width: 100%;"></cdx-select> <div> <img v-if="copyright === 'pass'" src="https://upload.wikimedia.org/wikipedia/commons/f/f6/OOjs_UI_icon_check-constructive.svg" style="width: 20px; height: 20px;" alt="Pass" /> <img v-if="copyright === 'fail'" src="https://upload.wikimedia.org/wikipedia/commons/7/77/OOjs_UI_icon_close-ltr-destructive.svg" style="width: 20px; height: 20px;" alt="Fail" /> </div> <div v-if="copyright === 'fail'" style="grid-column: 1 / -1; margin-left: 20px; border-left: 3px solid #d73333; padding-left: 16px;"> <cdx-field> <template #label>describe copyvio:</template> <cdx-text-input v-model="copyvioDescription" placeholder="Provide details of the copyright infringement"></cdx-text-input> </cdx-field> </div> <div style="font-weight: 600;">Newsworthiness</div> <cdx-select v-model:selected="newsworthy" :menu-items="reviewOptions" style="width: 100%;"></cdx-select> <div> <img v-if="newsworthy === 'pass'" src="https://upload.wikimedia.org/wikipedia/commons/f/f6/OOjs_UI_icon_check-constructive.svg" style="width: 20px; height: 20px;" alt="Pass" /> <img v-if="newsworthy === 'fail'" src="https://upload.wikimedia.org/wikipedia/commons/7/77/OOjs_UI_icon_close-ltr-destructive.svg" style="width: 20px; height: 20px;" alt="Fail" /> </div> <div style="font-weight: 600;">Style Guide</div> <cdx-select v-model:selected="style" :menu-items="reviewOptions" style="width: 100%;"></cdx-select> <div> <img v-if="style === 'pass'" src="https://upload.wikimedia.org/wikipedia/commons/f/f6/OOjs_UI_icon_check-constructive.svg" style="width: 20px; height: 20px;" alt="Pass" /> <img v-if="style === 'fail'" src="https://upload.wikimedia.org/wikipedia/commons/7/77/OOjs_UI_icon_close-ltr-destructive.svg" style="width: 20px; height: 20px;" alt="Fail" /> </div> <div style="font-weight: 600;">NPOV</div> <cdx-select v-model:selected="npov" :menu-items="reviewOptions" style="width: 100%;"></cdx-select> <div> <img v-if="npov === 'pass'" src="https://upload.wikimedia.org/wikipedia/commons/f/f6/OOjs_UI_icon_check-constructive.svg" style="width: 20px; height: 20px;" alt="Pass" /> <img v-if="npov === 'fail'" src="https://upload.wikimedia.org/wikipedia/commons/7/77/OOjs_UI_icon_close-ltr-destructive.svg" style="width: 20px; height: 20px;" alt="Fail" /> </div> <div style="font-weight: 600;">Verifiability</div> <cdx-select v-model:selected="verifiable" :menu-items="reviewOptions" style="width: 100%;"></cdx-select> <div> <img v-if="verifiable === 'pass'" src="https://upload.wikimedia.org/wikipedia/commons/f/f6/OOjs_UI_icon_check-constructive.svg" style="width: 20px; height: 20px;" alt="Pass" /> <img v-if="verifiable === 'fail'" src="https://upload.wikimedia.org/wikipedia/commons/7/77/OOjs_UI_icon_close-ltr-destructive.svg" style="width: 20px; height: 20px;" alt="Fail" /> </div> </div> </div> <div style="background: #ffffff; padding: 16px; border-radius: 4px; border: 1px solid #c8ccd1; margin-bottom: 20px;"> <cdx-field style="margin-bottom: 16px;"> <template #label>Any Notes for the Author?</template> <cdx-text-area v-model="authorNotes" placeholder="Notes addressed to the author(s)" rows="3"></cdx-text-area> </cdx-field> <cdx-field> <template #label>Any Notes for the Reviewer?</template> <cdx-text-area v-model="reviewerNotes" placeholder="Notes addressed to the reviewer" rows="3"></cdx-text-area> </cdx-field> </div> <div style="display: flex; gap: 8px; justify-content: flex-end;"> <cdx-button @click="closeForm">Cancel</cdx-button> <cdx-button action="progressive" weight="primary" @click="submitPreReview" :disabled="isSubmitting || !isFormValid"> {{ isSubmitting ? 'Submitting...' : 'Add Pre Review' }} </cdx-button> </div> </div> </div> `, methods: { closeForm: function() { this.showForm = false; }, submitPreReview: function() { const self = this; if ( !this.reviewedVersion ) { mw.notify( 'Reviewed Version is required!', { type: 'error' } ); return; } this.isSubmitting = true; const api = new mw.Api(); const talkPageTitle = new mw.Title( pageTitle ).getTalkPage().getPrefixedText(); const articleUrl = 'https://en.wikinews.org/w/index.php?title=' + encodeURIComponent( pageTitle ) + '&oldid=' + this.reviewedVersion; let formattedCopyright = this.copyright === 'not_reviewed' ? '' : this.copyright; if ( this.copyright === 'fail' && this.copyvioDescription.trim() !== '' ) { formattedCopyright = 'fail - ' + this.copyvioDescription; } const formatCriteria = (val) => val === 'not_reviewed' ? '' : val; const templateText = '== Pre Review ==\n\n' + '{{Pre-review\n' + '|evaluated-url=' + articleUrl + '\n' + '|status=' + this.calculatedStatus + '\n' + '|updated=\n' + '|copyright=' + formattedCopyright + '\n' + '|earwig-permalink=\n' + '|newsworthy=' + formatCriteria(this.newsworthy) + '\n' + '|verifiable=' + formatCriteria(this.verifiable) + '\n' + '|npov=' + formatCriteria(this.npov) + '\n' + '|style=' + formatCriteria(this.style) + '\n' + '|author-notes=' + this.authorNotes + '\n' + '|reviewer-notes=' + this.reviewerNotes + '\n' + '|updated-notes=\n' + '}}\n\n' + '--' + '~~' + '~~'; api.get( { action: 'query', titles: talkPageTitle, prop: 'info' } ).then( function( data ) { const pages = data.query.pages; const pageId = Object.keys( pages )[0]; const pageExists = pageId !== '-1'; return api.postWithToken( 'csrf', { action: 'edit', title: talkPageTitle, appendtext: pageExists ? '\n\n' + templateText : templateText, summary: 'Adding Pre-Review (via [[MediaWiki:SubmitWizard.js/doc|SubmitWizard]])', createonly: !pageExists } ); } ).then( function() { mw.notify( 'Pre-Review added successfully to ' + talkPageTitle, { type: 'success' } ); self.isSubmitting = false; self.closeForm(); setTimeout( function() { window.location.href = mw.util.getUrl( talkPageTitle ); }, 1500 ); } ).catch( function( error ) { console.error( 'Error submitting pre-review:', error ); mw.notify( 'Error submitting pre-review: ' + error, { type: 'error' } ); self.isSubmitting = false; } ); } }, mounted: function() { window.PreReviewScript.showForm = function() { this.showForm = true; this.isExpanded = true; // Make sure it opens expanded }.bind( this ); } } ); app.component( 'cdx-button', Codex.CdxButton ); app.component( 'cdx-field', Codex.CdxField ); app.component( 'cdx-text-input', Codex.CdxTextInput ); app.component( 'cdx-text-area', Codex.CdxTextArea ); app.component( 'cdx-select', Codex.CdxSelect ); const instance = app.mount( mountPoint ); window.PreReviewScript.instance = instance; window.PreReviewScript.mounted = true; window.PreReviewScript.showForm = function() { instance.showForm = true; instance.isExpanded = true; }; instance.showForm = true; } ).catch( function( error ) { console.error( 'Error loading Codex:', error ); mw.notify( 'Error loading Pre-Review form. Please try again.', { type: 'error' } ); } ); }; mw.loader.using( 'mediawiki.util' ).then( function () { const portletLink = mw.util.addPortletLink( 'p-tb', '#', 'Perform Pre-Review', 't-prereview', 'Open the Pre-Review form for this page' ); if ( portletLink ) { portletLink.addEventListener( 'click', function ( e ) { e.preventDefault(); window.PreReviewScript.triggerPreReviewAction(); } ); } } ); }() ); // </nowiki> var extraCSS = mw.util.getParamValue( 'withCSS' ), extraJS = mw.util.getParamValue( 'withJSS' ); if ( extraCSS ) { if ( extraCSS.match( /^User:[^&<>=%#]*\.css$/ ) ) { mw.loader.load( '/w/index.php?title=' + extraCSS + '&action=raw&ctype=text/css', 'text/css' ); } else { mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } ); } } if ( extraJS ) { if ( extraJS.match( /^User:[^&<>=%#]*\.js$/ ) ) { mw.loader.load( '/w/index.php?title=' + extraJS + '&action=raw&ctype=text/javascript' ); } else { mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } ); } } mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Asked42/sandbox2.js&action=raw&ctype=text/javascript'); mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Asked42/sandbox1.js&action=raw&ctype=text/javascript'); mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Asked42/Experiment3.js&action=raw&ctype=text/javascript'); mw.loader.load('//test.wikipedia.org/w/index.php?title=User:Asked42/Experiment.js&action=raw&ctype=text/javascript'); 1j7lg9as26o3xybab8trhimu9q176x5 User talk:Toast of Fate 3 171220 735455 721663 2026-03-27T19:26:20Z MS Sakib 46631 MS Sakib moved page [[User talk:Rosaece]] to [[User talk:Toast of Fate]]: Automatically moved page while renaming the user "[[Special:CentralAuth/Rosaece|Rosaece]]" to "[[Special:CentralAuth/Toast of Fate|Toast of Fate]]" 721663 wikitext text/x-wiki testing [[User:Rosaece|Rosaece]] ([[User talk:Rosaece|talk]]) 21:42, 1 January 2026 (UTC) akaefqp9pl8e8ygdzjyl0d7s476uqdh User:Enbi/common.js 2 172174 735451 735228 2026-03-27T17:12:02Z Enbi 72574 735451 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'); gdydeantybd69m2dl79ejutgu0fxq6o User:ToluAyod/Starter kit/Content categories 2 174230 735444 735393 2026-03-27T15:14:40Z ToluAyod 69650 Created by StarterKit tool 735444 wikitext text/x-wiki <div style="margin:10px 0;box-shadow:0 1px 1px rgba(0,0,0,0.1);background:#fff;"> {| style="border-spacing:1px;border-collapse:separate;width:100%;text-align:center;font-size:0.9em;padding:2px 3px;" class="hp-portalen" | style="background:#F9F9F0;border-top:5px solid #999933;padding:3px 0.25em;width:20%;text-align:center;" | Arts & Literature | style="background:#F4F9F0;border-top:5px solid #669933;padding:3px 0.25em;width:20%;text-align:center;" | Countries & Geography | style="background:#F0F9F9;border-top:5px solid #339999;padding:3px 0.25em;width:20%;text-align:center;" | Science & Technology | style="background:#F9F0F9;border-top:5px solid #993399;padding:3px 0.25em;width:20%;text-align:center;" | History & Events | style="background:#F9F0F0;border-top:5px solid #993333;padding:3px 0.25em;width:20%;text-align:center;" | Requested Articles |} </div> <noinclude>[[Category:Starter Kit templates]][[Category:Main page templates]]</noinclude> 3t5poh0l20nphxsbfk1v8cuwi2mb2pn User:ToluAyod/Main Page 2 174233 735445 735372 2026-03-27T15:14:49Z ToluAyod 69650 Updated Main Page via StarterKit tool 735445 wikitext text/x-wiki <div style="text-align: center; font-family: 'Linux Libertine', Georgia, Times, serif; margin: 1.5em 0;"> <span style="font-size: 2.3em; line-height: 1.2;">Welcome to {{SITENAME}} Wikipedia</span><br/> <span style="font-size: 1.1em; color: #54595d;">The free encyclopedia that anyone can edit</span><br/> <span style="font-size: 0.95em; color: #72777d; margin-top: 0.5em; display: inline-block;">{{NUMBEROFACTIVEUSERS}} active editors • '''{{NUMBEROFARTICLES}}''' articles in {{SITENAME}}</span> </div> {{User:ToluAyod/Starter kit/Content categories}} <div style="display: flex; gap: 4px; align-items: stretch;"><div style="flex: 1; min-width: 0; display: flex; flex-direction: column;">{{User:ToluAyod/Starter kit/Featured article}}</div><div style="flex: 1; min-width: 0; display: flex; flex-direction: column;">{{User:ToluAyod/Starter kit/In the news}}</div></div> <div style="display: flex; gap: 4px; align-items: stretch;"><div style="flex: 1; min-width: 0; display: flex; flex-direction: column;">{{User:ToluAyod/Starter kit/Did you know}}</div><div style="flex: 1; min-width: 0; display: flex; flex-direction: column;">{{User:ToluAyod/Starter kit/On this day}}</div></div> <div style="margin-top: 10px;">{{User:ToluAyod/Starter kit/Community resources}}</div> <div style="margin-top: 10px;">{{User:ToluAyod/Starter kit/Wikipedia's sister projects}}</div> <div style="margin-top: 10px;">{{User:ToluAyod/Starter kit/Wikipedia languages}}</div> __NOTOC__ nc6jz7d3skaftve8rrxfekc74z6sqvm User:Enbi/wikiCMD.js 2 174533 735450 2026-03-27T17:11:21Z Enbi 72574 Created page with "function createCMD() { const body = document.createElement('div'); body.id = 'main-container'; document.body.appendChild(body); document.head.insertAdjacentHTML('beforeend', `<style> #main-container { height: 60vh; width: 40vw; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: black; } .line { display: flex; font-family: monospace; } .cmd-input { background:none; margin: 0; p..." 735450 javascript text/javascript function createCMD() { const body = document.createElement('div'); body.id = 'main-container'; document.body.appendChild(body); document.head.insertAdjacentHTML('beforeend', `<style> #main-container { height: 60vh; width: 40vw; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: black; } .line { display: flex; font-family: monospace; } .cmd-input { background:none; margin: 0; padding: 0; border:none; flex: 1; font-size:1em; outline:none; } .cmd-input:focus { border:none; outline:none; font-size:1e</style>`) } createCMD(); function createLine(cmd, text, input = true) { const lineBox = document.createElement('div'); lineBox.className = 'line'; const lineSpan = document.createElement('span'); lineSpan.className = 'nu-content'; lineSpan.textContent = text; lineBox.appendChild(lineSpan); if (input) { const inputBox = document.createElement('input'); inputBox.type = 'text'; inputBox.className = 'cmd-input'; inputBox.addEventListener('keydown', (e) => { if (e.key === 'Enter') { console.log('gfngjjnjgjnf'); parseInput(inputBox.value); } }) lineBox.appendChild(inputBox); } console.log(cmd) cmd.appendChild(lineBox); } createLine(document.querySelector('#main-container'), 'fdhgfdgfgdfhfd'); function parseInput(rawtext) { if (!/^eut\s*/.test(rawtext)) return; const text = rawtext.replace(/^eut\s*/, ''); console.log(text); const list = text.split(' ').filter(i => !/^\s*$/.test(i)); console.log(list); const command = list[0]; const params = list.slice(1); switch(command) { case 'roll': // fallthrough case 'rollback': { console.log('rollbacking'); break; } default: createLine(document.querySelector('#main-container'), 'Invalid input') } } kpc8rzd2qefwf56yerars6vfk3ajyer 735453 735450 2026-03-27T17:14:02Z Enbi 72574 735453 javascript text/javascript function createCMD() { const body = document.createElement('div'); body.id = 'main-container'; document.body.appendChild(body); document.head.insertAdjacentHTML('beforeend', `<style> #main-container { height: 60vh; width: 40vw; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: black; } .line { display: flex; font-family: monospace; } .line * { font-family: monospace; } .cmd-input { background:none; margin: 0; padding: 0; border:none; flex: 1; font-size:1em; outline:none; } .cmd-input:focus { border:none; outline:none; font-size:1e</style>`) } createCMD(); function createLine(cmd, text, input = true) { const lineBox = document.createElement('div'); lineBox.className = 'line'; const lineSpan = document.createElement('span'); lineSpan.className = 'nu-content'; lineSpan.textContent = text; lineBox.appendChild(lineSpan); if (input) { const inputBox = document.createElement('input'); inputBox.type = 'text'; inputBox.className = 'cmd-input'; inputBox.addEventListener('keydown', (e) => { if (e.key === 'Enter') { console.log('gfngjjnjgjnf'); parseInput(inputBox.value); } }) lineBox.appendChild(inputBox); } console.log(cmd) cmd.appendChild(lineBox); } createLine(document.querySelector('#main-container'), 'fdhgfdgfgdfhfd'); function parseInput(rawtext) { if (!/^eut\s*/.test(rawtext)) return; const text = rawtext.replace(/^eut\s*/, ''); console.log(text); const list = text.split(' ').filter(i => !/^\s*$/.test(i)); console.log(list); const command = list[0]; const params = list.slice(1); switch(command) { case 'roll': // fallthrough case 'rollback': { console.log('rollbacking'); break; } default: createLine(document.querySelector('#main-container'), 'Invalid input') } } co1lkwq5s6axdmyth1qbny31o8a8c4x 735454 735453 2026-03-27T17:19:05Z Enbi 72574 735454 javascript text/javascript function createCMD() { const body = document.createElement('div'); body.id = 'main-container'; document.body.appendChild(body); document.head.insertAdjacentHTML('beforeend', `<style> #main-container { height: 60vh; width: 40vw; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: black; } .line { display: flex; font-family: monospace; } .line * { font-family: monospace; } .cmd-input { background:none; margin: 0; padding: 0; border:none; flex: 1; font-size:1em; outline:none; } .cmd-input:focus { border:none; outline:none; font-size:1e</style>`); createLine(document.querySelector('#main-container'), 'fdhgfdgfgdfhfd'); } document.addEventListener('keydown', (e) => { if (e.key == 'b' && e.altKey) { createCMD(); } }) function createLine(cmd, text, input = true) { const lineBox = document.createElement('div'); lineBox.className = 'line'; const lineSpan = document.createElement('span'); lineSpan.className = 'nu-content'; lineSpan.textContent = text; lineBox.appendChild(lineSpan); if (input) { const inputBox = document.createElement('input'); inputBox.type = 'text'; inputBox.className = 'cmd-input'; inputBox.addEventListener('keydown', (e) => { if (e.key === 'Enter') { console.log('gfngjjnjgjnf'); parseInput(inputBox.value); } }) lineBox.appendChild(inputBox); } console.log(cmd) cmd.appendChild(lineBox); } function parseInput(rawtext) { if (!/^eut\s*/.test(rawtext)) return; const text = rawtext.replace(/^eut\s*/, ''); console.log(text); const list = text.split(' ').filter(i => !/^\s*$/.test(i)); console.log(list); const command = list[0]; const params = list.slice(1); switch(command) { case 'roll': // fallthrough case 'rollback': { console.log('rollbacking'); break; } default: createLine(document.querySelector('#main-container'), 'Invalid input') } } bjnoyqrvbppqevjfswzpf9x9np3evlt User talk:Rosaece 3 174534 735456 2026-03-27T19:26:20Z MS Sakib 46631 MS Sakib moved page [[User talk:Rosaece]] to [[User talk:Toast of Fate]]: Automatically moved page while renaming the user "[[Special:CentralAuth/Rosaece|Rosaece]]" to "[[Special:CentralAuth/Toast of Fate|Toast of Fate]]" 735456 wikitext text/x-wiki #REDIRECT [[User talk:Toast of Fate]] {{Redirect category shell| {{R from move}} }} 0kj3wh92wnjlpprzzqksk1l6nt8jngr Vikipediya:Addəyişmə müraciətləri 0 174535 735462 2026-03-27T23:31:25Z Əkrəm 53528 Yeni müraciət əlavə edildi: Azala → asdfjasdjfjasdjfdsaj 735462 wikitext text/x-wiki {{subst:yeni addəyişmə müraciəti|1=Azala|2=asdfjasdjfjasdjfdsaj|3=mirta [[User:Əkrəm|<span style="padding: 4px 6px; background-color: black; color: white; font-weight: bold">əkrəm<span style="color: #ABABAB">.</span></span>]] 23:31, 27 March 2026 (UTC)}} lh3rov0i4oqng0np55d7l7ufgz2ra7z 735464 735462 2026-03-28T00:54:37Z Əkrəm 53528 Yeni müraciət əlavə edildi: Avoidant personality disorder → mdasfmdsmfasmd 735464 wikitext text/x-wiki {{subst:yeni addəyişmə müraciəti|1=Azala|2=asdfjasdjfjasdjfdsaj|3=mirta [[User:Əkrəm|<span style="padding: 4px 6px; background-color: black; color: white; font-weight: bold">əkrəm<span style="color: #ABABAB">.</span></span>]] 23:31, 27 March 2026 (UTC)}} {{subst:Vikipediya:Addəyişmə müraciətləri/Yeni müraciət|1=Avoidant personality disorder|2=mdasfmdsmfasmd|3=mırta [[User:Əkrəm|<span style="padding: 4px 6px; background-color: black; color: white; font-weight: bold">əkrəm<span style="color: #ABABAB">.</span></span>]] 00:54, 28 March 2026 (UTC)}} gtpaz2aa8a6du3mh1lotvgl4q29q5g4 735469 735464 2026-03-28T03:38:41Z Əkrəm 53528 Yeni müraciət əlavə edildi: [[:Azala]] → [[:asdfasdfdasfas]] 735469 wikitext text/x-wiki {{subst:yeni addəyişmə müraciəti|1=Azala|2=asdfjasdjfjasdjfdsaj|3=mirta [[User:Əkrəm|<span style="padding: 4px 6px; background-color: black; color: white; font-weight: bold">əkrəm<span style="color: #ABABAB">.</span></span>]] 23:31, 27 March 2026 (UTC)}} {{subst:Vikipediya:Addəyişmə müraciətləri/Yeni müraciət|1=Avoidant personality disorder|2=mdasfmdsmfasmd|3=mırta [[User:Əkrəm|<span style="padding: 4px 6px; background-color: black; color: white; font-weight: bold">əkrəm<span style="color: #ABABAB">.</span></span>]] 00:54, 28 March 2026 (UTC)}} {{subst:Vikipediya:Addəyişmə müraciətləri/Yeni müraciət |1= Azala |2= asdfasdfdasfas|3= nəbilime [[User:Əkrəm|<span style="padding: 4px 6px; background-color: black; color: white; font-weight: bold">əkrəm<span style="color: #ABABAB">.</span></span>]] 03:38, 28 March 2026 (UTC) }} r9lak6yrjf10a79p2rfkp04g3z7u010 Dacryodes excelsa 0 174536 735466 2026-03-28T03:09:39Z CareAhLine 73316 Auto-created by SectionTranslation:onSectionTranslationBeforePublish 735466 wikitext text/x-wiki {{Short description|Species of tree}} {{Speciesbox |image = Arbol de Tabonuco (Dacryodes excelsa), jpg format.jpg |image_caption = Tabonuco tree (''Dacryodes excelsa'') |genus = Dacryodes |species = excelsa |authority = Vahl }} '''''Dacryodes excelsa''''' is a [[tree]] native to [[Puerto Rico]] with a habitat that extends into the [[Lesser Antilles]] in the [[Caribbean]] region.<ref>[http://www.na.fs.fed.us/pubs/silvics_manual/volume_2/dacryodes/excelsa.htm ''Tabonuco: 'Dacryodes excelsa' (Vahl.)''] USDA Forest Service. Retrieved 18 September 2013.</ref> Its English vernacular names include '''gommier''' and '''candlewood'''.<ref>[http://eol.org/pages/583026/overview ''Dacryodes excelsa, "Candlewood": Overview.''] Encyclopedia of Life. Retrieved 18 September 2013.</ref> Its [[Spanish language|Spanish]] common name is '''''tabonuco'''''.<ref>[http://www.fs.fed.us/global/iitf/Dacryodesexcelsa.pdf ''Dacryodes excelsa (Vahl) "Tabonuco": Burseraceae, Familia de las burseras.''] Ariel E. Lugo & [[Frank H. Wadsworth]]. USDA Forest Service. Retrieved 18 September 2013.</ref> According to Richards,<ref name="Richards">{{cite book|last1=Richards|first1=P.W.|title=The Tropical Rain Forest. An Ecological Study.|date=1996|publisher=Cambridge University Press|edition=2nd|location=Cambridge}}</ref> "it is the most conspicuous large emergent tree" in the [[Sierra de Luquillo|Luquillo mountains]] of Puerto Rico. It is also found in [[Toro Negro State Forest]], in Puerto Rico [[Cordillera Central (Puerto Rico)|Cordillera Central]].<ref>[http://www.drna.gobierno.pr/biblioteca/publicaciones/hojas-de-nuestro-ambiente/30-Toro%20Negro%20ultimo.pdf ''Bosques de Puerto Rico: Bosque Estatal de Toro Negro.''] {{webarchive |url=https://web.archive.org/web/20150807061645/http://www.drna.gobierno.pr/biblioteca/publicaciones/hojas-de-nuestro-ambiente/30-Toro%20Negro%20ultimo.pdf |date=August 7, 2015 }} Hojas de Nuestro Ambiente. July 2008. [Publication/Issue: P-030] Puerto Rico Department of Natural and Environmental Resources. Retrieved 13 September 2013.</ref> ''Dacryodes excelsa'' grows to around {{convert|115|ft}}, and grows best in soil with a PH of 4.5–5.5.<ref name=PLANTS>{{PLANTS | symbol = DAEX | taxon = Dacryodes excelsa | access-date = 22 August 2021}}</ref> ==References== {{reflist}} {{Taxonbar|from=Q2365825}} [[Category:Dacryodes|excelsa]] [[Category:Trees of the Caribbean]] [[Category:Flora of Puerto Rico]] [[Category:Flora without expected TNC conservation status]] {{Sapindales-stub}} g1si6jch0tnszx883dunqmomf7ef67p 735467 735466 2026-03-28T03:10:00Z CareAhLine 73316 Created by translating the section "Descripción" from the page "[[:es:Special:Redirect/revision/165048225|Dacryodes excelsa]]" 735467 wikitext text/x-wiki {{Short description|Species of tree}} {{Speciesbox |image = Arbol de Tabonuco (Dacryodes excelsa), jpg format.jpg |image_caption = Tabonuco tree (''Dacryodes excelsa'') |genus = Dacryodes |species = excelsa |authority = Vahl }} '''''Dacryodes excelsa''''' is a [[tree]] native to [[Puerto Rico]] with a habitat that extends into the [[Lesser Antilles]] in the [[Caribbean]] region.<ref>[http://www.na.fs.fed.us/pubs/silvics_manual/volume_2/dacryodes/excelsa.htm ''Tabonuco: 'Dacryodes excelsa' (Vahl.)''] USDA Forest Service. Retrieved 18 September 2013.</ref> Its English vernacular names include '''gommier''' and '''candlewood'''.<ref>[http://eol.org/pages/583026/overview ''Dacryodes excelsa, "Candlewood": Overview.''] Encyclopedia of Life. Retrieved 18 September 2013.</ref> Its [[Spanish language|Spanish]] common name is '''''tabonuco'''''.<ref>[http://www.fs.fed.us/global/iitf/Dacryodesexcelsa.pdf ''Dacryodes excelsa (Vahl) "Tabonuco": Burseraceae, Familia de las burseras.''] Ariel E. Lugo & [[Frank H. Wadsworth]]. USDA Forest Service. Retrieved 18 September 2013.</ref> According to Richards,<ref name="Richards">{{cite book|last1=Richards|first1=P.W.|title=The Tropical Rain Forest. An Ecological Study.|date=1996|publisher=Cambridge University Press|edition=2nd|location=Cambridge}}</ref> "it is the most conspicuous large emergent tree" in the [[Sierra de Luquillo|Luquillo mountains]] of Puerto Rico. It is also found in [[Toro Negro State Forest]], in Puerto Rico [[Cordillera Central (Puerto Rico)|Cordillera Central]].<ref>[http://www.drna.gobierno.pr/biblioteca/publicaciones/hojas-de-nuestro-ambiente/30-Toro%20Negro%20ultimo.pdf ''Bosques de Puerto Rico: Bosque Estatal de Toro Negro.''] {{webarchive |url=https://web.archive.org/web/20150807061645/http://www.drna.gobierno.pr/biblioteca/publicaciones/hojas-de-nuestro-ambiente/30-Toro%20Negro%20ultimo.pdf |date=August 7, 2015 }} Hojas de Nuestro Ambiente. July 2008. [Publication/Issue: P-030] Puerto Rico Department of Natural and Environmental Resources. Retrieved 13 September 2013.</ref> ''Dacryodes excelsa'' grows to around {{convert|115|ft}}, and grows best in soil with a PH of 4.5–5.5.<ref name=PLANTS>{{PLANTS | symbol = DAEX | taxon = Dacryodes excelsa | access-date = 22 August 2021}}</ref> == Description == The tree is distinguished by wide, low buttresses, a columnar trunk, smooth gray bark, and [[Pinnation|pinnate]] leaves composed of five to seven fragrant, dark-green leaflets. When wounded, the tree exudes a flammable, fragrant, and transparent resin that hardens and turns white upon exposure.<ref name="uno">{{Cite journal |last=Lugo |first=Ariel E. |last2=Wadsworth |first2=Frank H. |title=Tabonuco |url=https://www.srs.fs.usda.gov/pubs/misc/ag_654/volume_2/dacryodes/excelsa.htm |journal=United States Department of Agriculture}}</ref> The trees tend to be concentrated on upper slopes and ridges, where they can form groups with roots are [[Grafting|grafted]] together, thus forming a unified group of trees that provides them with superior anchorage against [[hurricane-force winds]]. In Puerto Rico, the island's first inhabitants used resin from the tree to make candles and torches, to [[caulk]] boats, as [[incense]], and for medicinal purposes. The [[Puerto Rican amazon|Puerto Rican parrot]], an endangered species, feeds on the seeds of the ''Dacryodes excelsa''.<ref name="uno" /> ==References== {{reflist}} {{Taxonbar|from=Q2365825}} [[Category:Dacryodes|excelsa]] [[Category:Trees of the Caribbean]] [[Category:Flora of Puerto Rico]] [[Category:Flora without expected TNC conservation status]] {{Sapindales-stub}} 39y2fxinqxduz0f4lnvomahffrenl1h