<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-lifilter.js</id>
		<title>مدیاویکی:Gadget-lifilter.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-lifilter.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-lifilter.js&amp;action=history"/>
		<updated>2026-08-03T03:21:51Z</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-lifilter.js&amp;diff=310&amp;oldid=prev</id>
		<title>Admin: صفحه‌ای تازه حاوی «/**  * Log filter script  *  * Created by Splarka  * Amended by b:User:Mike.lifeguard &amp; User:Lupo  * Partially r...» ایجاد کرد</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-lifilter.js&amp;diff=310&amp;oldid=prev"/>
				<updated>2016-03-01T08:33:49Z</updated>
		
		<summary type="html">&lt;p&gt;صفحه‌ای تازه حاوی «/**  * Log filter script  *  * Created by &lt;a href=&quot;/index.php?title=W:User:Splarka&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;W:User:Splarka (صفحه وجود ندارد)&quot;&gt;Splarka&lt;/a&gt;  * Amended by &lt;a href=&quot;/index.php?title=B:User:Mike.lifeguard&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;B:User:Mike.lifeguard (صفحه وجود ندارد)&quot;&gt;b:User:Mike.lifeguard&lt;/a&gt; &amp;amp; &lt;a href=&quot;/index.php?title=%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1:Lupo&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;کاربر:Lupo (صفحه وجود ندارد)&quot;&gt;User:Lupo&lt;/a&gt;  * Partially r...» ایجاد کرد&lt;/p&gt;
&lt;p&gt;&lt;b&gt;صفحهٔ تازه&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/**&lt;br /&gt;
 * Log filter script&lt;br /&gt;
 *&lt;br /&gt;
 * Created by [[w:User:Splarka|Splarka]]&lt;br /&gt;
 * Amended by [[b:User:Mike.lifeguard]] &amp;amp; [[User:Lupo]]&lt;br /&gt;
 * Partially rewritten by DieBuche&lt;br /&gt;
 *&lt;br /&gt;
 * &amp;lt;li&amp;gt; element Filter Script, version [0.2]&lt;br /&gt;
 * Should currently work on all known skins (with a #contentSub or #topbar)&lt;br /&gt;
 *&lt;br /&gt;
 * mw.util.getUrl( mw.config.get( 'wgPageName' ) ) + '?' +&lt;br /&gt;
 * 'withJS=MediaWiki:Gadget-rightsfilter.js&amp;amp;lifilter=1&amp;amp;lifilterexpr=TEST&amp;amp;lifiltercase&amp;amp;lifilterhilight&amp;amp;lifilterinv'&lt;br /&gt;
 */&lt;br /&gt;
