มีเดียวิกิ:Edit.js

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

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

  • ไฟร์ฟอกซ์ / ซาฟารี: กด Shift ค้างขณะคลิก Reload หรือกด Ctrl-F5 หรือ Ctrl-R (⌘-R บนแมค)
  • กูเกิล โครม: กด Ctrl-Shift-R (⌘-Shift-R บนแมค)
  • อินเทอร์เน็ตเอกซ์พลอเรอร์ และ Edge: กด Ctrl ค้างขณะคลิก Refresh หรือกด Ctrl-F5
  • โอเปร่า: กด Ctrl-F5
// {{documentation}} <nowiki>
// implicit dependencies: mediawiki.cookie
// Javascript included on the edit page. 
/* ==[[MediaWiki:Edittools]]== */

/* ===applyCharinserts=== */
/* handle <span class="charinsert"> like <charinsert> */

function applyCharinserts() {
	var textbox = $('#wpTextbox1');
	function patchUpInsertTagsArg(arg) {
		return (
			arg.replace(/\x22/g, '&quot;').replace(/\x27/g, "\\'").replace(/\x26nbsp;/g, ' '));
	}

	function charinsertify(span) {
		// Go through all child nodes of span.
		for (var node = span.firstChild, oldNode; node;) {
			if (node.nodeType === 3) {
				// Text node
				var s = node.nodeValue, // text content
					addedNew = false;

				s = s.replace(/\xA0/g, '\x26nbsp;');

				var strings = s.split(/\s/g);
				for (var i = 0; i < strings.length; ++i) {
					var string = strings[i];
					if (string === '')
						continue;
					var left, right, index;
					index = string.indexOf('+');
					if (index == -1)
						index = string.length;
					left = string.substring(0, index), right = string.substring(index + 1);
					left = patchUpInsertTagsArg(left), right = patchUpInsertTagsArg(right);
					var textToDisplay = left + right;
					var a = document.createElement('a');
					a.left = left, a.right = right;
					a.onclick = function() {
						textbox.textSelection(
							'encapsulateSelection', {
								pre: this.left.replace(/^ */, '')
									.replace(/\u0640(.)/g, '$1'), // remove ARABIC TATWEEL before Arabic diacritic
								peri: '',
								post: this.right
							}
						);
				
						return false;
					};
					a.href = '#';
					a.appendChild(document.createTextNode(textToDisplay));
					if (i > 0) {
						span.insertBefore(document.createTextNode(' '), node);
					}
					span.insertBefore(a, node);
					addedNew = true;
				}
				if (addedNew) {
					span.removeChild(node);
				}
				oldNode = node, node = node.nextSibling;
			} else if (node.nodeType === 1) {
				// Element node
				charinsertify(node);
				oldNode = node, node = node.nextSibling;
			}
		}
	}

	var edittools = document.getElementById('editpage-specialchars');
	if (!edittools)
		return;
	var spans = edittools.getElementsByTagName('span');
	if (!spans)
		return;
	for (var i = 0; i < spans.length; ++i) {
		if ((' ' + spans[i].className + ' ').indexOf(' charinsert ') == -1)
			continue;
		spans[i].className = spans[i].className.replace(/\bcharinsert\b/, '');
		charinsertify(spans[i]);
	}
}

/* ===addCharSubsetMenu=== */
/* add menu for selecting subsets of secial characters */
function addCharSubsetMenu() {
	var edittools = $('#editpage-specialchars');
	if (edittools.length === 0) return;

	var menu = $('<select>')
				.attr("id", 'charSubsetControl').css("display", "inline")
				.on("change", function() {
					chooseCharSubset($(this).val());
				});

	var pp = edittools.find('p');
	if (pp.length === 0) return;
	
	pp.each(function(index){
		$('<option>')
			.text(decodeURIComponent(
				($(this).attr("id") || '').replace(/^edittools-/, '')
				.replace(/\.([0-9A-F][0-9A-F])/g, '%$1')
				.replace(/_/g, '%20')))
			.val(index)
			.appendTo(menu);
	});

	edittools.prepend(menu);

	/* default subset from cookie */
	var s = parseInt(mw.cookie.get('edittoolscharsubset'));
	if (isNaN(s)) s = 0;

	/* update dropdown control to value of cookie */
	menu.val(s);

	/* display the subset indicated by the cookie */
	chooseCharSubset(s);
}


/* ===chooseCharSubsetMenu=== */

/* select subsection of special characters */
function chooseCharSubset(s) {
	var l = $('#editpage-specialchars').find('p');
	for (var i = 0; i < l.length; i++) {
		l[i].style.display = i == s ? 'inline' : 'none';
		l[i].style.visibility = i == s ? 'visible' : 'hidden';
	}
	mw.cookie.set('edittoolscharsubset', s);
}

$(function() {
	if (!window.doNotUseDefaultEditTools) { // [[User:Conrad.Irwin/edittools.js]]
		addCharSubsetMenu();
	}
	applyCharinserts();
});
// </nowiki>