Удзельнік:Zedlik/nt.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.
// <nowiki><pre>

function NTButton(){
    var width, url;
    width = "68px";
    url = "//upload.wikimedia.org/wikipedia/be-x-old/2/20/Knopka-narkamaŭka-taraškievica.png";
    if (typeof(mediaWiki) != "undefined" && 
            typeof(mediaWiki.user) != "undefined" && 
            typeof(mediaWiki.user.options) != "undefined" && 
            mediaWiki.user.options.get('usebetatoolbar')) {
        width = "36px";
        url = "//upload.wikimedia.org/wikipedia/be-x-old/e/ea/Knopka-narkamaŭka-taraškievica-vector.png";
    }

    addExtraButtonAction(taraskievizatarButtonContanerID, 
        url, 
        width,
        "Адаптаваць", 
        convertNT, NTButton);
}

// main routine

//<source lang=javascript>
var wmCantWorkNT = 'Гэта функцыя ня можа працаваць у вашым браўзэры.\n\nThis feature can not work in your browser'
var wmFullTextNT = 'Будзе апрацаваны ўвесь тэкст. Працягнуць?'
var wmTalkPageNT = 'Старонкі абмеркаваньня не апрацоўваюцца цалкам.\n\nВылучыце вашае паведамленьне — апрацаванае будзе толькі яно.'
var ntShortDescription = "артаграфія";
var ntOrthographyTemplateCode = "{{Артаграфія}}";
var ntOrthographyInsertTemplateCode = ntOrthographyTemplateCode + "\n\n";
var txtNT;
var addOrthographyTemplate;

