Wiki - KEONHACAI COPA

Thành viên:NguoiDungKhongDinhDanh/LinkReport.js

/** <nowiki>
 * Công cụ hỗ trợ báo cáo liên kết spam.
 * Cài đặt: Thêm dòng dưới đây vào trang common.js của bạn:
 * mw.loader.load('/wiki/User:NguoiDungKhongDinhDanh/LinkReport.js?action=raw&ctype=text/javascript');
 * 
 * Danh sách người sử dụng: //w.wiki/4rX3
 * Giấy phép: CC BY-SA 3.0
**/
/* jshint esversion: 6, maxerr: 9999 *//* globals $, mw */

mw.loader.using('jquery.ui').then(function() {
	if (mw.config.get('wgDBname') !== 'viwiki') {
		return; // Đề phòng có người cài vào global.js
	}
	
	mw.util.addPortletLink(
		'p-cactions', '', 'LR',
		'ca-linkreport', 'Hỗ trợ xử lý liên kết rác'
	);

	var ad = ' ([[User:NguoiDungKhongDinhDanh/LinkReport.js|LinkReport]])'; // Quảng bá
	var notify = function(content, title, type) {
		mw.notify(content, {
			type, title,
			tag: 'linkreport',
			autoHide: true,
			autoHideSeconds: 5
		});
	};
	
	$('#ca-linkreport').click(function(e) {
		e.preventDefault();
		
		var css = `
			#linkreport input {
				flex-grow: 2;
				padding: 0.5em;
				-webkit-transition: border-color 100ms, box-shadow 100ms;
				transition: border-color 100ms, box-shadow 100ms;
			}
			#linkreport input:focus, #linkreport input:active {
				outline: 0;
				border-color: #3366CC;
				box-shadow: inset 0 0 0 1px #3366CC;
			}
			
			#linkreport {
				display: flex;
				flex-direction: column;
			}
			.linkreport-fieldset {
				display: flex;
				flex-direction: column;
			}
			.linkreport-fieldset > * {
				margin: 0.75em 0.3em 0;
			}
			.linkreport-labels {
				display: block;
				align-self: flex-start;
				font-size: 1.25em;
			}
			#linkreport-links {
				display: flex;
				flex-direction: column;
				gap: 0.3em;
			}
			.linkreport-link-lines {
				display: flex;
				gap: 0.3em;
			}
			.linkreport-link {
				flex-grow: 10 !important;
			}
			.linkreport-remove {
				margin: 0 !important;
			}
			#linkreport-button {
				display: flex;
				flex-direction: row-reverse;
			}
		`; // :focus/:active copied from OO.UI core.
		try {
			mw.util.addCSS(css);
		} catch (ignore) {
			mw.loader.addStyleTag(css);
		}
		
		var $line = $('<div>').attr('class', 'linkreport-link-lines').append(
			$('<input>').attr({
				'type': 'text',
				'class': 'linkreport-link',
				'placeholder': 'Liên kết'
			}),
			$('<input>').attr({
				'type': 'text',
				'class': 'linkreport-user',
				'placeholder': 'Người dùng'
			}),
			$('<button>').attr('class', 'linkreport-remove').text('Xoá').button()
		);
		$('<div>').attr('id', 'linkreport').append(
			$('<div>').attr('class', 'linkreport-fieldset').append(
				$('<label>').attr({
					'for': 'linkreport-links',
					'class': 'linkreport-labels'
				}).text('Liên kết cần báo cáo:'),
				$('<div>').attr('id', 'linkreport-links').append($line.clone()),
				$('<div>').attr('id', 'linkreport-button').append(
					$('<button>').attr('id', 'linkreport-add').text('Dòng mới').button()
				)
			),
			$('<div>').attr('class', 'linkreport-fieldset').append(
				$('<label>').attr({
					'for': 'linkreport-note',
					'class': 'linkreport-labels'
				}).text('Ghi chú (tuỳ chọn):'),
				$('<input>').attr({
					'type': 'text',
					'id': 'linkreport-note'
				})
			)
		).appendTo(document.body);
		
		$('#linkreport').dialog({
			autoOpen: true,
			width: 500,
			minWidth: 500,
			height: 400,
			minHeight: 400,
			title: 'LinkReport.js',
			buttons: [
				{
					text: 'Báo cáo',
					click: function() {
						var note = $('#linkreport-note').val().trim();
						var links = new Map();
						$('.linkreport-link-lines').each(function() {
							var link = $(this).find('.linkreport-link').val();
							var user = $(this).find('.linkreport-user').val();
							if (link.length > 5 && !links.has(link)) {
								links.set(link, user);
							}
						});
						
						if (links.size) {
							$('#linkreport').dialog('destroy').remove();
							notify('Đang gửi báo cáo...');
							
							(new mw.Api()).postWithToken('csrf', {
								action: 'edit',
								title: 'Wikipedia:Tin nhắn cho bảo quản viên',
								nocreate: true,
								appendtext: [
									'', '',
									'== Báo cáo liên kết rác ==',
									'{{Spam',
									[...links].map(
										([link, user]) => `| ${user ? `${link} >> ${user}` : link}`
									).join('\n'),
									'}}', '',
									`${note}${note.endsWith('.') ? ' ~~~~' : note ? '. ~~~~' : '~~~~'}`
								].join('\n'),
								summary: 'Báo cáo liên kết rác.' + ad,
								format: 'json',
								formatversion: 2
							}).done(function() {
								notify(
									'Đã báo cáo thành công. Vui lòng kiểm tra lại nếu cần thiết.',
									'Đã báo cáo.', 'success'
								);
							}).fail(function(error, response) {
								notify(
									`Nội dung lỗi: ${response.error.info}`,
									`Lỗi: ${error}`, 'error'
								);
							});
						} else {
							notify(
								'Bạn không nhập liên kết hoặc không có liên kết nào dài hơn 5 ký tự.',
								'Huỷ báo cáo.', 'warn'
							);
						}
					}
				}
			]
		});
		
		$('#linkreport').on('click', '.linkreport-remove', function() {
			$(this).parent().remove();
		});
		$('#linkreport-add').click(function() {
			$('#linkreport-links').append($line.clone());
		});
	});
});
// </nowiki>
Wiki - Keonhacai copa chuyên cung cấp kiến thức thể thao, keonhacai tỷ lệ kèo, bóng đá, khoa học, kiến thức hằng ngày được chúng tôi cập nhật mỗi ngày mà bạn có thể tìm kiếm tại đây có nguồn bài viết: https://vi.wikipedia.org/wiki/Th%C3%A0nh_vi%C3%AAn:NguoiDungKhongDinhDanh/LinkReport.js