Участник:Skmp/userwarner.js

Материал из Википедии — свободной энциклопедии
/*
	!!! ОСТОРОЖНО !!!
	Кнопки записывают предупреждения и отправляют запрос на ЗКАБ сразу, без
	предупреждений и диалогов. Ссылка нажата -> действие выполнено.

	Для отключения перехода к странице обсуждения участника, добавьте следующую
	строчку в ваш common.js, после строки импорта этого крипта:
	
	userwarner_noredirect = true;
*/

var userwarner_ls_warn = `Пожалуйста, не используйте Ваши [[Служебная:MyPage|личную страницу]] и [[Служебная:MyTalk|страницу обсуждения]] для размещения энциклопедических статей и черновиков. Эти две страницы должны служить Вашим средством общения с другими участниками по вопросам, касающимся совместной работы над энциклопедией (подробнее с их назначением и допустимым содержимым можно ознакомиться в разделе правил [[ВП:Личная страница участника]]). Энциклопедические статьи следует размещать в [[ВП:Пространство имён|основном пространстве имён]] Википедии, то есть, например, статья про ООО «Рога и копыта» должна называться ''«Рога и копыта (контора)»'', а не ''«Участник:Рога и копыта (контора)»'' и не ''«Обсуждение участника:Рога и копыта (контора)»''. Для размещения черновиков можно использовать [[ВП:ЛП|подстраницы участника]] вида <code>Участник:Имя'''/название'''</code>. Например, перейдя по специальной ссылке <code>[[Служебная:Mypage/Черновик|Участник:{{<includeonly>subst:</includeonly>PAGENAME}}/Черновик]]</code>, Вы сможете создать у себя подстраницу <code style="white-space:nowrap">/Черновик</code>. Кроме того, начинающие авторы могут воспользоваться [[ВП:ИНК|Инкубатором]] — проектом, предназначенным для помощи новичкам в написании их первых статей и ознакомления с основными принципами Википедии.

Обратите внимание, что статьи в Википедии должны удовлетворять определённым [[ВП:Значимость|критериям значимости]] и не содержать [[ВП:Спам|рекламы]]. Страницы, не соответствующие этим требованиям, будут [[ВП:КУ|предложены к удалению]] или даже [[ВП:КБУ|удалены без обсуждения]].

Мы рады приветствовать Вас в нашем проекте, где Вы можете внести свой вклад в создание энциклопедии. Возможно, Вам будет полезно познакомиться с некоторыми правилами работы в Википедии:

* [[Википедия:Как создать статью]]
* [[Википедия:Правила и указания]]
* [[Википедия:Как править статьи]]
* [[Википедия:Оформление статей]]
* [[Википедия:Личная страница участника]]

Спасибо за понимание.`;

var userwarner_bel_warn = `Здравствуйте! Пожалуйста, не заменяйте название государства «Белоруссия» → «Беларусь», так как в Википедии принято использовать первый вариант. Подробнее об этом Вы можете прочитать на странице '''[[Википедия:Список рекомендованных вариантов написания#Государства]]'''. По этой причине Ваши правки будут отменены.
: Подробнее о работе и правилах в Википедии Вы можете посмотреть здесь:
* [[Википедия:Первые шаги]]
* [[Википедия:Пять столпов]]
* [[Википедия:Список рекомендованных вариантов написания]]

Спасибо за понимание.`;

var userwarner_types = {
	ls: {
		sectionname: 'Личная страница участника',
		message: userwarner_ls_warn,
		summary: 'Нецелевая ЛС',
		link_text: "Нецелевая ЛС"
	},
	
	auto: {
		sectionname: 'Написание статей о себе',
		message: "Здравствуйте. Хочу Вас уведомить, что написание статей о себе в Википедии не приветствуется согласно правилу [[ВП:АВТО]]. Спасибо за понимание.",
		summary: 'Написание статей о себе',
		link_text: "Написание статей о себе"
	},
	
	recreation: {
		sectionname: 'Воссоздание удалённых страниц',
		message: "Здравствуйте. Пожалуйста, не воссоздавайте только что удалённые страницы. Это не приведёт ни к чему, кроме их повторного удаления. Если Вы не согласны с удалением, можете оставить сообщение удалившему участнику на его странице обсуждения. Спасибо за понимание.",
		summary: 'Воссоздание удалённых страниц',
		link_text: "Воссоздание страниц"
	},
	
	bel: { 
		sectionname: '«Белоруссия» → «Беларусь»',
		message: userwarner_bel_warn,
		summary: 'Не Беларусь',
		link_text: "Не Беларусь"
	},
	
	biog1: { 
		sectionname: 'Предупреждение от {' + '{подст:сегодня}' + '}: биографии современников',
		message: '{{uw-biog1}}',
		summary: 'Биографии современников',
		link_text: "Без АИ в СОВР"
	},

	v1: { 
		sectionname: 'Сообщение от {' + '{подст:сегодня}' + '}',
		message: '{{uw-vandalism1}}',
		summary: 'Вандализм (мягкое)',
		link_text: "Ванд ПДН"
	},
	
	v2: { 
		sectionname: 'Предупреждение от {' + '{подст:сегодня}' + '}: вандализм',
		message: '{{uw-vandalism2}}',
		summary: 'Вандализм',
		link_text: "Ванд"
	},
	
	v3: {
		sectionname: 'Предупреждение от {' + '{подст:сегодня}' + '}: вандализм',
		message: '{{uw-vandalism3}}',
		summary: 'Вандализм (последнее)',
		link_text: "Ванд последнее"
	},
	
	v4im: { 
		sectionname: 'Предупреждение от {' + '{подст:сегодня}' + '}: вандализм',
		message: '{{uw-vandalism4im}}',
		summary: 'Вандализм (первое и последнее)',
		link_text: "Ванд первое и последнее"
	},
	
	report: {
		link_text: "На ЗКАБ"
	}
};

