MediaWiki:Gadget-Translit.js

Материал из ЕЖЕВИКИ - EJWiki.org - Академической Вики-энциклопедии по еврейским и израильским темам
Перейти к: навигация, поиск

Замечание. Возможно, после сохранения вам придётся очистить кэш своего браузера, чтобы увидеть изменения.

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl-F5 или Ctrl-R (⌘-R на Mac)
  • Google Chrome: Нажмите Ctrl-Shift-R (⌘-Shift-R на Mac)
  • Internet Explorer: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl-F5
  • Opera: Выберите очистку кэша в меню Инструменты → Настройки
//Транслитерация выделенного текста из латиницы в кириллицу.
//Часть кода позаимствована из http://ru.wikipedia.org/wiki/MediaWiki:Wikificator.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(/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 = '<table class="standard" id="translit_help">\
	<tr>\
	<th>А<th>Б<th>В<th>Г<th>Д<th>Е<th>Ё<th>Ж<th>З<th>И<th>Й<th>К<th>Л<th>М<th>Н<th>О<th>П<th>Р<th>С<th>Т<th>У<th>Ф<th>Х<th>Ц<th>Ч<th>Ш<th>Щ<th>Ъ<th>Ы<th>Ь<th>Э<th>Ю<th>Я\
	</tr>\
	<tr>\
	<td>а<td>b<td>v<td>g<td>d<td>e<td>yo<td>zh<td>z<td>i<td>j<td>k<td>l<td>m<td>n<td>о<td>p<td>r<td>s<td>t<td>u<td>f<td>x<td>cz, с<td>ch<td>sh<td>shh<td>``<td>y`<td>`<td>e`<td>yu<td>уа\
	</tr></table>';
 
 
	} 
 
  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+" - [[User talk:X-romix/translit.js|translit.js]] - транслит";
	    }
	 }
  }
 
}