<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.cs.hse.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%3AMednik%2Fcommon.js</id>
	<title>Участник:Mednik/common.js - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.cs.hse.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%3AMednik%2Fcommon.js"/>
	<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Mednik/common.js&amp;action=history"/>
	<updated>2026-09-22T02:59:42Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Mednik/common.js&amp;diff=71168&amp;oldid=prev</id>
		<title>Mednik: Защищена страница «Участник:Mednik/common.js» ([Редактирование=Разрешено только администраторам] (бессрочно) [Переименование=Разрешено только �</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Mednik/common.js&amp;diff=71168&amp;oldid=prev"/>
		<updated>2022-08-26T10:08:19Z</updated>

		<summary type="html">&lt;p&gt;Защищена страница «&lt;a href=&quot;/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Mednik/common.js&quot; title=&quot;Участник:Mednik/common.js&quot;&gt;Участник:Mednik/common.js&lt;/a&gt;» ([Редактирование=Разрешено только администраторам] (бессрочно) [Переименование=Разрешено только �&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 10:08, 26 августа 2022&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Mednik</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Mednik/common.js&amp;diff=71167&amp;oldid=prev</id>
		<title>Mednik: Полностью удалено содержимое страницы</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Mednik/common.js&amp;diff=71167&amp;oldid=prev"/>
		<updated>2022-08-26T10:08:01Z</updated>

		<summary type="html">&lt;p&gt;Полностью удалено содержимое страницы&lt;/p&gt;
&lt;a href=&quot;https://wiki.cs.hse.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Mednik/common.js&amp;amp;diff=71167&amp;amp;oldid=71166&quot;&gt;Внесённые изменения&lt;/a&gt;</summary>
		<author><name>Mednik</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Mednik/common.js&amp;diff=71166&amp;oldid=prev</id>
		<title>Mednik: старая версия</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Mednik/common.js&amp;diff=71166&amp;oldid=prev"/>
		<updated>2022-08-26T10:07:11Z</updated>

		<summary type="html">&lt;p&gt;старая версия&lt;/p&gt;
&lt;a href=&quot;https://wiki.cs.hse.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Mednik/common.js&amp;amp;diff=71166&amp;amp;oldid=71165&quot;&gt;Внесённые изменения&lt;/a&gt;</summary>
		<author><name>Mednik</name></author>
	</entry>
	<entry>
		<id>https://wiki.cs.hse.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Mednik/common.js&amp;diff=71165&amp;oldid=prev</id>
		<title>Mednik: эксперимент: скрипт nuke</title>
		<link rel="alternate" type="text/html" href="https://wiki.cs.hse.ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Mednik/common.js&amp;diff=71165&amp;oldid=prev"/>
		<updated>2022-08-26T10:04:29Z</updated>

		<summary type="html">&lt;p&gt;эксперимент: скрипт nuke&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/*&lt;br /&gt;
 * Nuke&lt;br /&gt;
 * Reverse engineered Nuke extension&lt;br /&gt;
 * https://www.mediawiki.org/wiki/Extension:Nuke&lt;br /&gt;
 * @author Ozank Cx (https://dev.fandom.com/wiki/User:Ozank Cx)&lt;br /&gt;
 * @author Thundercraft5 (https://dev.fandom.com/wiki/User:Thundercraft5)&lt;br /&gt;
 */&lt;br /&gt;
/* jshint&lt;br /&gt;
	esversion: 6, forin: true, &lt;br /&gt;
	immed: true, indent: 4, &lt;br /&gt;
	latedef: true, newcap: true,&lt;br /&gt;
	onevar: true, eqeqeq: true,&lt;br /&gt;
	multistr: true, maxerr: 999999,&lt;br /&gt;
	noarg: true, undef: true,&lt;br /&gt;
	undef: true, unused: true,&lt;br /&gt;
	browser: true, jquery: true,&lt;br /&gt;
	-W082, -W084&lt;br /&gt;
*/&lt;br /&gt;
/* global mw */&lt;br /&gt;
mw.loader.using([&amp;#039;mediawiki.util&amp;#039;, &amp;#039;mediawiki.api&amp;#039;, &amp;#039;mediawiki.user&amp;#039;]).then(function() {&lt;br /&gt;
	var api = new mw.Api();&lt;br /&gt;
	&lt;br /&gt;
	return $.when(&lt;br /&gt;
		mw.user.getRights(),&lt;br /&gt;
		api,&lt;br /&gt;
		api.loadMessagesIfMissing([&lt;br /&gt;
			&amp;#039;invert&amp;#039;,&lt;br /&gt;
			&amp;#039;nuke&amp;#039;, &lt;br /&gt;
			&amp;#039;nuke-linkoncontribs&amp;#039;,&lt;br /&gt;
			&amp;#039;nuke-linkoncontribs-text&amp;#039;,&lt;br /&gt;
			&amp;#039;nuke-tools&amp;#039;,&lt;br /&gt;
			&amp;#039;nuke-submit-delete&amp;#039;,&lt;br /&gt;
			&amp;#039;nuke-submit-user&amp;#039;,&lt;br /&gt;
			&amp;#039;nuke-list&amp;#039;,&lt;br /&gt;
			&amp;#039;nuke-list-multiple&amp;#039;,&lt;br /&gt;
			&amp;#039;nuke-deleted&amp;#039;,&lt;br /&gt;
			&amp;#039;nuke-not-deleted&amp;#039;,&lt;br /&gt;
			&amp;#039;nuke-editby&amp;#039;,&lt;br /&gt;
			&amp;#039;nuke-nopages&amp;#039;,&lt;br /&gt;
			&amp;#039;nuke-userorip&amp;#039;,&lt;br /&gt;
			&amp;#039;nuke-namespace&amp;#039;,&lt;br /&gt;
			&amp;#039;nuke-maxpages&amp;#039;,&lt;br /&gt;
		])&lt;br /&gt;
	);&lt;br /&gt;
}).then(function(rights, api) {&lt;br /&gt;
	if (window.Nuke &amp;amp;&amp;amp; window.Nuke.loaded) return this.warn(&amp;#039;Script was double loaded, exiting...&amp;#039;);&lt;br /&gt;
	else if (![-1, 2, 3, 1200].includes(this.wg.wgNamespaceNumber) &lt;br /&gt;
		&amp;amp;&amp;amp; !(this.wg.wgNamespaceNumber === 500 &amp;amp;&amp;amp; !this.wg.wgPageName.includes(&amp;#039;/&amp;#039;))&lt;br /&gt;
	) return this.log(&amp;#039;Namespace is not supported, exiting...&amp;#039;);&lt;br /&gt;
	else if (!rights.includes(&amp;#039;delete&amp;#039;)) return this.log(&amp;#039;User cannot delete pages, exiting...&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	var Nuke = window.Nuke = Object.assign(this, {&lt;br /&gt;
		loaded: true,&lt;br /&gt;
		limit: Number(mw.util.getParamValue(&amp;#039;nukelimit&amp;#039;) || 500),&lt;br /&gt;
		deleteDelay: window.nukeDelay || 1000,&lt;br /&gt;
		label: mw.msg(&amp;#039;nuke&amp;#039;),&lt;br /&gt;
		contribsLabel: mw.msg(&amp;#039;nuke-linkoncontribs&amp;#039;),&lt;br /&gt;
		token: mw.user.tokens.get(&amp;#039;csrfToken&amp;#039;),&lt;br /&gt;
		&lt;br /&gt;
		init: function() {&lt;br /&gt;
			$(&amp;#039;.page-header__title&amp;#039;).text(this.label);&lt;br /&gt;
			document.title = this.label + &amp;quot; | &amp;quot; + this.wg.wgSiteName + &amp;quot; | Fandom&amp;quot;;&lt;br /&gt;
			mw.util.addCSS(&amp;#039;.thumbnail-nuke {\&lt;br /&gt;
				max-width: 250px;\&lt;br /&gt;
				width: auto;\&lt;br /&gt;
				height: 80px;\&lt;br /&gt;
			}\&lt;br /&gt;
			\&lt;br /&gt;
			li.nuke-query-result:hover {\&lt;br /&gt;
				cursor: pointer !important;\&lt;br /&gt;
				background: rgba(0, 0, 0, 0.5)\&lt;br /&gt;
			}\&lt;br /&gt;
			\&lt;br /&gt;
			li.nuke-query-result {\&lt;br /&gt;
				transition: 0.3s background ease;\&lt;br /&gt;
			}\&lt;br /&gt;
			\&lt;br /&gt;
			button {\&lt;br /&gt;
				cursor: pointer !important;\&lt;br /&gt;
			}&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
			if (mw.util.getParamValue(&amp;#039;nukeuser&amp;#039;)) {&lt;br /&gt;
				this.loadUserUI();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.loadMainUI();&lt;br /&gt;
			}&lt;br /&gt;
			$(document.body).on(&amp;#039;click&amp;#039;, &amp;#039;.nuke-submit&amp;#039;, this.submitHandler);&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		msg: function(name) {&lt;br /&gt;
			return mw.message.apply(mw, [name].concat(Array.from(arguments).slice(1))).parse().replace(/&amp;#039;{3}(.+?)&amp;#039;{3}/g, &amp;#039;&amp;lt;b&amp;gt;$1&amp;lt;/b&amp;gt;&amp;#039;);&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		rcSubmit: function() {&lt;br /&gt;
			if ($(&amp;#039;#nuke-rc&amp;#039;).attr(&amp;#039;disabled&amp;#039;)) return;&lt;br /&gt;
&lt;br /&gt;
			$(&amp;#039;#nuke-rc&amp;#039;).attr(&amp;#039;disabled&amp;#039;, true);&lt;br /&gt;
			$(&amp;#039;.nuke-check-all, .nuke-invert&amp;#039;).remove();&lt;br /&gt;
			&lt;br /&gt;
			if ($(&amp;#039;#nuke-username&amp;#039;).val()) {&lt;br /&gt;
				var locationParams = {&lt;br /&gt;
					blankspecial: &amp;#039;nuke&amp;#039;,&lt;br /&gt;
					nukeuser: $(&amp;#039;#nuke-username&amp;#039;).val()&lt;br /&gt;
				};&lt;br /&gt;
&lt;br /&gt;
				if ($(&amp;#039;#nuke-namespace&amp;#039;).val() !== &amp;quot;All&amp;quot;)&lt;br /&gt;
					locationParams.nukenamespace = $(&amp;#039;#nuke-namespace&amp;#039;).val();&lt;br /&gt;
&lt;br /&gt;
				if ($.isNumeric($(&amp;#039;#nuke-max&amp;#039;).val()) &amp;amp;&amp;amp; $(&amp;#039;#nuke-max&amp;#039;).val() &amp;gt; 0)&lt;br /&gt;
					locationParams.nukelimit = $(&amp;#039;#nuke-max&amp;#039;).val();&lt;br /&gt;
&lt;br /&gt;
				if ($(&amp;#039;#nuke-match&amp;#039;).val())&lt;br /&gt;
					locationParams.nukematch = $(&amp;#039;#nuke-match&amp;#039;).val();&lt;br /&gt;
&lt;br /&gt;
				location.replace(mw.util.getUrl(&amp;#039;Special:Blankpage&amp;#039;, locationParams));&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$(&amp;#039;#nuke-query-results&amp;#039;).empty();&lt;br /&gt;
&lt;br /&gt;
			if ($(&amp;#039;.nuke-submit&amp;#039;).length) {&lt;br /&gt;
				$(&amp;#039;.nuke-submit&amp;#039;).remove();&lt;br /&gt;
				$(&amp;#039;#mw-content-text &amp;gt; p:nth-child(1) &amp;gt; br:nth-child(14)&amp;#039;).remove();&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$(&amp;#039;#nuke-status&amp;#039;).html(&amp;#039;Getting pages... please wait &amp;lt;img src=&amp;quot;https://static.wikia.nocookie.net/dev/images/c/c5/Circle_throbber.gif/revision/latest&amp;quot;/&amp;gt;&amp;#039;);&lt;br /&gt;
			this.queryRecentChanges();&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		submitHandler: function() {&lt;br /&gt;
			if (!$(&amp;#039;.nuke-query-result, .nuke-title-check:checked&amp;#039;).length || $(this).attr(&amp;#039;disabled&amp;#039;)) return;&lt;br /&gt;
&lt;br /&gt;
			$(&amp;#039;.nuke-submit, .nuke-check-all, .nuke-invert, #nuke-protect&amp;#039;).attr(&amp;#039;disabled&amp;#039;, true);&lt;br /&gt;
			$(&amp;#039;#nuke-status&amp;#039;).html(&amp;#039;Deleting pages... please wait &amp;lt;img src=&amp;quot;https://static.wikia.nocookie.net/dev/images/c/c5/Circle_throbber.gif/revision/latest&amp;quot;/&amp;gt;&amp;#039;);&lt;br /&gt;
			$(&amp;#039;.nuke-title-check:checked&amp;#039;).each(function(i) {&lt;br /&gt;
				var title = $(this).parent().find(&amp;#039;a:not(:has(&amp;gt; img))&amp;#039;).first().text();&lt;br /&gt;
				setTimeout(function() {&lt;br /&gt;
					api.post({&lt;br /&gt;
						action: &amp;#039;delete&amp;#039;,&lt;br /&gt;
						title: title,&lt;br /&gt;
						reason: $(&amp;#039;#nuke-delete-reason&amp;#039;).val() || &amp;#039;&amp;#039;,&lt;br /&gt;
						bot: true,&lt;br /&gt;
						token: this.token,&lt;br /&gt;
						watchlist: &amp;#039;nochange&amp;#039;,&lt;br /&gt;
					}).then(function() {&lt;br /&gt;
						this.notify(&amp;#039;success&amp;#039;, this.msg(&amp;#039;nuke-deleted&amp;#039;, title));&lt;br /&gt;
						&lt;br /&gt;
						$(&amp;#039;#nuke-protect&amp;#039;).prop(&amp;#039;checked&amp;#039;) ? api.post({&lt;br /&gt;
							action: &amp;#039;protect&amp;#039;,&lt;br /&gt;
							protections: &amp;#039;create=sysop&amp;#039;,&lt;br /&gt;
							expiry: &amp;#039;infinite&amp;#039;,&lt;br /&gt;
							bot: true,&lt;br /&gt;
							watchlist: &amp;#039;nochange&amp;#039;,&lt;br /&gt;
							token: this.token,&lt;br /&gt;
							title: title,&lt;br /&gt;
							reason: $(&amp;#039;#nuke-delete-reason&amp;#039;).val(),&lt;br /&gt;
						}).then(function() {&lt;br /&gt;
							this.notify(&amp;#039;success&amp;#039;, &amp;#039;Protection of &amp;#039; + title + &amp;#039; successful!&amp;#039;);&lt;br /&gt;
						}.bind(this), function(_, data) {&lt;br /&gt;
							this.notify(&amp;#039;warn&amp;#039;, &amp;#039;Failed to protect &amp;#039; + title + &amp;#039;:&amp;#039;, data.error.info);&lt;br /&gt;
						}.bind(this)) : undefined;&lt;br /&gt;
					}.bind(this), function(_, data) {&lt;br /&gt;
						this.notify(&amp;#039;warn&amp;#039;, this.msg(&amp;#039;nuke-not-deleted&amp;#039;, title).replace(/\.$/, &amp;#039;: &amp;#039; + data.error.info));&lt;br /&gt;
					}.bind(this));&lt;br /&gt;
					&lt;br /&gt;
					if (i === $(&amp;#039;.nuke-title-check:checked&amp;#039;).length - 1) {&lt;br /&gt;
						setTimeout(function() {&lt;br /&gt;
							this.log(&amp;#039;Deletions All Done, redirecting...&amp;#039;);&lt;br /&gt;
							&lt;br /&gt;
							location.replace(&lt;br /&gt;
								!mw.util.getParamValue(&amp;#039;nukeuser&amp;#039;) &lt;br /&gt;
								&lt;br /&gt;
								? mw.util.getUrl(&lt;br /&gt;
									&amp;#039;Special:BlankPage&amp;#039;, &lt;br /&gt;
									$.extend({ blankspecial: &amp;#039;nuke&amp;#039; }, this.parseUrlParams(location.search))&lt;br /&gt;
								)&lt;br /&gt;
								&lt;br /&gt;
								: mw.util.getUrl(&lt;br /&gt;
									mw.util.getParamValue(&amp;#039;returnto&amp;#039;) &lt;br /&gt;
									|| (&amp;quot;Special:Contributions/&amp;quot; + mw.util.getParamValue(&amp;#039;nukeuser&amp;#039;)),&lt;br /&gt;
									mw.util.getParamValue(&amp;#039;returntoparams&amp;#039;) ? this.parseUrlParams(mw.util.getParamValue(&amp;#039;returntoparams&amp;#039;)) : &amp;#039;&amp;#039;&lt;br /&gt;
								)&lt;br /&gt;
							);&lt;br /&gt;
						}.bind(this), 1000);&lt;br /&gt;
					}&lt;br /&gt;
				}.bind(Nuke), i * this.deleteDelay);&lt;br /&gt;
			});&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		loadUserUI: function() {&lt;br /&gt;
			var user = mw.util.getParamValue(&amp;#039;nukeuser&amp;#039;).replace(/_/g, &amp;#039; &amp;#039;),&lt;br /&gt;
				deleteReason = mw.html.escape(&lt;br /&gt;
					mw.util.getParamValue(&amp;#039;nukereason&amp;#039;) &lt;br /&gt;
						|| window.nukeDeleteReason &amp;amp;&amp;amp; window.nukeDeleteReason.replaceAll(/\$1/g, user) &lt;br /&gt;
						|| &amp;quot;Mass removal of pages created by [[Special:Contributions/&amp;quot; + user + &amp;quot;|&amp;quot; + user + &amp;quot;]] ([[User talk:&amp;quot; + user + &amp;quot;|talk]])&amp;quot;&lt;br /&gt;
				);&lt;br /&gt;
				&lt;br /&gt;
			this.addCheckboxHandler();&lt;br /&gt;
&lt;br /&gt;
			$(&amp;#039;#mw-content-text p&amp;#039;).html($(&amp;#039;&amp;lt;span&amp;gt;&amp;#039;, { html: [&lt;br /&gt;
				$(&amp;#039;&amp;lt;a&amp;gt;&amp;#039;, {&lt;br /&gt;
					href: mw.util.getUrl(&amp;#039;Special:Blankpage&amp;#039;, { blankspecial: &amp;#039;nuke&amp;#039; }),&lt;br /&gt;
					html: &amp;quot;Switch to Nuke main form&amp;quot;,&lt;br /&gt;
				}),&lt;br /&gt;
				 &amp;#039;&amp;lt;br/&amp;gt;&amp;#039;,&lt;br /&gt;
				this.msg(&amp;#039;nuke-list&amp;#039;, user),&lt;br /&gt;
				&amp;#039;&amp;lt;br&amp;gt;&amp;#039;,&lt;br /&gt;
				&amp;#039;Deletion reason: &amp;#039;,&lt;br /&gt;
				$(&amp;#039;&amp;lt;input&amp;gt;&amp;#039;, {&lt;br /&gt;
					css: {&lt;br /&gt;
						width: &amp;quot;400px&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					type: &amp;quot;text&amp;quot;,&lt;br /&gt;
					id: &amp;quot;nuke-delete-reason&amp;quot;,&lt;br /&gt;
					value: deleteReason,&lt;br /&gt;
				}),&lt;br /&gt;
				$(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;, {&lt;br /&gt;
					html: [&lt;br /&gt;
						$(&amp;#039;&amp;lt;input&amp;gt;&amp;#039;, {&lt;br /&gt;
							type: &amp;quot;checkbox&amp;quot;,&lt;br /&gt;
							name: &amp;quot;nuke-protect&amp;quot;,&lt;br /&gt;
							id: &amp;quot;nuke-protect&amp;quot;,&lt;br /&gt;
							title: &amp;#039;Check this box to protect deleted pages from re-creation&amp;#039;,&lt;br /&gt;
						}),&lt;br /&gt;
						$(&amp;#039;&amp;lt;label&amp;gt;&amp;#039;, {&lt;br /&gt;
							html: &amp;quot;Protect deleted pages&amp;quot;,&lt;br /&gt;
							&amp;#039;for&amp;#039;: &amp;#039;nuke-protect&amp;#039;,&lt;br /&gt;
							id: &amp;quot;nuke-protect-label&amp;quot;,&lt;br /&gt;
							title: &amp;#039;Check this box to protect deleted pages from re-creation&amp;#039;,&lt;br /&gt;
						}),&lt;br /&gt;
					],&lt;br /&gt;
					class: &amp;quot;nuke-label&amp;quot;,&lt;br /&gt;
				}),&lt;br /&gt;
				$(&amp;#039;&amp;lt;hr&amp;gt;&amp;#039;, { css: { &amp;#039;margin&amp;#039;: &amp;#039;0 20px;&amp;#039; }}),&lt;br /&gt;
				$(&amp;quot;&amp;lt;button&amp;gt;&amp;quot;, {&lt;br /&gt;
					class: &amp;quot;nuke-submit&amp;quot;,&lt;br /&gt;
					html: this.msg(&amp;#039;nuke-submit-delete&amp;#039;) + &amp;#039; (0)&amp;#039;,&lt;br /&gt;
				}),&lt;br /&gt;
				$(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;, { id: &amp;quot;nuke-status&amp;quot; }),&lt;br /&gt;
				$(&amp;#039;&amp;lt;ul&amp;gt;&amp;#039;, { id: &amp;quot;nuke-query-results&amp;quot; }),&lt;br /&gt;
				$(&amp;quot;&amp;lt;button&amp;gt;&amp;quot;, { &lt;br /&gt;
					class: &amp;quot;nuke-submit&amp;quot;,&lt;br /&gt;
					html: this.msg(&amp;#039;nuke-submit-delete&amp;#039;) + &amp;#039; (0)&amp;#039;,&lt;br /&gt;
				}),&lt;br /&gt;
			]}));&lt;br /&gt;
			&lt;br /&gt;
			$(&amp;#039;#nuke-status&amp;#039;)&lt;br /&gt;
				.html(&amp;#039;Getting pages... please wait &amp;lt;img src=&amp;quot;https://static.wikia.nocookie.net/dev/images/c/c5/Circle_throbber.gif/revision/latest&amp;quot;/&amp;gt;&amp;#039;);&lt;br /&gt;
			this.queryUserContribs(user);&lt;br /&gt;
			&lt;br /&gt;
			$(&amp;#039;#nuke-status&amp;#039;).empty();&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		 		&lt;br /&gt;
		loadMainUI: function() {&lt;br /&gt;
			this.addCheckboxHandler();&lt;br /&gt;
			&lt;br /&gt;
			$(&amp;#039;#mw-content-text p&amp;#039;).html($(&amp;#039;&amp;lt;span&amp;gt;&amp;#039;, { html: [&lt;br /&gt;
				this.msg(&amp;#039;nuke-tools&amp;#039;),&lt;br /&gt;
				&amp;#039;&amp;lt;br/&amp;gt;&amp;#039;, &lt;br /&gt;
				this.msg(&amp;#039;nuke-userorip&amp;#039;),&lt;br /&gt;
				$(&amp;#039;&amp;lt;input&amp;gt;&amp;#039;, {&lt;br /&gt;
					type: &amp;quot;text&amp;quot;,&lt;br /&gt;
					id: &amp;quot;nuke-username&amp;quot;,&lt;br /&gt;
				}),&lt;br /&gt;
				&amp;#039;&amp;lt;br&amp;gt;&amp;#039;, &lt;br /&gt;
				&amp;#039;Regex pattern (e.g. &amp;lt;code&amp;gt;.*&amp;lt;/code&amp;gt;) for the page name: &amp;#039;,&lt;br /&gt;
				$(&amp;#039;&amp;lt;input&amp;gt;&amp;#039;, {&lt;br /&gt;
					type: &amp;quot;text&amp;quot;,&lt;br /&gt;
					id: &amp;quot;nuke-match&amp;quot;,&lt;br /&gt;
					value: mw.util.getParamValue(&amp;#039;nukepattern&amp;#039;),&lt;br /&gt;
				}),&lt;br /&gt;
				&amp;#039;&amp;lt;br&amp;gt;&amp;#039;, &lt;br /&gt;
				this.msg(&amp;#039;nuke-namespace&amp;#039;),&lt;br /&gt;
				$(&amp;#039;&amp;lt;select&amp;gt;&amp;#039;, {&lt;br /&gt;
					id: &amp;quot;nuke-namespace&amp;quot;,&lt;br /&gt;
					name: &amp;quot;nuke-namespace&amp;quot;,&lt;br /&gt;
					html: [&lt;br /&gt;
						$(&amp;#039;&amp;lt;option&amp;gt;&amp;#039;, {&lt;br /&gt;
							value: &amp;quot;all&amp;quot;,&lt;br /&gt;
							selected: &amp;quot;&amp;quot;,&lt;br /&gt;
							html: &amp;quot;all&amp;quot;,&lt;br /&gt;
						}),&lt;br /&gt;
					].concat(this.generateNamespaceSelect()),&lt;br /&gt;
				}),&lt;br /&gt;
				&amp;#039;&amp;lt;br&amp;gt;&amp;#039;, &lt;br /&gt;
				this.msg(&amp;#039;nuke-maxpages&amp;#039;),&lt;br /&gt;
				$(&amp;#039;&amp;lt;input&amp;gt;&amp;#039;, {&lt;br /&gt;
					type: &amp;quot;text&amp;quot;,&lt;br /&gt;
					id: &amp;quot;nuke-max&amp;quot;,&lt;br /&gt;
					value: mw.util.getParamValue(&amp;#039;nukelimit&amp;#039;) || 500,&lt;br /&gt;
				}),&lt;br /&gt;
				&amp;#039;&amp;lt;br&amp;gt;&amp;#039;,&lt;br /&gt;
				&amp;#039;Deletion Reason: &amp;#039;,&lt;br /&gt;
				$(&amp;#039;&amp;lt;input&amp;gt;&amp;#039;, {&lt;br /&gt;
					type: &amp;quot;text&amp;quot;,&lt;br /&gt;
					id: &amp;quot;nuke-delete-reason&amp;quot;,&lt;br /&gt;
					value: mw.util.getParamValue(&amp;#039;nukereason&amp;#039;),&lt;br /&gt;
				}),&lt;br /&gt;
				&amp;#039;&amp;lt;br&amp;gt;&amp;#039;, &lt;br /&gt;
				$(&amp;#039;&amp;lt;input&amp;gt;&amp;#039;, {&lt;br /&gt;
					type: &amp;quot;checkbox&amp;quot;,&lt;br /&gt;
					name: &amp;quot;nuke-protect&amp;quot;,&lt;br /&gt;
					id: &amp;quot;nuke-protect&amp;quot;,&lt;br /&gt;
					title: &amp;#039;Check this box to protect deleted pages from re-creation&amp;#039;,&lt;br /&gt;
				}),&lt;br /&gt;
				$(&amp;#039;&amp;lt;label&amp;gt;&amp;#039;, {&lt;br /&gt;
					html: &amp;quot;Protect deleted pages&amp;quot;,&lt;br /&gt;
					&amp;#039;for&amp;#039;: &amp;#039;nuke-protect&amp;#039;,&lt;br /&gt;
					id: &amp;quot;nuke-protect-label&amp;quot;,&lt;br /&gt;
					title: &amp;#039;Check this box to protect deleted pages from re-creation&amp;#039;,&lt;br /&gt;
				}),&lt;br /&gt;
				$(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;, {&lt;br /&gt;
					html: $(&amp;quot;&amp;lt;input&amp;gt;&amp;quot;, {&lt;br /&gt;
						class: &amp;quot;wikia-button&amp;quot;,&lt;br /&gt;
						id: &amp;quot;nuke-rc&amp;quot;,&lt;br /&gt;
						name: &amp;quot;nuke-rc&amp;quot;,&lt;br /&gt;
						value: this.msg(&amp;#039;nuke-submit-user&amp;#039;),&lt;br /&gt;
						type: &amp;quot;submit&amp;quot;,&lt;br /&gt;
						click: this.rcSubmit.bind(this),&lt;br /&gt;
					}),&lt;br /&gt;
					css: {&lt;br /&gt;
						&amp;#039;margin-top&amp;#039;: &amp;#039;10px&amp;#039;,&lt;br /&gt;
						&amp;#039;margin-bottom&amp;#039;: &amp;quot;30px&amp;quot;,&lt;br /&gt;
					},&lt;br /&gt;
				}),&lt;br /&gt;
				$(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;, {&lt;br /&gt;
					id: &amp;quot;nuke-status&amp;quot;&lt;br /&gt;
				}),&lt;br /&gt;
				$(&amp;#039;&amp;lt;hr&amp;gt;&amp;#039;),&lt;br /&gt;
				$(&amp;#039;&amp;lt;ul&amp;gt;&amp;#039;, {&lt;br /&gt;
					id: &amp;quot;nuke-query-results&amp;quot;,&lt;br /&gt;
				}),&lt;br /&gt;
			]}));&lt;br /&gt;
			&lt;br /&gt;
			$(&amp;#039;#nuke-namespace&amp;#039;).val(mw.util.getParamValue(&amp;#039;nukenamespace&amp;#039;));&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		queryUserContribs: function(user) {&lt;br /&gt;
			api.get({&lt;br /&gt;
				action: &amp;#039;query&amp;#039;,&lt;br /&gt;
				list: &amp;#039;usercontribs&amp;#039;,&lt;br /&gt;
				ucnamespace: mw.util.getParamValue(&amp;#039;nukenamespace&amp;#039;) || &amp;#039;&amp;#039;,&lt;br /&gt;
				ucuser: user,&lt;br /&gt;
				uclimit: &amp;#039;max&amp;#039;,&lt;br /&gt;
			}).then(function(d) {&lt;br /&gt;
				var usercontribs = d.query.usercontribs,&lt;br /&gt;
					images = [],&lt;br /&gt;
					count = 0;&lt;br /&gt;
&lt;br /&gt;
				usercontribs.forEach(function(contrib) {&lt;br /&gt;
					if (count &amp;gt;= this.limit) return;&lt;br /&gt;
&lt;br /&gt;
					if (&amp;#039;new&amp;#039; in contrib) {&lt;br /&gt;
						if (!mw.util.getParamValue(&amp;#039;nukematch&amp;#039;) || new RegExp(mw.util.getParamValue(&amp;#039;nukematch&amp;#039;)).test(contrib.title)) {&lt;br /&gt;
							count++;&lt;br /&gt;
							$(&amp;#039;#nuke-query-results&amp;#039;).append(&lt;br /&gt;
								$(&amp;#039;&amp;lt;li&amp;gt;&amp;#039;, {&lt;br /&gt;
									class: &amp;quot;nuke-query-result&amp;quot;,&lt;br /&gt;
									html: [&lt;br /&gt;
										$(&amp;#039;&amp;lt;input&amp;gt;&amp;#039;, {&lt;br /&gt;
											type: &amp;quot;checkbox&amp;quot;,&lt;br /&gt;
											class: &amp;quot;nuke-title-check&amp;quot;,&lt;br /&gt;
											checked: &amp;quot;checked&amp;quot;,&lt;br /&gt;
										}),&lt;br /&gt;
										$(&amp;#039;&amp;lt;a&amp;gt;&amp;#039;, {&lt;br /&gt;
											href: mw.util.getUrl(contrib.title),&lt;br /&gt;
											target: &amp;quot;_blank&amp;quot;,&lt;br /&gt;
											title: contrib.title,&lt;br /&gt;
											text: mw.html.escape(contrib.title),&lt;br /&gt;
										}),&lt;br /&gt;
										&amp;#039;&amp;amp;nbsp;(&amp;#039;,&lt;br /&gt;
										$(&amp;#039;&amp;lt;a&amp;gt;&amp;#039;, {&lt;br /&gt;
											target: &amp;quot;_blank&amp;quot;,&lt;br /&gt;
											href: mw.util.getUrl(contrib.title, { action: &amp;quot;info&amp;quot; }),&lt;br /&gt;
											title: contrib.title,&lt;br /&gt;
											text: &amp;quot;info&amp;quot;,&lt;br /&gt;
										}),&lt;br /&gt;
										&amp;#039;)&amp;#039;,&lt;br /&gt;
									],&lt;br /&gt;
								})&lt;br /&gt;
							);&lt;br /&gt;
							if (contrib.title.indexOf(this.wg.wgFormattedNamespaces[6] + &amp;#039;:&amp;#039;) === 0)&lt;br /&gt;
								images.push(contrib.title);&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}, this);&lt;br /&gt;
				&lt;br /&gt;
				if (!$(&amp;#039;.nuke-query-result&amp;#039;).length) {&lt;br /&gt;
					this.notify(&amp;#039;error&amp;#039;, this.msg(&amp;#039;nuke-nopages&amp;#039;, user));&lt;br /&gt;
				} else {&lt;br /&gt;
					if (images.length &amp;gt; 0) this.displayImages(images);&lt;br /&gt;
					this.addCheckToggleButton();&lt;br /&gt;
					$(&amp;#039;.nuke-submit&amp;#039;).html(this.msg(&amp;#039;nuke-submit-delete&amp;#039;) + &amp;#039; (&amp;#039; + $(&amp;#039;.nuke-title-check:checked&amp;#039;).length + &amp;#039;)&amp;#039;);&lt;br /&gt;
				}&lt;br /&gt;
			}.bind(this).bind(this), function(_, data) {&lt;br /&gt;
				this.notify(&amp;#039;error&amp;#039;, &amp;quot;Failed to get user contributions: &amp;quot; + data.error.info);&lt;br /&gt;
			}.bind(this));	&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		queryRecentChanges: function() {&lt;br /&gt;
			api.get({&lt;br /&gt;
				action: &amp;#039;query&amp;#039;,&lt;br /&gt;
				list: &amp;#039;recentchanges&amp;#039;,&lt;br /&gt;
				rcshow: &amp;#039;!bot&amp;#039;,&lt;br /&gt;
				rctype: &amp;#039;new|log&amp;#039;,&lt;br /&gt;
				rclimit: &amp;#039;max&amp;#039;,&lt;br /&gt;
			}).then(function(d) {&lt;br /&gt;
				var recentchanges = d.query.recentchanges,&lt;br /&gt;
					rcTitles = [],&lt;br /&gt;
					maxLimit = $(&amp;#039;#nuke-max&amp;#039;).val() || 5000,&lt;br /&gt;
					images = [],&lt;br /&gt;
					count = 0;&lt;br /&gt;
	&lt;br /&gt;
				recentchanges.forEach(function(page) {&lt;br /&gt;
					if (count &amp;gt;= maxLimit) return;&lt;br /&gt;
					if (&lt;br /&gt;
						rcTitles.indexOf(page.title, rcTitles) === -1 &amp;amp;&amp;amp; (&lt;br /&gt;
							$(&amp;#039;#nuke-namespace&amp;#039;).val() === &amp;quot;All&amp;quot; ||&lt;br /&gt;
							Number($(&amp;#039;#nuke-namespace&amp;#039;).val()) === page.ns&lt;br /&gt;
						) &amp;amp;&amp;amp; (page.type === &amp;quot;new&amp;quot; || (&lt;br /&gt;
							page.type === &amp;quot;log&amp;quot; &amp;amp;&amp;amp;&lt;br /&gt;
							page.ns === 6&lt;br /&gt;
						))&lt;br /&gt;
					) {&lt;br /&gt;
						if (!$(&amp;#039;#nuke-match&amp;#039;).val() || new RegExp($(&amp;#039;#nuke-match&amp;#039;).val()).test(page.title)) {&lt;br /&gt;
							count++;&lt;br /&gt;
							rcTitles.push(page.title);&lt;br /&gt;
							$(&amp;#039;#nuke-query-results&amp;#039;).append($(&amp;#039;&amp;lt;li&amp;gt;&amp;#039;, {&lt;br /&gt;
								class: &amp;quot;nuke-query-result&amp;quot;,&lt;br /&gt;
								html: [&lt;br /&gt;
									$(&amp;#039;&amp;lt;input&amp;gt;&amp;#039;, {&lt;br /&gt;
										type: &amp;quot;checkbox&amp;quot;,&lt;br /&gt;
										class: &amp;quot;nuke-title-check&amp;quot;,&lt;br /&gt;
										checked: &amp;quot;checked&amp;quot;,&lt;br /&gt;
									}),&lt;br /&gt;
									$(&amp;#039;&amp;lt;a&amp;gt;&amp;#039;, {&lt;br /&gt;
										href: mw.util.getUrl(page.title),&lt;br /&gt;
										target: &amp;quot;_blank&amp;quot;,&lt;br /&gt;
										title: page.title,&lt;br /&gt;
										text: mw.html.escape(page.title),&lt;br /&gt;
									}),&lt;br /&gt;
									&amp;#039;&amp;amp;nbsp;(&amp;#039;,&lt;br /&gt;
									$(&amp;#039;&amp;lt;a&amp;gt;&amp;#039;, {&lt;br /&gt;
										target: &amp;quot;_blank&amp;quot;,&lt;br /&gt;
										href: mw.util.getUrl(page.title, { action: &amp;quot;info&amp;quot; }),&lt;br /&gt;
										title: page.title,&lt;br /&gt;
										text: &amp;quot;info&amp;quot;,&lt;br /&gt;
									}),&lt;br /&gt;
									&amp;#039;)&amp;#039;,&lt;br /&gt;
								],&lt;br /&gt;
							}));&lt;br /&gt;
							if (page.title.indexOf(this.wg.wgFormattedNamespaces[6] + &amp;#039;:&amp;#039;) === 0)&lt;br /&gt;
								images.push(page.title);&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}, this);&lt;br /&gt;
				&lt;br /&gt;
				if (!$(&amp;#039;.nuke-query-result&amp;#039;).length) {&lt;br /&gt;
					this.notify(&amp;#039;error&amp;#039;, &amp;quot;No recent changes found&amp;quot;);&lt;br /&gt;
				} else {&lt;br /&gt;
					var $button = $(&amp;#039;&amp;lt;button&amp;gt;&amp;#039;, {&lt;br /&gt;
						class: &amp;quot;nuke-submit&amp;quot;,&lt;br /&gt;
						html: &amp;#039;Delete selected (&amp;#039; + $(&amp;#039;.nuke-title-check:checked&amp;#039;).length + &amp;#039;)&amp;lt;/a&amp;gt;&amp;#039;,&lt;br /&gt;
					});&lt;br /&gt;
						&lt;br /&gt;
					$(&amp;#039;#nuke-query-results&amp;#039;).before($button).after($button.clone());&lt;br /&gt;
	&lt;br /&gt;
					$(&amp;#039;#nuke-status&amp;#039;).empty();&lt;br /&gt;
					$(&amp;#039;.nuke-sumbit, .nuke-check-all, .nuke-invert&amp;#039;).remove();&lt;br /&gt;
					&lt;br /&gt;
					this.addCheckToggleButton();&lt;br /&gt;
	&lt;br /&gt;
					if (images.length &amp;gt; 0) this.displayImages(images);&lt;br /&gt;
				}&lt;br /&gt;
			}.bind(this), function(_, data) {&lt;br /&gt;
				this.notify(&amp;#039;error&amp;#039;, &amp;quot;Failed to get recent changes: &amp;quot; + data.error.info);&lt;br /&gt;
			}.bind(this));&lt;br /&gt;
	&lt;br /&gt;
			$(&amp;#039;#nuke-status&amp;#039;).empty();&lt;br /&gt;
			$(this).attr(&amp;#039;disabled&amp;#039;, false);	&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		generateNamespaceSelect: function() {&lt;br /&gt;
			return Object.entries(this.wg.wgFormattedNamespaces)&lt;br /&gt;
				.map(function(v) { return [+v[0], v[1]] })&lt;br /&gt;
				.sort(function(a, b) {&lt;br /&gt;
					var id1 = a[0];&lt;br /&gt;
					var id2 = b[0];&lt;br /&gt;
					&lt;br /&gt;
					if (id1 &amp;lt; id2) return -1;&lt;br /&gt;
					else if (id1 &amp;gt; id2) return 1;&lt;br /&gt;
					else return 0;&lt;br /&gt;
				})&lt;br /&gt;
				.slice(2)&lt;br /&gt;
				.map(function(d) {&lt;br /&gt;
					var namespace = d[1];&lt;br /&gt;
					var id = d[0];&lt;br /&gt;
					&lt;br /&gt;
					return $(&amp;#039;&amp;lt;option&amp;gt;&amp;#039;, {&lt;br /&gt;
						value: id,&lt;br /&gt;
						text: namespace === &amp;quot;&amp;quot; ? &amp;quot;(Main)&amp;quot; : namespace,&lt;br /&gt;
					});&lt;br /&gt;
				});&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		notify: function(level) {&lt;br /&gt;
			var params = Array.from(arguments).slice(1);&lt;br /&gt;
			mw.notify($(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;, { html: params.join(&amp;#039; &amp;#039;) }), { type: level });&lt;br /&gt;
			&lt;br /&gt;
			(this[level] || this.log).apply(null, params.map(function(val) {&lt;br /&gt;
				return $($.parseHTML(val)).text();&lt;br /&gt;
			}));&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		addCheckboxHandler: function() {&lt;br /&gt;
			var selected = new Set();&lt;br /&gt;
			var anchor;&lt;br /&gt;
			&lt;br /&gt;
			$(&amp;#039;#mw-content-text&amp;#039;).on(&amp;#039;click&amp;#039;, &amp;#039;li.nuke-query-result&amp;#039;, function(e) {&lt;br /&gt;
				var $input = $(this).find(&amp;#039;input&amp;#039;);&lt;br /&gt;
				&lt;br /&gt;
				if (e.target.children.length === 0 &amp;amp;&amp;amp; e.target !== $input[0]) return;&lt;br /&gt;
				if (e.target !== $input[0]) $input.prop(&amp;#039;checked&amp;#039;, !$input[0].checked);&lt;br /&gt;
				if (!e.shiftKey || e.shiftKey &amp;amp;&amp;amp; !anchor) anchor = $input[0], selected.clear(), selected.add($input[0]);&lt;br /&gt;
				&lt;br /&gt;
				if (anchor &amp;amp;&amp;amp; e.shiftKey &amp;amp;&amp;amp; !e.ctrlKey) {&lt;br /&gt;
					var $coll = $(this).parent().children().map(function() { return $(this).find(&amp;#039;input[type=&amp;quot;checkbox&amp;quot;]&amp;#039;)[0] });&lt;br /&gt;
					var targetIndex = $coll.index($input[0]);&lt;br /&gt;
					var anchorIndex = $coll.index(anchor);&lt;br /&gt;
					&lt;br /&gt;
					if (targetIndex &amp;lt; anchorIndex) $coll = $coll.slice(targetIndex, anchorIndex + 1);&lt;br /&gt;
					else $coll = $coll.slice(anchorIndex, targetIndex + 1);&lt;br /&gt;
					&lt;br /&gt;
					$coll.each(function() { selected.add(this); });&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
				if (e.ctrlKey &amp;amp;&amp;amp; !e.shiftKey) &lt;br /&gt;
					if (selected.has($input[0])) selected.delete($input[0]);&lt;br /&gt;
					else selected.add($input[0]);&lt;br /&gt;
				&lt;br /&gt;
				if (selected.size &amp;gt; 1) selected.forEach(function(node) {&lt;br /&gt;
					$(node).prop(&amp;#039;checked&amp;#039;, anchor.checked);&lt;br /&gt;
				});&lt;br /&gt;
			});&lt;br /&gt;
		},		&lt;br /&gt;
		&lt;br /&gt;
		addCheckToggleButton: function() {&lt;br /&gt;
			$(&amp;#039;.nuke-submit&amp;#039;)&lt;br /&gt;
				.after(&lt;br /&gt;
					$(&amp;#039;&amp;lt;button&amp;gt;&amp;#039;, {&lt;br /&gt;
						class: &amp;quot;nuke-check-all&amp;quot;,&lt;br /&gt;
						&amp;#039;data-checked&amp;#039;: true,&lt;br /&gt;
						text: &amp;quot;Uncheck All&amp;quot;,&lt;br /&gt;
					}),&lt;br /&gt;
					$(&amp;#039;&amp;lt;button&amp;gt;&amp;#039;, {&lt;br /&gt;
						text: this.msg(&amp;#039;invert&amp;#039;),&lt;br /&gt;
						class: &amp;quot;nuke-invert&amp;quot;,&lt;br /&gt;
					})&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
			$(&amp;#039;.nuke-submit&amp;#039;).text(this.msg(&amp;#039;nuke-submit-delete&amp;#039;) + &amp;#039; (&amp;#039; + $(&amp;#039;.nuke-title-check:checked&amp;#039;).length + &amp;#039;)&amp;#039;);&lt;br /&gt;
			&lt;br /&gt;
			// Check/Uncheck all&lt;br /&gt;
			$(&amp;#039;.nuke-check-all&amp;#039;).click(function() {&lt;br /&gt;
				var checked = $(this).attr(&amp;#039;data-checked&amp;#039;) === &amp;quot;true&amp;quot;;&lt;br /&gt;
				&lt;br /&gt;
				$(&amp;#039;.nuke-title-check&amp;#039;).prop(&amp;#039;checked&amp;#039;, !checked);&lt;br /&gt;
				$(&amp;#039;.nuke-check-all&amp;#039;)&lt;br /&gt;
					.attr(&amp;#039;data-checked&amp;#039;, !checked)&lt;br /&gt;
					.text(!checked ? &amp;quot;Uncheck All&amp;quot; : &amp;#039;Check All&amp;#039;);  &lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Invert/Uninvert all&lt;br /&gt;
			$(&amp;#039;.nuke-invert&amp;#039;).click(function() {&lt;br /&gt;
				$(&amp;#039;.nuke-title-check&amp;#039;).each(function() {&lt;br /&gt;
					$(this).prop(&amp;#039;checked&amp;#039;, !$(this).prop(&amp;#039;checked&amp;#039;));	&lt;br /&gt;
				});&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Update count&lt;br /&gt;
			$(document.body).on(&amp;quot;click&amp;quot;, &amp;#039;.nuke-query-result, .nuke-check-all, .nuke-invert&amp;#039;, function() {&lt;br /&gt;
				$(&amp;#039;.nuke-submit&amp;#039;).html(this.msg(&amp;#039;nuke-submit-delete&amp;#039;) + &amp;#039; (&amp;#039; + $(&amp;#039;.nuke-title-check:checked&amp;#039;).length + &amp;#039;)&amp;#039;);&lt;br /&gt;
			}.bind(this));			&lt;br /&gt;
		},&lt;br /&gt;
		displayImages: function(imgs) {&lt;br /&gt;
			api.post({ //POST instead of GET to avoid http 416&lt;br /&gt;
				action: &amp;#039;query&amp;#039;,&lt;br /&gt;
				prop: &amp;#039;imageinfo&amp;#039;,&lt;br /&gt;
				titles: imgs.join(&amp;#039;|&amp;#039;),&lt;br /&gt;
				iiprop: &amp;#039;url&amp;#039;,&lt;br /&gt;
				iilimit: &amp;#039;max&amp;#039;&lt;br /&gt;
			}).then(function(d) {&lt;br /&gt;
				Object.values(d.query.pages).forEach(function(page) {&lt;br /&gt;
					if (page.missing !== &amp;quot;&amp;quot; &amp;amp;&amp;amp; page.imageinfo) {&lt;br /&gt;
						var href = mw.util.getUrl(page.title);&lt;br /&gt;
						&lt;br /&gt;
						$(&amp;#039;a[href=&amp;quot;&amp;#039; + href + &amp;#039;&amp;quot;]&amp;#039;)&lt;br /&gt;
							.parent()&lt;br /&gt;
							.children(&amp;#039;.nuke-title-check&amp;#039;)&lt;br /&gt;
							.after($(&amp;#039;&amp;lt;a&amp;gt;&amp;#039;, {&lt;br /&gt;
								href: href,&lt;br /&gt;
								html: $(&amp;#039;&amp;lt;img&amp;gt;&amp;#039;, {&lt;br /&gt;
									class: &amp;quot;thumbnail-nuke&amp;quot;,&lt;br /&gt;
									src: page.imageinfo[0].url, &lt;br /&gt;
								}),&lt;br /&gt;
							}));&lt;br /&gt;
					}&lt;br /&gt;
				});&lt;br /&gt;
			}, function(_, data) {&lt;br /&gt;
				this.notify(&amp;#039;error&amp;#039;, &amp;#039;Failed to display images: &amp;#039; + data.error.info);&lt;br /&gt;
			}.bind(this));&lt;br /&gt;
		},&lt;br /&gt;
		parseUrlParams: function(s) {&lt;br /&gt;
			var params = s.replace(/^(?:\?|%26)/, &amp;#039;&amp;#039;).split(/(?:&amp;amp;|%26)/);&lt;br /&gt;
			var o = {};	&lt;br /&gt;
		&lt;br /&gt;
			params.forEach(function(k) {&lt;br /&gt;
				var tmp = k.match(/(.+?)=(.+)/i);&lt;br /&gt;
				o[tmp[1]] = tmp[2];&lt;br /&gt;
			});&lt;br /&gt;
		&lt;br /&gt;
			return o;&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
	&lt;br /&gt;
	var inter = setInterval(function() {&lt;br /&gt;
		var username = this.wg.wgRelevantUserName || this.wg.profileUserName;&lt;br /&gt;
		&lt;br /&gt;
		if ($(&amp;#039;.page-tools-module&amp;#039;).length) {&lt;br /&gt;
			clearInterval(inter);&lt;br /&gt;
			&lt;br /&gt;
			var $el = $(&amp;#039;&amp;lt;li&amp;gt;&amp;#039;, {&lt;br /&gt;
				id: &amp;quot;t-nuke&amp;quot;,&lt;br /&gt;
				html: $(&amp;#039;&amp;lt;a&amp;gt;&amp;#039;, {&lt;br /&gt;
					text: this.label,&lt;br /&gt;
					title: window.nukeTitle || this.msg(&amp;#039;nuke-linkoncontribs-text&amp;#039;, username),&lt;br /&gt;
					href: mw.util.getUrl(&amp;#039;Special:BlankPage&amp;#039;, {&lt;br /&gt;
						blankspecial: &amp;#039;nuke&amp;#039;,&lt;br /&gt;
						nukeuser: username,&lt;br /&gt;
					}),&lt;br /&gt;
				}),&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			var $list = $(&amp;#039;.page-tools-module ul&amp;#039;);&lt;br /&gt;
			&lt;br /&gt;
			if ($list.find(&amp;#039;li#t-reconst&amp;#039;).length || window.Reconstitute) {&lt;br /&gt;
				$list.find(&amp;#039;li#t-reconst&amp;#039;).before($el);&lt;br /&gt;
			} else {&lt;br /&gt;
				$list.find(&amp;#039;li:is(#t-userrights, :last-of-type)&amp;#039;).first().after($el);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}.bind(this));&lt;br /&gt;
	&lt;br /&gt;
	switch (this.wg.wgCanonicalSpecialPageName) {&lt;br /&gt;
		case &amp;quot;UserProfileActivity&amp;quot;:&lt;br /&gt;
		case &amp;quot;DeletedContributions&amp;quot;:&lt;br /&gt;
		case &amp;quot;Contributions&amp;quot;: {&lt;br /&gt;
			var usr = this.wg.wgRelevantUserName || this.wg.profileUserName,&lt;br /&gt;
				nukeTitle = window.nukeTitle || this.msg(&amp;#039;nuke-linkoncontribs-text&amp;#039;, usr),&lt;br /&gt;
				url = mw.util.getUrl(&amp;#039;Special:BlankPage&amp;#039;, {&lt;br /&gt;
					blankspecial: &amp;#039;nuke&amp;#039;,&lt;br /&gt;
					nukeuser: usr,&lt;br /&gt;
				});&lt;br /&gt;
&lt;br /&gt;
			if (usr) {&lt;br /&gt;
				var $el = $(&amp;#039;&amp;lt;span&amp;gt;&amp;#039;, {&lt;br /&gt;
					id: &amp;quot;link-nuke&amp;quot;,&lt;br /&gt;
					html: $(&amp;#039;&amp;lt;a&amp;gt;&amp;#039;, {&lt;br /&gt;
						title: nukeTitle,&lt;br /&gt;
						href: url,&lt;br /&gt;
						text: this.contribsLabel,&lt;br /&gt;
					}),&lt;br /&gt;
				});&lt;br /&gt;
				&lt;br /&gt;
				if (!window.QuickLogs) {&lt;br /&gt;
					if (this.wg.wgCanonicalSpecialPageName === &amp;#039;DeletedContributions&amp;#039;) {&lt;br /&gt;
						$(&amp;#039;.page-header__subtitle &amp;gt; a:last-of-type&amp;#039;).after(&amp;#039; | &amp;#039;, $el.find(&amp;#039;a&amp;#039;));&lt;br /&gt;
					} else {&lt;br /&gt;
						if ($(&amp;#039;#link-rconst&amp;#039;).length) {&lt;br /&gt;
							$(&amp;#039;#link-rconst&amp;#039;).before($el);&lt;br /&gt;
						} else {&lt;br /&gt;
							$([&lt;br /&gt;
								&amp;#039;.mw-contributions-user-tools &amp;gt; .mw-changeslist-links &amp;gt; span:last-child&amp;#039;,&lt;br /&gt;
								&amp;#039;.UserProfileActivityModeration__links &amp;gt; span:last-child&amp;#039;,&lt;br /&gt;
							].join(&amp;#039;, &amp;#039;)).after($el);&lt;br /&gt;
						}&lt;br /&gt;
					}	&lt;br /&gt;
				}&lt;br /&gt;
				mw.hook(&amp;#039;QuickLogs.loaded&amp;#039;).add(function(ql) {&lt;br /&gt;
					ql.addLink(&amp;#039;nuke&amp;#039;, {&lt;br /&gt;
						href: url,&lt;br /&gt;
						title: nukeTitle,&lt;br /&gt;
						message: this.contribsLabel,&lt;br /&gt;
					});&lt;br /&gt;
				});&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			break;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		case &amp;quot;AdminDashboard&amp;quot;:&lt;br /&gt;
		case &amp;quot;Specialpages&amp;quot;: {&lt;br /&gt;
			var link = mw.util.getUrl(&amp;#039;Special:Blankpage&amp;#039;, { blankspecial: &amp;#039;nuke&amp;#039; });&lt;br /&gt;
			var canNuke = rights.includes(&amp;#039;nuke&amp;#039;);&lt;br /&gt;
			var nukeItem = $(&amp;#039;&amp;lt;li&amp;gt;&amp;#039;, {&lt;br /&gt;
				class: &amp;quot;mw-specialpagerestricted&amp;quot;,&lt;br /&gt;
				html: $(&amp;#039;&amp;lt;a&amp;gt;&amp;#039;, {&lt;br /&gt;
					title: &amp;quot;Special:Nuke&amp;quot;,&lt;br /&gt;
					href: link,&lt;br /&gt;
					text: this.label + (canNuke ? &amp;#039; (JavaScript)&amp;#039; : &amp;quot;&amp;quot;),&lt;br /&gt;
				}),&lt;br /&gt;
			});&lt;br /&gt;
			$(canNuke&lt;br /&gt;
				? &amp;#039;#mw-content-text a[href*=&amp;quot;Special:Nuke&amp;quot;]&amp;#039;&lt;br /&gt;
				: &amp;#039;#mw-content-text a[title=&amp;quot;Special:Undelete&amp;quot;]&amp;#039;&lt;br /&gt;
			).parent().after(nukeItem);&lt;br /&gt;
			var pageToolsTable = nukeItem.closest(&amp;#039;.mw-specialpages-table&amp;#039;);&lt;br /&gt;
			var pageTools = $(&amp;#039;li&amp;#039;, pageToolsTable).toArray().sort(function (a, b) {&lt;br /&gt;
				return a.textContent.localeCompare(b.textContent);&lt;br /&gt;
			});&lt;br /&gt;
			var uls = $(&amp;#039;td[width=&amp;quot;45%&amp;quot;] ul&amp;#039;, pageToolsTable);&lt;br /&gt;
			if (uls.length &amp;gt; 0) { // Avoid divide by zero error.&lt;br /&gt;
				var perChunk = Math.ceil(pageTools.length / uls.length);&lt;br /&gt;
				uls.each(function(i, ul) {&lt;br /&gt;
					$(ul).append(pageTools.slice(i * perChunk, (i + 1) * perChunk));&lt;br /&gt;
				});&lt;br /&gt;
			}&lt;br /&gt;
			break;&lt;br /&gt;
		}&lt;br /&gt;
		case &amp;quot;Blankpage&amp;quot;: {&lt;br /&gt;
			if (mw.util.getParamValue(&amp;#039;blankspecial&amp;#039;) === &amp;quot;nuke&amp;quot;)&lt;br /&gt;
				this.init();&lt;br /&gt;
			break;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}.bind(function() {&lt;br /&gt;
	Object.keys(this).forEach(function(key) {&lt;br /&gt;
		this[key] = function() {&lt;br /&gt;
			console[key].apply(null, [ &amp;#039;[Nuke v1.5] [&amp;#039; + key.toUpperCase() + &amp;#039;]&amp;#039; ].concat(Array.from(arguments)));&lt;br /&gt;
		};&lt;br /&gt;
	}, this);&lt;br /&gt;
	&lt;br /&gt;
	this.wg = mw.config.get([&lt;br /&gt;
		&amp;#039;wgUserGroups&amp;#039;,&lt;br /&gt;
		&amp;#039;wgCanonicalSpecialPageName&amp;#039;,&lt;br /&gt;
		&amp;#039;wgFormattedNamespaces&amp;#039;,&lt;br /&gt;
		&amp;#039;wgMainpage&amp;#039;,&lt;br /&gt;
		&amp;#039;wgPageName&amp;#039;,&lt;br /&gt;
		&amp;#039;wgSiteName&amp;#039;,&lt;br /&gt;
		&amp;#039;wgNamespaceNumber&amp;#039;,&lt;br /&gt;
		&amp;#039;profileUserName&amp;#039;,&lt;br /&gt;
		&amp;#039;wgRelevantUserName&amp;#039;,&lt;br /&gt;
	]);&lt;br /&gt;
	&lt;br /&gt;
	return this;&lt;br /&gt;
}.call({&lt;br /&gt;
	error: console.error,&lt;br /&gt;
	warn: console.warn,&lt;br /&gt;
	log: console.log,&lt;br /&gt;
	debug: console.debug,&lt;br /&gt;
})));&lt;br /&gt;
&lt;br /&gt;
window.Nuke = window.Nuke || {};&lt;/div&gt;</summary>
		<author><name>Mednik</name></author>
	</entry>
</feed>