Медијавики:Edit.js

Напомена: Пошто објавите измене, можда ћете морати да обришете кеш прегледача како бисте их видели.

  • Firefox / Safari: Држите Shift и кликните на Reload или притисните Ctrl-F5 или Ctrl-R (⌘-R на Mac-у).
  • Google Chrome: Притисните Ctrl-Shift-R (⌘-Shift-R на Mac-у).
  • Internet Explorer / Edge: Држите Ctrl и кликните на Refresh или притисните Ctrl-F5.
  • Opera: Притисните 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() {
	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) {
					if (strings[i] === '')
						continue;
					var left, right, index;
					index = strings[i].indexOf('+');
					if (index == -1)
						index = strings[i].length;
					left = strings[i].substring(0, index);
					right = strings[i].substring(index + 1);
					left = patchUpInsertTagsArg(left);
					right = patchUpInsertTagsArg(right);
					var textToDisplay = left + right;
					var a = document.createElement('a');
					(function(left, right) {
						a.onclick = function() {
							
							
							
							$( '#wpTextbox1' ).textSelection(
						'encapsulateSelection', {
							pre: left.replace(/^ */, ''),
							peri: '',
							post: right
						}
					);
					
							return false;
						};
						a.href = '#';
						a.appendChild(document.createTextNode(textToDisplay));
						if (i > 0) {
							span.insertBefore(document.createTextNode(' '), node);
						}
						span.insertBefore(a, node);
						addedNew = true;
					})(left, right);
				}
				oldNode = node;
				node = node.nextSibling;
				if (addedNew) {
					span.removeChild(oldNode);
				}
			} else if (node.nodeType === 1) {
				// Element node
				oldNode = node;
				node = node.nextSibling;
				charinsertify(oldNode);
			}
		}
	}

	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>