<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-ScoredRevisions.js</id>
		<title>مدیاویکی:Gadget-ScoredRevisions.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-ScoredRevisions.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-ScoredRevisions.js&amp;action=history"/>
		<updated>2026-08-03T10:17:48Z</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-ScoredRevisions.js&amp;diff=283&amp;oldid=prev</id>
		<title>Admin: صفحه‌ای تازه حاوی «// Local configuration for this wiki mw.config.set( 'ScoredRevisionsThresholds', { low: 0.9, medium: 0.95, high: 0.99 } );  // [[File:User:...» ایجاد کرد</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-ScoredRevisions.js&amp;diff=283&amp;oldid=prev"/>
				<updated>2016-03-01T08:05:53Z</updated>
		
		<summary type="html">&lt;p&gt;صفحه‌ای تازه حاوی «// Local configuration for this wiki mw.config.set( &amp;#039;ScoredRevisionsThresholds&amp;#039;, { low: 0.9, medium: 0.95, high: 0.99 } );  // [[File:User:...» ایجاد کرد&lt;/p&gt;
&lt;p&gt;&lt;b&gt;صفحهٔ تازه&lt;/b&gt;&lt;/p&gt;&lt;div&gt;// Local configuration for this wiki&lt;br /&gt;
mw.config.set( 'ScoredRevisionsThresholds', { low: 0.9, medium: 0.95, high: 0.99 } );&lt;br /&gt;
&lt;br /&gt;
// [[File:User:He7d3r/Tools/ScoredRevisions.js]] (workaround for [[phab:T35355]])&lt;br /&gt;
/**&lt;br /&gt;
 * Highlight revisions by their scores&lt;br /&gt;
 * Copied from https://raw.githubusercontent.com/he7d3r/mw-gadget-ScoredRevisions/0b0b19d4bcaa0c58df06dfb9f22dbca09851e41b/src/ScoredRevisions.js&lt;br /&gt;
 * @author: Helder (https://github.com/he7d3r)&lt;br /&gt;
 * @license: CC BY-SA 3.0 &amp;lt;https://creativecommons.org/licenses/by-sa/3.0/&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
( function ( mw, $ ) {&lt;br /&gt;
	'use strict';&lt;br /&gt;
&lt;br /&gt;
	var showScores = mw.util.getParamValue( 'showscores' ) !== '0',&lt;br /&gt;
		models,&lt;br /&gt;
		chosenModels = [ 'damaging', 'reverted' ],&lt;br /&gt;
		conf = mw.config.get( [&lt;br /&gt;
			'wgIsArticle',&lt;br /&gt;
			'wgCurRevisionId',&lt;br /&gt;
			'wgCanonicalSpecialPageName',&lt;br /&gt;
			'wgDBname',&lt;br /&gt;
			'wgAction',&lt;br /&gt;
			'ScoredRevisionsThresholds',&lt;br /&gt;
			'ScoredRevisionsServerUrl',&lt;br /&gt;
			'ScoredRevisionsEnableForPatrolledRevs'&lt;br /&gt;
		] ),&lt;br /&gt;
		serverUrl = conf.ScoredRevisionsServerUrl || '//ores.wmflabs.org/scores/',&lt;br /&gt;
		enabledOnCurrentPage = showScores &amp;amp;&amp;amp; (&lt;br /&gt;
				$.inArray( conf.wgCanonicalSpecialPageName, [&lt;br /&gt;
					'Watchlist',&lt;br /&gt;
					'Recentchanges',&lt;br /&gt;
					'Recentchangeslinked',&lt;br /&gt;
					'Contributions'&lt;br /&gt;
				] ) !== -1 ||&lt;br /&gt;
				conf.wgAction === 'history' ||&lt;br /&gt;
				( conf.wgIsArticle &amp;amp;&amp;amp; conf.wgAction === 'view' )&lt;br /&gt;
			),&lt;br /&gt;
        idsOnPage = [],&lt;br /&gt;
        changes = {},&lt;br /&gt;
		thresholds = conf.ScoredRevisionsThresholds ||&lt;br /&gt;
			{&lt;br /&gt;
				low: 0.8,&lt;br /&gt;
				medium: 0.87,&lt;br /&gt;
				high: 0.94&lt;br /&gt;
			},&lt;br /&gt;
		batchSize = 50;&lt;br /&gt;
	function processScores( data ) {&lt;br /&gt;
		var i, revid, m, score, scoreData, scoreTitles, classes,&lt;br /&gt;
			idsWithScores = Object.keys( data );&lt;br /&gt;
		if ( data.error ) {&lt;br /&gt;
			mw.log.error( data.error );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		for ( i = 0; i &amp;lt; idsWithScores.length; i++ ) {&lt;br /&gt;
			revid = idsWithScores[ i ];&lt;br /&gt;
			classes = [];&lt;br /&gt;
			scoreTitles = [];&lt;br /&gt;
			scoreData = data[ revid ];&lt;br /&gt;
			for ( m = 0; m &amp;lt; models.length; m++ ) {&lt;br /&gt;
				if ( !scoreData || scoreData.error || scoreData[ models[ m ] ].error ) {&lt;br /&gt;
					continue;&lt;br /&gt;
				} else {&lt;br /&gt;
					score = scoreData[ models[ m ] ].probability[ 'true' ];&lt;br /&gt;
				}&lt;br /&gt;
				scoreTitles.push( ( 100 * score ).toFixed( 0 ) + '% ' + models[ m ] );&lt;br /&gt;
				// Allow users to customize the style (colors, icons, hide, etc) using classes&lt;br /&gt;
				// 'sr-reverted-high', 'sr-reverted-medium', 'sr-reverted-low' and 'sr-reverted-none'&lt;br /&gt;
				// 'sr-damaging-high', 'sr-damaging-medium', 'sr-damaging-low' and 'sr-damaging-none'&lt;br /&gt;
				classes.push(&lt;br /&gt;
					score &amp;gt;= thresholds.high ?&lt;br /&gt;
						'sr-' + models[ m ] + '-high' :&lt;br /&gt;
						score &amp;gt;= thresholds.medium ?&lt;br /&gt;
							'sr-' + models[ m ] + '-medium' :&lt;br /&gt;
							score &amp;gt;= thresholds.low ?&lt;br /&gt;
								'sr-' + models[ m ] + '-low' :&lt;br /&gt;
								'sr-' + models[ m ] + '-none'&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
			changes[ revid ]&lt;br /&gt;
				.addClass( classes.join( ' ' ) )&lt;br /&gt;
				.attr( 'title', 'Scores: ' + scoreTitles.join( '; ' ) );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function getRevIdsFromCurrentPage() {&lt;br /&gt;
		var dfd = $.Deferred(),&lt;br /&gt;
			idsFound = {},&lt;br /&gt;
			pageids = {},&lt;br /&gt;
			isChangesList = conf.wgCanonicalSpecialPageName === 'Watchlist' ||&lt;br /&gt;
				conf.wgCanonicalSpecialPageName === 'Recentchanges' ||&lt;br /&gt;
				conf.wgCanonicalSpecialPageName === 'Recentchangeslinked',&lt;br /&gt;
			/*jshint eqeqeq:false*/&lt;br /&gt;
			container = isChangesList ?&lt;br /&gt;
				'.mw-changeslist' :&lt;br /&gt;
				conf.wgCanonicalSpecialPageName === 'Contributions' ?&lt;br /&gt;
					'.mw-contributions-list' :&lt;br /&gt;
					'#pagehistory',&lt;br /&gt;
			// This &amp;quot;usenewrc&amp;quot; can be the string &amp;quot;0&amp;quot; if the user disabled the preference ([[phab:T54542#555387]])&lt;br /&gt;
			rowSelector = mw.user.options.get( 'usenewrc' ) == 1 &amp;amp;&amp;amp; isChangesList ?&lt;br /&gt;
				'tr' :&lt;br /&gt;
				'li',&lt;br /&gt;
			linkSelector = conf.wgCanonicalSpecialPageName === 'Contributions' ||&lt;br /&gt;
				conf.wgAction === 'history' ?&lt;br /&gt;
				'a.mw-changeslist-date' :&lt;br /&gt;
				'a',&lt;br /&gt;
			filterPatrolled = $( '.unpatrolled' ).length&lt;br /&gt;
				&amp;amp;&amp;amp; !conf.ScoredRevisionsEnableForPatrolledRevs;&lt;br /&gt;
