مدیاویکی:Gadget-twinkledelimages.js: تفاوت میان نسخه‌ها

از ایران پدیا
پرش به ناوبری پرش به جستجو
(صفحه‌ای تازه حاوی «//<nowiki> (function($){ /* **************************************** *** twinkledelimages.js: Batch deletion of images (sysops only) **...» ایجاد کرد)
 
جز (۱ نسخه واردشده)
 
(۳ نسخهٔ میانیِ ایجادشده توسط همین کاربر نشان داده نشد)
خط ۲۸: خط ۲۸:
Window.setTitle( "حذف جمعی پرونده" );
Window.setTitle( "حذف جمعی پرونده" );
Window.setScriptName( "توینکل" );
Window.setScriptName( "توینکل" );
Window.addFooterLink( "راهنمای توینکل", "WP:TW/DOC#delimages" );
Window.addFooterLink( "راهنمای توینکل", "ip:TW/DOC#delimages" );


var form = new Morebits.quickForm( Twinkle.delimages.callback.evaluate );
var form = new Morebits.quickForm( Twinkle.delimages.callback.evaluate );
خط ۸۰: خط ۸۰:
};
};
}
}
var wikipedia_api = new Morebits.wiki.api( 'در حال گرفتن پرونده‌ها', query, function( self ) {
var iranpedia_api = new Morebits.wiki.api( 'در حال گرفتن پرونده‌ها', query, function( self ) {
var xmlDoc = self.responseXML;
var xmlDoc = self.responseXML;
var images = $(xmlDoc).find('page[imagerepository="local"]');
var images = $(xmlDoc).find('page[imagerepository="local"]');
خط ۱۰۹: خط ۱۰۹:
});
});


