<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fa">
	<id>https://imamreza.org/w/index.php?action=history&amp;feed=atom&amp;title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C%3AGadget-AdsCleaner.js</id>
	<title>مدیاویکی:Gadget-AdsCleaner.js - تاریخچهٔ نسخه‌ها</title>
	<link rel="self" type="application/atom+xml" href="https://imamreza.org/w/index.php?action=history&amp;feed=atom&amp;title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C%3AGadget-AdsCleaner.js"/>
	<link rel="alternate" type="text/html" href="https://imamreza.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-AdsCleaner.js&amp;action=history"/>
	<updated>2026-09-10T20:16:33Z</updated>
	<subtitle>تاریخچهٔ نسخه‌ها برای این صفحه در ویکی</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://imamreza.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-AdsCleaner.js&amp;diff=392&amp;oldid=prev</id>
		<title>Admin: ۱ نسخه واردشده</title>
		<link rel="alternate" type="text/html" href="https://imamreza.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-AdsCleaner.js&amp;diff=392&amp;oldid=prev"/>
		<updated>2026-09-03T16:42:17Z</updated>

		<summary type="html">&lt;p&gt;۱ نسخه واردشده&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fa&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;→ نسخهٔ قدیمی‌تر&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;نسخهٔ ‏۳ سپتامبر ۲۰۲۶، ساعت ۲۰:۱۲&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;fa&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(بدون تفاوت)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key wiki_fa:diff:1.41:old-391:rev-392 --&gt;
&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://imamreza.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-AdsCleaner.js&amp;diff=391&amp;oldid=prev</id>
		<title>*&gt;Ebrahim: عدم استفاده از mw.Uri</title>
		<link rel="alternate" type="text/html" href="https://imamreza.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-AdsCleaner.js&amp;diff=391&amp;oldid=prev"/>
		<updated>2025-03-05T06:35:24Z</updated>

		<summary type="html">&lt;p&gt;عدم استفاده از mw.Uri&lt;/p&gt;
