میڈیاویکی:Gadget-twinkleprod.js

ویکی کتب سے

یاد دہانی: محفوظ کرنے کے بعد ان تبدیلیوں کو دیکھنے کے لیے آپ کو اپنے براؤزر کا کیش (cache) صاف کرنا ہوگا۔

  • فائرفاکس/ سفاری: جب Reload پر کلک کریں تو Shift دباکر رکھیں، یا Ctrl-F5 یا Ctrl-R دبائیں (Mac پر R-⌘)
  • گوگل کروم: Ctrl-Shift-R دبائیں (Mac پر Shift-R-⌘)
  • انٹرنیٹ ایکسپلورر: جب Refresh پر کلک کریں تو Ctrl یا Ctrl-F5 دبائیں
  • اوپیرا: Tools → Preferences میں جائیں اور کیش (cache) صاف کریں
//<nowiki>


(function($){


/*
 ****************************************
 *** twinkleprod.js: PROD module
 ****************************************
 * Mode of invocation:     Tab ("‌مجوزہ‌حذف‌شدگی")
 * Active on:              Existing articles which are not redirects
 * Config directives in:   TwinkleConfig
 */

Twinkle.prod = function twinkleprod() {
	if( mw.config.get('wgNamespaceNumber') !== 0 || !mw.config.get('wgCurRevisionId') || Morebits.wiki.isPageRedirect() ) {
		return;
	}
	
	Twinkle.addPortletLink( Twinkle.prod.callback, "مجوزہ‌حذف‌شدگی", "tw-prod", "وکی کتب:مجوزہ حذف شدگی کے مطابق نامزدگی" );
};

Twinkle.prod.callback = function twinkleprodCallback() {
	Twinkle.prod.defaultReason = Twinkle.getPref('prodReasonDefault');

	var Window = new Morebits.simpleWindow( 800, 410 );
	Window.setTitle( "مجوزہ‌حذف‌شدگی" );
	Window.setScriptName( "پلک" );
	Window.addFooterLink( "مجوزہ حذف شدگی کی حکمت عملی", "وپ:مجوزہ حذف شدگی" );
	Window.addFooterLink( "بقید حیات شخصیات کی سوانح عمری کی مجوزہ حذف شدگی کی حکمت عملی", "وپ:بقید حیات شخصیات کی سوانح عمری کی مجوزہ حذف شدگی" );
	Window.addFooterLink( "رہنمائے پلک", ":en:WP:TW/DOC#prod" );

	var form = new Morebits.quickForm( Twinkle.prod.callback.evaluate );
	
	var field = form.append( {
			type: 'field',
			label: 'مجوزہ حذف شدگی کی قسم'
		} );
	field.append( {
			type: 'radio',
			name: 'prodtype',
			event: Twinkle.prod.callback.prodtypechanged,
			list: [
				{
					label: 'مجوزہ حذف شدگی',
					value: 'prod',
					checked: true,
					tooltip: 'وپ:مجوزہ حذف شدگی کے مطابق عام مجوزہ حذف شدگی'
				},
				{
					label: 'بقید حیات شخصیات کی سوانح عمری کی مجوزہ حذف شدگی (بلا حوالہ)',
					value: 'prodblp',
					tooltip: 'وکی کتب:بحش محش کے مطابق بقید حیات شخصیات کی نئی اور مکمل بلا حوالہ سوانح عمری کی مجوزہ حذف شدگی'
				}
			]
		} );

	form.append( {
			type: 'field',
			label:'دائرہ کار',
			name: 'work_area'
		} );

	form.append( { type:'submit', label:'حذف کی تجویز پیش کریں' } );

	var result = form.render();
	Window.setContent( result );
	Window.display();
	
	// fake a change event on the first prod type radio, to initialize the type-dependent controls
	var evt = document.createEvent( "Event" );
	evt.initEvent( 'change', true, true );
	result.prodtype[0].dispatchEvent( evt );
};

Twinkle.prod.callback.prodtypechanged = function(event) {
	//prepare frame for prod type dependant controls
	var field = new Morebits.quickForm.element( {
			type: 'field',
			label: 'پیرامیٹر',
			name: 'work_area'
		} );
	// create prod type dependant controls
	switch( event.target.values ) {
		case 'prod':
			field.append( {
					type: 'checkbox',
					list: [
						{
							label: 'اگر ممکن ہو تو صفحہ ساز صارف کو اطلاع دیں',
							value: 'notify',
							name: 'notify',
							tooltip: "اگر اس خانہ کو منتخب کریں تو صفحہ ساز صارف کے تبادلۂ خیال صفحہ میں اطلاعی سانچہ چسپاں کر دیا جائے گا۔",
							checked: true
						}
					]
				}
			);
			field.append( {
					type: 'textarea',
					name: 'reason',
					label: 'مجوزہ حذف شدگی کی وجہ:',
					value: Twinkle.prod.defaultReason
				} );
			break;

		case 'prodblp':
			// first, remember the prod value that the user entered in the textarea, in case he wants to switch back. We can abuse the config field for that.
			if (event.target.form.reason) {
				Twinkle.prod.defaultReason = event.target.form.reason.value;
			}

			field.append( {
					type: 'checkbox',
					list: [
						{
							label: 'اگر ممکن ہو تو صفحہ ساز صارف کو اطلاع دیں',
							value: 'notify',
							name: 'notify',
							tooltip: 'صفحہ ساز صارف کو اطلاع دے دی گئی ہے۔',
							checked: true,
							disabled: true
						}
					]
				}
			);
			//temp warning, can be removed down the line once BLPPROD is more established. Amalthea, May 2010.
			var boldtext = document.createElement('b');
			boldtext.appendChild(document.createTextNode('واضح رہے کہ یہ ٹیگ بقید حیات شخصیات کی ان سوانح عمریوں کے لیے ہے جو مکمل بلا حوالہ مواد پر مشتمل ہو، اگر مضمون میں حوالہ موجود ہو لیکن آپ اسے قابل حذف سمجھتے ہیں تو [[وکی کتب:مبح]] پر اپنی تجویز پیش کریں۔'));
			field.append({
				type: 'div',
				label: boldtext
			});
			if (mw.config.get('wgArticleId') < 67362) {
				field.append({
					type: 'header',
					label: 'ایسا معلوم ہوتا ہے کہ یہ مضمون 23 فروری 2012ء سے قبل لکھا گیا ہے، لہذا اس کی حذف شدگی کی تجویز [[وکی کتب:مبح]] کے مطابق دیجیے۔'
				});
			}
			break;

		default:
			break;
	}

	event.target.form.replaceChild( field.render(), $(event.target.form).find('fieldset[name="work_area"]')[0] );
};

Twinkle.prod.callbacks = {
	main: function(pageobj) {
		var statelem = pageobj.getStatusElement();

		if( !pageobj.exists() ) {
			statelem.error( "ایسا معلوم ہوتا ہے کہ یہ صفحہ موجود نہیں ہے، شاید اسے حذف کر دیا گیا ہے۔" );
			return;
		}

		var text = pageobj.getPageText();
		var params = pageobj.getCallbackParameters();

		var tag_re = /(\{\{(?:db-?|delete|[aitcmrs]fd|md1)[^{}]*?\|?[^{}]*?\}\})/i;
		if( tag_re.test( text ) ) {
			statelem.warn( 'اس مضمون کو حذف کرنے کی تجویز دی جا چکی ہے!' );
			return;
		}

		// Remove tags that become superfluous with this action
		text = text.replace(/\{\{\s*([Nn]ew unreviewed article|غیر مراجعت شدہ مضمون|[Uu]nreviewed|[Uu]serspace draft|غیر مراجعت شدہ صفحہ صارف)\s*(\|(?:\{\{[^{}]*\}\}|[^{}])*)?\}\}\s*/g, "");

		var prod_re = /\{\{\s*(?:dated prod|dated prod blp|Prod blp\/dated|مجوزہ حذف شدگی\/پیغام|Proposed deletion\/dated)\s*\|(?:\{\{[^\{\}]*\}\}|[^\}\{])*\}\}/i;
		var summaryText;
		if( !prod_re.test( text ) ) {
			// Notification to first contributor
			if( params.usertalk ) {
				var thispage = new Morebits.wiki.page(mw.config.get('wgPageName'));
				thispage.setCallbackParameters(params);
				thispage.lookupCreator(Twinkle.prod.callbacks.userNotification);
			}
			// If not notifying, log this PROD
			else if( Twinkle.getPref('logProdPages') ) {
				Twinkle.prod.callbacks.addToLog(params);
			}

			summaryText = "[[وپ:" + (params.blp ? "بحش" : "") + " بحش کی مجوزہ حذف شدگی]]۔";
			text = "{{subst:prod" + (params.blp ? " blp" : ("|1=" + Morebits.string.formatReasonText(params.reason))) + "}}\n" + text;
		}
		else {  // already tagged for PROD, so try endorsing it
			var prod2_re = /\{\{(?:Proposed deletion endorsed|prod-?2).*?\}\}/;
			if( prod2_re.test( text ) ) {
				statelem.warn( 'اس مضمون میں پہلے سے {{مجوزہ حذف شدگی}} اور {{prod-2}} کے سانچے چسپاں ہیں، چنانچہ اس کارروائی کو منسوخ کیا جا رہا ہے' );
				return;
			}
			var confirmtext = "اس مضمون میں {{مجوزہ حذف شدگی}} کا سانچہ موجود ہے۔ \nکیا آپ {{prod-2}} (مجوزہ حذف شدگی کی تصدیق) اپنی تشریح کے ساتھ چسپاں کرنا چاہتے ہیں؟";
			if (params.blp) {
				confirmtext = "اس مضمون میں غیر سوانحی {{مجوزہ حذف شدگی}} کا سانچہ موجود ہے۔  \nکیا آپ {{مجوزہ حذف شدگی کی تصدیق}} (سانچہ) مع تشریح «بقید حیات شخصیت کی بلا حوالہ سوانح عمری» درج کرنا چاہتے ہیں؟";
			}
			if( !confirm( confirmtext ) ) {
				statelem.warn( 'صارف کی درخواست پر منسوخ کر دیا گیا' );
				return;
			}

			summaryText = "[[وکی کتب:" + (params.blp ? "بحش" : "") + " محش]] کے مطابق مجوزہ حذف شدگی کی تصدیق۔";
			text = text.replace( prod_re, text.match( prod_re ) + "\n{{prod-2|1=" + (params.blp ?
				"یہ مضمون [[وکی کتب:بحش محش|بقید حیات شخصیت کی بلا حوالہ سوانح عمری]] پر مشتمل ہے" :
				Morebits.string.formatReasonText(params.reason)) + "}}\n" );

			if( Twinkle.getPref('logProdPages') ) {
				params.logEndorsing = true;
				Twinkle.prod.callbacks.addToLog(params);
			}
		}

		pageobj.setPageText(text);
		pageobj.setEditSummary(summaryText + Twinkle.getPref('summaryAd'));
		pageobj.setWatchlist(Twinkle.getPref('watchProdPages'));
		pageobj.setCreateOption('nocreate');
		pageobj.save();
	},

	userNotification: function(pageobj) {
		var params = pageobj.getCallbackParameters();
		var initialContrib = pageobj.getCreator();

		// Disallow warning yourself
		if (initialContrib === mw.config.get("wgUserName")) {
			pageobj.getStatusElement().warn("صفحہ ساز صارف کو اطلاع نہیں دی گئی کیونکہ آپ (" + initialContrib + ") ہی نے یہ صفحہ تخلیق کیا ہے۔");
			if (Twinkle.getPref("logProdPages")) {
				Twinkle.prod.callbacks.addToLog(params);
			}
			return;
		}

		var usertalkpage = new Morebits.wiki.page('تبادلۂ خیال صارف:' + initialContrib, "ابتدائی صارف (" + initialContrib + ") کو اطلاع");
		var notifytext = "\n{{subst:prodwarning" + (params.blp ? "بحش" : "") + "|1=" + Morebits.pageNameNorm + "|concern=" + params.reason + "}}~~~~";
		usertalkpage.setAppendText(notifytext);
		usertalkpage.setEditSummary("اطلاع: مجوزہ حذف شدگی برائے [[" + Morebits.pageNameNorm + "]]." + Twinkle.getPref('summaryAd'));
		usertalkpage.setCreateOption('recreate');
		usertalkpage.setFollowRedirect(true);
		usertalkpage.append();
		if (Twinkle.getPref('logProdPages')) {
			params.logInitialContrib = initialContrib;
			Twinkle.prod.callbacks.addToLog(params);
		}
	},

	addToLog: function(params) {
		var wikipedia_page = new Morebits.wiki.page("User:" + mw.config.get('wgUserName') + "/" + Twinkle.getPref('prodLogPageName'), "صارف نام فضا کے نوشتہ میں اندراج جاری ہے");
		wikibooks_page.setCallbackParameters(params);
		wikibooks_page.load(Twinkle.prod.callbacks.saveLog);
	},

	saveLog: function(pageobj) {
		var text = pageobj.getPageText();
		var params = pageobj.getCallbackParameters();

		// add blurb if log page doesn't exist
		if (!pageobj.exists()) {
			text =
				"یہ [[وپ:مجوزہ حذف شدگی|مجوزہ حذف شدگی]] کے ان تمام ٹیگوں کا نوشتہ ہے جنہیں اس صارف نے [[وپ:پلک|پلک]] کے مجوزہ حذف شدگی ماڈیول کے ذریعہ لگائے ہیں یا ان کی تصدیق کی ہے۔\n\n" +
				"اگر آپ نوشتہ کو ختم کرنا چاہتے ہیں تو اسے [[وپ:پلک/ترجیحات|پلک کی ترجیحات]] سے غیر فعال کر دیں، اور " +
				"اس صفحہ کو [[وپ:معیارات برائے سریع حذف شدگی|مسح]] کے تحت نامزد کر دیں۔\n";
		}

		// create monthly header
		var date = new Date();
		var headerRe = new RegExp("^==+\\s*" + date.getUTCMonthName() + "\\s+" + date.getUTCFullYear() + "\\s*==+", "m");
		if (!headerRe.exec(text)) {
			text += "\n\n=== {{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}} ===";
		}

		var summarytext;
		if (params.logEndorsing) {
			text += "\n# [[" + Morebits.pageNameNorm + "]]: " + (params.blp ? "بقید حیات شخصیت کی سوانح عمری" : "") + " کی مجوزہ حذف شدگی کی تائید!~~~~~";
			if (params.reason) {
				text += "\n#* '''وجہ''': " + params.reason + "\n";
			}
			summarytext = "[[" + Morebits.pageNameNorm + "]]کی مجوزہ حذف شدگی کی تصدیق کا اندراج ہو رہا ہے";
		} else {
			text += "\n# [[" + Morebits.pageNameNorm + "]]: " + (params.blp ? "BLP " : "") + "مجوزہ حذف شدگی";
			if (params.logInitialContrib) {
				text += "،  {{صارف|" + params.logInitialContrib + "}} کو اطلاع دے دی گئی";
			}
			text += "~~~~~\n";
			if (!params.blp) {
				text += "#* '''وجہ''': " + params.reason + "\n";
			}
			summarytext = "[[" + Morebits.pageNameNorm + "]]کی مجوزہ حذف شدگی کا اندراج ہو رہا ہے";
		}

		pageobj.setPageText(text);
		pageobj.setEditSummary(summarytext + Twinkle.getPref('summaryAd'));
		pageobj.setCreateOption("recreate");
		pageobj.save();
	}
};

Twinkle.prod.callback.evaluate = function twinkleprodCallbackEvaluate(e) {
	var form = e.target;
	var prodtype;

	var prodtypes = form.prodtype;
	for( var i = 0; i < prodtypes.length; i++ ) {
		if( !prodtypes[i].checked ) {
			continue;
		}
		prodtype = prodtypes[i].values;
		break;
	}

	var params = {
		usertalk: form.notify.checked,
		blp: prodtype === 'prodblp',
		reason: prodtype === 'prodblp' ? '' : form.reason.value  // using an empty string here as fallback will help with prod-2.
	};

	Morebits.simpleWindow.setButtonsEnabled( false );
	Morebits.status.init( form );

	if (prodtype === 'prodblp' && mw.config.get('wgArticleId') < 67362) {
		if (!confirm( "ایسا معلوم ہوتا ہے کہ یہ مضمون 23 فروری 2012ء سے قبل لکھا گیا ہے، لہذا یہ مضمون بقید حیات شخصیات کی سوانح عمری کی مجوزہ حذف شدگی کے شرائط کے موافق نہیں۔ کیا آپ واقعی اس میں یہ سانچہ چسپاں کرنا چاہیں گے؟" )) {
			Morebits.status.warn( 'اطلاع', 'صارف کی درخواست پر منسوخ کیا جا رہا ہے۔' );
			return;
		}
	}

	Morebits.wiki.actionCompleted.redirect = mw.config.get('wgPageName');
	Morebits.wiki.actionCompleted.notice = "سانچہ چسپاں کر دیا گیا";

	var wikibooks_page = new Morebits.wiki.page(mw.config.get('wgPageName'), "مضمون میں سانچہ چسپاں کیا جا رہا ہے");
	wikibooks_page.setFollowRedirect(true);  // for NPP, and also because redirects are ineligible for PROD
	wikibooks_page.setCallbackParameters(params);
	wikibooks_page.load(Twinkle.prod.callbacks.main);
};
})(jQuery);


//</nowiki>