function userwarner_waiting_html(text) {
	return `<div style="align-items: center;position: fixed;\
display: flex;justify-content: center;top: 50%;left: 50%;width: 300px;\
height: 80px;margin: -40px 0 0 -150px;\
background-color: #ffe8bf;font-size: 14px;font-style: italic;\
border-radius: 5px;z-index: 10000000;" id="userwarner-waiting-box">${ text }\
</div>`;
}

function userwarner_report_warn_text(username) {
	const reason = window.prompt("Пояснение", "Вандализм");
	
	return `<onlyinclude>
{{ЗКА:Быстрый запрос|
<!-- Не редактируйте строку ниже, если не являетесь администратором -->
| статус =
<!-- Формат при редактировании этого поля:
   • u/Jimmy Wales — участник или IP-адрес;
   • название страницы — без префикса.
-->
| вопрос = u/${ username }
<!-- Дополнительные действия для выполнения запроса, пояснения администраторам и т. п. -->
| пояснение = ${ reason }
<!-- Не редактируйте строку ниже -->
| автор = {{под` + `ст:зкаб|}}
<!-- Администраторам: вставьте {{под` + `ст:зкаб|}} -->
| администратор =
}}
</onlyinclude>`
}

if(mw.config.get('wgCanonicalSpecialPageName') === 'Contributions' || mw.config.get('wgNamespaceNumber') === 3) {
	mw.loader.using('mediawiki.util').done( function () {
		let menu = "";
		
		for(const item in userwarner_types) {
			menu += `<li><a id="uw-link-${ item }" href="javascript:userwarner_send('${ item }')"><span>${ userwarner_types[item].link_text }</span></a></li>`;
		}

		$('#p-search').before('<nav class="mw-portlet vector-menu vector-menu-dropdown vector-menu-dropdown-noicon vectorMenu"><h3><span>UW</span></h3><div class="vector-menu-content"><ul class="vector-menu-content-list">' + menu + '</ul></div></nav>');
		$('#uw-link-report').css("color", "#ad0606");
	});
}

function userwarner_send(type) {
	$.getJSON(mw.config.get('wgScriptPath') + '/api.php?action=query&meta=tokens&type=csrf&format=json', function (resp) {
		if(!resp || resp.query) {
			return;
		}
		
		var user_talk_addr = '';
		var username = '';
		
		var report_page_addr = 'Википедия:Запросы_к_администраторам/Быстрые';
		
		var currently_in_talk = false;
		
		if(mw.config.get('wgCanonicalSpecialPageName') === 'Contributions') {
			username = mw.config.get('wgPageName').split('/', 2)[1];
			user_talk_addr = 'Обсуждение_участника:' + username;
		} else if(mw.config.get('wgNamespaceNumber') === 3) {
			user_talk_addr = mw.config.get('wgPageName');
			username = user_talk_addr.split(":", 2)[1];

			currently_in_talk = true;
		}
		
		//const user_talk_addr = 'Участник:Skmp/Песочница/2';

		var post_options = {};

		if(type === "report") {
			$("body").append(userwarner_waiting_html("Записываем запрос на ЗКАБ..."));
			post_options = {
		    	action: 'edit',
		    	title: report_page_addr,
		    	token: resp.query.tokens.csrftoken,
		    	summary: 'Новый запрос: ' + username + ' ([[У:Skmp/userwarner.js|UW]])',
		    	section: 'new',
		    	sectiontitle: "u/{{под" + "ст:зкаб|" + username + "}}",
		    	appendtext: userwarner_report_warn_text(username)
		    };
		} else {
			$("body").append(userwarner_waiting_html("Записываем предупреждение..."));
			post_options = {
		    	action: 'edit',
		    	title: user_talk_addr,
		    	token: resp.query.tokens.csrftoken,
		    	summary: 'Предупреждение участника с помощью [[У:Skmp/userwarner.js|UW]] — ' + userwarner_types[type].summary,
		    	section: 'new',
		    	sectiontitle: userwarner_types[type].sectionname,
		    	appendtext: userwarner_types[type].message + ' ~~' + '~~'
		    };
		}

		$.post(mw.config.get('wgScriptPath') + '/api.php', post_options, function() {
	    	if(currently_in_talk) {
	    		if(type !== "report") window.location = mw.config.get('wgServer') + '/wiki/' + user_talk_addr;
	    	} else if(window.userwarner_noredirect) {
	    		$("#userwarner-waiting-box").text("Готово!");
	    		$("#userwarner-waiting-box").css("background-color", "#caffbf");

				setTimeout(function () { $("#userwarner-waiting-box").remove(); }, 1000);
	    	} else {
	    		if(type !== "report") window.location = mw.config.get('wgServer') + '/wiki/' + user_talk_addr;
	    	}
	    });
	});
}