MediaWiki:Edittools/qaralama.js

Wikipedia, erkin enciklopediya

Dıqqat: Ózgerislerińiz kóriniwi ushın jańa sazlawlarıńızdı saqlaǵannan keyin brauzerdiń keshin tazalaw kerek:
Google Chrome: Ctrl+Shift+R, Mozilla Firefox: Ctrl+Shift+R, Intenet Explorer: Ctrl+F5, Safari: Cmd+Shift+R, Konqueror: F5, Opera: Tools → Preferences arqalı keshti tazalań.

// copied from [[mw:User:Alex Smotrov/edittools.js]], modified for use on the Kazakh Wikipedia.
// enableForAllFields() feature from [[commons:MediaWiki:Edittools.js]]
// combined and modified by [[User:Ilmari Karonen]]

if (typeof (EditTools_set_focus) == 'undefined') {
	var EditTools_set_focus = true;
}

if (typeof (EditTools_set_focus_initially) == 'undefined') {
	var EditTools_set_focus_initially = EditTools_set_focus;
}

var EditTools = {
	charinsert: {
		'Standart': "Á á Ǵ ǵ Í ı Ń ń Ó ó Ú ú — – «+» [[+]] {{+}} [[+|+]] [+] “+” ‘+’ ‹+› „+“ ‚+‘ … ~ | ° &nbsp;  ≈ ≠ ≤ ≥ ± − × ÷ ← → ² ³ ½ · § \n [[Kategoriya:+]]  [[:Súwret:+]]  +<includeonly>  +<noinclude>  #REDIRECT[[+]]  {{DEFAULTSORT:+}}",
		'Qaraqalpaq (kirill)': 'АӘБВГҒДЕЁЖЗИЙКҚЛМНҢОӨПРСТУҮЎФХҲЦЧШЩЪЫЬЭЮЯ  @ # № $ € % & § − ± \n аәбвгғдеёжзийкқлмнңоөпрстуүўфхҳцчшщъыьэюя  ~ * ʼ ° … | — (+) [+] {+} «+» „+“ &nbsp;', 
		"Qaraqalpaq (latın)": 'AÁBVGǴDEYoJZIYKQLMNŃOÓPRSTUÚWFXHCChShÍYuYa aábvgǵdeyojziykqlmnńoóprstuúwfxhcchshıyuya ʺ ʹ ʼ ̒ ̓',
		'Simvollar': '¡ ¿ ‽ † ‡ ← → ↑ ↓ ↔ … · • ¶ ∴ ⁂ ½ ⅓ ⅔ ¼ ¾ ⅛ ⅜ ⅝ ⅞ ∞ ₳ $ ₠ ₣ ₴ ℳ № ₧ ₰ ₨ § © ® ™ ♠ ♣ ♥ ♦  × ≈ ≠ ≤ ≥ ±  ¤ ฿ ₵ ¢ ₡ ₢ ₫ ₯ € ƒ ₲ ₭ £ ₤ ₥ ₦ ₱ ৲ ৳ ₮ ₩ ¥ ₴ ₪ ៛ ﷼',
		"Tóte": 'ٴابپتجحدرزسشعفقكلمنڭەوۇۋۆىيچھ\
  ۰۱۲۳۴۵۶۷۸۹٫٬  ٪٭،؛؟',
		'IPA': 'ʈɖɟɡɢʡʔ  ɸʃʒɕʑʂʐʝɣʁʕʜʢɦ  ɱɳɲŋɴ  ʋɹɻɰ  ʙʀɾɽ  ɫɬɮɺɭʎʟ  ɥʍɧ  ɓɗʄɠʛ  ʘǀǃǂǁ  ɨʉɯ  ɪʏʊ  ɘɵɤ  ɚ  ɛɜɝɞʌɔ  ɐɶɑɒ  ʰʷʲˠˤⁿˡ  ˈˌːˑ',
		'Arab': 'ابتثجحخدذرزسشصضطظعغفقكلمنهوي  ﺍﺑﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻃﻇﻋﻏﻓﻗﻛﻟﻣﻧﻫﻭﻳ\
  ﺍﺒﺘﺜﺠﺤﺨﺪﺬﺮﺰﺴﺸﺼﻀﻄﻈﻌﻐﻔﻘﻜﻠﻤﻨﻬﻮﻴ  ﺎﺐﺖﺚﺞﺢﺦﺪﺬﺮﺰﺲﺶﺺﺾﻂﻆﻊﻎﻒﻖﻚﻞﻢﻦﻪﻮﻲ\
  ء- ّ- ْ- ً- ِ- آأإةؤئى  پچژگﭪڠ۰۱۲۳٤٥٦٧۸۹',
		'Chex': 'ÁáČčĎďÉéĚěÍíŇňÓóŘřŠšŤťÚúŮůÝýŽž',
		'Devanagariy': 'ँ ं ः अ आ इ ई उ ऊ ऋ ऌ ऍ ऎ ए ऐ ऑ ऒ ओ औ क क़ ख ख़ ग ग़ घ ङ च छ ज ज़ झ ञ ट ठ ड ड़ द ढ ढ़ ण त थ ध न ऩ प फ फ़ ब भ म य य़ र ऱ ल ळ ऴ व श ष स ह ़ ऽ ा ि ॊ ो ौ ् ी ु ू ृ ॄ ॅ ॆ े ै ॉ ॐ ॑ ॒ ॓ ॔ ॠ ॡ ॢ ॣ । ॥ ॰',
		'Eski inglis': 'ĀāÆæǢǣǼǽĊċÐðĒēĠġĪīŌōŪūǷƿȲȳÞþȜȝ',
		'Esperanto': 'ĈĉĜĝĤĥĴĵŜŝŬŭ',
		'Eston': 'Č芚ŽžÕõÄäÖöÜü',
		'Francuz': 'ÀàÂâÇçÉéÈèÊêËëÎîÏïÔôŒœÙùÛûÜüŸÿ',
		'Haway': 'ĀāĒēĪīŌōŪūʻ',
		'Ivrit': 'אבגדהוזחטיכךלמםנןסעפףצץקרשת־״׳',
		'Island': 'ÁáÐðÉéÍíÓóÚúÝýÞþÆæÖö',
		'Ispan': 'ÁáÉéÍíÑñÓóÚúÜü¡¿',
		'Italyan': 'ÁáÀàÉéÈèÍíÌìÓóÒòÚúÙù',
		'Katalan': 'ÁáÀàÇçÉéÈèËëÍíÏïÓóÒòÖöÚúÙù',
		'Latın': 'ÁáĆćÉéÍíÓóŚśÚúÝýǾǿ  ÀàÈèÌìÒòÙù  ÂâĈĉÊêĜĝĤĥÎîĴĵÔôŝŜÛû  ÄäËëÏïÖöÜüÿ  ÃãÑñÕõ  Å å  Ç ç  Č芚ŭ  Ł ł  ŐőŰű  Ø ø  ĀāĒēĪīŌōŪū  ß  Æ挜  ÐðÞþ|',
		'Latısh': 'ĀāČčĒēĢģĪīĶķĻļŅņŠšŪūŽž',
		'Litva': 'ĄąČčĘęĖėĮįŠšŲųŪūŽž',
		'Venger': 'ŐőŰű',
		'Malta': 'ĊċĠġĦħŻż',
		'Nemis': 'ÄäÖöÜüß',
		'Pinyin': 'ÁáÀàǍǎĀāÉéÈèĚěĒēÍíÌìǏǐĪīÓóÒòǑǒŌōÚúÙùÜüǓǔŪūǗǘǛǜǙǚǕǖ',
		'Polyak': 'ąĄćĆęĘłŁńŃóÓśŚźŹżŻ',
		'Portugal': 'ÁáÀàÂâÃãÇçÉéÊêÍíÓóÔôÕõÚúÜü',
		'Romaji': 'ĀāĒēĪīŌōŪū',
		'Rumın': 'ĂăÂâÎŢţ',
		'Skandinav': 'ÀàÉéÅåÆæÄäØøÖö',
		'Slavyan': 'АБВГДЂЕЁЖЗЅИЙЈКЛЉМНЊОПРСТЋУФХЦЧЏШЩЪЫЬЭЮЯ \n абвгдђеёжзѕийјклљмнњопрстћуфхцчџшщъыьэюя',
		'Serb': 'ЂђЈјЉљЊњЋћЏџ',
		"Túrk": 'ÇçĞğİıÖöŞşÜüÂâÎîÛû',
	'Vyetnam': 'ÀàẢảÁáẠạÃãĂăẰằẲẳẴẵẮắẶặÂâẦầẨẩẪẫẤấẬậĐđÈèẺẻẼẽÉéẸẹÊêỀềỂểỄễẾếỆệỈỉĨĩÍíỊịÌìỎỏÓóỌọÒòÕõÔôỒồỔổỖỗỐốỘộƠơỜờỞởỠỡỚớỢợÙùỦủŨũÚúỤụƯưỪừỬửỮữỨứỰựỲỳỶỷỸỹỴỵÝý',
		'Uels': 'ÁáÀàÂâÄäÉéÈèÊêËëÌìÎîÏïÓóÒòÔôÖöÙùÛûẀẁŴŵẄẅÝýỲỳŶŷŸÿ',
		'Yiddish': 'א אַ אָ ב בֿ ג ד ה ו וּ װ ױ ז זש ח ט י יִ ײ ײַ כ ך כּ ל ל מ ם נ ן ס ע ע פ פּ פֿ ף צ ץ ק ר ש שׂ תּ ת ׳ ״ ־',
		'Grek': 'ΑΆΒΓΔΕΈΖΗΉΘΙΊΚΛΜΝΞΟΌΠΡΣΤΥΎΦΧΨΩΏ \n αάβγδεέζηήθιίκλμνξοόπρσςτυύφχψωώ'
	},

	charinsertDivider: '·',

	extraCSS: '\
		#editpage-newstyle {text-align:center;\
			border:1px solid #aaa;\
			font-size:120%;\
			padding:1px;\
			margin-top:10px;\
		}\
		#editpage-newstyle a {\
			color: black !important;\
			background-color: #ccddee;\
			font-weight: bold;\
			font-size: 0.9em;\
			text-decoration: none !important;\
			border: 1px #006699 outset;\
			padding: 0 0.1em 0.1em 0.1em;\
		}\
		#editpage-newstyle a:hover {\
			background-color: #bbccdd;\
			border: 1px #F0F0F0 inset;\
		}\
	',

	appendExtraCSS : function () {
		mw.util.addCSS(EditTools.extraCSS);
	},


	createEditTools : function (placeholder) {
		var box = document.createElement("div");
		box.id = "editpage-newstyle";
		box.title = 'Tańbanı yamasa arnawlı belgini redaktorlaw aynasına qosıw ushın onıń ústine basıń';

		//append user-defined sets
		if (window.charinsertCustom)
			for (id in charinsertCustom)
				if (EditTools.charinsert[id]) EditTools.charinsert[id] += ' ' + charinsertCustom[id];
				else EditTools.charinsert[id] = charinsertCustom[id];

		//create drop-down select
		var prevSubset = 0, curSubset = 0;
		var sel = document.createElement('select'), id;
		for (id in EditTools.charinsert)
			sel.options[sel.options.length] = new Option(id, id);
			sel.selectedIndex = 0;
			sel.style.cssFloat = sel.style.styleFloat = 'right';
			sel.style.marginLeft = '5px';
			sel.title = 'Tańbalar diapazonın saylań';
			sel.onchange = sel.onkeyup = selectSubset;
			box.appendChild(sel);

		//create "recall" switch
		if (window.editToolsRecall) {
			var recall = document.createElement('span');
			recall.appendChild(document.createTextNode('↕')); // ↔
			recall.onclick = function () {
				sel.selectedIndex = prevSubset;
				selectSubset();
			}
			with (recall.style) { cssFloat = styleFloat = 'left'; marginRight = '5px'; cursor = 'pointer'; }
			box.appendChild(recall);
		}

		placeholder.parentNode.replaceChild(box, placeholder);
		selectSubset();
		return;

		function selectSubset () {
			//remember previous (for "recall" button)
			prevSubset = curSubset;
			curSubset = sel.selectedIndex;
			//hide other subsets
			var pp = box.getElementsByTagName('p') ;
			for (var i=0; i<pp.length; i++)
			pp[i].style.display = 'none';
			//show/create current subset
			var id = sel.options[curSubset].value;
			var p = document.getElementById(id);
			if (!p){
				p = document.createElement('p');
				p.id = id;
				if (id == 'Arab' || id == "To'te"){ p.style.fontSize = '125%'; p.dir = 'rtl'; }
				if (id == 'İvrit' || id == 'Yiddish'){ p.dir = 'rtl'; }
				EditTools.createTokens(p, EditTools.charinsert[id]);
				box.appendChild(p);
			}
			p.style.display = 'inline';
		}
	},

	createTokens : function (paragraph, str) {
		var tokens = str.split(' '), token, i, n;
		for (i = 0; i < tokens.length; i++) {
			token = tokens[i];
			n = token.indexOf('+');
			if (token == '' || token == '_')
				addText(EditTools.charinsertDivider + ' ');
			else if (token == '\n')
				paragraph.appendChild(document.createElement('br'));
			else if (token == '___')
				paragraph.appendChild(document.createElement('hr'));
			else if (token.charAt(token.length-1) == ':')  // : at the end means just text
				addBold(token);
			else if (n == 0) // +<tag>  ->   <tag>+</tag>
				addLink(token.substring(1), '</' + token.substring(2), token.substring(1));
			else if (n > 0) // <tag>+</tag>
				addLink(token.substring(0,n), token.substring(n+1));
			else if (token.length > 2 && token.charCodeAt(0) > 127) //a string of insertable characters
				for (var j=0; j < token.length; j++) addLink(token.charAt(j), '');
			else
				addLink(token, '');
		}
		return;

		function addLink (tagOpen, tagClose, name) {
			var a = document.createElement('a');
			tagOpen = tagOpen.replace(/\./g,' ');
			tagClose = tagClose ? tagClose.replace(/_/g,' ') : '';
			name = name || tagOpen + tagClose;
			name = name.replace(/\\n/g,'');
			a.appendChild(document.createTextNode(name));
			a.href = "javascript:insertTags('" + tagOpen + "','" + tagClose + "','')";
			paragraph.appendChild(a);
			addText(' ');
		}
		function addBold (text) {
			var b = document.createElement('b');
			b.appendChild(document.createTextNode(text.replace(/_/g,' ')));
			paragraph.appendChild(b);
			addText(' ');
		}
		function addText (txt) {
			paragraph.appendChild(document.createTextNode(txt));
		}
	},


	enableForAllFields : function () {
		if (typeof (insertTags) != 'function') return;
		// insertTags from the site-wide /w/skins/common/edit.js just inserts in the first
		// textarea in the document. Evidently, that's not good if we have multiple textareas.
		// My first idea was to simply add a hidden textarea as the first one, and redefine
		// insertTags such that it copied first the last active textareas contents over to that hidden
		// field, set the cursor or selection there, let the standard insertTags do its thing, and
		// then copy the hidden field's text, cursor position and selection back to the currently
		// active field. Unfortunately, that is just as complex as simply copying the whole code
		// from wikibits to here and let it work on the right text field in the first place.
		$('textarea,input').on('focus', EditTools.registerTextField);
		insertTags = EditTools.insertTags; // Redefine the global insertTags
	},

	last_active_textfield : null,

	registerTextField : function (evt) {
		var node = evt.target;
		if (!node) return;
		EditTools.last_active_textfield = node.id;
		return true;
	},

	getTextArea : function () {
		var txtarea = null;
		if (EditTools.last_active_textfield && EditTools.last_active_textfield != "")
		txtarea = document.getElementById (EditTools.last_active_textfield);
		if (!txtarea) {
			// Fallback option: old behaviour
			if (document.editform) {
				txtarea = document.editform.wpTextbox1;
			} else {
				// Some alternate form? Take the first one we can find
				txtarea = document.getElementsByTagName ('textarea');
				if (txtarea.length > 0) txtarea = txtarea[0]; else txtarea = null;
			}
		}
		return txtarea;
	},

	insertTags : function (tagOpen, tagClose, sampleText) {
		var txtarea = EditTools.getTextArea ();
		if (!txtarea) return;
		var selText, isSample = false;

		function checkSelectedText () {
			if (!selText) {
				selText = sampleText; isSample = true;
			} else if (selText.charAt (selText.length - 1) == ' ') { // Exclude ending space char
				selText = selText.substring (0, selText.length - 1);
				tagClose += ' ';
			}
		}

		if (document.selection && document.selection.createRange) { // IE/Opera
		// Save window scroll position
		var winScroll = 0;
		if (document.documentElement && document.documentElement.scrollTop)
			winScroll = document.documentElement.scrollTop;
		else if (document.body)
			winScroll = document.body.scrollTop;
		// Get current selection  
		txtarea.focus();
		var range = document.selection.createRange();
		selText = range.text;
		// Insert tags
		checkSelectedText ();
		range.text = tagOpen + selText + tagClose;
		// Mark sample text as selected
		if (isSample && range.moveStart) {
			if (window.opera) tagClose = tagClose.replace (/\n/g, "");
			range.moveStart( 'character', - tagClose.length - selText.length); 
			range.moveEnd ('character', - tagClose.length); 
		}
		range.select ();   
		// Restore window scroll position
		if (document.documentElement && document.documentElement.scrollTop)
			document.documentElement.scrollTop = winScroll;
		else if (document.body)
			document.body.scrollTop = winScroll;
		} else if (txtarea.selectionStart || txtarea.selectionStart == '0') { // Mozilla
			// Save textarea scroll position
			var textScroll = txtarea.scrollTop;
			// Get current selection
			txtarea.focus();
			var startPos = txtarea.selectionStart;
			var endPos   = txtarea.selectionEnd;
			selText = txtarea.value.substring (startPos, endPos);
			// Insert tags
			checkSelectedText ();
			txtarea.value = txtarea.value.substring (0, startPos)
			+ tagOpen + selText + tagClose
			+ txtarea.value.substring (endPos);
			// Set new selection
			if (isSample) {
				txtarea.selectionStart = startPos + tagOpen.length;
				txtarea.selectionEnd = startPos + tagOpen.length + selText.length;
			} else {
				txtarea.selectionStart = startPos + tagOpen.length + selText.length + tagClose.length;
				txtarea.selectionEnd = txtarea.selectionStart;
			}
			// Restore textarea scroll position
			txtarea.scrollTop = textScroll;
		}
	}, // end insertTags

	setup : function () {
		var placeholder = document.getElementById("editpage-specialchars");
		if (!placeholder) return;  // has this already been run once?
		EditTools.appendExtraCSS ();
		EditTools.createEditTools (placeholder);
		EditTools.enableForAllFields ();
	}

}; // end EditTools

$(document).ready( function () { 
	mw.loader.using('mediawiki.util', EditTools.setup)
});