&lt;br /&gt;
		if ( conf.wgIsArticle &amp;amp;&amp;amp; conf.wgAction === 'view' ) {&lt;br /&gt;
			changes[ conf.wgCurRevisionId ] = $( '#ca-history a' );&lt;br /&gt;
			return dfd.resolve( [ conf.wgCurRevisionId ] ).promise();&lt;br /&gt;
		}&lt;br /&gt;
		$( container )&lt;br /&gt;
			.find( rowSelector )&lt;br /&gt;
			.filter( function () {&lt;br /&gt;
				var $row = $( this );&lt;br /&gt;
				if ( $row.hasClass( 'wikibase-edit' ) ) {&lt;br /&gt;
					// Skip external edits from Wikidata&lt;br /&gt;
					return false;&lt;br /&gt;
				}&lt;br /&gt;
				if ( filterPatrolled &amp;amp;&amp;amp; !$row.has( '.unpatrolled' ).length ) {&lt;br /&gt;
					// skip patrolled edits&lt;br /&gt;
					return false;&lt;br /&gt;
				}&lt;br /&gt;
				return true;&lt;br /&gt;
			} )&lt;br /&gt;
			.each( function () {&lt;br /&gt;
				var $row = $( this ),&lt;br /&gt;
					id, pageid;&lt;br /&gt;
&lt;br /&gt;
				$row.find( linkSelector )&lt;br /&gt;
					.each( function () {&lt;br /&gt;
						var href = $( this ).attr( 'href' );&lt;br /&gt;
						id = mw.util.getParamValue( 'diff', href );&lt;br /&gt;
						if ( id === 'prev' || conf.wgCanonicalSpecialPageName === 'Contributions' ||&lt;br /&gt;
							conf.wgAction === 'history' ) {&lt;br /&gt;
							id = mw.util.getParamValue( 'oldid', href );&lt;br /&gt;
						}&lt;br /&gt;
						if ( id &amp;amp;&amp;amp; /^([1-9]\d*)$/.test( id ) ) {&lt;br /&gt;
							// Found a revid, stop&lt;br /&gt;
							return false;&lt;br /&gt;
						} else if ( !pageid ) {&lt;br /&gt;
							pageid = mw.util.getParamValue( 'curid', href );&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				// use id or pageid&lt;br /&gt;
				if ( id ) {&lt;br /&gt;
					changes[ id ] = $row;&lt;br /&gt;
					idsFound[ id ] = true;&lt;br /&gt;
				} else if ( pageid ) {&lt;br /&gt;
					pageids[ pageid ] = $row;&lt;br /&gt;
				}&lt;br /&gt;
			} );&lt;br /&gt;
		if ( $.isEmptyObject( pageids ) ) {&lt;br /&gt;
			dfd.resolve( Object.keys( idsFound ) );&lt;br /&gt;
		} else {&lt;br /&gt;
			$.getJSON( mw.util.wikiScript( 'api' ), {&lt;br /&gt;
				format: 'json',&lt;br /&gt;
				action: 'query',&lt;br /&gt;
				prop: 'revisions',&lt;br /&gt;
				// FIXME: the API does not allow using this with multiple pageids&lt;br /&gt;
				// rvdir: 'newer',&lt;br /&gt;
				rvprop: 'ids',&lt;br /&gt;
				pageids: Object.keys( pageids ).join( '|' )&lt;br /&gt;
			} )&lt;br /&gt;
			.done( function ( data ) {&lt;br /&gt;
				if ( data &amp;amp;&amp;amp; data.query &amp;amp;&amp;amp; data.query.pages ) {&lt;br /&gt;
					$.each( data.query.pages, function ( pageid, page ) {&lt;br /&gt;
						var id = page.revisions[ 0 ].revid;&lt;br /&gt;
						if ( !changes[ id ] ) {&lt;br /&gt;
							changes[ id ] = pageids[ pageid ];&lt;br /&gt;
							idsFound[ id ] = true;&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			} )&lt;br /&gt;
			.always( function () {&lt;br /&gt;
				dfd.resolve( Object.keys( idsFound ) );&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
		return dfd.promise();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function getAvailableModels() {&lt;br /&gt;
		var dfd = $.Deferred();&lt;br /&gt;
		$.ajax( {&lt;br /&gt;
			url: serverUrl + conf.wgDBname + '/',&lt;br /&gt;
			dataType: 'json'&lt;br /&gt;
		} )&lt;br /&gt;
		.done( function ( data ) {&lt;br /&gt;
			if ( data.error ) {&lt;br /&gt;
				mw.log.error( data.error );&lt;br /&gt;
				dfd.reject();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			dfd.resolve( Object.keys( data.models ) || [] );&lt;br /&gt;
		} )&lt;br /&gt;
		.fail( dfd.reject );&lt;br /&gt;
		return dfd.promise();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function load() {&lt;br /&gt;
		var i = 0,&lt;br /&gt;
			scoreBatch = function ( idsOnBatch, models ) {&lt;br /&gt;
				$.ajax( {&lt;br /&gt;
					url: serverUrl + conf.wgDBname + '/',&lt;br /&gt;
					data: {&lt;br /&gt;
						models: models.join( '|' ),&lt;br /&gt;
						revids: idsOnBatch.join( '|' )&lt;br /&gt;
					},&lt;br /&gt;
					dataType: 'json'&lt;br /&gt;
				} )&lt;br /&gt;
				.done( function ( data ) {&lt;br /&gt;
					processScores( data );&lt;br /&gt;
					i += batchSize;&lt;br /&gt;
					if ( i &amp;lt; idsOnPage.length ) {&lt;br /&gt;
						scoreBatch( idsOnPage.slice( i, i + batchSize ), models );&lt;br /&gt;
					}&lt;br /&gt;
				} )&lt;br /&gt;
				.fail( function () {&lt;br /&gt;
					mw.log.error( 'The request failed.', arguments );&lt;br /&gt;
				} );&lt;br /&gt;
			};&lt;br /&gt;
		getAvailableModels()&lt;br /&gt;
		.done( function ( availableModels ) {&lt;br /&gt;
			models = $.map( chosenModels, function ( m ) {&lt;br /&gt;
				return $.inArray( m, availableModels ) &amp;lt; 0 ? null : m;&lt;br /&gt;
			} );&lt;br /&gt;
			if ( !models.length ) {&lt;br /&gt;
				mw.log.warn(&lt;br /&gt;
					'ORES does not have any of the chosen models (' +&lt;br /&gt;
					chosenModels.join( ', ' ) + ') for this wiki.\n' +&lt;br /&gt;
					'More information at https://meta.wikimedia.org/wiki/ORES'&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
			getRevIdsFromCurrentPage()&lt;br /&gt;
			.done( function ( idsFromPage ) {&lt;br /&gt;
				idsOnPage = idsFromPage;&lt;br /&gt;
				if ( idsOnPage.length ) {&lt;br /&gt;
					scoreBatch( idsOnPage.slice( i, i + batchSize ), models );&lt;br /&gt;
				}&lt;br /&gt;
			} );&lt;br /&gt;
		} )&lt;br /&gt;
		.fail( function ( data ) {&lt;br /&gt;
			mw.log.error( data );&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( enabledOnCurrentPage ) {&lt;br /&gt;
		$( function() {&lt;br /&gt;
			mw.hook( 'wikipage.content' ).add( load );&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}( mediaWiki, jQuery ) );&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>