مدیاویکی:Gadget-twinkleprod.js
پرش به ناوبری
پرش به جستجو
نکته: پس از ذخیره کردن ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.
- فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلیدهای Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانههای اپل مکینتاش کلیدهای ⌘-R)
- گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانههای اپل مکینتاش کلیدهای ⌘-Shift-R)
- اینترنت اکسپلورر: کلید Ctrl را نگهدارید و روی دکمهٔ Refresh کلیک کنید، یا کلیدهای Ctrl-F5 را با هم فشار دهید
- اپرا: بروید به Menu → Settings (Opera → Preferences on a Mac) and then to Privacy & security → Clear browsing data → Cached images and files.
//<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( "Proposed deletion (PROD)" ); Window.setScriptName( "توینکل" ); Window.addFooterLink( "Proposed deletion policy", "WP:PROD" ); Window.addFooterLink( "BLP PROD policy", "WP:BLPPROD" ); Window.addFooterLink( "راهنمای توینکل", "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: 'Proposed deletion of new, completely unsourced biographies of living persons, per [[WP: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: "A notification template will be placed on the creator's talk page if this is true.", 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*(New unreviewed article|Userspace draft)\s*(\|(?:\{\{[^{}]*\}\}|[^{}])*)?\}\}\s*/ig, ""); var prod_re = /\{\{\s*(?:dated prod|dated prod blp|Prod blp\/dated|حذف زماندار|حذف زمان\u200cدار|حذف سریع|حذف زماندار|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, null); } summaryText = "درخواست برای [[وپ:حذف زماندار|حذف زماندار]]."; text = "{{جا:prod" + (params.blp ? " blp" : ("|1=" + params.reason)) + "}}\n" + text; } else { // already tagged for PROD, so try endorsing it var prod2_re = /\{\{(?:Proposed deletion endorsed|حذف زمان\u200cدار|حذف زمان دار|حذف زماندار|حذف زماندار|prod-?2).*?\}\}/; if( prod2_re.test( text ) ) { statelem.warn( 'Page already tagged with {{حذف زماندار}} and {{prod-2}} templates, aborting procedure' ); return; } var confirmtext = "A {{حذف زماندار}} tag was already found on this article. \nWould you like to add a {{prod-2}} (PROD endorsement) tag with your explanation?"; if (params.blp) { confirmtext = "A non-BLP {{prod}} tag was found on this article. \nWould you like to add a {{prod-2}} (PROD endorsement) tag with explanation \"unsourced BLP\"?"; } if( !confirm( confirmtext ) ) { statelem.warn( 'Aborted per user request' ); return; } summaryText = "Endorsing proposed deletion per [[WP:" + (params.blp ? "BLP" : "") + "PROD]]."; text = text.replace( prod_re, text.match( prod_re ) + "\n{{prod-2|1=" + (params.blp ? "article is a [[WP:BLPPROD|biography of a living person with no sources]]" : 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(); var usertalkpage = new Morebits.wiki.page('User talk:' + initialContrib, "Notifying initial contributor (" + initialContrib + ")"); var notifytext = "\n{{subst:prodwarning" + (params.blp ? "BLP" : "") + "|1=" + mw.config.get('wgPageName') + "|concern=" + params.reason + "}} ~~~~"; usertalkpage.setAppendText(notifytext); usertalkpage.setEditSummary("اطلاعرسانی: حذف زماندار [[" + mw.config.get('wgPageName') + "]]." + 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'), "Adding entry to userspace log"); wikipedia_page.setCallbackParameters(params); wikipedia_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 = "This is a log of all [[WP:PROD|proposed deletion]] tags applied or endorsed by this user using [[WP:TW|Twinkle]]'s PROD module.\n\n" + "If you no longer wish to keep this log, you can turn it off using the [[Wikipedia:Twinkle/Preferences|preferences panel]], and " + "nominate this page for speedy deletion under [[وپ:محس#ک۱|CSD U1]].\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=== " + date.getUTCMonthName() + " " + date.getUTCFullYear() + " ==="; } var summarytext; if (params.logEndorsing) { text += "\n# [[" + mw.config.get('wgPageName') + "]]: endorsed " + (params.blp ? "BLP " : "") + "PROD. ~~~~~"; if (params.reason) { text += "\n#* '''دلیل''': " + params.reason + "\n"; } summarytext = "تایید حذف زماندار [[" + mw.config.get('wgPageName') + "]]."; } else { text += "\n# [[" + mw.config.get('wgPageName') + "]] : " + (params.blp ? "BLP " : "") + "حذف زماندار"; if (params.logInitialContrib) { text += "، اطلاعرسانی به {{کاربر|" + params.logInitialContrib + "}}"; } text += " ~~~~~\n"; if (!params.blp) { text += "#* '''دلیل''': " + params.reason + "\n"; } summarytext = "حذف زماندار [[" + mw.config.get('wgPageName') + "]]."; } pageobj.setPageText(text); pageobj.setEditSummary(summarytext + Twinkle.getPref('summaryAd')); pageobj.setCreateOption("recreate"); pageobj.save(); } }; Twinkle.prod.callback.evaluate = function twinkleprodCallbackEvaluate(e) { mw.config.set('wgPageName', mw.config.get('wgPageName').replace(/_/g, ' ')); // for queen/king/whatever and country! 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( 'Notice', 'Aborting per user input.' ); return; } } Morebits.wiki.actionCompleted.redirect = mw.config.get('wgPageName'); Morebits.wiki.actionCompleted.notice = "Tagging complete"; var wikipedia_page = new Morebits.wiki.page(mw.config.get('wgPageName'), "Tagging page"); wikipedia_page.setFollowRedirect(true); // for NPP, and also because redirects are ineligible for PROD wikipedia_page.setCallbackParameters(params); wikipedia_page.load(Twinkle.prod.callbacks.main); }; })(jQuery); //</nowiki>