MediaWiki:Gadget-friendlytalkback.js

// <nowiki>


(function($) {


/*
 ****************************************
 *** friendlytalkback.js: Talkback module
 ****************************************
 * Mode of invocation:     Tab ("Hồi âm")
 * Active on:              Any page with relevant user name (userspace, contribs, etc.)
 * Config directives in:   FriendlyConfig
 */

Twinkle.talkback = function() {

	if (!mw.config.get('wgRelevantUserName')) {
		return;
	}

	Twinkle.addPortletLink(Twinkle.talkback.callback, 'Hồi âm', 'friendly-talkback', 'Hồi âm dễ dàng');
};

Twinkle.talkback.callback = function() {
	if (mw.config.get('wgRelevantUserName') === mw.config.get('wgUserName') && !confirm("Bạn chắc chắn muốn hồi âm cho chính mình chứ?")) {
		return;
	}

	var Window = new Morebits.simpleWindow(600, 350);
	Window.setTitle('Hồi âm');
	Window.setScriptName('Twinkle');
	Window.addFooterLink('Về {{hồi âm}}', 'Template:Hồi âm');
	Window.addFooterLink('Trợ giúp Twinkle', 'WP:TW/DOC#talkback');

	var form = new Morebits.quickForm(callback_evaluate);

	form.append({ type: 'radio', name: 'tbtarget',
		list: [
			{
				label: 'Hồi âm: trang thảo luận của tôi',
				value: 'mytalk',
				checked: 'true'
			},
			{
				label: 'Hồi âm: trang thảo luận của người khác',
				value: 'usertalk'
			},
			{
				label: 'Hồi âm: trang khác',
				value: 'other'
			},
			{
				label: '"Vui lòng xem"',
				value: 'see'
			},
			{
				label: 'Thông báo trên bảng thông báo',
				value: 'notice'
			},
			{
				label: 'Bạn có thư',
				value: 'mail'
			}
		],
		event: Twinkle.talkback.changeTarget
	});

	form.append({
		type: 'field',
		label: 'Work area',
		name: 'work_area'
	});

	var previewlink = document.createElement('a');
	$(previewlink).click(function() {
		Twinkle.talkback.preview(result);  // |result| is defined below
	});
	previewlink.style.cursor = 'pointer';
	previewlink.textContent = 'Xem trước';
	form.append({ type: 'div', id: 'talkbackpreview', label: [ previewlink ] });
	form.append({ type: 'div', id: 'friendlytalkback-previewbox', style: 'display: none' });

	form.append({ type: 'submit' });

	var result = form.render();
	Window.setContent(result);
	Window.display();
	result.previewer = new Morebits.wiki.preview($(result).find('div#friendlytalkback-previewbox').last()[0]);

	// We must init the
	var evt = document.createEvent('Event');
	evt.initEvent('change', true, true);
	result.tbtarget[0].dispatchEvent(evt);

	// Check whether the user has opted out from talkback
	var query = {
		action: 'query',
		prop: 'extlinks',
		titles: 'User talk:' + mw.config.get('wgRelevantUserName'),
		elquery: 'userjs.invalid/noTalkback',
		ellimit: '1'
	};
	var wpapi = new Morebits.wiki.api('Tìm nạp trạng thái không tham gia hồi âm', query, Twinkle.talkback.callback.optoutStatus);
	wpapi.post();
};

Twinkle.talkback.optout = '';

Twinkle.talkback.callback.optoutStatus = function(apiobj) {
	var $el = $(apiobj.getXML()).find('el');
	if ($el.length) {
		Twinkle.talkback.optout = mw.config.get('wgRelevantUserName') + ' không muốn nhận hồi âm';
		var url = $el.text();
		var reason = mw.util.getParamValue('reason', url);
		Twinkle.talkback.optout += reason ? ': ' + reason : '.';
	}
	$('#twinkle-talkback-optout-message').text(Twinkle.talkback.optout);
};

var prev_page = '';
var prev_section = '';
var prev_message = '';

Twinkle.talkback.changeTarget = function(e) {
	var value = e.target.values;
	var root = e.target.form;
	var old_area = Morebits.quickForm.getElements(root, 'work_area')[0];

	if (root.section) {
		prev_section = root.section.value;
	}
	if (root.message) {
		prev_message = root.message.value;
	}
	if (root.page) {
		prev_page = root.page.value;
	}

	var work_area = new Morebits.quickForm.element({
		type: 'field',
		label: 'Thông tin hồi âm',
		name: 'work_area'
	});

	root.previewer.closePreview();

	switch (value) {
		case 'mytalk':
			/* falls through */
		default:
			work_area.append({
				type: 'div',
				label: '',
				style: 'color: red',
				id: 'twinkle-talkback-optout-message'
			});
			work_area.append({
				type: 'input',
				name: 'section',
				label: 'Đề mục liên kết (tùy chọn)',
				tooltip: 'Đề mục trên trang thảo luận mà bạn để lại lời nhắn. Để trống nếu không có liên kết đề mục.',
				value: prev_section
			});
			break;

		case 'usertalk':
			work_area.append({
				type: 'div',
				label: '',
				style: 'color: red',
				id: 'twinkle-talkback-optout-message'
			});
			work_area.append({
				type: 'input',
				name: 'page',
				label: 'Thành viên (bắt buộc)',
				tooltip: 'Tên thành viên mà bạn đã để lại tin nhắn trên trang thảo luận của họ. Bắt buộc.',
				value: prev_page,
				required: true
			});

			work_area.append({
				type: 'input',
				name: 'section',
				label: 'Đề mục liên kết (tùy chọn)',
				tooltip: 'Đề mục tại trang mà bạn đã để lại tin nhắn. Để trống nếu không có đề mục liên kết.',
				value: prev_section
			});
			break;

		case 'notice':
			var noticeboard = work_area.append({
				type: 'select',
				name: 'noticeboard',
				label: 'Bảng thông báo:',
				event: function(e) {
					if (e.target.value === 'afchd') {
						Morebits.quickForm.overrideElementLabel(e.target.form.section, 'Tiêu đề của bản nháp (không bao gồm tên tiền tố): ');
						Morebits.quickForm.setElementTooltipVisibility(e.target.form.section, false);
					} else {
						Morebits.quickForm.resetElementLabel(e.target.form.section);
						Morebits.quickForm.setElementTooltipVisibility(e.target.form.section, true);
					}
				}
			});

			$.each(Twinkle.talkback.noticeboards, function(value, data) {
				noticeboard.append({
					type: 'option',
					label: data.label,
					value: value,
					selected: !!data.defaultSelected
				});
			});

			work_area.append({
				type: 'input',
				name: 'section',
				label: 'Chủ đề liên kết',
				tooltip: 'Tiêu đề của chủ đề có liên quan trên trang bảng thông báo.',
				value: prev_section
			});
			break;

		case 'other':
			work_area.append({
				type: 'div',
				label: '',
				style: 'color: red',
				id: 'twinkle-talkback-optout-message'
			});
			work_area.append({
				type: 'input',
				name: 'page',
				label: 'Tên trang đầy đủ (bắt buộc)',
				tooltip: "Tên trang đầy đủ nơi bạn để lại tin nhắn. Ví dụ: 'Wikipedia talk: Twinkle'. Bắt buộc.",
				value: prev_page,
				required: true
			});

			work_area.append({
				type: 'input',
				name: 'section',
				label: 'Đề mục liên kết (tùy chọn)',
				tooltip: 'Đề mục tại trang mà bạn đã để lại tin nhắn. Để trống nếu không có đề mục liên kết.',
				value: prev_section
			});
			break;

		case 'mail':
			work_area.append({
				type: 'input',
				name: 'section',
				label: 'Tiêu đề của email (tùy chọn)',
				tooltip: 'Dòng tiêu đề của email bạn đã gửi.'
			});
			break;

		case 'see':
			work_area.append({
				type: 'input',
				name: 'page',
				label: 'Tên trang đầy đủ (bắt buộc)',
				tooltip: "Tên trang đầy đủ của nơi thảo luận đang được tổ chức. Ví dụ: 'Wikipedia talk: Twinkle'. Bắt buộc.",
				value: prev_page,
				required: true
			});
			work_area.append({
				type: 'input',
				name: 'section',
				label: 'Đề mục liên kết (tùy chọn)',
				tooltip: "Tiêu đề đề mục nơi cuộc thảo luận đang được tổ chức. Ví dụ: 'Đề xuất hợp nhất'.",
				value: prev_section
			});
			break;
	}

	if (value !== 'notice') {
		work_area.append({ type: 'textarea', label: 'Tin nhắn bổ sung (tùy chọn):', name: 'message', tooltip: 'Một thông báo bổ sung mà bạn muốn để lại bên dưới mẫu thảo luận. Chữ ký của bạn sẽ được thêm vào cuối tin nhắn nếu bạn để lại.' });
	}

	work_area = work_area.render();
	root.replaceChild(work_area, old_area);
	if (root.message) {
		root.message.value = prev_message;
	}

	$('#twinkle-talkback-optout-message').text(Twinkle.talkback.optout);
};

Twinkle.talkback.noticeboards = {
	'an': {
		label: "WP:AN (Tin nhắn cho bảo quản viên)",
		text: '== ' + Twinkle.getPref('adminNoticeHeading') + ' ==\n' +
		"{{subst:ANI-notice|thread=$SECTION|noticeboard=Wikipedia:Tin nhắn cho bảo quản viên}} ~~~~",
		editSummary: 'Thông báo thảo luận tại [[Wikipedia:Tin nhắn cho bảo quản viên]]'
	},
	'an3': {
		label: "WP:AN3 (Tin nhắn cho bảo quản viên/Bút chiến)",
		text: '{{subst:An3-notice|$SECTION}} ~~~~',
		editSummary: "Thông báo thảo luận tại [[Wikipedia:Tin nhắn cho bảo quản viên/Bút chiến]]"
	},
	'ani': {
		label: "WP:ANI (Tin nhắn cho bảo quản viên/Sự cố)",
		text: '== ' + Twinkle.getPref('adminNoticeHeading') + ' ==\n' +
		"{{subst:ANI-notice|thread=$SECTION|noticeboard=Tin nhắn cho bảo quản viên/Sự cố}} ~~~~",
		editSummary: 'Thông báo thảo luận tại [[Wikipedia:Tin nhắn cho bảo quản viên/Sự cố]]',
		defaultSelected: true
	},
	// let's keep AN and its cousins at the top
	'afchd': {
		label: 'WP:AFCHD (Tạo bài viết/Giúp sử dụng Wikipedia)',
		text: '{{subst:AFCHD/u|$SECTION}} ~~~~',
		editSummary: 'Bạn có câu trả lời tại [[Wikipedia:Giúp sử dụng Wikipedia]]'
	},
	'coin': {
		label: 'WP:COIN (Bảng thông báo xung đột lợi ích)',
		text: '{{subst:Coin-notice|thread=$SECTION}} ~~~~',
		editSummary: 'Thông báo thảo luận tại [[Wikipedia:Bảng thông báo xung đột lợi ích]]'
	},
	'drn': {
		label: 'WP:DRN (Bảng thông báo giải quyết tranh chấp)',
		text: '{{subst:DRN-notice|thread=$SECTION}} ~~~~',
		editSummary: 'Thông báo thảo luận tại [[Wikipedia:Bảng thông báo giải quyết tranh chấp]]'
	},
	'effp': {
		label: 'WP:EFFP/R (Chỉnh sửa bộ lọc báo cáo dương tính giả)',
		text: '{{EFFPReply|1=$SECTION|2=~~~~}}',
		editSummary: 'Bạn có câu trả lời cho [[Wikipedia:Edit filter/False positives/Reports|edit filter false positive report]]'
	},
	'hd': {
		label: 'WP:HD (Giúp sử dụng Wikipedia)',
		text: '== Câu hỏi của bạn tại Giúp sử dụng Wikipedia ==\n' + '{{helpdeskreply|1=$SECTION|ts=~~~~~}}',
		editSummary: 'Bạn có câu trả lời tại [[Wikipedia:Giúp sử dụng Wikipedia]]'
	},
	'th': {
		label: 'WP:THQ (Teahouse question forum)',
		text: "== Phòng trà thảo luận: bạn có tin nhắn! ==\n{{WP:Teahouse/Teahouse talkback|WP:Teahouse/Questions|$SECTION|ts=~~~~}}",
		editSummary: 'Bạn có câu trả lời tại [[Wikipedia:Phòng trà]]'
	},
	'otrs': {
		label: 'WP:OTRS/N (Bảng thông báo OTRS)',
		text: '{{OTRSreply|1=$SECTION|2=~~~~}}',
		editSummary: 'Bạn có câu trả lời tại [[Wikipedia:Bảng thông báo OTRS]]'
	}
};

callback_evaluate = function(e) {
	var input = Morebits.quickForm.getInputData(e.target);

	var fullUserTalkPageName = new mw.Title(mw.config.get('wgRelevantUserName'), 3).toText();
	var talkpage = new Morebits.wiki.page(fullUserTalkPageName, 'Thêm hồi âm');

	Morebits.simpleWindow.setButtonsEnabled(false);
	Morebits.status.init(e.target);

	Morebits.wiki.actionCompleted.redirect = fullUserTalkPageName;
	Morebits.wiki.actionCompleted.notice = 'Hồi âm hoàn tất; tải lại trang thảo luận sau vài giây';

	// Not used for notice or mail
	input.page = input.page || mw.config.get('wgUserName');

	switch (input.tbtarget) {
		case 'notice':
			talkpage.setEditSummary(Twinkle.talkback.noticeboards[input.noticeboard].editSummary);
			break;
		case 'mail':
			talkpage.setEditSummary("Thông báo: Bạn có thư");
			break;
		case 'see':
			talkpage.setEditSummary('Vui lòng kiểm tra cuộc thảo luận tại [[:' + input.page +
			(input.section ? '#' + input.section : '') + ']]');
			break;
		default:  // tbtarget one of mytalk, usertalk, other
			var editSummary = 'Hồi âm ([[:';
			if (input.tbtarget !== 'other' && !/^\s*user talk:/i.test(input.page)) {
				editSummary += 'User talk:';
			}
			talkpage.setEditSummary(editSummary + input.page + (input.section ? '#' + input.section : '') + ']])');
	}

	talkpage.setAppendText('\n\n' + Twinkle.talkback.getNoticeWikitext(input));
	talkpage.setChangeTags(Twinkle.changeTags);
	talkpage.setCreateOption('recreate');
	talkpage.setMinorEdit(Twinkle.getPref('markTalkbackAsMinor'));
	talkpage.setFollowRedirect(true);
	talkpage.append();
};

Twinkle.talkback.preview = function(form) {
	var input = Morebits.quickForm.getInputData(form);

	if (input.tbtarget !== 'notice') {
		// usertalk, other, see
		input.page = input.page || mw.config.get('wgUserName');
	}

	var noticetext = Twinkle.talkback.getNoticeWikitext(input);
	form.previewer.beginRender(noticetext, 'User_talk:' + mw.config.get('wgRelevantUserName')); // Force wikitext/correct username
};

Twinkle.talkback.getNoticeWikitext = function(input) {
	var text;

	switch (input.tbtarget) {
		case 'notice':
			text = Morebits.string.safeReplace(Twinkle.talkback.noticeboards[input.noticeboard].text, '$SECTION', input.section);
			break;
		case 'mail':
			text =
				'==' + Twinkle.getPref('mailHeading') + '==\n' +
				"{{You've got mail|subject=" + input.section + '|ts=~~~~~}}';

			if (input.message) {
				text += '\n' + input.message + '  ~~~~';
			} else if (Twinkle.getPref('insertTalkbackSignature')) {
				text += '\n~~~~';
			}
			break;
		case 'see':
			text = '{{subst:Please see|location=' + input.page + (input.section ? '#' + input.section : '') + '|more=' + input.message + '}}';
			break;
		default:  // tbtarget one of mytalk, usertalk, other
			// clean talkback heading: strip section header markers that were erroneously suggested in the documentation
			text =
				'==' + Twinkle.getPref('talkbackHeading').replace(/^\s*=+\s*(.*?)\s*=+$\s*/, '$1') + '==\n' +
				'{{talkback|' + input.page + (input.section ? '|' + input.section : '') + '|ts=~~~~~}}';

			if (input.message) {
				text += '\n' + input.message + ' ~~~~';
			} else if (Twinkle.getPref('insertTalkbackSignature')) {
				text += '\n~~~~';
			}
	}
	return text;
};

Twinkle.addInitCallback(Twinkle.talkback, 'talkback');
})(jQuery);


// </nowiki>
Chúng tôi bán
Bài viết liên quan
Lịch sử nước biển khởi nguyên - Genshin Impact
Lịch sử nước biển khởi nguyên - Genshin Impact
Thế giới ngày xưa khi chưa có Thần - hay còn gọi là “Thế giới cũ” - được thống trị bởi bảy vị đại vương đáng sợ
Một tip nhỏ về Q của Bennett và snapshot
Một tip nhỏ về Q của Bennett và snapshot
Nhắc lại nếu có một vài bạn chưa biết, khái niệm "snapshot" dùng để chỉ một tính chất đặc biệt của kĩ năng trong game
Nhân vật Epsilon: the Precision - The Eminence In Shadow
Nhân vật Epsilon: the Precision - The Eminence In Shadow
Epsilon (イプシロン, Ipushiron?) (Έψιλον) là thành viên thứ năm của Shadow Garden, là một trong "Seven Shadows" ban đầu.
Vì sao cảm xúc quan trọng đối với quảng cáo?
Vì sao cảm xúc quan trọng đối với quảng cáo?
Cảm xúc có lẽ không phải là một khái niệm xa lạ gì đối với thế giới Marketing