wikipedia_api.params = { form:form, Window:Window };
iranpedia_api.params = { form:form, Window:Window };
wikipedia_api.post();
iranpedia_api.post();
var root = document.createElement( 'div' );
var root = document.createElement( 'div' );
Morebits.status.init( root );
Morebits.status.init( root );
خط ۱۴۹: خط ۱۴۹:
'titles': image
'titles': image
};
};
var wikipedia_api = new Morebits.wiki.api( 'در حال بررسی وجودداشتن پرونده ' + image, query, Twinkle.delimages.callbacks.main );
var iranpedia_api = new Morebits.wiki.api( 'در حال بررسی وجودداشتن پرونده ' + image, query, Twinkle.delimages.callbacks.main );
wikipedia_api.params = { image:image, reason:reason, unlink_image:unlink_image, delete_image:delete_image };
iranpedia_api.params = { image:image, reason:reason, unlink_image:unlink_image, delete_image:delete_image };
wikipedia_api.post();
iranpedia_api.post();
}
}
}
}
خط ۱۸۳: خط ۱۸۳:
'iulimit': Morebits.userIsInGroup( 'sysop' ) ? 5000 : 500 // 500 is max for normal users, 5000 for bots and sysops
'iulimit': Morebits.userIsInGroup( 'sysop' ) ? 5000 : 500 // 500 is max for normal users, 5000 for bots and sysops
};
};
var wikipedia_api = new Morebits.wiki.api( 'در حال گرفتن پیوندهای پرونده', query, Twinkle.delimages.callbacks.unlinkImageInstancesMain );
var iranpedia_api = new Morebits.wiki.api( 'در حال گرفتن پیوندهای پرونده', query, Twinkle.delimages.callbacks.unlinkImageInstancesMain );
wikipedia_api.params = self.params;
iranpedia_api.params = self.params;
wikipedia_api.post();
iranpedia_api.post();
}
}
if( self.params.delete_image ) {
if( self.params.delete_image ) {

نسخهٔ کنونی تا ‏۲ دسامبر ۲۰۱۷، ساعت ۲۱:۵۲

//<nowiki>


(function($){


/*
****************************************
*** twinkledelimages.js: Batch deletion of images (sysops only)
****************************************
* Mode of invocation:     Tab ("حذف جمعی پرونده")
* Active on:              Existing non-special pages
* Config directives in:   TwinkleConfig
*/

Twinkle.delimages = function twinkledeli() {
	if( mw.config.get( 'wgNamespaceNumber' ) < 0 || !mw.config.get( 'wgCurRevisionId' ) ) {
		return;
	}
	if( Morebits.userIsInGroup( 'sysop' ) ) {
		Twinkle.addPortletLink( Twinkle.delimages.callback, "حذف جمعی پرونده", "tw-deli", "حذف پرونده‌های یافته‌شده در این صفحه" );
	}
};

Twinkle.delimages.unlinkCache = {};
Twinkle.delimages.callback = function twinkledeliCallback() {
	var Window = new Morebits.simpleWindow( 800, 400 );
	Window.setTitle( "حذف جمعی پرونده" );
	Window.setScriptName( "توینکل" );
	Window.addFooterLink( "راهنمای توینکل", "ip:TW/DOC#delimages" );

	var form = new Morebits.quickForm( Twinkle.delimages.callback.evaluate );
	form.append( {
		type: 'checkbox',
		list: [
			{
				label: 'حذف پرونده‌ها',
				name: 'delete_image',
				value: 'delete',
				checked: true
			},
			{
				label: 'پیوندهای داده‌شده به این پرونده را حذف کن',
				name: 'unlink_image',
				value: 'unlink',
				checked: true
			}
		]
	} );
	form.append( {
		type: 'textarea',
		name: 'reason',
		label: 'دلیل: '
	} );
	var query;
	if( mw.config.get( 'wgNamespaceNumber' ) === 14 ) {  // Category:
		query = {
			'action': 'query',
			'generator': 'categorymembers',
			'gcmtitle': mw.config.get( 'wgPageName' ),
			'gcmnamespace': 6,  // File:
			'gcmlimit' : Twinkle.getPref('deliMax'), 
			'prop': [ 'imageinfo', 'categories', 'revisions' ],
			'grvlimit': 1,
			'grvprop': [ 'user' ]
		};
	} else {
		// prepare for a possible merge with batchdelete
		alert('مدیر گرامی، \n\n' +
			'ما برای ایجادکردن تغییرات بزرگ در پودمان «حذف جمعی پرونده» برنامه‌ریزی کرده‌ایم؛ ما به ویژه در شگفتیم که این ابزار برای حفظ قابلیتی که اجازه می‌دهد «حذف جمعی پرونده» از صفحه‌هایی غیر از صفحه‌های رده به‌کار رود ارزشمند است. \n\n' +
			'زمانی که «حذف جمعی پرونده» را از یک صفحهٔ غیررده فرامی‌خوانید، قدردان خواهیم بود اگر بتوانید به تیم توینکل در [[WT:TW]] آگاهی دهید. اگر هیچ‌کس نگوید که از این ابزار استفاده می‌کند، این قابلیت ممکن است به‌زودی حذف شود یا تغییر کند. \n\n' +
			'سپاسگزاریم، \nتیم توینکل');
		//form.append({ type:'div', style:'color:red;font-weight:bold;font-size:larger', label: 'This module is going away. Please use "D-batch" (batch deletion) instead.' });
		query = {
			'action': 'query',
			'generator': 'images',
			'titles': mw.config.get( 'wgPageName' ),
			'prop': [ 'imageinfo', 'categories', 'revisions' ],
			'gimlimit': 'max'
		};
	}
	var iranpedia_api = new Morebits.wiki.api( 'در حال گرفتن پرونده‌ها', query, function( self ) {
		var xmlDoc = self.responseXML;
		var images = $(xmlDoc).find('page[imagerepository="local"]');
		var list = [];

		$.each(images, function() {
			var $self = $(this);
			var image = $self.attr('title');
			var user = $self.find('imageinfo ii').attr('user');
			var last_edit = $self.find('revisions rev').attr('user');
			var disputed = $self.find('categories cl[title="رده:صفحه‌های بحث نیازمند تصحیح"]').length > 0;
			list.push( {
				'label': image + ' - نویسنده: ' + user + '، آخرین ویرایش از: ' + last_edit + ( disputed ? ' مورد مناقشه' : '' ),
				'value': image,
				'checked': !disputed
			});
		});

		self.params.form.append({
			type: 'checkbox',
			name: 'images',
			list: list
		});
		self.params.form.append( { type:'submit' } );

		var result = self.params.form.render();
		self.params.Window.setContent( result );
	});

	iranpedia_api.params = { form:form, Window:Window };
	iranpedia_api.post();
	var root = document.createElement( 'div' );
	Morebits.status.init( root );
	Window.setContent( root );
	Window.display();
};

Twinkle.delimages.currentDeleteCounter = 0;
Twinkle.delimages.currentUnlinkCounter = 0;
Twinkle.delimages.currentdeletor = 0;
Twinkle.delimages.callback.evaluate = function twinkledeliCallbackEvaluate(event) {
	var images = event.target.getChecked( 'images' );
	var reason = event.target.reason.value;
	var delete_image = event.target.delete_image.checked;
	var unlink_image = event.target.unlink_image.checked;
	if( ! reason ) {
		return;
	}

	Morebits.simpleWindow.setButtonsEnabled( false );
	Morebits.status.init( event.target );

	function toCall( work ) {
		if( work.length === 0 && Twinkle.delimages.currentDeleteCounter <= 0 && Twinkle.delimages.currentUnlinkCounter <= 0 ) {
			window.clearInterval( Twinkle.delimages.currentdeletor );
			Morebits.wiki.removeCheckpoint();
			return;
		} else if( work.length !== 0 && Twinkle.delimages.currentDeleteCounter <= Twinkle.getPref('batchDeleteMinCutOff') && Twinkle.delimages.currentUnlinkCounter <= Twinkle.getPref('batchDeleteMinCutOff') ) {
			Twinkle.delimages.unlinkCache = []; // Clear the cache
			var images = work.shift();
			Twinkle.delimages.currentDeleteCounter = images.length;
			Twinkle.delimages.currentUnlinkCounter = images.length;
			var i;
			for( i = 0; i < images.length; ++i ) {
				var image = images[i];
				var query = {
					'action': 'query',
					'titles': image
				};
				var iranpedia_api = new Morebits.wiki.api( 'در حال بررسی وجودداشتن پرونده ' + image, query, Twinkle.delimages.callbacks.main );
				iranpedia_api.params = { image:image, reason:reason, unlink_image:unlink_image, delete_image:delete_image };
				iranpedia_api.post();
			}
		}
	}
	var work = Morebits.array.chunk( images, Twinkle.getPref('deliChunks') );
	Morebits.wiki.addCheckpoint();
	Twinkle.delimages.currentdeletor = window.setInterval( toCall, 1000, work );
};
Twinkle.delimages.callbacks = {
	main: function( self ) {
		var xmlDoc = self.responseXML;
		var $data = $(xmlDoc);

		var normal = $data.find('normalized n').attr('to');

		if( normal ) {
			self.params.image = normal;
		}

		var exists = $data.find('pages page[title="'+self.params.image.replace( /"/g, '\\"')+'"]:not([missing])').length > 0;

		if( ! exists ) {
			self.statelem.error( "صفحه قبلاً حذف شده‌است." );
			return;
		}
		if( self.params.unlink_image ) {
			var query = {
				'action': 'query',
				'list': 'imageusage',
				'iutitle': self.params.image,
				'iulimit': Morebits.userIsInGroup( 'sysop' ) ? 5000 : 500 // 500 is max for normal users, 5000 for bots and sysops
			};
			var iranpedia_api = new Morebits.wiki.api( 'در حال گرفتن پیوندهای پرونده', query, Twinkle.delimages.callbacks.unlinkImageInstancesMain );
			iranpedia_api.params = self.params;
			iranpedia_api.post();
		}
		if( self.params.delete_image ) {

			var imagepage = new Morebits.wiki.page( self.params.image, 'در حال حذف پرونده');
			imagepage.setEditSummary( "پرونده حذف شد: " + self.params.reason + Twinkle.getPref('deletionSummaryAd'));
			imagepage.deletePage();
		}
	},
	unlinkImageInstancesMain: function( self ) {
		var xmlDoc = self.responseXML;
		var instances = [];
		$(xmlDoc).find('imageusage iu').each(function(){
			instances.push($(this).attr('title'));
		});
		if( instances.length === 0 ) {
			--Twinkle.delimages.currentUnlinkCounter;
			return;
		}

		$.each( instances, function(k,title) {
			var page = new Morebits.wiki.page(title, "در حال پیوندزدایی نمونه‌ها در " + title);
			page.setFollowRedirect(true);
			page.setCallbackParameters({'image': self.params.image, 'reason': self.params.reason});
			page.load(Twinkle.delimages.callbacks.unlinkImageInstances);

		});
	},
	unlinkImageInstances: function( self ) {
		var params = self.getCallbackParameters();
		var statelem = self.getStatusElement();

		var image = params.image.replace( /^(?:Image|File|تصویر|پرونده):/, '' );
		var old_text = self.getPageText();
		var wikiPage = new Morebits.wikitext.page( old_text );
		wikiPage.commentOutImage( image , 'توضیح شد زیرا تصویر حذف شده‌است.' );
		var text = wikiPage.getText();

		if( text === old_text ) {
			statelem.error( 'خطا در حذف پیوند نگاره ' + image +' از ' + self.getPageName() );
			return;
		}
		self.setPageText(text);
		self.setEditSummary('زدودن پروندهٔ ' + image + " که به این خاطر حذف شده است: \"" + params.reason + "\")" + "؛ " + Twinkle.getPref('deletionSummaryAd'));
		self.setCreateOption('nocreate');
		self.save();
	}
};
})(jQuery);


//</nowiki>