<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fa">
	<id>https://www.iran-pedia.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-markblocked.js</id>
	<title>مدیاویکی:Gadget-markblocked.js - تاریخچهٔ نسخه‌ها</title>
	<link rel="self" type="application/atom+xml" href="https://www.iran-pedia.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-markblocked.js"/>
	<link rel="alternate" type="text/html" href="https://www.iran-pedia.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-markblocked.js&amp;action=history"/>
	<updated>2026-04-26T05:53:53Z</updated>
	<subtitle>تاریخچهٔ نسخه‌ها برای این صفحه در ویکی</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://www.iran-pedia.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-markblocked.js&amp;diff=2626&amp;oldid=prev</id>
		<title>Rootadmin: ۱ نسخه واردشده</title>
		<link rel="alternate" type="text/html" href="https://www.iran-pedia.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-markblocked.js&amp;diff=2626&amp;oldid=prev"/>
		<updated>2017-12-02T11:08:53Z</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;tr class=&quot;diff-title&quot; lang=&quot;fa&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;نسخهٔ ‏۲ دسامبر ۲۰۱۷، ساعت ۱۳:۰۸&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&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;/table&gt;</summary>
		<author><name>Rootadmin</name></author>
	</entry>
	<entry>
		<id>https://www.iran-pedia.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-markblocked.js&amp;diff=2625&amp;oldid=prev</id>
		<title>Rootadmin: ۱ نسخه واردشده</title>
		<link rel="alternate" type="text/html" href="https://www.iran-pedia.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-markblocked.js&amp;diff=2625&amp;oldid=prev"/>
		<updated>2017-08-29T21:31:54Z</updated>

		<summary type="html">&lt;p&gt;۱ نسخه واردشده&lt;/p&gt;