function convertNT(){
	if (('code'.replace(/d/g, 'r') != 'core') //check regexp support
			|| (navigator.appName=='Netscape' && navigator.appVersion.substr (0, 1) < 5))
	{ alert(wmCantWorkNT); return }

	var hiddenNT = [], hidIdxNT = 0, wpTextbox1 = document.editform.wpTextbox1
	var winScroll = document.documentElement.scrollTop //remember window scroll
	wpTextbox1.focus()

	if (typeof wpTextbox1.selectionStart != 'undefined' 
			&& (navigator.productSub > 20031000 || is_opera || is_safari)) { //Mozilla/Opera/Safari3
		var textScroll = wpTextbox1.scrollTop
		var startPos = wpTextbox1.selectionStart
		var endPos = wpTextbox1.selectionEnd
		txtNT = wpTextbox1.value.substring(startPos, endPos)
		if (txtNT == '') processAllTextNT()
		else{
			processTextNT()
			wpTextbox1.value = wpTextbox1.value.substring(0, startPos) + txtNT + wpTextbox1.value.substring(endPos)
		}

		if (addOrthographyTemplate && wpTextbox1.value.indexOf("{{Артаграфія}}") < 0 && wpTextbox1.value.indexOf("{{артаграфія}}") < 0){
			wpTextbox1.value = ntOrthographyInsertTemplateCode + wpTextbox1.value;
			startPos += ntOrthographyInsertTemplateCode.length;
		}
		wpTextbox1.selectionStart = startPos
		wpTextbox1.selectionEnd = startPos + txtNT.length
		wpTextbox1.scrollTop = textScroll

	}
	else 
	{
		if (document.selection && document.selection.createRange) { //IE
			var range = document.selection.createRange()
			txtNT = range.text
			if (txtNT == ''){
				processAllTextNT()

				if (addOrthographyTemplate && wpTextbox1.value.indexOf("{{Артаграфія}}") < 0 && wpTextbox1.value.indexOf("{{артаграфія}}") < 0){
					wpTextbox1.value = ntOrthographyInsertTemplateCode + wpTextbox1.value;
					if (window.opera) {
						var extraCharacters = 0;
						if (navigator.platform.indexOf("Win") >= 0 || navigator.platform.indexOf("Mac") >= 0) extraCharacters = 2;
						if (range.moveStart) range.moveStart('character', ntOrthographyInsertTemplateCode.length + extraCharacters)
						range.select() 
					}
				}
				else 
				{
					range.select() 
				}
			}
			else
			{
				processTextNT()

				range.text = txtNT
				//if (!window.opera) txtNT = txtNT.replace(/\r/g,'')
				if (range.moveStart) range.moveStart('character', - txtNT.length)

				if (addOrthographyTemplate && wpTextbox1.value.indexOf("{{Артаграфія}}") < 0 && wpTextbox1.value.indexOf("{{артаграфія}}") < 0){
					wpTextbox1.value = ntOrthographyInsertTemplateCode + wpTextbox1.value;

					if (window.opera) {
						var extraCharacters = 0;
						if (navigator.platform.indexOf("Win") >= 0 || navigator.platform.indexOf("Mac") >= 0) extraCharacters = 2;
						if (range.moveStart) range.moveStart('character', ntOrthographyInsertTemplateCode.length + extraCharacters)
						if (range.moveEnd) range.moveEnd('character', txtNT.length)
						range.select() 
					}
				}
				else {
					range.select() 
				}
			}

		}
		else // other browsers
		{
			if (confirm(wmFullTextNT)){
				processAllTextNT()

				if (addOrthographyTemplate && wpTextbox1.value.indexOf("{{Артаграфія}}") < 0 && wpTextbox1.value.indexOf("{{артаграфія}}") < 0){
					wpTextbox1.value = ntOrthographyInsertTemplateCode + wpTextbox1.value;
				}

			}
		}
	}

	document.documentElement.scrollTop = winScroll // scroll back, for IE/Opera

	//functions

	function processAllTextNT(){
		txtNT = '\n' + wpTextbox1.value
		processTextNT()
		txtNT = txtNT.replace(/^[\n\r]+/, '')
		wpTextbox1.value = txtNT
		txtNT = ''
		// if (window.auto_comment && window.insertSummary) insertSummary('вікіфікацыя')
		if (window.addSumm && document.getElementById("wpSummary").value.indexOf(ntShortDescription) < 0) addSumm(ntShortDescription)
	}



	function processTextNT(){

		var u = '\u00A0' //unbreakable space
		if (wgNamespaceNumber % 2 || wgNamespaceNumber==4) { //is talk page
			u = ' '
			var sigs = txtNT.match(/\d\d:\d\d, \d\d? \S{3,8} 20\d\d \(UTC\)/g)
			if (sigs && sigs.length > 1) {
				alert(wmTalkPageNT); return
			}
		}

		txtNT = ' ' + txtNT; // leading space

		hideExprNT('<source [^>]+>[\\s\\S]+?<\\/source>')
		hideExprNT('(http|https|ftp|tftp|news|nntp|telnet|irc|gopher)://[^ \n\r\u00A0]* ?') //links
		hideExprNT('^ #REDIRECT') 
		hideExprNT('^ #Перанакіраваньне') 

		hideExprNT('\\[\\[[^\\]|]+') //internal links

		// прыстаўкі
		hideExprNT('( | |^|\n)ад');
		hideExprNT('( | |^|\n)пад');
		hideExprNT('( | |^|\n)над');

		var sourceText = txtNT

		// двойчы для словаў кшталту «сцвярджаць»
		adaptTextNT()
		adaptTextNT()

		var textAffected = sourceText.replace(/^\s\s*/, '').replace(/\s\s*$/, '') != txtNT.replace(/^\s\s*/, '').replace(/\s\s*$/, '');

		txtNT = txtNT.substr(1) //remove leading space

		restoreAllNT()

		// addOrthographyTemplate = textAffected;
		// addOrthographyTemplate = addOrthographyTemplate && (typeof(ntPreventAddingOrthographyTemplate) == "undefined" || !ntPreventAddingOrthographyTemplate);
		addOrthographyTemplate = false; // немэтазгодна
	}

	function hideExprNT(expr){
		var ma = txtNT.match(new RegExp(expr, 'mgi'))
		if (!ma) return
		for (var i=0; i<ma.length; i++) {
			txtNT = txtNT.replace(ma[i], '\x01' + hidIdxNT + '\x02')
			hiddenNT[hidIdxNT] = ma[i] 
			if ('0'.replace('0','$$') == '$') //$ in 2nd arg is special even if 1st arg is a string, except in IE
			hiddenNT[hidIdxNT] = hiddenNT[hidIdxNT].replace(/\$/g, '$$$$') //$ → $$, then it's converted back to $ on restore
			hidIdxNT++
		}
	}

	function hideTagNT(tag){
		hideExprNT('<' + tag + '>[\\s\\S]+?<\\/' + tag + '>')
	}

	function restoreAllNT()	{
		for (var i=hidIdxNT-1; i>=0; i--)
		txtNT = txtNT.replace('\x01' + i + '\x02', hiddenNT[i])
	}

}

