User:Khanson/translit.js

//Транслитерация выделенного текста из латиницы в кириллицу. //Большая часть кода позаимствована из X-romix var XRomix_Translit_CantWork = 'Транслит не может работать в вашем браузере.\n\nTranslit cannot work in your browser' // английский текст для тех, кто не видит русские буквы var XRomix_Translit_FullText = 'Эта кнопка предназначена для транслитерации текста. Выберите фрагмент текста. Используется стандарт ГОСТ 7.79-2000 (ИСО 9-95), в котором ряд символов представлены с использованием обратного апострофа (рядом с клавишей Esc). Заглавные символы Ь и Ъ кодируются ~ и соответственно, подсказка по остальным символам будет выведена внизу окна.'; //Добавляет кнопку function addTranslitButton{ var toolbar = document.getElementById('toolbar') var textbox = document.getElementById('wpTextbox1') if (!textbox || !toolbar) return var i = document.createElement('img') i.src = 'http://upload.wikimedia.org/wikipedia/ru/0/0a/Button-translit.PNG' i.alt = i.title = 'Транслит' i.onclick = XRomix_Translit i.style.cursor = 'pointer' toolbar.appendChild(i) } //Этот код выполняется в начале. if (wgAction == 'edit' || wgAction == 'submit'){ addOnloadHook(addTranslitButton) } //Функция для оформления таблицы function XRomix_Translit{ //Проверяем, поддерживает ли браузер регулярные выражения (RegExp) if (('code'.replace(/d/g, 'r') != 'core')    || (navigator.appName=='Netscape' && navigator.appVersion.substr (0, 1) < 5)) { alert(XRomix_Translit_CantWork); return } var txt, hidden = [], hidIdx = 0, wpTextbox1 = document.editform.wpTextbox1 var winScroll = document.documentElement.scrollTop //remember window scroll wpTextbox1.focus if (typeof wpTextbox1.selectionStart != 'undefined'    && (navigator.productSub > 20031000 || is_safari)) { //Mozilla/Opera/Safari3 var textScroll = wpTextbox1.scrollTop var startPos = wpTextbox1.selectionStart var endPos = wpTextbox1.selectionEnd txt = wpTextbox1.value.substring(startPos, endPos) if (txt == '') {alert(XRomix_Translit_FullText); ShowHelp; return} else{ processText wpTextbox1.value = wpTextbox1.value.substring(0, startPos) + txt + wpTextbox1.value.substring(endPos) }   wpTextbox1.selectionStart = startPos wpTextbox1.selectionEnd = startPos + txt.length wpTextbox1.scrollTop = textScroll }else if (document.selection && document.selection.createRange) { //IE //alert("IE"); var range = document.selection.createRange txt = range.text if (txt == '') {alert(XRomix_Translit_FullText); ShowHelp; return} else{ processText range.text = txt //if (!window.opera) txt = txt.replace(/\r/g,'') if (range.moveStart) range.moveStart('character', - txt.length) range.select } }else // Для браузеров, которые не умеют возвращать выделенный фрагмент, выдаем ошибку { alert(XRomix_Translit_CantWork); return } document.documentElement.scrollTop = winScroll // scroll back, for IE/Opera //Здесь производим замену в переменной txt - это отразится на выделенном фрагменте текста function processText{ //txt = txt.replace(/^\s+|\s+$/g, '') //Обрезаем пробелы слева и справа //txt = txt.replace(/\n/g, '\n|-\n| ') //Концы строк //a b v g d e yo zh z i j k l m n o p r s t u f x c ch sh shh `` y` ` e` yu ya	 txt = txt.replace(//g, 'Ъ'); txt = txt.replace(/~/g, 'Ь'); txt = txt.replace(/shh/g, 'щ'); txt = txt.replace(/Shh/g, 'Щ'); txt = txt.replace(/SHH/g, 'Щ'); txt = txt.replace(/yo/g, 'ё'); txt = txt.replace(/zh/g, 'ж'); txt = txt.replace(/cz/g, 'ц'); txt = txt.replace(/ch/g, 'ч'); txt = txt.replace(/sh/g, 'ш'); txt = txt.replace(/``/g, 'ъ'); txt = txt.replace(/y`/g, 'ы'); txt = txt.replace(/e`/g, 'э'); txt = txt.replace(/yu/g, 'ю'); txt = txt.replace(/ya/g, 'я'); txt = txt.replace(/Yo/g, 'Ё'); txt = txt.replace(/Zh/g, 'Ж'); txt = txt.replace(/Cz/g, 'Ц'); txt = txt.replace(/Ch/g, 'Ч'); txt = txt.replace(/Sh/g, 'Ш'); txt = txt.replace(/Y`/g, 'Ы'); txt = txt.replace(/E`/g, 'Э'); txt = txt.replace(/Yu/g, 'Ю'); txt = txt.replace(/Ya/g, 'Я'); txt = txt.replace(/YO/g, 'Ё'); txt = txt.replace(/ZH/g, 'Ж'); txt = txt.replace(/CZ/g, 'Ц'); txt = txt.replace(/CH/g, 'Ч'); txt = txt.replace(/SH/g, 'Ш'); txt = txt.replace(/YU/g, 'Ю'); txt = txt.replace(/YA/g, 'Я'); txt = txt.replace(/Kh/g, 'Х'); txt = txt.replace(/kh/g, 'x');

