מדיה ויקי:Gadget-DeleteRequest.js

הערה: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
/* הסקריפט מוסיף לשוניות "מחיקה", "הגנה" ו"חסימה" על מנת שאפשר יהיה לבקש מחיקת דפים, הגנת דפים וחסימת משתמשים באמצעות דף בקשות ממפעילים. */
if(mw.config.get('wgNamespaceNumber') + 1) // not a special page
$(function(){
function openDialog(code1, code2, code3, reasons, req) {
	var dialog = $("<div>").html("סיבה: ").dialog({title: "בקשה ל" + req});
	var select = $("<select>").append($("<option>").append("אחר"));
	dialog.append(select);
	for (var id in reasons) {
		select.append($("<option>").append(reasons[id]));	
	}
	var input = $("<input>");
	dialog.append($("<br>"), "סיבה אחרת/נוספת: ", input);
	input.focus();
	$(dialog).keypress(function(event) {
		if (event.key == "Enter") {
			var value = input["0"].value, selectValue = select["0"].value;
			if (value === "" && selectValue == "אחר") alert("לא מולאה סיבה");
			if (value !== "" && selectValue == "אחר") code1(value);
			if (value === "" && selectValue != "אחר") code2(selectValue);
			if (value !== "" && selectValue !== "אחר") code3(value, selectValue);
			dialog.dialog('close');
		}
	});
	dialog.dialog('option', 'buttons', {
		'ביצוע':
			function(){
				var value = input["0"].value, selectValue = select["0"].value;
				if (value === "" && selectValue == "אחר") alert("לא מולאה סיבה");
				if (value !== "" && selectValue == "אחר") code1(value);
				if (value === "" && selectValue != "אחר") code2(selectValue);
				if (value !== "" && selectValue !== "אחר") code3(value, selectValue);
				dialog.dialog('close');
			},
		'סגירה':
			function() {dialog.dialog('close');}
	});
}

function save(title, summary, content, section, next) {
	var param = {action: 'edit', title: title, summary: summary.replace(/replaceParam/g, mw.config.get("wgPageName").replace(/_/g, " ")).replace(/replaceUser/g, mw.config.get('wgRelevantUserName')), token: mw.user.tokens.get('csrfToken'), section: section || '0', appendtext: content, format: 'json', tags:'בקשות_ממפעילים'};
	$.post(mw.util.wikiScript('api'), param, function(data) {
		if (data && data.error)
			mw.notify('שגיאה בשמירה: ' + ( data.error.info || 'שגיאה לא ידועה' ) );
		else if (data && data.edit && data.edit.result == 'Success' && typeof next == 'function')
			next();
	});
}

function saveDelete(selectValue, message){
	save('ויקיפדיה:בקשות ממפעילים', '/* בקשות מחיקה */ [[replaceParam]]', 
			'\n\n* ' + message.replace(/reason/g, selectValue), 1, 
			function() { mw.notify($('<span>').html('בקשתך נשמרה ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_מחיקה">דף הבקשות מהמפעילים</a>'));});
}

function checkAndSaveDelete(selectValue, message){
	new mw.Api().get( {
		action:'query',
		prop: 'linkshere',
		titles: mw.config.get('wgPageName'),
		indexpageids: 1
	}).done(function(d) {
		d = d.query;
		if ( d && d.pageids && d.pageids.length ) {
			d = d.pages[d.pageids[0]];
			if ( d.linkshere && d.linkshere.length > 0 )
			{
				mw.loader.using("oojs-ui", function(){
					var linkUrl = new mw.Title('מיוחד:דפים_המקושרים_לכאן/' + mw.config.get('wgPageName')).getUrl();
					OO.ui.confirm( $('<div>').html('יש '+ d.linkshere.length +' +<a href="'+linkUrl+'">קישורים לדף</a>, האם הם נבדקו לפני בקשת המחיקה?') ).done( function ( confirmed ) {
						if ( confirmed ) {
							saveDelete(selectValue, message);
						} else {
							mw.notify('נא לבדוק את הקישורים לפני הבקשה.');
						}
					});
				} );
			} else {
				saveDelete(selectValue, message);
			}
		}
		else {
			saveDelete(selectValue, message);
		}
	});
}

function checkRequestDuplication() {
	var requestChecker = new $.Deferred();
	new mw.Api().get( {
		action:'query',
		prop: 'links',
		titles: 'ויקיפדיה:בקשות ממפעילים',
		pltitles: mw.config.get('wgPageName'),
		indexpageids: 1
	}).done(function(d) {
		d = d.query;
		if ( d && d.pageids && d.pageids.length ) {
			d = d.pages[d.pageids[0]];
			if ( d.links && d.links.length > 0 )
			{
				if (!confirm('הדף כבר מוזכר בבקשות ממפעילים. האם לשלוח בכל זאת את הבקשה?')) {
					requestChecker.reject('הדף כבר מוזכר ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_מחיקה">בקשות ממפעילים</a>. הבקשה לא בוצעה');
					return;
				}
			}
		}
		requestChecker.resolve();
	});
	return requestChecker;
}

function addMenuItem(caption, tooltip, message, accessKey) {
	var a = mw.util.addPortletLink('p-cactions','#',caption,'',tooltip.replace(/replaceParam/g, mw.config.get("wgPageName").replace(/_/g, " ")).replace(/replaceUser/g, mw.config.get('wgRelevantUserName')),(accessKey||''));
	var alreadyClicked;
	$(a).click(function(e) {
		e.preventDefault();
		e.stopPropagation();
		if (alreadyClicked) return;
		alreadyClicked = true;
		checkRequestDuplication().fail(function(err){
			mw.notify($('<span>').html(err));
		}).done(function(){
			if (message.match(/reason/)) {message += ' ~~' + '~~'}else{message += ' – reason ~~' + '~~'}
			message = message.replace(/replaceParam/g, mw.config.get('wgPageName').replace(/_/g, " ")).replace(/replaceUser/g, mw.config.get('wgRelevantUserName'));
			switch (caption) {
				case "מחיקה":
					openDialog(function(value){save('ויקיפדיה:בקשות ממפעילים', '/* בקשות מחיקה */ [[replaceParam]]', '\n\n* ' + message.replace(/reason/g, value), 1, function() { mw.notify($('<span>').html('בקשתך נשמרה ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_מחיקה">דף הבקשות מהמפעילים</a>'));})}, function(selectValue) { checkAndSaveDelete(selectValue, message); } , function(value, selectValue){save('ויקיפדיה:בקשות ממפעילים', '/* בקשות מחיקה */ [[replaceParam]]', '\n\n* ' + message.replace(/reason/g, selectValue + ": " + value), 1, function() { mw.notify($('<span>').html('בקשתך נשמרה ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_מחיקה">דף הבקשות מהמפעילים</a>'));})}, ["הבל", "מילוני/אולטרה קצרמר", "הפניה בדפי שיחה" ,"הפניה בקטגוריה" , "הפניה מיותרת", "הפניה שגויה", "לא אנציקלופדי", "פרסומת", "שגוי/טעות", "לבקשת הכותב", "הועבר למרחב טיוטה", "הועבר למרחב המשתמש", "הועבר למרחב הערכים"], "מחוק את הדף");
					break;
				case "חסימה":
					openDialog(function(value){save('ויקיפדיה:בקשות ממפעילים', "/* בקשות חסימה / הסרת חסימה */ [[משתמש:replaceUser|replaceUser]] ([[שיחת משתמש:replaceUser|ש]]|[[מיוחד:תרומות/replaceUser|ת]]|[[מיוחד:חסימה/replaceUser|ח]])", '\n\n* ' + message.replace(/reason/g, value), 2, function() { mw.notify($('<span>').html('בקשתך נשמרה ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_חסימה_/_הסרת_חסימה">דף הבקשות מהמפעילים</a>'));})}, function(selectValue){save('ויקיפדיה:בקשות ממפעילים', "/* בקשות חסימה / הסרת חסימה */ [[משתמש:replaceUser|replaceUser]] ([[שיחת משתמש:replaceUser|ש]]|[[מיוחד:תרומות/replaceUser|ת]]|[[מיוחד:חסימה/replaceUser|ח]])", '\n\n* ' + message.replace(/reason/g, selectValue), 2, function() { mw.notify($('<span>').html('בקשתך נשמרה ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_חסימה_/_הסרת_חסימה">דף הבקשות מהמפעילים</a>'));})}, function(value, selectValue){save('ויקיפדיה:בקשות ממפעילים', "/* בקשות חסימה / הסרת חסימה */ [[משתמש:replaceUser|replaceUser]] ([[שיחת משתמש:replaceUser|ש]]|[[מיוחד:תרומות/replaceUser|ת]]|[[מיוחד:חסימה/replaceUser|ח]])", '\n\n* ' + message.replace(/reason/g, selectValue + ": " + value), 2, function() { mw.notify($('<span>').html('בקשתך נשמרה ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_חסימה_/_הסרת_חסימה">דף הבקשות מהמפעילים</a>'));})}, ["השחתה לאחר אזהרה", "קללות או גסויות", "הפרעה", "כניסה למלחמת עריכה", "העלאת הבלים או ערכים חסרי תוכן", "הסרת תוכן מדפים", "שם משתמש לא מקובל", "משחית שנרשם", "טרול", "לא הגיע לתרום", "העלאת ספאם"], "חסום את המשתמש");
					break;
				case "הגנה":
				case "שינוי הגנה":
					openDialog(function(value){save('ויקיפדיה:בקשות ממפעילים', '/* בקשות הגנה / הסרת הגנה */ [[replaceParam]]', '\n\n* ' + message.replace(/reason/g, value), 3, function() { mw.notify($('<span>').html('בקשתך נשמרה ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_הגנה_/_הסרת_הגנה">דף הבקשות מהמפעילים</a>'));})}, function(selectValue){save('ויקיפדיה:בקשות ממפעילים', '/* בקשות הגנה / הסרת הגנה */ [[replaceParam]]', '\n\n* ' + message.replace(/reason/g, selectValue), 3, function() { mw.notify($('<span>').html('בקשתך נשמרה ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_הגנה_/_הסרת_הגנה">דף הבקשות מהמפעילים</a>'));})}, function(value, selectValue){save('ויקיפדיה:בקשות ממפעילים', '/* בקשות הגנה / הסרת הגנה */ [[replaceParam]]', '\n\n* ' + message.replace(/reason/g, selectValue + ": " + value), 3, function() { mw.notify($('<span>').html('בקשתך נשמרה ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_הגנה_/_הסרת_הגנה">דף הבקשות מהמפעילים</a>'));})}, ["השחתות רבות", "אקטואלי", "טרול/חסום", "מלחמת עריכה"], "הגן על הדף");
					break;
				case "הסתרת גרסה":
					openDialog(function(value){save('ויקיפדיה:בקשות ממפעילים', '/* בקשות מחיקת גרסאות מסוימות */ הסתרת גרסה', '\n\n* ' + message.replace(/reason/g, value), 4, function() { mw.notify($('<span>').html('בקשתך נשמרה ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_מחיקת_גרסאות_מסוימות">דף הבקשות מהמפעילים</a>'));})}, function(selectValue){save('ויקיפדיה:בקשות ממפעילים', '/* בקשות מחיקת גרסאות מסוימות */ הסתרת גרסה', '\n\n* ' + message.replace(/reason/g, selectValue), 4, function() { mw.notify($('<span>').html('בקשתך נשמרה ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_מחיקת_גרסאות_מסוימות">דף הבקשות מהמפעילים</a>'));})}, function(value, selectValue){save('ויקיפדיה:בקשות ממפעילים', '/* בקשות מחיקת גרסאות מסוימות */ הסתרת גרסה', '\n\n* ' + message.replace(/reason/g, selectValue + ": " + value), 4, function() { mw.notify($('<span>').html('בקשתך נשמרה ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_מחיקת_גרסאות_מסוימות">דף הבקשות מהמפעילים</a>'));})}, ["תוכן פוגעני", "חשיפת פרטים אישיים", "נאצות/השמצות"], "הסתיר את הגרסה");
					break;
			}
		});
	});
}
var ca = $.inArray(mw.config.get('wgNamespaceNumber'), [6, 14]) + 1 ?  ':' : '';
var pageName = mw.config.get('wgPageName').replace( /_/g, " " );
var isRedirect = $('.redirectMsg').length || $("#redirectsub").length;
if ($('#t-contributions').length) {
	addMenuItem('חסימה', 'בקשה לחסום את replaceUser', "{{לחסום|replaceUser}}", "]");
}
var pageLink = isRedirect ? '{{ללא הפניה|replaceParam}}' : '[[' + ca + 'replaceParam]]';
var protectTemplate = isRedirect ? '{{בקשת הגנה|replaceParam|reason|הפניה=כן}}' : '{{בקשת הגנה|replaceParam|reason}}';
if (mw.config.get('wgRestrictionEdit') && mw.config.get('wgRestrictionEdit').length === 0)
	addMenuItem('הגנה', 'בקשה להגן על הדף replaceParam', protectTemplate, '=');
else
	addMenuItem('שינוי הגנה', 'בקשה לשנות את ההגנה על הדף replaceParam', protectTemplate, '=');

var deleteTemplate = isRedirect ? '{{בקשת מחיקה|replaceParam|reason|הפניה=כן}}' : '{{בקשת מחיקה|replaceParam|reason}}';
if (!mw.util.getParamValue('redlink'))
	addMenuItem('מחיקה', 'בקשה למחוק את הדף replaceParam', deleteTemplate,'d');
if (mw.util.getParamValue('oldid') && mw.util.getParamValue('diff'))
	addMenuItem('הסתרת גרסה', 'בקשה להסתיר את הגרסה ' + mw.util.getParamValue('diff') , '{{הבדל|' + mw.config.get('wgPageName') + '|' + mw.util.getParamValue('diff') + '|' + mw.util.getParamValue('oldid') + '|טקסט=גרסה זו}} ב[['+ ca + mw.config.get('wgPageName').replace( /_/g, " " ) +']]', '[');
$( document ).trigger( 'new-portlet-link' );
});