مدیاویکی:Gadget-twinkleprod.js
پرش به ناوبری
پرش به جستجو
نکته: پس از انتشار ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.
- فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلیدهای Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانههای اپل مکینتاش کلیدهای ⌘-R)
- گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانههای اپل مکینتاش کلیدهای ⌘-Shift-R)
- اینترنت اکسپلورر/ Edge: کلید Ctrl را نگهدارید و روی دکمهٔ Refresh کلیک کنید، یا کلیدهای Ctrl-F5 را با هم فشار دهید
- اپرا: Ctrl-F5 را بفشارید.
//<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( "راهنمای توینکل", "ip: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: 'حذف زماندار زندگینامه تازه و کاملاً بدون زندگان، طبق [[ip:BLPPROD]]'
}
]
} );
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') < 26596183) {
field.append({
type: 'header',
label: 'به نظر میرسد که این مقاله قبل از ژانویهٔ ۲۰۱۲ ساخته شدهاست. لطفاً از روشهای دیگر حذف استفاده نمائید.'
});
}
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 ?
"نوشتار [[ip:BLPPROD|زندگینامه زندگانی بدون منبع]] است" :
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 iranpedia_page = new Morebits.wiki.page("User:" + mw.config.get('wgUserName') + "/" + Twinkle.getPref('prodLogPageName'), "در حال افزودن ورودی به سیاههٔ فضای کاربری");
iranpedia_page.setCallbackParameters(params);
iranpedia_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 =
"اینجا یک سیاهه از همهٔ برچسبهای [[ip:PROD|حذف زماندار]] است که توسط این کاربر با استفاده از پودمان حذف زماندار [[اپ:تل|توینکل]] اعمال یا تأیید شدند.\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') < 26596183) {
if (!confirm( "به نظر میرسد این نوشتار پیش از ۱۸ مارس ۲۰۱۰ ساخته شدهاست، و بنابراین فاقد شرایط لازم برای حذف زماندار زندگینامه زندگان است. آیا میخواهید به برچسبزدن آن ادامه دهید؟" )) {
Morebits.status.warn( 'آگاهسازی', 'در حال لغوکردن به درخواست کاربر' );
return;
}
}
Morebits.wiki.actionCompleted.redirect = mw.config.get('wgPageName');
Morebits.wiki.actionCompleted.notice = "برچسبزدن کامل شد";
var iranpedia_page = new Morebits.wiki.page(mw.config.get('wgPageName'), "در حال برچسبزدن به صفحه");
iranpedia_page.setFollowRedirect(true); // for NPP, and also because redirects are ineligible for PROD
iranpedia_page.setCallbackParameters(params);
iranpedia_page.load(Twinkle.prod.callbacks.main);
};
})(jQuery);
//</nowiki>