&lt;p&gt;&lt;b&gt;صفحهٔ تازه&lt;/b&gt;&lt;/p&gt;&lt;div&gt;(function ($, mw) {&lt;br /&gt;
	&amp;#039;use strict&amp;#039;;&lt;br /&gt;
	var links = [];&lt;br /&gt;
	function loadPage(title, callback) {&lt;br /&gt;
		new mw.Api().get({&lt;br /&gt;
			action: &amp;#039;query&amp;#039;,&lt;br /&gt;
			prop: &amp;#039;revisions&amp;#039;,&lt;br /&gt;
			titles: title,&lt;br /&gt;
			rvprop: &amp;#039;content&amp;#039;,&lt;br /&gt;
			format: &amp;#039;json&amp;#039;&lt;br /&gt;
		}).done(function (data) {&lt;br /&gt;
			callback($.map(data.query.pages, function (value) { return value; })[0].revisions[0][&amp;#039;*&amp;#039;]);&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	function savePage(title, text, summary, callback) {&lt;br /&gt;
		new mw.Api().post({&lt;br /&gt;
			action: &amp;#039;edit&amp;#039;,&lt;br /&gt;
			title: title,&lt;br /&gt;
			text: text,&lt;br /&gt;
			summary: summary,&lt;br /&gt;
			nocreate: &amp;#039;&amp;#039;,&lt;br /&gt;
			minor: &amp;#039;&amp;#039;,&lt;br /&gt;
			token: mw.user.tokens.get(&amp;#039;csrfToken&amp;#039;)&lt;br /&gt;
		}).done(function (data) {&lt;br /&gt;
			if (data.error &amp;amp;&amp;amp; data.error.info) {&lt;br /&gt;
				alert(data.error.info);&lt;br /&gt;
			} else {&lt;br /&gt;
				callback();&lt;br /&gt;
			}&lt;br /&gt;
		}).fail(function (data) {&lt;br /&gt;
			alert(data);&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	function clean(text, urls){&lt;br /&gt;
		var implode = [];&lt;br /&gt;
		for (var i in urls) {&lt;br /&gt;
			implode.push(urls[i]);&lt;br /&gt;
			implode.push(&amp;#039;www.&amp;#039; + urls[i]);&lt;br /&gt;
		}&lt;br /&gt;
		implode = implode.join(&amp;quot;|&amp;quot;);&lt;br /&gt;
		implode = implode.replace(new RegExp(&amp;#039;\\.&amp;#039;, &amp;#039;g&amp;#039;), &amp;quot;\\.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		var patterns = {&lt;br /&gt;
			&amp;#039;\\&amp;lt;ref.+?\\&amp;gt;.+?({URL}).+?\\&amp;lt;\\/ref\\&amp;gt;&amp;#039;: &amp;quot;&amp;quot;,&lt;br /&gt;
			&amp;#039;\\&amp;lt;ref.+?({URL}).+?\\&amp;lt;\\/ref\\&amp;gt;&amp;#039;: &amp;quot;&amp;quot;,&lt;br /&gt;
			&amp;#039;(\\*|\\#).*({URL}).*\\s*\\]*&amp;#039;: &amp;quot;&amp;quot;,&lt;br /&gt;
			&amp;#039;\\[.+?({URL})\\S.+?\\s(.+?)\\]&amp;#039;: &amp;quot;$2&amp;quot;,&lt;br /&gt;
			&amp;#039;\\[.+?({URL})\\s(.+?)\\]&amp;#039;: &amp;quot;$2&amp;quot;,&lt;br /&gt;
			&amp;#039;(http)s?:\\/\\/({URL})\\S+\\s&amp;#039;: &amp;quot;&amp;quot;,&lt;br /&gt;
			&amp;#039;(http)s?:\\/\\/({URL})&amp;#039;: &amp;quot;&amp;quot;&lt;br /&gt;
		};&lt;br /&gt;
		for (var reg in patterns) {&lt;br /&gt;
			var replacement = patterns[reg];&lt;br /&gt;
			reg = reg.replace(&amp;#039;{URL}&amp;#039;, implode);&lt;br /&gt;
			text = text.replace(new RegExp(reg, &amp;#039;gi&amp;#039;), replacement);&lt;br /&gt;
		}&lt;br /&gt;
		return text;&lt;br /&gt;
	}&lt;br /&gt;
	function urls(text){&lt;br /&gt;
		var urls = text.match(/http(?:s)?:\/\/(?:[\w-]+\.)*([\w-]{1,63})(?:\.(?:\w{3}|\w{2}))/gi);&lt;br /&gt;
		var unq = [];&lt;br /&gt;
		for (var i in urls) {&lt;br /&gt;
			urls[i] = urls[i].replace(/\/www\./, &amp;#039;/&amp;#039;);&lt;br /&gt;
			urls[i] = urls[i].replace(/^https?:\/\//i, &amp;#039;&amp;#039;);&lt;br /&gt;
			if (unq.indexOf(urls[i]) === -1) {&lt;br /&gt;
				unq.push(urls[i]);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		return unq;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function loadSavePageRefresh(replaceCallback, summary) {&lt;br /&gt;
		loadPage(mw.config.get(&amp;#039;wgPageName&amp;#039;), function (text) {&lt;br /&gt;
			savePage(mw.config.get(&amp;#039;wgPageName&amp;#039;), replaceCallback(text), summary, function () {&lt;br /&gt;
				mw.notify(&amp;#039;حذف پیوندهای تبلیغی با موفقیت انجام شد.&amp;#039;);&lt;br /&gt;
				// Loading diff page&lt;br /&gt;
				var url = new URL(mw.config.get(&amp;#039;wgScriptPath&amp;#039;) + &amp;#039;/index.php&amp;#039;, window.location);&lt;br /&gt;
				url.searchParams.set(&amp;#039;title&amp;#039;, mw.config.get(&amp;#039;wgPageName&amp;#039;));&lt;br /&gt;
				url.searchParams.set(&amp;#039;diff&amp;#039;, &amp;#039;cur&amp;#039;);&lt;br /&gt;
				url.searchParams.set(&amp;#039;oldid&amp;#039;, &amp;#039;prev&amp;#039;);&lt;br /&gt;
				window.location = url.toString();&lt;br /&gt;
			});&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	if (mw.config.get(&amp;#039;wgAction&amp;#039;) === &amp;#039;view&amp;#039; &amp;amp;&amp;amp; mw.config.get(&amp;#039;wgIsArticle&amp;#039;)) {&lt;br /&gt;
		$(function () {&lt;br /&gt;
			$(mw.util.addPortletLink(&amp;#039;p-cactions&amp;#039;, &amp;#039;#&amp;#039;, &amp;#039;تبلیغ‌زدا&amp;#039;, &amp;#039;ca-adcleaner&amp;#039;))&lt;br /&gt;
				.click(function () {&lt;br /&gt;
					openAdsCleaner();&lt;br /&gt;
				});&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	var multiselectInput = {};&lt;br /&gt;
&lt;br /&gt;
	function AdsCleaner( config ) {&lt;br /&gt;
		AdsCleaner.parent.call( this, config );&lt;br /&gt;
	}&lt;br /&gt;
	OO.inheritClass( AdsCleaner, OO.ui.ProcessDialog );&lt;br /&gt;
&lt;br /&gt;
	AdsCleaner.static.name = &amp;#039;AdsCleaner&amp;#039;;&lt;br /&gt;
	AdsCleaner.static.title = &amp;#039;حذف پیوندهای تبلیغی / نامعتبر&amp;#039;;&lt;br /&gt;
	AdsCleaner.static.actions = [&lt;br /&gt;
		{ action: &amp;#039;remove&amp;#039;, label: &amp;#039;حذف&amp;#039;, flags: &amp;#039;primary&amp;#039; },&lt;br /&gt;
		{ action: &amp;#039;cancel&amp;#039;, label: &amp;#039;انصراف&amp;#039;, flags: &amp;#039;safe&amp;#039; }&lt;br /&gt;
	];&lt;br /&gt;
&lt;br /&gt;
	AdsCleaner.prototype.initialize = function () {&lt;br /&gt;
		AdsCleaner.parent.prototype.initialize.apply( this, arguments );&lt;br /&gt;
		this.content = new OO.ui.PanelLayout( { padded: true, expanded: false } );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		multiselectInput = new OO.ui.CheckboxMultiselectInputWidget( {&lt;br /&gt;
			options: links&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
		this.content.$element.append( &amp;#039;&amp;lt;div style=&amp;quot;text-align: center; color: red;&amp;quot;&amp;gt;هشدار: پیوند‌هایی که تیک بزنید به هر شکلی اعم از پیوند یا یادکرد از مقاله زدوده خواهد شد.&amp;lt;div&amp;gt;&amp;#039; );&lt;br /&gt;
		this.content.$element.append( multiselectInput.$element );&lt;br /&gt;
		this.$body.append( this.content.$element );&lt;br /&gt;
	};&lt;br /&gt;
	AdsCleaner.prototype.getActionProcess = function ( action ) {&lt;br /&gt;
		var dialog = this;&lt;br /&gt;
		if ( action == &amp;#039;remove&amp;#039;) {&lt;br /&gt;
			var checked = multiselectInput.getValue();&lt;br /&gt;
			if (checked.length &amp;lt; 1) {&lt;br /&gt;
				return new OO.ui.Process( function () {&lt;br /&gt;
					mw.notify(&amp;#039;ناموفق: هیچ پیوندی گزیده نشد.&amp;#039;);&lt;br /&gt;
					dialog.close( { action: action } );&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
			loadPage(mw.config.get(&amp;#039;wgPageName&amp;#039;), function (text) {&lt;br /&gt;
				var newText = clean(text, checked);&lt;br /&gt;
				loadSavePageRefresh(&lt;br /&gt;
					function () {&lt;br /&gt;
						return newText;&lt;br /&gt;
					},&lt;br /&gt;
					&amp;#039;ویرایش با [[ویکی‌پدیا:ابزار زدودن تبلیغ|ابزار زدودن تبلیغ]]&amp;#039;&lt;br /&gt;
				);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
		} else {&lt;br /&gt;
			return new OO.ui.Process( function () {&lt;br /&gt;
				dialog.close( { action: action } );&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
		return AdsCleaner.parent.prototype.getActionProcess.call( this, action );&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	function openAdsCleaner() {&lt;br /&gt;
		loadPage(mw.config.get(&amp;#039;wgPageName&amp;#039;), function (text) {&lt;br /&gt;
			var linksArray = urls(text);&lt;br /&gt;
			links = [];&lt;br /&gt;
			for (var i in linksArray) {&lt;br /&gt;
				links.push({data: linksArray[i], label: linksArray[i]})&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var windowManager = new OO.ui.WindowManager();&lt;br /&gt;
			$( &amp;#039;body&amp;#039; ).append( windowManager.$element );&lt;br /&gt;
&lt;br /&gt;
			var dialog = new AdsCleaner();&lt;br /&gt;
			windowManager.addWindows( [ dialog ] );&lt;br /&gt;
			windowManager.openWindow( dialog );&lt;br /&gt;
		});&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
}(jQuery, mediaWiki));&lt;/div&gt;</summary>
		<author><name>*&gt;Ebrahim</name></author>
	</entry>
</feed>