function applyRegexpNT(source, result){
	r = new RegExp(source, "g");
	txtNT = txtNT.replace(r, result);
}

var phrasesNT = new Array();

function addPhraseNT(source, result){

	var leadingChar = source.substr(0, 1)
	source = "(" + leadingChar.toUpperCase() + "|" + leadingChar + ")" + source.substr(1)
	result = "$1" + result.substr(1)

	phrasesNT[phrasesNT.length] = new Array(source, result);
}

function addStartingPhraseNT(source, result){

	var leadingChar = source.substr(0, 1)
	source = "((?: | |\\n)(?:" + leadingChar.toUpperCase() + "|" + leadingChar + "))" + source.substr(1)
	result = "$1" + result.substr(1)

	phrasesNT[phrasesNT.length] = new Array(source, result);
}

function adaptTextNT(){

	// усе словы мусяць быць з маленькіх літараў
	// дзе трэба, пачатковая вялікая прастаўляецца аўтаматычна
	// рэгулярныя выразы нельга выкарыстоўваць у якасьці 
	// парамэтраў функцыі addPhraseNT, для гэтага патрэбная
	// іншая функцыя, якая запаўняе масіў phrasesNT бяз
	// зьменаў выразаў.

	addPhraseNT("абанемент", "абанэмэнт")
	addPhraseNT("абанен(т|ц)", "абанэн$2")
	addPhraseNT("абісін", "абісын")
	addPhraseNT("акцыянер", "акцыянэр")
	addPhraseNT("алфавіт", "альфабэт")
	addPhraseNT("амеры(к|ц)", "амэры$2")
	addPhraseNT("аналаг", "аналяг")
	addPhraseNT("англійск", "ангельск")
	addPhraseNT("англія", "ангельшчына")
	addPhraseNT("апера(т|ц)", "апэра$2")
	addPhraseNT("арсенал", "арсэнал")
	addPhraseNT("арфаграфі", "артаграфі")
	addPhraseNT("асартымен", "асартымэн")
	addPhraseNT("аспект", "аспэкт")
	addPhraseNT("баланс", "балянс")
	addPhraseNT("бургск", "бурск")
	addPhraseNT("бухгалт", "бухгальт")
	addPhraseNT("ваяводс", "ваяводз")
	addPhraseNT("ветэран", "вэтэран")
	addPhraseNT("ветэрынар", "вэтэрынар")
	addPhraseNT("водск", "водзк")
	addPhraseNT("газет", "газэт")
	addPhraseNT("гарадск", "гарадзк")
	addPhraseNT("генера", "генэра")
	addPhraseNT("гібралтар", "гібральтар")
	addPhraseNT("градск", "градзк")
	addPhraseNT("грамадс", "грамадз")
	addPhraseNT("губерн", "губэрн")
	addPhraseNT("гуверн", "гувэрн")
	addPhraseNT("дакум(а|е)н", "дакумэн")
	addPhraseNT("еўрапе", "эўрапе")
	addPhraseNT("імпер", "імпэр")
	addPhraseNT("інвентар", "інвэнтар")
	addPhraseNT("іспан", "гішпан")
	addPhraseNT("каапера", "каапэра")
	addPhraseNT("каларыт", "калярыт")
	addPhraseNT("каменд", "камэнд")
	addPhraseNT("камент", "камэнт")
	addPhraseNT("камер", "камэр")
	addPhraseNT("кампазі", "кампазы")
	addPhraseNT("кампетэн", "кампэтэн")
	addPhraseNT("кансерв", "кансэрв")
	addPhraseNT("канспект", "канспэкт")
	addPhraseNT("кафедр", "катэдр")
	addPhraseNT("класі", "клясы")
	addPhraseNT("лагічн", "лягічн")
	addPhraseNT("ладзімір", "ладзімер")
	addPhraseNT("ландск", "ляндзк")
	addPhraseNT("логі", "лёгі")
	addPhraseNT("максімал", "максымал")
	addPhraseNT("манумент", "манумэнт")
	addPhraseNT("медал", "мэдал")
	addPhraseNT("медык", "мэдык")
	addPhraseNT("меліяра", "мэліяра")
	addPhraseNT("мемарыял", "мэмарыял")
	addPhraseNT("метад", "мэтад")
	addPhraseNT("метал", "мэтал")
	addPhraseNT("метр( | |\\.|,)", "мэтар$2")
	addPhraseNT("метр(а|ы|у)", "мэтр$2")
	addPhraseNT("метэа(р|с)", "мэтэа$2")
	addPhraseNT("метэор", "мэтэор")
	addPhraseNT("механ", "мэхан")
	addPhraseNT("мецэна(т|ц)", "мэцэна$2")
	addPhraseNT("музе", "музэ")
	addPhraseNT("мэнэджмен", "мэнэджмэн")
	addPhraseNT("мюнхен", "мюнхэн")
	addPhraseNT("нейтрал", "нэўтрал")
	addPhraseNT("ніверсітэ", "нівэрсытэ")
	addPhraseNT("нланд", "нлянд")
	addPhraseNT("нобелеўск", "нобэлеўск")
	addPhraseNT("пазіцы", "пазыцы")
	addPhraseNT("парамет", "парамэт")
	addPhraseNT("педаг(а|о)", "пэдаг$2")
	addPhraseNT("пейзаж", "пэйзаж")
	addPhraseNT("перпендыкуляр", "пэрпэндыкуляр")
	addPhraseNT("персана", "пэрсана")
	addPhraseNT("перспекты", "пэрспэкты")
	addPhraseNT("перыяд", "пэрыяд")
	addPhraseNT("піянер", "піянэр")
	addPhraseNT("план", "плян")
	addPhraseNT("прафес(а|і|у)", "прафэс$2")
	addPhraseNT("прыхадск", "прыхадзк")
	addPhraseNT("псіх(а|і|о)", "псых$2")
	addPhraseNT("расі(і|ю|я)( | |\\.|,)", "расе$2$3")
	addPhraseNT("расійск", "расейск")
	addPhraseNT("рланд", "рлянд")
	addPhraseNT("рэзерв", "рэзэрв")
	addPhraseNT("рэзідэн", "рэзыдэн")
	addPhraseNT("рэкаменд", "рэкамэнд")
	addPhraseNT("рэклам", "рэклям")
	addPhraseNT("рэфер", "рэфэр")
	addPhraseNT("сезон", "сэзон")
	addPhraseNT("семінар", "сэмінар")
	addPhraseNT("сібір", "сыбір")
	addPhraseNT("сігнал", "сыгнал")
	addPhraseNT("сілезі", "сылезі")
	addPhraseNT("сіметры", "сымэтры")
	addPhraseNT("сінагог", "сынагог")
	addPhraseNT("сінгапур", "сынгапур")
	addPhraseNT("сінод", "сынод")
	addPhraseNT("сінтакс", "сынтакс")
	addPhraseNT("сінтэз", "сынтэз")
	addPhraseNT("сінтэт", "сынтэт")
	addPhraseNT("сінхра", "сынхра")
	addPhraseNT("сістэм", "сыстэм")
	addPhraseNT("сітуацы", "сытуацы")
	addPhraseNT("сіцылі", "сыцылі")
	addPhraseNT("спецыял", "спэцыял")
	addPhraseNT("сфер", "сфэр")
	addPhraseNT("тланд", "тлянд")
	addPhraseNT("транзіт", "транзыт")
	addPhraseNT("тэатр( | |\\.|,)", "тэатар$2")
	addPhraseNT("тэмпера", "тэмпэра")
	addPhraseNT("федэра(л|ц)", "фэдэра$2")
	addPhraseNT("фельчар", "фэльчар")
	addPhraseNT("ферэнцы", "фэрэнцы")
	addPhraseNT("флатылі", "флятылі")
	addPhraseNT("фрагмент", "фрагмэнт")
	addPhraseNT("цэмент", "цэмэнт")
	addPhraseNT("цэнтр( | |\\.|,)", "цэнтар$2")
	addPhraseNT("эксперымент", "экспэрымэнт")
	addPhraseNT("эксперт", "экспэрт")
	addPhraseNT("элемент", "элемэнт")
	addPhraseNT("эфект", "эфэкт")
	addStartingPhraseNT("года( | |\\.|,)", "году$2")
	addStartingPhraseNT("з іх( | |\\.|,)", "зь іх$2")
	addStartingPhraseNT("з іхн", "зь іхн")
	addStartingPhraseNT("кіла", "кіля")
	addStartingPhraseNT("не бачыў", "ня бачыў")
	addStartingPhraseNT("не больш", "ня больш")
	addStartingPhraseNT("не будзе", "ня будзе")
	addStartingPhraseNT("не быў", "ня быў")
	addStartingPhraseNT("не веда(е|л|ў|ць|ю)", "ня веда$2")
	addStartingPhraseNT("не вельмі", "ня вельмі")
	addStartingPhraseNT("не гоначны", "ня гоначны")
	addStartingPhraseNT("не горача", "ня горача")
	addStartingPhraseNT("не горды", "ня горды")
	addStartingPhraseNT("не горны", "ня горны")
	addStartingPhraseNT("не горш", "ня горш")
	addStartingPhraseNT("не гостры", "ня гостры")
	addStartingPhraseNT("не далі( | |\\.|,)", "ня далі$2")
	addStartingPhraseNT("не даў( | |\\.|,)", "ня даў$2")
	addStartingPhraseNT("не ёсьць", "ня ёсьць")
	addStartingPhraseNT("не змо", "ня змо")
	addStartingPhraseNT("не колькi", "ня колькi")
	addStartingPhraseNT("не лепшы", "ня лепшы")
	addStartingPhraseNT("не ломкі", "ня ломкі")
	addStartingPhraseNT("не ма(е|ючы|юць)( | |\\.|,)", "ня ма$2$3")
	addStartingPhraseNT("не мел(а|і)( | |\\.|,)", "ня мел$2$3")
	addStartingPhraseNT("не менш", "ня менш")
	addStartingPhraseNT("не меў( | |\\.|,)", "ня меў$2")
	addStartingPhraseNT("не мо", "ня мо")
	addStartingPhraseNT("не наш", "ня наш")
	addStartingPhraseNT("не новы", "ня новы")
	addStartingPhraseNT("не піш(а|у)цца( | |\\.|,)", "ня піш$2цца$3")
	addStartingPhraseNT("не раз( | |\\.|,)", "ня раз$2")
	addStartingPhraseNT("не родны", "ня родны")
	addStartingPhraseNT("не рушы", "ня рушы")
	addStartingPhraseNT("не ста(не|нуць|ў)( | |\\.|,)", "ня ста$2$3")
	addStartingPhraseNT("не той", "ня той")
	addStartingPhraseNT("не толькі", "ня толькі")
	addStartingPhraseNT("не тыя", "ня тыя")
	addStartingPhraseNT("не ўзводз", "ня ўзводз")
	addStartingPhraseNT("не ўс(е|ё)( | |\\.|,)", "ня ўс$2$3")
	addStartingPhraseNT("не хораша", "ня хораша")
	addStartingPhraseNT("не чуў", "ня чуў")

	for (i = 0; i < phrasesNT.length; i++){
		applyRegexpNT(phrasesNT[i][0], phrasesNT[i][1])
	}

	txtNT = txtNT.replace(/((?:(?:Д|д)з)|З|з|С|с)(б|в|л|м|н|п|ф|с|з|ц|дз)(е|ё|ю|я|і|ь)/g, '$1ь$2$3')
	txtNT = txtNT.replace(/(З|з)(’|')(е|ё|ю|я|і)/g, '$1ь$3')
	txtNT = txtNT.replace(/((?:Д|д)з)(в)(е|ё|ю|я|і|ь)/g, '$1ь$2$3')
	txtNT = txtNT.replace(/(Ц|ц)(в)(е|ё|ю|я|і|ь)/g, '$1ь$2$3')
	txtNT = txtNT.replace(/(лл)(е|ё|ю|я|і|ь)/g, 'льл$2')
	txtNT = txtNT.replace(/(нн)(е|ё|ю|я|і|ь)/g, 'ньн$2')
	txtNT = txtNT.replace(/(зз)(е|ё|ю|я|і|ь)/g, 'зьз$2')
	txtNT = txtNT.replace(/(цц)(е|ё|ю|я|і|ь)/g, 'цьц$2')
	txtNT = txtNT.replace(/(сс)(е|ё|ю|я|і|ь)/g, 'сьс$2')
	txtNT = txtNT.replace(/(ддз)(е|ё|ю|я|і|ь)/g, 'дзьдз$2')

	txtNT = txtNT.replace(/( | |^|\\n|')(З|з)( | )(б|в|л|м|н|п|ф)(е|ё|ю|я|і)/gm, '$1$2ь$3$4$5')
	txtNT = txtNT.replace(/( | |^|\\n|')(З|з)( | )(з|с|ц|дз)(е|ё|ю|я|і|ь)/gm, '$1$2ь$3$4$5')
	txtNT = txtNT.replace(/( | |^|\\n|')(З|з)( | )(е|ё|ю|я)/gm, '$1$2ь$3$4')
	txtNT = txtNT.replace(/( | |^|\\n|')((?:П|п)раз)( | )(б|в|л|м|н|п|ф)(е|ё|ю|я|і)/gm, '$1$2ь$3$4$5')
	txtNT = txtNT.replace(/( | |^|\\n|')((?:П|п)раз)( | )(з|с|ц|дз)(е|ё|ю|я|і|ь)/gm, '$1$2ь$3$4$5')
	txtNT = txtNT.replace(/( | |^|\\n|')((?:П|п)раз)( | )(е|ё|ю|я)/gm, '$1$2ь$3$4')
	txtNT = txtNT.replace(/( | |^|\\n|')((?:Б|б)(?:е|я)з)( | )(б|в|л|м|н|п|ф)(е|ё|ю|я|і)/gm, '$1$2ь$3$4$5')
	txtNT = txtNT.replace(/( | |^|\\n|')((?:Б|б)(?:е|я)з)( | )(з|с|ц|дз)(е|ё|ю|я|і|ь)/gm, '$1$2ь$3$4$5')
	txtNT = txtNT.replace(/( | |^|\\n|')((?:Б|б)(?:е|я)з)( | )(е|ё|ю|я)/gm, '$1$2ь$3$4')
	txtNT = txtNT.replace(/( | |^|\\n|')((?:Ц|ц)ераз)( | )(б|в|л|м|н|п|ф)(е|ё|ю|я|і)/gm, '$1$2ь$3$4$5')
	txtNT = txtNT.replace(/( | |^|\\n|')((?:Ц|ц)ераз)( | )(з|с|ц|дз)(е|ё|ю|я|і|ь)/gm, '$1$2ь$3$4$5')
	txtNT = txtNT.replace(/( | |^|\\n|')((?:Ц|ц)ераз)( | )(е|ё|ю|я)/gm, '$1$2ь$3$4')

}

var taraskievizatarLoadingAttemptCount = 0;
 
function addTaraskievizatarHook() {
    if (typeof(taraskievizatarButtonContanerID) != "undefined") {
        addOnloadHook(NTButton);
    }
    else {
        // пачакаем крыху, магчыма функцыі кіраваньня дадатковымі кнопкамі 
        // яшчэ не загрузіліся (MediaWiki:GadgetButtons.js)
 
        taraskievizatarLoadingAttemptCount++;
        if (taraskievizatarLoadingAttemptCount < 10) {
            setTimeout(addTaraskievizatarHook, 300);
        }
    }
}
 
addTaraskievizatarHook();

// </nowiki></pre>