<link href="../fonts/font.css" rel="stylesheet" type="text/css">

<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fa">
		<id>https://wiki.imaroof.ir/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-asbox.js</id>
		<title>مدیاویکی:Gadget-asbox.js - تاریخچهٔ ویرایش‌ها</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.imaroof.ir/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-asbox.js"/>
		<link rel="alternate" type="text/html" href="https://wiki.imaroof.ir/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-asbox.js&amp;action=history"/>
		<updated>2026-08-03T16:11:05Z</updated>
		<subtitle>تاریخچهٔ ویرایش‌های این صفحه در ویکی</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>https://wiki.imaroof.ir/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-asbox.js&amp;diff=222&amp;oldid=prev</id>
		<title>Admin: صفحه‌ای تازه حاوی «/*global jQuery, mediaWiki*/ /* &lt;nowiki&gt; */ /*!  * Developed by: User:Ebraminio  */ (function ($, mw) { 	'use strict';  	var spanCode =...» ایجاد کرد</title>
		<link rel="alternate" type="text/html" href="https://wiki.imaroof.ir/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-asbox.js&amp;diff=222&amp;oldid=prev"/>
				<updated>2016-03-01T07:00:42Z</updated>
		
		<summary type="html">&lt;p&gt;صفحه‌ای تازه حاوی «‏&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;global jQuery, mediaWiki: &lt;/span&gt; ‏&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;&amp;lt;nowiki&amp;gt;: &lt;/span&gt; ‏&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;!  * Developed by: &lt;a href=&quot;/index.php?title=%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1:Ebraminio&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;کاربر:Ebraminio (صفحه وجود ندارد)&quot;&gt;User:Ebraminio&lt;/a&gt;: &lt;/span&gt; (function ($, mw) { 	&amp;#039;use strict&amp;#039;;  	var spanCode =...» ایجاد کرد&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;صفحهٔ تازه&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/*global jQuery, mediaWiki*/&lt;br /&gt;
/* &amp;lt;nowiki&amp;gt; */&lt;br /&gt;
/*!&lt;br /&gt;
 * Developed by: [[User:Ebraminio]]&lt;br /&gt;
 */&lt;br /&gt;
(function ($, mw) {&lt;br /&gt;
	'use strict';&lt;br /&gt;
&lt;br /&gt;
	var spanCode = '&amp;lt;center&amp;gt;&amp;lt;img src=&amp;quot;//upload.wikimedia.org/wikipedia/commons/4/42/Loading.gif&amp;quot; /&amp;gt;&amp;lt;/center&amp;gt;';&lt;br /&gt;
&lt;br /&gt;
	function displayProgress(message) {&lt;br /&gt;
		$('#stubForm').empty().append($('&amp;lt;div&amp;gt;', {&lt;br /&gt;
			style: 'text-align:center; margin:3em 0;',&lt;br /&gt;
			html: message + '&amp;lt;br/&amp;gt;' + spanCode&lt;br /&gt;
		}));&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function displayError(error) {&lt;br /&gt;
		$('#stubForm').empty().append($('&amp;lt;div&amp;gt;', {&lt;br /&gt;
			style: 'color: #990000; margin-top: 0.4em;',&lt;br /&gt;
			html: 'Error: ' + error&lt;br /&gt;
		}));&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function editThePage(summary, content) {&lt;br /&gt;
		return new mw.Api().post({&lt;br /&gt;
			action: 'edit',&lt;br /&gt;
			title: mw.config.get('wgPageName'),&lt;br /&gt;
			summary: summary,&lt;br /&gt;
			text: content,&lt;br /&gt;
			format: 'json',&lt;br /&gt;
			token: mw.user.tokens.get('editToken')&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function fetchThePage() {&lt;br /&gt;
		return new mw.Api().get({&lt;br /&gt;
			action: 'query',&lt;br /&gt;
			prop: 'revisions',&lt;br /&gt;
			titles: mw.config.get('wgPageName'),&lt;br /&gt;
			rvprop: 'content',&lt;br /&gt;
			format: 'json'&lt;br /&gt;
		}).then(function (data) {&lt;br /&gt;
			return $.map(data.query.pages, function (value) { return value; })[0].revisions[0]['*'];&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * This will help on better sorting on Persian string array&lt;br /&gt;
	 */&lt;br /&gt;
	function dePersian(input) { // solve persian problem on sorting by replace characters in strings&lt;br /&gt;
		return input.replace(/ی/g, &amp;quot;ي&amp;quot;)&lt;br /&gt;
			.replace(/ک/g, &amp;quot;ك&amp;quot;)&lt;br /&gt;
			.replace(/گ/g, &amp;quot;كی&amp;quot;)&lt;br /&gt;
			.replace(/ژ/g, &amp;quot;زی&amp;quot;)&lt;br /&gt;
			.replace(/چ/g, &amp;quot;جی&amp;quot;)&lt;br /&gt;
			.replace(/پ/g, &amp;quot;بی&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * String comparator for Persian&lt;br /&gt;
	 */&lt;br /&gt;
	function customComparator(a, b) {&lt;br /&gt;
		var keyA = dePersian(a),&lt;br /&gt;
			keyB = dePersian(b);&lt;br /&gt;
&lt;br /&gt;
		if (keyA &amp;lt; keyB) {&lt;br /&gt;
			return -1;&lt;br /&gt;
		}&lt;br /&gt;
		if (keyA &amp;gt; keyB) {&lt;br /&gt;
			return 1;&lt;br /&gt;
		}&lt;br /&gt;
		return 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Escape string for regex&lt;br /&gt;
	 */&lt;br /&gt;
	function escape(text) {&lt;br /&gt;
		return text.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&amp;amp;');&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Is a recursive function to retrieve all stub templates consequently&lt;br /&gt;
	 */&lt;br /&gt;
	function getAllStubTemplates(array, eicontinue) {&lt;br /&gt;
		return new mw.Api().get({&lt;br /&gt;
			action: 'query',&lt;br /&gt;
			list: 'embeddedin',&lt;br /&gt;
			eititle: 'Template:Asbox',&lt;br /&gt;
			eilimit: 500,&lt;br /&gt;
			einamespace: 10,&lt;br /&gt;
			format: 'json',&lt;br /&gt;
			eicontinue: eicontinue,&lt;br /&gt;
			'continue': ''&lt;br /&gt;
		}).then(function (data) {&lt;br /&gt;
			if (!array) { array = []; }&lt;br /&gt;
			array = array.concat($.map(data.query.embeddedin, function (value) {&lt;br /&gt;
				return value.title;&lt;br /&gt;
			}));&lt;br /&gt;
			if (!data['continue']) {&lt;br /&gt;
				return array;&lt;br /&gt;
			}&lt;br /&gt;
			return getAllStubTemplates(array, data['continue'].eicontinue);&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * check if is expired, currently expires in three days&lt;br /&gt;
	 */&lt;br /&gt;
	function isExpired(cacheTime) {&lt;br /&gt;
		return (new Date().getTime() - cacheTime) &amp;gt; (1000 * 60 * 60 * 24 * 3);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * If browser support localStorage, this would use it&lt;br /&gt;
	 */&lt;br /&gt;
	function cachedGetAllStubTemplates() {&lt;br /&gt;
		if (window.localStorage !== undefined) {&lt;br /&gt;
			var object, defer;&lt;br /&gt;
			try {&lt;br /&gt;
				object = JSON.parse(localStorage.getItem('allStubTemplates'));&lt;br /&gt;
			} catch (ignore) {}&lt;br /&gt;
			if (object &amp;amp;&amp;amp; !isExpired(parseInt(object.timestamp))) {&lt;br /&gt;
				defer = $.Deferred();&lt;br /&gt;
				return $.Deferred().resolve(object.value);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		return getAllStubTemplates().then(function (array) {&lt;br /&gt;
			if (array.length &amp;gt; 0 &amp;amp;&amp;amp; window.localStorage !== undefined) {&lt;br /&gt;
				try {&lt;br /&gt;
					window.localStorage.setItem('allStubTemplates', JSON.stringify({&lt;br /&gt;
						value: array,&lt;br /&gt;
						timestamp: new Date().getTime()&lt;br /&gt;
					}));&lt;br /&gt;
				} catch(ignore) {}&lt;br /&gt;
			}&lt;br /&gt;
			return array;&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function getParsedTemplate(template) {&lt;br /&gt;
		return new mw.Api().get({&lt;br /&gt;
			action: 'parse',&lt;br /&gt;
			text: '{{' + template + '}}',&lt;br /&gt;
			contentmodel: 'wikitext',&lt;br /&gt;
			prop: 'text'&lt;br /&gt;
		}).then(function (data) { return data.parse.text['*']; });&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Will launch stub template adder&lt;br /&gt;
	 */&lt;br /&gt;
	function launchDialog() {&lt;br /&gt;
		$('#stubForm').remove();&lt;br /&gt;
		$('&amp;lt;div&amp;gt;', {&lt;br /&gt;
			id: 'stubForm',&lt;br /&gt;
			style: 'position: relative;'&lt;br /&gt;
		}).append($('&amp;lt;div&amp;gt;', {&lt;br /&gt;
			style: 'margin-top: 0.4em;',&lt;br /&gt;
			html: 'انتخاب الگوی خرد: '&lt;br /&gt;
		}).append($('&amp;lt;select&amp;gt;', {&lt;br /&gt;
			id: 'stubselect',&lt;br /&gt;
			style: 'padding: 1px; vertical-align: baseline; font-family: inherit',&lt;br /&gt;
			html: '&amp;lt;option value=&amp;quot;&amp;quot; selected=&amp;quot;selected&amp;quot;&amp;gt;در حال بارگیری فهرست الگوها، کمی درنگ کنید&amp;lt;/option&amp;gt;'&lt;br /&gt;
		}), $('&amp;lt;div&amp;gt;', { id: 'asboxpreview', style: 'padding-top: 1em' }))).dialog({&lt;br /&gt;
			width: 500,&lt;br /&gt;
			title: 'افزودن الگوی خرد',&lt;br /&gt;
			modal: true,&lt;br /&gt;
			buttons: [{&lt;br /&gt;
				text: 'افزودن',&lt;br /&gt;
				class: 'ui-button-green',&lt;br /&gt;
				click: function () {&lt;br /&gt;
					var template = $('#stubselect').val();&lt;br /&gt;
					if (!template) { return; }&lt;br /&gt;
					&lt;br /&gt;
					$('#stubForm').dialog({&lt;br /&gt;
						buttons: {}&lt;br /&gt;
					});&lt;br /&gt;
					displayProgress('افزودن الگوی خرد...');&lt;br /&gt;
					fetchThePage().then(function (content) {&lt;br /&gt;
						content = content.replace(&lt;br /&gt;
							new RegExp('{{\\s*([^:}]*:)?(خرد|ناقص|' + escape(template) + ')\\s*}}\\n*', 'g'),&lt;br /&gt;
							''&lt;br /&gt;
						).replace(/\n+$/, '');&lt;br /&gt;
						if (!/خرد\}\}$/.test(content)) {&lt;br /&gt;
							content = content + '\n\n';&lt;br /&gt;
						}&lt;br /&gt;
						return editThePage('افزودن الگوی خرد به کمک ابزار', content + '\n' + '{{' + template + '}}');&lt;br /&gt;
					}).then(function (data) {&lt;br /&gt;
						if (data.edit.result === 'Success') {&lt;br /&gt;
							window.location.reload();&lt;br /&gt;
						} else {&lt;br /&gt;
							displayError('Unknown result from API.');&lt;br /&gt;
						}&lt;br /&gt;
					}, function () {&lt;br /&gt;
						displayError('Edit failed.');&lt;br /&gt;
					});&lt;br /&gt;
				}&lt;br /&gt;
			}],&lt;br /&gt;
			close: function () {&lt;br /&gt;
				$(&amp;quot;#stubForm&amp;quot;).remove();&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
&lt;br /&gt;
		cachedGetAllStubTemplates().then(function (stubs) {&lt;br /&gt;
			stubs = stubs&lt;br /&gt;
				.filter(function (x) { return x !== 'الگو:خرد'; })&lt;br /&gt;
				.filter(function (x) {&lt;br /&gt;
					return !/^الگو:(\w|فرودگاه-)/.exec(x);&lt;br /&gt;
				});&lt;br /&gt;
			stubs.push('');&lt;br /&gt;
			stubs.sort(customComparator);&lt;br /&gt;
			$('#stubselect').empty().change(function () {&lt;br /&gt;
				var template = $('#stubselect').val();&lt;br /&gt;
				if (!template) {&lt;br /&gt;
					$('#asboxpreview').html('');&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				$('#asboxpreview').html(spanCode);&lt;br /&gt;
				getParsedTemplate(template).then(function (html) {&lt;br /&gt;
					$('#asboxpreview').html(html);&lt;br /&gt;
				});&lt;br /&gt;
			}).append($.map(stubs, function (value) {&lt;br /&gt;
				return $('&amp;lt;option&amp;gt;', {&lt;br /&gt;
					html: value.replace(/^[^:]*:/, &amp;quot;&amp;quot;),&lt;br /&gt;
					val: value.replace(/^[^:]*:/, &amp;quot;&amp;quot;)&lt;br /&gt;
				});&lt;br /&gt;
			}));&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function initialize() {&lt;br /&gt;
		$('#ca-stub-adder').remove();&lt;br /&gt;
		$(mw.util.addPortletLink('p-cactions', '#', 'خرد', 'ca-stub-adder', 'افزودن الگوی خرد')).click(function (e) {&lt;br /&gt;
			e.preventDefault();&lt;br /&gt;
			launchDialog();&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if (mw.config.get('wgNamespaceNumber') === 0&lt;br /&gt;
			&amp;amp;&amp;amp; mw.config.get('wgAction') === 'view') {&lt;br /&gt;
		$.when($.ready, mw.loader.using('jquery.ui.dialog')).then(initialize);&lt;br /&gt;
	}&lt;br /&gt;
}(jQuery, mediaWiki));&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>