// Guard against double inclusions&lt;br /&gt;
if ( typeof filterLists === 'undefined' ) {&lt;br /&gt;
window.filterLists = {&lt;br /&gt;
	i18n: {&lt;br /&gt;
		'en': {&lt;br /&gt;
			'filter-portlet-text': 'Filter',&lt;br /&gt;
			'filter-portlet-description': 'Open interactive log entry regex filter thingy',&lt;br /&gt;
			'filter-gadget-page': 'MediaWiki:Gadget-rightsfilter.js',&lt;br /&gt;
			'filter-rights-list-instructions': 'Regex filter the space-delimited list of rights.',&lt;br /&gt;
			'filter-other-list-instructions': 'Regex filter the plain text representation of this list.',&lt;br /&gt;
			'filter-legend': 'Filter &amp;lt;li&amp;gt; list',&lt;br /&gt;
			'filter-option-added': 'Added rights',&lt;br /&gt;
			'filter-option-removed': 'Removed rights',&lt;br /&gt;
			'filter-option-added-or-removed': 'Added OR removed',&lt;br /&gt;
			'filter-option-added-removed-static': 'Added/removed/static',&lt;br /&gt;
			'filter-regex-label': 'Regex string:',&lt;br /&gt;
			'filter-invert-label': 'Invert',&lt;br /&gt;
			'filter-case-label': 'Case insensitive',&lt;br /&gt;
			'filter-filter-button': 'Filter',&lt;br /&gt;
			'filter-highlight-button': 'Highlight',&lt;br /&gt;
			'filter-link-text': 'Link to this filtered list'&lt;br /&gt;
		},&lt;br /&gt;
	        'fa': {&lt;br /&gt;
			'filter-portlet-text': 'فیلتر با عبارت باقاعده',&lt;br /&gt;
			'filter-portlet-description': 'ابزار فیلتر کردن سیاهه به وسیله عبارت‌ باقاعده',&lt;br /&gt;
			'filter-gadget-page': 'MediaWiki:Gadget-rightsfilter.js',&lt;br /&gt;
			'filter-rights-list-instructions': 'عبارت باقاعده برای سیاهه اختیارات',&lt;br /&gt;
			'filter-other-list-instructions': 'عبارت باقاعده متن‌ زیر را فیلتر می‌کند. ',&lt;br /&gt;
			'filter-legend': 'فیلترکردن فهرست‌های دارای &amp;lt;li&amp;gt; به کمک عبارت باقاعده',&lt;br /&gt;
			'filter-option-added': 'افزودن اختیارات',&lt;br /&gt;
			'filter-option-removed': 'حذف اختیارات',&lt;br /&gt;
			'filter-option-added-or-removed': 'افزودن یا حذف',&lt;br /&gt;
			'filter-option-added-removed-static': 'افزوده/حذف‌شده/وضعیت',&lt;br /&gt;
			'filter-regex-label': &amp;quot;متن عبارات باقاعده:&amp;quot;,&lt;br /&gt;
			'filter-invert-label': 'معکوس  ',&lt;br /&gt;
			'filter-case-label': 'موارد حساس  ',&lt;br /&gt;
			'filter-filter-button': 'فیلتر',&lt;br /&gt;
			'filter-highlight-button': 'پررنگ کردن',&lt;br /&gt;
			'filter-link-text': 'پیوند به فهرست‌ فیلتر شده'&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	rightsLogOnly: (document.location.href.indexOf( 'type=rights' ) !== -1 || document.location.href.indexOf( 'Log/rights' ) !== -1),&lt;br /&gt;
	lastClicked: false,&lt;br /&gt;
	load: function() {&lt;br /&gt;
		var portletlink, int = filterLists.i18n.en;&lt;br /&gt;
&lt;br /&gt;
		// Define language fallbacks&lt;br /&gt;
		filterLists.i18n['pt-br'] = filterLists.i18n.pt;&lt;br /&gt;
&lt;br /&gt;
		// Replace default English interface by translation if available&lt;br /&gt;
		$.extend( true, int, filterLists.i18n[ mw.config.get( 'wgUserLanguage' ) ] );&lt;br /&gt;
&lt;br /&gt;
		// Define interface messages&lt;br /&gt;
		mw.messages.set( int );&lt;br /&gt;
&lt;br /&gt;
		// Create portlet link&lt;br /&gt;
		portletlink = mw.util.addPortletLink(&lt;br /&gt;
			'p-cactions',&lt;br /&gt;
			'#',&lt;br /&gt;
			mw.msg( 'filter-portlet-text' ),&lt;br /&gt;
			'ca-rxfilter',&lt;br /&gt;
			mw.msg( 'filter-portlet-description' )&lt;br /&gt;
		);&lt;br /&gt;
		// Bind click handler&lt;br /&gt;
		$(portletlink).click( function( e ) {&lt;br /&gt;
			e.preventDefault();&lt;br /&gt;
			filterLists.buildForm();&lt;br /&gt;
		});&lt;br /&gt;
		// Display form direclty ?&lt;br /&gt;
		if ( window.AutoLoadLogsFilter || mw.util.getParamValue( 'lifilter' ) || mw.util.getParamValue( 'lifilterexpr' ) ) {&lt;br /&gt;
			filterLists.buildForm();&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	getURL: function( showPopUp ) {&lt;br /&gt;
		var	data = {&lt;br /&gt;
				withJS: mw.msg( 'filter-gadget-page' ),&lt;br /&gt;
				lifilter: '1',&lt;br /&gt;
				lifilterexpr: $( '#rfRegex' ).val()&lt;br /&gt;
			},&lt;br /&gt;
			url = window.location.href;&lt;br /&gt;
		if ( !$( '#rfCase' ).attr( 'checked' ) ) {&lt;br /&gt;
			data.lifiltercase = '1';&lt;br /&gt;
		}&lt;br /&gt;
		if ( this.lastClicked == '1' ) {&lt;br /&gt;
			data.lifilterhilight = '1';&lt;br /&gt;
		}&lt;br /&gt;
		if ( $( '#rfInvert' ).attr( 'checked' ) ) {&lt;br /&gt;
			data.lifilterinv = '1';&lt;br /&gt;
		}&lt;br /&gt;
		url += ( url.indexOf( '?' ) !== -1 ? '&amp;amp;' : '?' ) + $.param( data );&lt;br /&gt;
		if ( showPopUp ) {&lt;br /&gt;
			prompt( '', url );&lt;br /&gt;
		} else {&lt;br /&gt;
			return url;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	buildForm: function() {&lt;br /&gt;
		var	value, casing, inverted, fieldsetHtml,&lt;br /&gt;
			$pageTop, $fieldSet, $legend, $sel,&lt;br /&gt;
			instructions = this.rightsLogOnly ?&lt;br /&gt;
				mw.msg( 'filter-rights-list-instructions' )&lt;br /&gt;
				: mw.msg( 'filter-other-list-instructions' );&lt;br /&gt;
&lt;br /&gt;
		$( '#ca-rxfilter' ).hide();&lt;br /&gt;
		$pageTop = $( '#contentSub, #topbar' );&lt;br /&gt;
		if ( !$pageTop.length ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Set up config&lt;br /&gt;
		value = mw.util.getParamValue( 'lifilterexpr' );&lt;br /&gt;
		casing = mw.util.getParamValue( 'lifiltercase' ) == '1';&lt;br /&gt;
		inverted = mw.util.getParamValue( 'lifilterinv' ) == '1';&lt;br /&gt;
&lt;br /&gt;
		// Generate the form&lt;br /&gt;
		$fieldSet = $( '&amp;lt;fieldset id=&amp;quot;rightsFilter&amp;quot;&amp;gt;&amp;lt;/fieldset&amp;gt;' ).text( instructions );&lt;br /&gt;
		$legend = $( '&amp;lt;legend&amp;gt;&amp;lt;/legend&amp;gt;' ).text( mw.msg( 'filter-legend' ) );&lt;br /&gt;
		$fieldSet.append( $legend );&lt;br /&gt;
		fieldsetHtml = '';&lt;br /&gt;
&lt;br /&gt;
		if ( this.rightsLogOnly ) {&lt;br /&gt;
			fieldsetHtml += '&amp;lt;select id=rfSelect&amp;gt;';&lt;br /&gt;
			fieldsetHtml += '&amp;lt;option&amp;gt;' + mw.html.escape(mw.msg( 'filter-option-added' )) + '&amp;lt;/option&amp;gt;';&lt;br /&gt;
			fieldsetHtml += '&amp;lt;option&amp;gt;' + mw.html.escape(mw.msg( 'filter-option-removed' )) + '&amp;lt;/option&amp;gt;';&lt;br /&gt;
			fieldsetHtml += '&amp;lt;option&amp;gt;' + mw.html.escape(mw.msg( 'filter-option-added-or-removed' )) + '&amp;lt;/option&amp;gt;';&lt;br /&gt;
			fieldsetHtml += '&amp;lt;option&amp;gt;' + mw.html.escape(mw.msg( 'filter-option-added-removed-static' )) + '&amp;lt;/option&amp;gt;';&lt;br /&gt;
			fieldsetHtml += '&amp;lt;/select&amp;gt;';&lt;br /&gt;
		}&lt;br /&gt;
		fieldsetHtml += '&amp;lt;label for=&amp;quot;rfRegex&amp;quot;&amp;gt;&amp;lt;b&amp;gt;' + mw.html.escape(mw.msg( 'filter-regex-label' )) + '&amp;lt;/b&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;input id=&amp;quot;rfRegex&amp;quot;&amp;gt;';&lt;br /&gt;
		fieldsetHtml += '&amp;lt;input id=&amp;quot;rfInvert&amp;quot; type=&amp;quot;checkbox&amp;quot;&amp;gt;&amp;lt;label for=&amp;quot;rfInvert&amp;quot;&amp;gt;' + mw.html.escape(mw.msg( 'filter-invert-label' )) + '&amp;lt;/label&amp;gt;';&lt;br /&gt;
&lt;br /&gt;
		fieldsetHtml += '&amp;lt;input id=&amp;quot;rfCase&amp;quot; type=&amp;quot;checkbox&amp;quot;&amp;gt;&amp;lt;label for=&amp;quot;rfCase&amp;quot;&amp;gt;' + mw.html.escape(mw.msg( 'filter-case-label' )) + '&amp;lt;/label&amp;gt;';&lt;br /&gt;
		fieldsetHtml += '&amp;lt;button type=&amp;quot;button&amp;quot; value=&amp;quot;0&amp;quot;&amp;gt;' + mw.html.escape(mw.msg( 'filter-filter-button' )) + '&amp;lt;/button&amp;gt;';&lt;br /&gt;
		fieldsetHtml += '&amp;lt;button type=&amp;quot;button&amp;quot; value=&amp;quot;1&amp;quot;&amp;gt;' + mw.html.escape(mw.msg( 'filter-highlight-button' )) + '&amp;lt;/button&amp;gt;';&lt;br /&gt;
		fieldsetHtml += '&amp;lt;br/&amp;gt;&amp;lt;a href=&amp;quot;javascript:filterLists.getURL(true)&amp;quot;&amp;gt;' + mw.html.escape(mw.msg( 'filter-link-text' )) + '&amp;lt;/a&amp;gt;';&lt;br /&gt;
&lt;br /&gt;
		// Inject the html into the fieldset&lt;br /&gt;
		$fieldSet.append( fieldsetHtml );&lt;br /&gt;
&lt;br /&gt;
		$pageTop.after( $fieldSet );&lt;br /&gt;
&lt;br /&gt;
		// Set passed values&lt;br /&gt;
		$( '#rfRegex ' ).val( value );&lt;br /&gt;
		$( '#rfCase' ).attr( 'checked', !casing );&lt;br /&gt;
		$( '#rfInvert' ).attr( 'checked', inverted );&lt;br /&gt;
		$( '#rfRegex' ).focus();&lt;br /&gt;
&lt;br /&gt;
		// Bind click and change handlers&lt;br /&gt;
		$( '#rightsFilter' ).find( 'input' ).bind( 'keyup change', function(e) {&lt;br /&gt;
			filterLists.filterLi();&lt;br /&gt;
		});&lt;br /&gt;
		$fieldSet.find( 'button' ).click( function(e) {&lt;br /&gt;
			filterLists.lastClicked = $(this).val();&lt;br /&gt;
			filterLists.filterLi();&lt;br /&gt;
		});&lt;br /&gt;
&lt;br /&gt;
		if ( value ) {&lt;br /&gt;
			this.filterLi( mw.util.getParamValue( 'lifilterhilight' ) == '1' );&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	filterLi: function(hilight) {&lt;br /&gt;
		var type, invert, search, flags, rx, listItems, rightrx;&lt;br /&gt;
&lt;br /&gt;
		// Grab options from form&lt;br /&gt;
		if ( this.rightsLogOnly ) {&lt;br /&gt;
			type = $( '#rfSelect' ).attr( 'selectedIndex' );&lt;br /&gt;
		}&lt;br /&gt;
		invert = $( '#rfInvert' ).attr( 'checked' );&lt;br /&gt;
		search = $( '#rfRegex' ).val();&lt;br /&gt;
		flags = $( '#rfCase' ).attr( 'checked' ) ? 'ig' : 'g';&lt;br /&gt;
		hilight = ( hilight || this.lastClicked == '1' ) ? true : false;&lt;br /&gt;
&lt;br /&gt;
		try{&lt;br /&gt;
			rx = new RegExp( search, flags );&lt;br /&gt;
		} catch (err){&lt;br /&gt;
			mw.log( err );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Grab the list of all &amp;lt;li&amp;gt; in the content&lt;br /&gt;
		listItems = $( '#bodyContent' ).find( 'li' );&lt;br /&gt;
		if ( !listItems.length ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// The regex used to grab the Special:Log/rights changes&lt;br /&gt;
		rightrx = /^.*?User\:.*? from (.*?) to (.*?) \u200E.*?$/i;&lt;br /&gt;
&lt;br /&gt;
		// Iterate&lt;br /&gt;
		listItems.each(function() {&lt;br /&gt;
			var look, oldr, newr, oldrl, newrl, remr, addr,&lt;br /&gt;
				$this = $(this);&lt;br /&gt;
&lt;br /&gt;
			if ( this.rightsLogOnly ) {&lt;br /&gt;
				// Special:Log/rights&lt;br /&gt;
				oldr = $this.text().replace(rightrx, '$1' );&lt;br /&gt;
				newr = $this.text().replace(rightrx, '$2' );&lt;br /&gt;
				oldrl = oldr.split( ', ' );&lt;br /&gt;
				newrl = newr.split( ', ' );&lt;br /&gt;
				for ( var j = 0; j &amp;lt; oldrl.length; j++ ) {&lt;br /&gt;
					for ( var k = 0; k &amp;lt; newrl.length; k++ ) {&lt;br /&gt;
						if ( oldrl[j] == newrl[k] ) {&lt;br /&gt;
							oldrl[j] = '';&lt;br /&gt;
							newrl[k] = '';&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				remr = oldrl.join();&lt;br /&gt;
				addr = newrl.join();&lt;br /&gt;
				switch (type) {&lt;br /&gt;
					case 0:&lt;br /&gt;
						look = addr;&lt;br /&gt;
						break;&lt;br /&gt;
					case 1:&lt;br /&gt;
						look = remr;&lt;br /&gt;
						break;&lt;br /&gt;
					case 2:&lt;br /&gt;
						look = remr + ' ' + addr;&lt;br /&gt;
						break;&lt;br /&gt;
					case 3:&lt;br /&gt;
						look = oldr + ' ' + newr;&lt;br /&gt;
						break;&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				//Any other list of &amp;lt;li&amp;gt; objects&lt;br /&gt;
				look = $this.text();&lt;br /&gt;
			}&lt;br /&gt;
			$this.show();&lt;br /&gt;
			$this.css( 'background-color', '' );&lt;br /&gt;
			if ( ( look.search( rx ) !== -1 &amp;amp;&amp;amp; !invert ) || ( look.search( rx ) === -1 &amp;amp;&amp;amp; invert ) ) {&lt;br /&gt;
				if ( hilight ) {&lt;br /&gt;
					$this.css( 'background-color', '#ffff99' );&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				if ( !hilight ) {&lt;br /&gt;
					$this.hide();&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// When to enable all this&lt;br /&gt;
$( document ).ready( function() {&lt;br /&gt;
	if (&lt;br /&gt;
		mw.config.get( 'wgAction' ) === 'history'&lt;br /&gt;
		|| mw.util.getParamValue( 'lifilter' )&lt;br /&gt;
		|| (&lt;br /&gt;
			mw.config.get( 'wgCanonicalSpecialPageName' )&lt;br /&gt;
			&amp;amp;&amp;amp; mw.config.get( 'wgCanonicalSpecialPageName' ).match(/^(Activeusers|CheckUser|Contributions|Ipblocklist|LinkSearch|Log|Search|(Uncategoriz|Unus|Want)ed(categori|templat)es|Wantedfiles|(Short|Long|Ancient|Uncategorized|Unwatched|Wanted|Protected|Deadend|Lonely|New)pages|Fewestrevisions|Withoutinterwiki|(Double|Broken)Redirects|Protectedtitles|CrossNamespaceLinks|Recentchanges|Categories|Disambiguations|Listredirects|GlobalUsers|GlobalBlockList|Listusers|Watchlist|Most(linked|revisions|categories)|Nuke|Whatlinkshere)$/i)&lt;br /&gt;
		)&lt;br /&gt;
	) {&lt;br /&gt;
		filterLists.load();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
} // end if guard&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>