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

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

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

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload), או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אינטרנט אקספלורר / אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh), או ללחוץ על צירוף המקשים Ctrl-F5.
  • אופרה: ללחוץ על Ctrl-F5.
function addWarningLinks() {
	"use strict";
	function save_topage(title, summary, content, wl, next) {
		var param = {action: 'edit', title: title, summary: summary, token: mw.user.tokens.get('csrfToken'), appendtext: content, format: 'json'};
		if (wl)
			param.watchlist = wl;
		$.post(mw.util.wikiScript('api'), param, function (data) {
			if (data && data.error){
				$.ajax({
				url: mw.util.wikiScript('api'),
				aync: false,
				type: 'post',
				data: {action: 'flow', submodule: 'new-topic', page: title, nttopic: summary, token: mw.user.tokens.get('editToken'), ntcontent: content, format: 'json'},	
				success: function(data){
			        if (data && data.flow && typeof next == 'function')
			         	next();
			         	alert('בוצע');
				},
				error: function(data) {
					alert('תקלה. התבנית לא נשמרה בדף השיחה של המשתמש');
				}
			});
			
			}
			else if (data && data.edit && data.edit.result == 'Success' && typeof next == 'function'){
				next();
				alert('בוצע');
	         }
		});
	}



	function activate() {
		var $this = $(this),
			user = $this.attr('user'),
			templ = $this.data('templ'),
			warning = templ.m || templ.t,
			linkTitle = templ.hasOwnProperty('linkTitle')? templ.linkTitle : true,
			tw = warning,
			refPage = $this.attr('refPage').replace(/_/g, ' ');

		if(user == mw.user.getName() && ! confirm('זהו דף השיחה שלך. האם אתה בטוח שברצונך להוסיף את התבנית?'))
			return;

		if(user !== mw.user.getName() && ! confirm('האם אתה בטוח שברצונך להוסיף את התבנית?'))
			return;

		if (!warning || !user)
			return;

		if (refPage)
			tw += '|' + refPage;
		
		if (templ.askExtra) {
			var skipExtra = window.skipAsk64 && window.skipAsk64[templ.m];		
			if (templ.askExtra.prompt && !skipExtra) {
				var extra = $.trim(prompt(templ.askExtra.prompt));
				if (extra)
					tw += templ.askExtra.param + extra;
			}
			else if (! skipExtra && templ.askExtra.confirm && confirm(templ.askExtra.confirm))
				tw += templ.askExtra.param;
		}

		var text = "{{" + tw + "}} ~~" + "~~\n";
		if (refPage)
			text = '\n==' + (linkTitle? "[[" + refPage + "]]" : refPage ) + '==\n' + text;
	
		    save_topage("שיחת משתמש:" + user, warning, text, watchOrUnwatch(templ), function() {mw.notify(' תבנית "' + warning + '" נרשמה בשיחת משתמש:' + user);});
	}
	
	function watchOrUnwatch(templ) {
		var l = window.script64Watch || '';
		return l
			? (typeof l == "string"
				? l
				: l[templ.t])
			: templ.wl;
	}
	
	function getUserLink() {
		return mw.config.get('wgCanonicalSpecialPageName') == 'Block'
			? mw.util.$content.find('p a:first')
			: (mw.config.get('wgAction') == 'rollback'
				? $('.mw-userlink:first')
				: $('#mw-diff-ntitle2 a.mw-userlink')
				);
	}
	// main body of function
	var
		link = getUserLink(),
		user = link.text(),
		anon = mw.util.isIPv4Address(user) || mw.util.isIPv6Address(user),
		all = [
			{t:"אזהרה", m: "אזהרה", tl:"הוספת תבנית אזהרה"},
			{t:"ניסוי", m: "ניסויים", tl:"הוספת תבנית ניסויים", wl: 'unwatch'},
			{t:"בוטל",  m: "בוטל", tl:"הוספת תבנית בוטל", askExtra: {prompt: 'סיבת הביטול', param: '|סיבה='}},
			{t:"חזרה", m: "חזרה על עריכה", tl:"הוספת תבנית חזרה על עריכה"},
			{t:"פרסום", m: "פרסומת", tl:"הוספת תבנית פרסומת", wl: 'unwatch'},
			{t:"הועתק", m: "העתקה", tl:"הוספת אזהרת העתקה", wl: 'unwatch'},
			{t:"הסבר", m: "הסבר לעריכה", tl:"הוספת תבנית הסבר", askExtra: {confirm: 'התבנית דורשת פרמטרים. להכניס אותם?', param:   '|' + mw.util.getParamValue('diff') + '|' + mw.util.getParamValue('oldid')}, wl: 'unwatch'},
			anon ? {t:"תודה", m: "תודה", tl:"הוספת תבנית תודה"} : {t:"בה", m: "ברוך בואך", tl:"הוספת תבנית ברוך בואך", noPage: true}
		],
		deletedTemplates = [
			{t:"הבל", m: "הבל", tl:"הוספת אזהרת הבל", linkTitle: false },
			{t:"נמחק", m: "נמחק", tl:"הוספת תבנית מחיקה", linkTitle: false },
			{t:"ניסוי נמחק", m: "נמחק ניסויים", tl:"הוספת תבנית מחיקה של ניסוי", linkTitle: false },
			{t:"פרסום", m: "פרסומת", tl:"הוספת תבנית פרסומת", linkTitle: false },
			{t:"הועתק", m: "העתקה", tl:"הוספת אזהרת העתקה"}
		],
		youWereBlocked = {t:"נחסמת", m: "נחסמת", tl:"הודעה למשתמש שנחסם", askExtra: {prompt: 'סיבת החסימה', param: '|'}, noPage: true};
		if (mw.user.options.get('userjs-RestoreWarnings-all')) {
			var userTp = mw.user.options.get('userjs-RestoreWarnings-all').split(',');
			for(var v in userTp)
			{
				all.push({t:userTp[v], m:userTp[v]});
			}
		}
	function makeSpan(forUser, forDeletePage, paragraph) {
		var container = $(paragraph ? '<p>' : '<span>').text(' (');
		if (forDeletePage) {
			container.append(
				$('<a>', {href: mw.util.getUrl('User:' + forUser), text: forUser}),
				' (',
				$('<a>', {href: mw.util.getUrl('User Talk:' + forUser), text: 'שיחה'}),
				' | ',
				$('<a>', {href: mw.util.getUrl('Special:Contributions/' + forUser), text: 'תרומות'}),
				' | ',
				$('<a>', {href: mw.util.getUrl('Special:Block/' + forUser), text: 'חסימה'}),
				' ) '
			);
			all = deletedTemplates.concat([youWereBlocked]);
		}
		for (var i in all) {
			var templ = all[i];
			var page = (templ.noPage)
				? ''
				: (($.inArray(mw.config.get('wgNamespaceNumber'), [6, 14]) + 1) ? ':' : '') + mw.config.get('wgPageName').replace(/_/g, " ");
			var a = $("<a>", {href: '#', user: forUser, refPage: page, title: templ.tl || templ.t})
				.text(templ.t)
				.click(activate)
				.data({templ: templ});
			container.append(i==0 ? '':' | ').append(a);
		}

		return container.append(')').append($('<a href="#" title="הגדרת תבניות"> ⚙</a>').click(function(){
			var newParams = prompt('תבניות נוספות להגדרה בתפריט (יש להפריד עם ,)', mw.user.options.get('userjs-RestoreWarnings-all') || '');
			if (newParams !== null) {
				if (newParams.length > 0) newParams = '=' + newParams;
				var api = new mw.Api().postWithToken('csrf', {action: 'options', change: 'userjs-RestoreWarnings-all' + newParams })
			}
			return false;
		}));
	}

	var sysop = $.inArray('sysop', mw.config.get('wgUserGroups'))+1;
	if (sysop) {
		if (mw.config.get('wgCanonicalSpecialPageName') == 'Block')
			all = [];
		all.push(youWereBlocked);
	}

	if (user) {
		if ($('#mw-diff-ntitle2').length)
			$('#mw-diff-ntitle2').append(makeSpan(user, false, true));
		else
			link.after(makeSpan(user, false));
	}
	else if (sysop && mw.config.get('wgAction') == 'delete' && $('#deleteconfirm').length===0) { //more complex case: we have to use API to get the user.
		$.getJSON(
			mw.util.wikiScript('api'),
			{action: 'query', list: 'deletedrevs', drlimit: 20, titles: mw.config.get('wgPageName'), drprop: 'user', format: 'json'},
			function(data) {
				var users = {};
				var content = mw.util.$content;
				if (data && data.query && data.query.deletedrevs)
					$(data.query.deletedrevs).each(function() {
						$(this.revisions).each(function() {users[this.user] = true;});
					});
				content.append('<p>', {text: 'את הדף ' + mw.config.get('wgPageName') + ' ערכו העורכים הבאים:'});
				for (var editor in users)
					content.append($('<p>').append(makeSpan(editor, true)));
			});
		}
}

// Early execution
if ( document.readyState === 'interactive' ) {
	addWarningLinks();
} else {
	$( addWarningLinks );
}