txt = txt.replace(/a/g, 'а'); txt = txt.replace(/b/g, 'б'); txt = txt.replace(/v/g, 'в'); txt = txt.replace(/g/g, 'г'); txt = txt.replace(/d/g, 'д'); txt = txt.replace(/e/g, 'е'); txt = txt.replace(/z/g, 'з'); txt = txt.replace(/i/g, 'и'); txt = txt.replace(/j/g, 'й'); txt = txt.replace(/k/g, 'к'); txt = txt.replace(/l/g, 'л'); txt = txt.replace(/m/g, 'м'); txt = txt.replace(/n/g, 'н'); txt = txt.replace(/o/g, 'о'); txt = txt.replace(/p/g, 'п'); txt = txt.replace(/r/g, 'р'); txt = txt.replace(/s/g, 'с'); txt = txt.replace(/t/g, 'т'); txt = txt.replace(/u/g, 'у'); txt = txt.replace(/f/g, 'ф'); txt = txt.replace(/x/g, 'х'); txt = txt.replace(/c/g, 'ц'); txt = txt.replace(/`/g, 'ь');

txt = txt.replace(/A/g, 'А'); txt = txt.replace(/B/g, 'Б'); txt = txt.replace(/V/g, 'В'); txt = txt.replace(/G/g, 'Г'); txt = txt.replace(/D/g, 'Д'); txt = txt.replace(/E/g, 'Е'); txt = txt.replace(/Z/g, 'З'); txt = txt.replace(/I/g, 'И'); txt = txt.replace(/J/g, 'Й'); txt = txt.replace(/K/g, 'К'); txt = txt.replace(/L/g, 'Л'); txt = txt.replace(/M/g, 'М'); txt = txt.replace(/N/g, 'Н'); txt = txt.replace(/O/g, 'О'); txt = txt.replace(/P/g, 'П'); txt = txt.replace(/R/g, 'Р'); txt = txt.replace(/S/g, 'С'); txt = txt.replace(/T/g, 'Т'); txt = txt.replace(/U/g, 'У'); txt = txt.replace(/F/g, 'Ф'); txt = txt.replace(/X/g, 'Х'); txt = txt.replace(/C/g, 'Ц'); setWpSummary; }

function ShowHelp{

var select, inputId, isEdit, maxChars = 250, useMWPreview if (wgAction == 'edit' || wgAction == 'submit'){ inputId = 'wpSummary' }else if (wgCanonicalNamespace == 'Special' && wgCanonicalSpecialPageName == 'Movepage'){ inputId = 'wpReason' }else if (wgAction == 'protect'){ inputId = 'mwProtect-reason' }else return

var hlp = document.getElementById("translit_help") if (hlp) return var input = document.getElementById(inputId) if (!input) return //create counter span var cnt = document.createElement('span') cnt.id = 'inputCounter' cnt.style.marginLeft = '3px' input.parentNode.insertBefore(cnt, input.nextSibling) cnt.innerHTML = ' ';

}  function setWpSummary{ var wpSummary = document.getElementById('wpSummary') if(wpSummary){ var temp=wpSummary.value; temp=temp.replace(/\/\*.*?\*\//, ""); //комментарии temp=temp.replace(/[\s]*/, ""); //пробелы if (temp==""){ wpSummary.value=wpSummary.value+" - translit.js - транслит"; }	 } } }