ผู้ใช้:Octahedron80/catcat.js

จากวิกิพีเดีย สารานุกรมเสรี

หมายเหตุ: หลังเผยแพร่ คุณอาจต้องล้างแคชเว็บเบราว์เซอร์ของคุณเพื่อดูการเปลี่ยนแปลง

  • ไฟร์ฟอกซ์ / ซาฟารี: กด Shift ค้างขณะคลิก Reload หรือกด Ctrl-F5 หรือ Ctrl-R (⌘-R บนแมค)
  • กูเกิล โครม: กด Ctrl-Shift-R (⌘-Shift-R บนแมค)
  • อินเทอร์เน็ตเอกซ์พลอเรอร์ และ Edge: กด Ctrl ค้างขณะคลิก Refresh หรือกด Ctrl-F5
  • โอเปร่า: กด Ctrl-F5
/* <source lang="javascript"> */

/* FOR VECTOR-2022 AND VECTOR SKINS */
/* This script works best with stylesheet: catcat.css */

/* Required library outside normal pages */

/* Predefined variables */
var catcatVersion = '1.3.6';
var pageName = mw.config.get('wgPageName');
var pageTitle = mw.config.get('wgTitle');
var pageNamespaceNumber = mw.config.get('wgNamespaceNumber');
var currentSkin = mw.config.get('skin');
var indexUrl = mw.util.wikiScript('index');
var apiUrl = mw.util.wikiScript('api');
var commonsUrl = '//upload.wikimedia.org/wikipedia/commons';

var restrictionEdit = mw.config.get('wgRestrictionEdit');
var editable = (restrictionEdit === null || restrictionEdit.length === 0 ||
	mw.config.get('wgUserGroups').indexOf(restrictionEdit[0]) > -1);

/* wikiNamespace, wikiNamespaceKeys, thaiDigit, levelList, projectList */
mw.loader.load('//th.wikipedia.org/w/index.php?title=User:Octahedron80/catcat-data.js&action=raw&ctype=text/javascript');

/* Escaping string for regular expression */
RegExp.escape = function(text) {
	return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
};