&lt;p&gt;&lt;b&gt;صفحهٔ تازه&lt;/b&gt;&lt;/p&gt;&lt;div&gt;//https://ru.wikipedia.org/w/index.php?title=MediaWiki:Gadget-markblocked.js&amp;amp;oldid=77732587&lt;br /&gt;
function markBlocked( container ) {&lt;br /&gt;
	var contentLinks = container ? $( container ).find( &amp;#039;a&amp;#039; ) : mw.util.$content.find( &amp;#039;a&amp;#039; ).add( &amp;#039;#ca-nstab-user a&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
	mw.util.addCSS(&amp;#039;\&lt;br /&gt;
	.user-blocked-temp{&amp;#039;   + ( window.mbTempStyle || &amp;#039;opacity: 0.7; text-decoration: line-through&amp;#039; ) + &amp;#039;}\&lt;br /&gt;
	.user-blocked-indef{&amp;#039;  + ( window.mbIndefStyle || &amp;#039;opacity: 0.4; font-style: italic; text-decoration: line-through&amp;#039; ) + &amp;#039;}\&lt;br /&gt;
	.user-blocked-tipbox{&amp;#039; + ( window.mbTipBoxStyle || &amp;#039;font-size:smaller; background:#FFFFF0; border:1px solid #FEA; padding:0 0.3em; color:#AAA&amp;#039; ) + &amp;#039;}\&lt;br /&gt;
	&amp;#039;);&lt;br /&gt;
	var mbTooltip =  window.mbTooltip || &amp;#039;;  توسط $2 ($1) بسته شد: $3 ($4 پیش)&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	//get all aliases for user: &amp;amp; user_talk:&lt;br /&gt;
	var userNS = [];&lt;br /&gt;
	for ( var ns in mw.config.get( &amp;#039;wgNamespaceIds&amp;#039; ) ) {&lt;br /&gt;
		if ( mw.config.get( &amp;#039;wgNamespaceIds&amp;#039; )[ns] == 2 || mw.config.get( &amp;#039;wgNamespaceIds&amp;#039; )[ns] == 3 ) {&lt;br /&gt;
			userNS.push( ns.replace( /_/g, &amp;#039; &amp;#039; ) + &amp;#039;:&amp;#039; );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	//RegExp  for all titles that are  User:| User_talk: |  Special:Contributions/ (localized) | Special:Contributions/ (for userscripts)&lt;br /&gt;
	var userTitleRX = new RegExp( &amp;#039;^&amp;#039;&lt;br /&gt;
	 + &amp;#039;(&amp;#039; + userNS.join( &amp;#039;|&amp;#039; )&lt;br /&gt;
	 + &amp;#039;|ویژه:مشارکت‌ها\\/|Special:Contributions\\/&amp;#039;&lt;br /&gt;
	 + &amp;#039;)&amp;#039;&lt;br /&gt;
	 + &amp;#039;([^\\/#]+)$&amp;#039;, &amp;#039;i&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
	//RegExp for links&lt;br /&gt;
	var articleRX = new RegExp( &amp;#039;^&amp;#039; + mw.config.get( &amp;#039;wgArticlePath&amp;#039; ).replace(&amp;#039;$1&amp;#039;, &amp;#039;&amp;#039;) + &amp;#039;([^#]+)&amp;#039; );&lt;br /&gt;
	var scriptRX =  new RegExp( &amp;#039;^&amp;#039; + mw.config.get( &amp;#039;wgScript&amp;#039; ) + &amp;#039;\\?title=([^#&amp;amp;]+)&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
	var userLinks = {};&lt;br /&gt;
	var url, ma, pgTitle;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	//find all &amp;quot;user&amp;quot; links and save them in userLinks : { &amp;#039;users&amp;#039;: [&amp;lt;link1&amp;gt;, &amp;lt;link2&amp;gt;, ...], &amp;#039;user2&amp;#039;: [&amp;lt;link3&amp;gt;, &amp;lt;link3&amp;gt;, ...], ... }&lt;br /&gt;
	contentLinks.each( function( i, lnk ) {&lt;br /&gt;
		url = $( lnk ).attr( &amp;#039;href&amp;#039; );&lt;br /&gt;
		if ( !url || url.charAt(0) != &amp;#039;/&amp;#039; ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		if ( ma = articleRX.exec( url ) ) {&lt;br /&gt;
			pgTitle = ma[1];&lt;br /&gt;
		} else if ( ma = scriptRX.exec( url ) ) {&lt;br /&gt;
			pgTitle = ma[1];&lt;br /&gt;
		} else {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		pgTitle = decodeURIComponent( pgTitle ).replace( /_/g, &amp;#039; &amp;#039; );&lt;br /&gt;
		user = userTitleRX.exec( pgTitle );&lt;br /&gt;
		if ( !user ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		user = user[2];&lt;br /&gt;
		$( lnk ).addClass( &amp;#039;userlink&amp;#039; );&lt;br /&gt;
		if ( !userLinks[user] ) {&lt;br /&gt;
			userLinks[user] = [];&lt;br /&gt;
		}&lt;br /&gt;
		userLinks[user].push (lnk );&lt;br /&gt;
	} );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	//convert users into array&lt;br /&gt;
	var users = [];&lt;br /&gt;
	for ( var u in userLinks ) {&lt;br /&gt;
		users.push( u );&lt;br /&gt;
	}&lt;br /&gt;
	if ( users.length == 0 ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	//API request&lt;br /&gt;
	var serverTime, apiRequests = 0;&lt;br /&gt;
	var waitingCSS = mw.util.addCSS( &amp;#039;a.userlink {opacity:&amp;#039; + ( window.mbLoadingOpacity || 0.85 ) + &amp;#039;}&amp;#039; );&lt;br /&gt;
	while ( users.length &amp;gt; 0 ) {&lt;br /&gt;
		apiRequests++;&lt;br /&gt;
		$.post( &lt;br /&gt;
			mw.util.wikiScript( &amp;#039;api&amp;#039; ) + &amp;#039;?format=json&amp;amp;action=query&amp;#039;,&lt;br /&gt;
			{&lt;br /&gt;
				list: &amp;#039;blocks&amp;#039;,&lt;br /&gt;
				bklimit: 100,&lt;br /&gt;
				bkusers: users.splice( 0, 50 ).join( &amp;#039;|&amp;#039; ),&lt;br /&gt;
				bkprop: &amp;#039;user|by|timestamp|expiry|reason&amp;#039;&lt;br /&gt;
				//no need for &amp;#039;id|flags&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			markLinks&lt;br /&gt;
		);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return; //the end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	//callback: receive data and mark links&lt;br /&gt;
	function markLinks( resp, status, xhr ) {&lt;br /&gt;
&lt;br /&gt;
		serverTime = new Date( xhr.getResponseHeader(&amp;#039;Date&amp;#039;) );&lt;br /&gt;
		var list, blk, tip, links, lnk;&lt;br /&gt;
		if ( !resp || !( list = resp.query ) || !( list = list.blocks ) ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		for ( var i = 0; i &amp;lt; list.length; i++ ) {&lt;br /&gt;
			blk = list[i];&lt;br /&gt;
			if ( /^in/.test( blk.expiry ) ) {&lt;br /&gt;
				clss = &amp;#039;user-blocked-indef&amp;#039;;&lt;br /&gt;
				blTime = blk.expiry;&lt;br /&gt;
			} else {&lt;br /&gt;
				clss = &amp;#039;user-blocked-temp&amp;#039;;&lt;br /&gt;
				blTime = inHours ( parseTS( blk.expiry ) - parseTS( blk.timestamp ) );&lt;br /&gt;
			}&lt;br /&gt;
			tip = mbTooltip.replace( &amp;#039;$1&amp;#039;, blTime ).replace( &amp;#039;infinity&amp;#039;, &amp;#039;بی‌پایان&amp;#039; )&lt;br /&gt;
				.replace( &amp;#039;$2&amp;#039;, blk.by )&lt;br /&gt;
				.replace( &amp;#039;$3&amp;#039;, blk.reason )&lt;br /&gt;
				.replace( &amp;#039;$4&amp;#039;, inHours ( serverTime - parseTS( blk.timestamp ) ) );&lt;br /&gt;
			links = userLinks[blk.user];&lt;br /&gt;
			for ( var k = 0; k &amp;lt; links.length; k++ ) {&lt;br /&gt;
				lnk = $( links[k] ).addClass( clss );&lt;br /&gt;
				if ( window.mbTipBox ) {&lt;br /&gt;
					$( &amp;#039;&amp;lt;span class=user-blocked-tipbox&amp;gt;#&amp;lt;/span&amp;gt;&amp;#039; ).attr( &amp;#039;title&amp;#039;, tip ).insertBefore( lnk );&lt;br /&gt;
				} else {&lt;br /&gt;
					lnk.attr( &amp;#039;title&amp;#039;, lnk.attr( &amp;#039;title&amp;#039; ) + tip );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ( --apiRequests == 0 ) { //last response&lt;br /&gt;
			waitingCSS.disabled = true;&lt;br /&gt;
			$( &amp;#039;#ca-showblocks&amp;#039; ).parent().remove(); // remove added portlet link&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	//--------AUX functions&lt;br /&gt;
&lt;br /&gt;
	//20081226220605  or  2008-01-26T06:34:19Z   -&amp;gt; date&lt;br /&gt;
	function parseTS( ts ) {&lt;br /&gt;
		var m = ts.replace( /\D/g, &amp;#039;&amp;#039; ).match( /(\d\d\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/ );&lt;br /&gt;
		return new Date ( Date.UTC( m[1], m[2]-1, m[3], m[4], m[5], m[6] ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function inHours( ms ) { //milliseconds -&amp;gt; &amp;quot;2:30&amp;quot; or 5,06d or 21d&lt;br /&gt;
		var mm = Math.floor( ms / 60000 );&lt;br /&gt;
		if ( !mm ) {&lt;br /&gt;
			return Math.floor( ms / 1000 ) + &amp;#039;ثانیه&amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
		var hh = Math.floor( mm / 60 );&lt;br /&gt;
		mm = mm % 60;&lt;br /&gt;
		var dd = Math.floor( hh / 24 );&lt;br /&gt;
		hh = hh % 24;&lt;br /&gt;
		if ( dd ) {&lt;br /&gt;
			return dd + ( dd &amp;lt; 10 ? &amp;#039;.&amp;#039; + zz( hh ) : &amp;#039;&amp;#039; ) + &amp;#039;روز&amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
		return hh + &amp;#039;:&amp;#039; + zz( mm );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function zz( v ) { // 6 -&amp;gt; &amp;#039;06&amp;#039;&lt;br /&gt;
		if ( v &amp;lt;= 9 ) {&lt;br /&gt;
			v = &amp;#039;0&amp;#039; + v;&lt;br /&gt;
		}&lt;br /&gt;
		return v;&lt;br /&gt;
	}&lt;br /&gt;
}// -- end of main function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//start on some pages&lt;br /&gt;
switch ( mw.config.get( &amp;#039;wgAction&amp;#039; ) ) {&lt;br /&gt;
	case &amp;#039;edit&amp;#039;:&lt;br /&gt;
	case &amp;#039;submit&amp;#039;:&lt;br /&gt;
		break;&lt;br /&gt;
	case &amp;#039;view&amp;#039;:&lt;br /&gt;
		if ( mw.config.get( &amp;#039;wgNamespaceNumber&amp;#039; ) == 0 ) {&lt;br /&gt;
			break;&lt;br /&gt;
		}&lt;br /&gt;
		//otherwise continue with default&lt;br /&gt;
	default: // &amp;#039;history&amp;#039;, &amp;#039;purge&amp;#039;&lt;br /&gt;
		$.when($.ready,mw.loader.using(&amp;#039;mediawiki.util&amp;#039;)).then(function() {&lt;br /&gt;
			if ( mw.util.$content.hasClass( &amp;#039;mw-body&amp;#039; ) ) {&lt;br /&gt;
				if ( window.mbNoAutoStart ) {&lt;br /&gt;
					mw.util.addPortletLink( &amp;#039;p-cactions&amp;#039;, &amp;#039;javascript:markBlocked()&amp;#039;, &amp;#039;XX&amp;#039;, &amp;#039;ca-showblocks&amp;#039; );&lt;br /&gt;
				} else {&lt;br /&gt;
					markBlocked();&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
  		} );&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Rootadmin</name></author>
	</entry>
</feed>