function customizeToolbar($textarea) {
	$textarea.wikiEditor('addToToolbar', {
		'section': 'main', 'group': 'format', 'tools': {
			'underline': {
				'label': 'ขีดเส้นใต้',
				'type': 'button',
				'icon': commonsUrl + '/1/13/Toolbaricon_regular_U_underline.png',
				'action': {
					'type': 'encapsulate',
					'options': {
						'pre': '<u>', 'peri': 'ข้อความขีดเส้นใต้', 'post': '</u>'
					}
				}
			},
			'stroke': {
				'label': 'ขีดฆ่า',
				'type': 'button',
				'icon': commonsUrl + '/f/f9/Toolbaricon_regular_S_stroke.png',
				'action': {
					'type': 'encapsulate',
					'options': {
						'pre': '<s>', 'peri': 'ข้อความขีดฆ่า', 'post': '</s>'
					}
				}
			},
			'comment': {
				'label': 'หมายเหตุ',
				'type': 'button',
				'icon': commonsUrl + '/1/11/Toolbaricon_hiddencomment.png',
				'action': {
					'type': 'encapsulate',
					'options': {
						'pre': '<!--', 'peri': 'ข้อความหมายเหตุ', 'post': '-->'
					}
				}
			}
		}
	});
	$textarea.wikiEditor('addToToolbar', {
		'section': 'main',
		'groups': {
			'extra': {
				'tools': {
					'cleanup': {
						'label': 'เก็บกวาด',
						'type': 'button',
						'icon': commonsUrl + '/1/1d/Broom_tiny.png',
						'action': {
							'type': 'callback',
							'execute': function() {
								var content = $textarea.val();
								var titleRegExp = new RegExp(RegExp.escape('[[' + pageName + ']]'), 'g');
								content = content
									.replace(/\t+/g, ' ')								/* replace tabs with spaces */
									.replace(/ ?\( ?/gm, ' (')							/* reformat opening parentheses */
									.replace(/ ?\) ?(?![\.,;\|\]\}])/gm, ') ')					/* reformat closing parentheses */
									.replace(/ ?, ?(?![0-9๐-๙]{3})/gm, ', ')					/* reformat commas */
									.replace(/^ +/gm, '')								/* trim leading spaces */
									.replace(/\| *\}\}/gm, '}}')							/* remove unnecessary pipes */
									.replace(/^([\*#:;]+|\|[-\+\|\}]?) */gm, '$1 ')					/* align lists, blocks, leading pipes */
									.replace(/ +$/gm, '')								/* trim trailing spaces */
									.replace(/ +/g, ' ')								/* remove repeated spaces */
									.replace(/\n\n+/g, '\n\n')							/* remove more-than-two newlines */
									.replace(/^(=+) *([^\n]*?) *(=+)$/gm, '$1 $2 $1')				/* align and fix headings */
									.replace(/\[\[([^\n]*?)\|\1\]\]/g, '[[$1]]')					/* cancel same substitutions */
									.replace(titleRegExp, pageName)						/* cancel self links */
									.replace(/(เ)\1/g, 'แ')								/* replace เ+เ to แ */
									.replace(/ํ([่-๋]?)า/g, '$1ำ')							/* replace ํ+า to ำ */
									.replace(/ำ([่-๋])/g, '$1ำ')							/* swap position between ำ and tones */
									.replace(/([ฤฦ])า/g, '$1ๅ')							/* replace ฤา/ฦา to ฤๅ/ฦๅ */
									.replace(/([ะ-ฺเ-ๅ็-๎])\1+/g, '$1')						/* remove repeated vowels and tones */
									.replace(/(.) +([ะ-ฺๅ็-๎])/g, '$1$2')						/* move up vowels and tones */
									.replace(/([^\s\(\{\[\|])(ๆ)/gm, '$1 $2')					/* add spaces around yamok 1 */
									.replace(/(ๆ)([^\s'"\)\}\]\.,])/gm, '$1 $2')					/* add spaces around yamok 2 */
									.replace(/\{\{commons(\|category:| ?cat(egory)?\|)/gi, '{{คอมมอนส์-หมวดหมู่|')	/* replace Commons category template */
									/* replace some namespaces */
									.replace(new RegExp('\\b(' + wikiNamespaceKeys.join('|') + ')(?=:)', 'gi'), function($0) {
										return wikiNamespace[$0.toLowerCase()];
									})
									/* convert Thai links */
									.replace(/\[https?:\/\/th\.wikipedia\.org\/wiki\/([^ ]+?)\]/g, function(z, tt) {
										return '[[' + decodeURIComponent(tt) + ']]';
									})
									/* convert iw links */
									.replace(/\[https?:\/\/([-a-z]+)\.wikipedia\.org\/wiki\/([^ ]+?)\]/g, function(z, lg, tt) {
										return '[[:' + lg + ':' + decodeURIComponent(tt) + ']]';
									})
									/* wikify Thai links */
									.replace(/\[https?:\/\/th\.wikipedia\.org\/wiki\/(.+?) +(.+?)\]/g, function(z, tt, sb) {
										return '[[' + decodeURIComponent(tt) + '|' + sb + ']]';
									})
									/* wikify iw links */
									.replace(/\[https?:\/\/([-a-z]+)\.wikipedia\.org\/wiki\/(.+?) +(.+?)\]/g, function(z, lg, tt, sb) {
										return '[[:' + lg + ':' + decodeURIComponent(tt) + '|' + sb + ']]';
									})
									/* apply fullurl on Thai links */
									.replace(/https?:\/\/th\.wikipedia\.org\/w\/index\.php\?title=(.+?)&(.+?)(?=[\s\|\]<])/g, function(z, tt, qs) {
										return '{{fullurl:' + decodeURIComponent(tt) + '|' + qs + '}}';
									})
									/* apply fullurl on iw links */
									.replace(/https?:\/\/([-a-z]+)\.wikipedia\.org\/w\/index\.php\?title=(.+?)&(.+?)(?=[\s\|\]<])/g, function(z, lg, tt, qs) {
										return '{{fullurl:' + lg + ':' + decodeURIComponent(tt) + '|' + qs + '}}';
									})
									/* decode URI except special symbols */
									.replace(/(%[0-9A-F][0-9A-F])+/gi, function(z) {
										try { return decodeURI(z).replace(/ /g, "%20"); } catch (exception) { return z; }
									});
								$textarea.val(content);
								$('#wpSummary').val($('#wpSummary').val() + 'เก็บกวาด ');
							}
						}
					},
					'arabic-number': {
						'label': 'ใช้เลขอารบิก',
						'type': 'button',
						'icon': commonsUrl + '/8/80/Toolbaricon_regular_123.png',
						'action': {
							'type': 'callback',
							'execute': function() {
								var content = $textarea.val();
								content = content.replace(/[๐-๙]/g, function(d) {
									return thaiDigit.indexOf(d).toString();
								});
								$textarea.val(content);
								$('#wpSummary').val($('#wpSummary').val() + 'ใช้เลขอารบิก ');
							}
						}
					},
					'decomment': {
						'label': 'ลบหมายเหตุทั้งหมด',
						'type': 'button',
						'icon': commonsUrl + '/c/cd/Toolbaricon_remove_comment.png',
						'action': {
							'type': 'callback',
							'execute': function() {
								var content = $textarea.val();
								content = content.replace(/<!--(.|\n)*?-->/g, '');
								$textarea.val(content);
								$('#wpSummary').val($('#wpSummary').val() + 'ลบหมายเหตุทั้งหมด ');
							}
						}
					}
				}
			}
		}
	});
}


$(function() {

	/* Working space */
	var NyaNya = {};
	NyaNya.show = function($obj) {
		$('div#nyanya').remove();
		if ($obj !== undefined && $obj !== null && $obj !== '') {
			$('#contentSub').append('<div id="nyanya" class="mw-ui-vform" />')
				.find('div#nyanya').html($obj).slideDown('fast').end();
		}
	};
	NyaNya.hide = function() {
		$('div#nyanya').fadeOut('slow', function() { $(this).remove(); });
	};
	NyaNya.$cancelButton = $('<button class="mw-ui-button">ยกเลิก</button>')
		.click(function() { NyaNya.hide(); });

	/* Extra selector 'econtains' */
	$.expr.pseudos.econtains = function(obj, index, meta, stack){
		return (obj.textContent || obj.innerText || $(obj).text() || "") == meta[3];
	};

	/* Notify version */
	var reloadLink = '<a href="javascript:window.location.reload(true)">🔃</a>';
	$('.catcat-check-version').html(catcatVersion + ' ' + reloadLink);
	var $projectLink = $('<li id="pt-catcat" class="mw-list-item"><a href="' + indexUrl
		+ '?title=Project:สคริปต์แมว ๆ" title="สคริปต์แมว ๆ">' + '🐱' + catcatVersion + '</a></li>');
	$('#p-personal ul').prepend($projectLink);
	if (currentSkin == "vector-2022") {
		$('#p-personal-sticky-header ul').prepend($projectLink.clone().attr("id", "pt-catcat-sticky-header"));
	}

	// Check if we're editing a page.
	if (['edit', 'submit'].indexOf(mw.config.get('wgAction')) !== -1 && mw.config.get('wgPageContentModel') == 'wikitext') {
		// Add a hook handler.
		mw.hook('wikiEditor.toolbarReady').add(customizeToolbar);
	}

	/* Extra tab menu */
	var $extraMenu = $('#p-cactions').clone().attr('id', 'p-extra');
	$extraMenu.find('span').text('ใหม่');
	var $extraMenuList = $extraMenu.find('ul').empty();

	if ($('#ca-edit a').attr('href') !== undefined) {
		var editFirstSectionLink = $('#ca-edit a').attr('href') + '&section=0';
		$('<li id="ca-edit-first" class="mw-list-item"><a title="แก้ไขส่วนแรก" href="' + editFirstSectionLink
			+ '">แก้ไขส่วนแรก</a></li>').appendTo($extraMenuList);

		var editNewSectionLink = $('#ca-edit a').attr('href') + '&section=new';
		$('<li id="ca-edit-new" class="mw-list-item"><a title="เพิ่มส่วนใหม่" href="' + editNewSectionLink
			+ '">เพิ่มส่วนใหม่</a></li>').appendTo($extraMenuList);
	}

	if ($('#ca-history a').attr('href') !== undefined) {
		var viewLatestDiffLink = $('#ca-history a').attr('href') + 'submit&diff=0';
		$('<li id="ca-latest-diff" class="mw-list-item"><a title="ส่วนต่างล่าสุด" href="' + viewLatestDiffLink
			+ '">ส่วนต่างล่าสุด</a></li>').appendTo($extraMenuList);
	}

	if ($('body').is('.ns--2, .ns--1') === false) {
		$('<li id="ca-red-link" class="mw-list-item"></li>').append('<a title="รายชื่อลิงก์แดง" href="#">รายชื่อลิงก์แดง</a>').click(function() {
			var $redLink = $('a.new').clone();
			var $redLinkNone = $('<span>ไม่มีลิงก์แดงที่ปรากฏในหน้านี้ </span>');
			var $redLinkForm = $('<span>นี่คือรายชื่อลิงก์แดงทั้งหมดที่ปรากฏในหน้านี้ </span><ul class="red-link"></ul>')
				.filter('span').append(NyaNya.$cancelButton.clone(true)).end()
				.filter('ul').append($redLink).find('a.new').wrap('<li></li>').end().end();
			if ($redLink.length === 0) {
				mw.notify($redLinkNone);
			} else {
				NyaNya.show($redLinkForm);
			}
		}).appendTo($extraMenuList);
	}

	if ($extraMenuList.find('li').length === 0) {
		$extraMenu.addClass('emptyPortlet');
	} else {
		$extraMenu.removeClass('emptyPortlet');
	}
	$('#p-views').after($extraMenu);

	/* Tag tab menu */
	var $tagMenu = $('#p-cactions').clone().attr('id', 'p-tag');
	$tagMenu.find('span').text('ป้าย');
	var $tagMenuList = $tagMenu.find('ul').empty();

	if ($('body').is('.ns--2, .ns--1, .ns-8') === false) {
		$('<li id="ca-tag-delete" class="mw-list-item"></li>').append('<a title="แจ้งลบ" href="#">แจ้งลบ</a>').click(function() {
			var $deleteProtect = $('<span>ไม่สามารถแจ้งลบ ' + pageName + ' เนื่องจากหน้านี้ได้รับการป้องกัน </span>')
				.filter('span').append(NyaNya.$cancelButton.clone(true)).end();
			if (!editable) {
				mw.notify($deleteProtect);
				return;
			}
			var $deleteForm = $('<span>ระบุเหตุผลของการแจ้งลบ: <input type="textbox" id="delete-reason" class="mw-ui-input mw-ui-input-inline" value=""></input> <button id="delete-submit" class="mw-ui-button mw-ui-destructive">แจ้งลบ</button> </span>')
				.filter('span').append(NyaNya.$cancelButton.clone(true)).end()
				.find('#delete-reason').keyup(function(event) {
					if (event.keyCode == 13) { /* enter key */
						$('#delete-submit').click();
					}
				}).end()
				.find('#delete-submit').click(function() {
					var deleteReason = $('#delete-reason').val().replace(/=/g, '{{=}}');
					mw.notify('กำลังดำเนินการแจ้งลบ ' + pageName + ' ...');
					var prependText;
					if ($('body').is('.ns-4, .ns-10') === true) { /* project or template */
						prependText = '<noinclude>{{ลบ|' + deleteReason + '}}</noinclude>\n';
					} else {
						prependText = '{{ลบ|' + deleteReason + '}}\n';
					}
					$.post(apiUrl, {
						'action': 'edit',
						'title': pageName,
						'section': '0',
						'summary': 'แจ้งลบ',
						'minor': '1',
						'prependtext': prependText,
						'nocreate': '1',
						'token': mw.user.tokens.get('csrfToken'),
						'format': 'xml'				
					}, function() {
						mw.notify('แจ้งลบ ' + pageName + ' เรียบร้อยแล้ว กรุณารอสักครู่');
						setInterval(location.assign(indexUrl + '?title=' + encodeURIComponent(pageName)), 3000);
					}, 'xml');
				}).end();
			NyaNya.show($deleteForm);
			$('#delete-reason').focus();
		}).appendTo($tagMenuList);
	}

	if ($('body').is('.ns--2, .ns--1, .ns-6, .ns-8') === false) {
		$('<li id="ca-tag-copyvio" class="mw-list-item"></li>').append('<a title="แจ้งละเมิดลิขสิทธิ์" href="#">ละเมิดลิขสิทธิ์</a>').click(function() {
			var $copyvioProtect = $('<span>ไม่สามารถแจ้งละเมิดลิขสิทธิ์ ' + pageName + ' เนื่องจากหน้านี้ได้รับการป้องกัน </span>')
				.filter('span').append(NyaNya.$cancelButton.clone(true)).end();
			if (!editable) {
				mw.notify($copyvioProtect);
				return;
			}
			var $copyvioForm = $('<span>ใส่ยูอาร์แอลที่พบ: <input type="textbox" id="copyvio-url" class="mw-ui-input mw-ui-input-inline" value=""></input> *<br />หมายเหตุเพิ่มเติม: <input type="textbox" id="copyvio-note" class="mw-ui-input mw-ui-input-inline" value=""></input> <button id="copyvio-submit" class="mw-ui-button mw-ui-destructive">แจ้งละเมิดลิขสิทธิ์</button> </span>')
				.filter('span').append(NyaNya.$cancelButton.clone(true)).end()
				.find('#copyvio-url').keyup(function(event) {
					if (event.keyCode == 13) { /* enter key */
						$('#copyvio-note').focus();
					}
				}).end()
				.find('#copyvio-note').keyup(function(event) {
					if (event.keyCode == 13) { /* enter key */
						$('#copyvio-submit').click();
					}
				}).end()
				.find('#copyvio-submit').click(function() {
					var copyvioUrl = $('#copyvio-url').val().replace(/=/g, '{{=}}');
					if (copyvioUrl === '') {
						alert('คุณต้องระบุยูอาร์แอลด้วย');
						return;
					}
					var copyvioNote = $('#copyvio-note').val().replace(/=/g, '{{=}}');
					mw.notify('กำลังดำเนินการแจ้งละเมิดลิขสิทธิ์ ' + pageName + ' ...');
					$.post(apiUrl, {
						'action': 'edit',
						'title': pageName,
						'summary': 'แจ้งละเมิดลิขสิทธิ์',
						'minor': '1',
						'text': '{{ละเมิดลิขสิทธิ์|url=' + copyvioUrl + '|วันที่={{sub' + 'st:#timel:d/m/xkY}}|หมายเหตุ=' + copyvioNote + '}}\n',
						'nocreate': '1',
						'token': mw.user.tokens.get('csrfToken'),
						'format': 'xml'				
					}, function() {
						mw.notify('แจ้งละเมิดลิขสิทธิ์ ' + pageName + ' เรียบร้อยแล้ว กรุณารอสักครู่');
						setInterval(location.assign(indexUrl + '?title=' + encodeURIComponent(pageName)), 3000);
					}, 'xml');
				}).end();
			NyaNya.show($copyvioForm);
			$('#copyvio-url').focus();
		}).appendTo($tagMenuList);
	}

	if ($('body').is('.ns--2, .ns--1, .ns-6, .ns-8') === false) {
		$('<li id="ca-tag-delete" class="mw-list-item"></li>').append('<a title="แจ้งต้องการอ้างอิง" href="#">ต้องการอ้างอิง</a>').click(function() {
			var $referenceProtect = $('<span>ไม่สามารถแจ้งต้องการอ้างอิง ' + pageName + ' เนื่องจากหน้านี้ได้รับการป้องกัน </span>')
				.filter('span').append(NyaNya.$cancelButton.clone(true)).end();
			if (!editable) {
				mw.notify($referenceProtect);
				return;
			}
			mw.notify('กำลังดำเนินการแจ้งต้องการอ้างอิง ' + pageName + ' ...');
			$.post(apiUrl, {
				'action': 'edit',
				'title': pageName,
				'section': '0',
				'summary': 'แจ้งต้องการอ้างอิง',
				'minor': '1',
				'prependtext': '{{ต้องการอ้างอิง}}\n',
				'nocreate': '1',
				'token': mw.user.tokens.get('csrfToken'),
				'format': 'xml'				
			}, function() {
				mw.notify('แจ้งต้องการอ้างอิง ' + pageName + ' เรียบร้อยแล้ว กรุณารอสักครู่');
				setInterval(location.assign(indexUrl + '?title=' + encodeURIComponent(pageName)), 3000);
			}, 'xml');
		}).appendTo($tagMenuList);
	}

	/* only main, category, and their talk pages */
	if ($('body').is('.ns-0, .ns-1, .ns-14, .ns-15') === true) {
		$('<li id="ca-project" class="mw-list-item"></li>').append('<a title="จัดโครงการและจัดระดับ" href="#">โครงการ+ระดับ</a>').click(function() {
			var projectList2 = [];
			$.each(projectList, function() {
				projectList2.push('<label>' + this + '</label> ');
			});
			var projectLabel = projectList2.join('');
			var projectLevel, levelList2 = [];
			if ($('body').is('.ns-0, .ns-1') === true) {
				$.each(levelList, function() {
					levelList2.push('<option>' + this	+ '</option>');
				});
				projectLevel = levelList2.join('');
			} else {
				projectLevel = '<option>หมวดหมู่</option>';
			}

			var startPos, endPos, originalText;
			var $projectForm = $('<span id="project-type">เลือกโครงการ: <i>เพิ่มหรือลดโครงการวิกิหรือสถานีย่อยที่ต้องการ</i><br />'
				+ projectLabel + '<br /></span><span id="project-level">เลือกระดับ: <i>ทุกโครงการที่เลือกจะถูกจัดอยู่ในระดับเดียวกัน</i><br />'
				+ '<select id="project-level-selector">'
				+ projectLevel + '</select> <button id="project-submit" class="mw-ui-button mw-ui-constructive">เพิ่มโครงการและจัดระดับ</button> </span>')
				.filter('span:last').append(NyaNya.$cancelButton.clone(true)).end()
				.find('label').click(function() {
					$(this).toggleClass('label-selected');
				}).end()
				.find('#project-level-selector').keyup(function(event) {
					if (event.keyCode == 13) { /* enter key */
						$('#project-submit').click();
					}
				}).end()
				.find('#project-submit').click(function() {
					var selectedProjects = [];
					var selectedLevel = $('#project-level-selector option:selected').text();
					if (selectedLevel == '-------') { selectedLevel = ''; }
					$('#project-type label.label-selected').each(function() {
						selectedProjects.push('{{บทความ' + $(this).text() + '|ระดับ=' + selectedLevel + '}}');
					});
					var projectTag = selectedProjects.join('\n');

					var dataObj = {
						'action': 'edit',
						'title': ($('body').is('.ns-talk') === true) ? pageName :
							(($('body').is('.ns-14') === true) ? 'Category talk:' + pageTitle : 'Talk:' + pageTitle),
						'section': '0',
						'summary': 'โครงการ+ระดับ',
						'minor': '1',
						'token': mw.user.tokens.get('csrfToken'),
						'format': 'xml'				
					};
					if (startPos === undefined || startPos == -1) { /* page not exists or no tag at all */
						dataObj.prependtext = projectTag + '\n';
					} else { /* have some tags */
						dataObj.text = originalText.replace(originalText.slice(startPos, endPos), projectTag);
					}
					mw.notify('กำลังดำเนินการเพิ่มโครงการและจัดระดับ ' + pageTitle + ' ...');
					$.post(apiUrl, dataObj, function() {
						mw.notify('เพิ่มโครงการและจัดระดับ ' + pageTitle + ' เรียบร้อยแล้ว กรุณารอสักครู่');
						setInterval(location.assign(indexUrl + '?title=' + encodeURIComponent(pageName)), 3000);
					}, 'xml');
				}).end();
			NyaNya.show($projectForm);

			$.ajax(indexUrl, {
				'type': 'GET',
				'async': false, /* required */
				'data': {
					'action': 'raw',
					'title': ($('body').is('.ns-talk') === true) ? pageName :
						(($('body').is('.ns-14') === true) ? 'Category talk:' + pageName : 'Talk:' + pageName),
					'section': '0',
					'maxage': '0', /* required */
					'smaxage': '0'
				},
				'success': function(data) {
					var initLevel, projects = [];
					var projectRegex = /\{\{บทความ([^\|\}]+?)(\|ระดับ=([^\}]*))?\}\}/g;
					var matchedSet;
					startPos = data.indexOf('{{บทความ');
					while (matchedSet = projectRegex.exec(data)) {
						endPos = projectRegex.lastIndex;
						projects.push(matchedSet[1]);
						if (matchedSet[3] !== null && matchedSet[3] !== '') {
							initLevel = matchedSet[3];
						}
					}
					originalText = data;
					$.each(projects, function() {
						$('#project-type label:econtains("' + this + '")').addClass('label-selected');
					});
					if (initLevel !== null && initLevel !== '') {
						$('#project-level-selector option:econtains("' + initLevel + '")').attr('selected', 'selected');
					}
				}
			});
		}).appendTo($tagMenuList);
	}

	/* File namespace only */
	if ($('body').is('.ns-6') === true) {
		$('<li id="ca-tag-delete" class="mw-list-item"></li>').append('<a title="แจ้งไม่ได้ระบุสัญญาอนุญาต" href="#">ไม่ได้ระบุ สอ.</a>').click(function() {
			var $licenseProtect = $('<span>ไม่สามารถแจ้งไม่ได้ระบุสัญญาอนุญาต ' + pageName + ' เนื่องจากหน้านี้ได้รับการป้องกัน </span>')
				.filter('span').append(NyaNya.$cancelButton.clone(true)).end();
			if (!editable) {
				mw.notify($licenseProtect);
				return;
			}
			mw.notify('กำลังดำเนินการแจ้งไม่ได้ระบุสัญญาอนุญาต ' + pageName + ' ...');
			$.post(apiUrl, {
				'action': 'edit',
				'title': pageName,
				'section': '0',
				'summary': 'แจ้งไม่ได้ระบุสัญญาอนุญาต',
				'minor': '1',
				'prependtext': '{{ไม่ได้ระบุ|{{sub' + 'st:#timel:d/m/xkY}}}}\n',
				'nocreate': '1',
				'token': mw.user.tokens.get('csrfToken'),
				'format': 'xml'				
			}, function() {
				mw.notify('แจ้งไม่ได้ระบุสัญญาอนุญาต ' + pageName + ' เรียบร้อยแล้ว กรุณารอสักครู่');
				setInterval(location.assign(indexUrl + '?title=' + encodeURIComponent(pageName)), 3000);
			}, 'xml');
		}).appendTo($tagMenuList);
	}

	/* File namespace only */
	if ($('body').is('.ns-6') === true) {
		$('<li id="ca-tag-delete" class="mw-list-item"></li>').append('<a title="แจ้งไม่มีแหล่งที่มา" href="#">ไม่มีแหล่งที่มา</a>').click(function() {
			var $sourceProtect = $('<span>ไม่สามารถแจ้งไม่มีแหล่งที่มา ' + pageName + ' เนื่องจากหน้านี้ได้รับการป้องกัน </span>')
				.filter('span').append(NyaNya.$cancelButton.clone(true)).end();
			if (!editable) {
				mw.notify($sourceProtect);
				return;
			}
			mw.notify('กำลังดำเนินการแจ้งไม่มีแหล่งที่มา ' + pageName + ' ...');
			$.post(apiUrl, {
				'action': 'edit',
				'title': pageName,
				'section': '0',
				'summary': 'แจ้งไม่มีแหล่งที่มา',
				'minor': '1',
				'prependtext': '{{ไม่มีแหล่งที่มา|{{sub' + 'st:#timel:d/m/xkY}}}}\n',
				'nocreate': '1',
				'token': mw.user.tokens.get('csrfToken'),
				'format': 'xml'				
			}, function() {
				mw.notify('แจ้งไม่มีแหล่งที่มา ' + pageName + ' เรียบร้อยแล้ว กรุณารอสักครู่');
				setInterval(location.assign(indexUrl + '?title=' + encodeURIComponent(pageName)), 3000);
			}, 'xml');
		}).appendTo($tagMenuList);
	}

	if ($tagMenuList.find('li').length === 0) {
		$tagMenu.addClass('emptyPortlet');
	} else {
		$tagMenu.removeClass('emptyPortlet');
	}
	$('#p-extra').after($tagMenu);

});

/* </source> */