Участник:Ole Førsten/qwerty2.js

Материал из Циклопедии
Перейти к навигации Перейти к поиску

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

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
  • Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
  • Internet Explorer / Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
  • Opera: Нажмите Ctrl+F5.
//Транслитерация выделенного текста из клавиатуры ЙЦУКЕН в клавиатуру QWERTY.
//Основной код взят из http://ru.wikipedia.org/wiki/Участник:X-romix/translit.js
//Автор: Ole Førsten
 
var OleFørsten_Qwerty_CantWork = 'Транслит не может работать в вашем браузере.\n\nTranslit cannot work in your browser' // английский текст для тех, кто не видит русские буквы
var OleFørsten_Qwerty_FullText = 'Эта кнопка предназначена для транслитерации текста из клавиатуры ЙЦУКЕН в клавиатуру QWERTY.';
 
//Добавляет кнопку
function addQwertyButton(){
	var toolbar = document.getElementById('toolbar')
	var textbox = document.getElementById('wpTextbox1')
	if (!textbox || !toolbar) return
	var i = document.createElement('img')
	i.src = 'http://data.cyclowiki.org/images/d/d5/QWERTY-button2.png'
	i.alt = i.title = 'Qwerty'
	i.onclick = OleFørsten_Qwerty
	i.style.cursor = 'pointer'
	toolbar.appendChild(i)
 
} 
 
//Этот код выполняется в начале.
if (wgAction == 'edit' || wgAction == 'submit'){
  addOnloadHook(addQwertyButton)
}
 
 
//Функция для оформления таблицы
function OleFørsten_Qwerty(){
 
 //Проверяем, поддерживает ли браузер регулярные выражения (RegExp)	
 if (('code'.replace(/d/g, 'r') != 'core') 
    || (navigator.appName=='Netscape' && navigator.appVersion.substr (0, 1) < 5))
  { alert(OleFørsten_Qwerty_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(OleFørsten_Qwerty_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(OleFørsten_Qwerty_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(OleFørsten_Qwerty_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| ') //Концы строк
	  
	  //q w e r t y u i o p [ ] a s d f g h j k l ; ' z x c v b n m , . /
	  
	  	  txt = txt.replace(/й/g, 'q'); 
	  txt = txt.replace(/ц/g, 'w'); 
	  txt = txt.replace(/у/g, 'e'); 
	  txt = txt.replace(/к/g, 'r'); 
	  txt = txt.replace(/е/g, 't'); 
	  txt = txt.replace(/н/g, 'y'); 
	  txt = txt.replace(/г/g, 'u'); 
	  txt = txt.replace(/ш/g, 'i'); 
	  txt = txt.replace(/щ/g, 'o'); 
	  txt = txt.replace(/з/g, 'p');	    
	  txt = txt.replace(/х/g, '['); 
	  txt = txt.replace(/ъ/g, ']'); 

	  txt = txt.replace(/Й/g, 'Q'); 
	  txt = txt.replace(/Ц/g, 'W'); 
	  txt = txt.replace(/У/g, 'E'); 
	  txt = txt.replace(/К/g, 'R'); 
	  txt = txt.replace(/Е/g, 'T'); 
	  txt = txt.replace(/Н/g, 'Y'); 
	  txt = txt.replace(/Г/g, 'U'); 	  
	  txt = txt.replace(/Ш/g, 'I'); 
	  txt = txt.replace(/Щ/g, 'O'); 
	  txt = txt.replace(/З/g, 'P'); 
	  txt = txt.replace(/Х/g, '{'); 
	  txt = txt.replace(/Ъ/g, '}'); 

	  txt = txt.replace(/ф/g, 'a'); 
	  txt = txt.replace(/ы/g, 's');
	  txt = txt.replace(/в/g, 'd'); 
	  txt = txt.replace(/а/g, 'f'); 
	  txt = txt.replace(/п/g, 'g'); 
	  txt = txt.replace(/р/g, 'h'); 
	  txt = txt.replace(/о/g, 'j'); 
	  txt = txt.replace(/л/g, 'k'); 
	  txt = txt.replace(/д/g, 'l'); 
	  txt = txt.replace(/ж/g, ';'); 
	  txt = txt.replace(/э/g, '’'); 

	  txt = txt.replace(/Ф/g, 'A'); 
	  txt = txt.replace(/Ы/g, 'S'); 
	  txt = txt.replace(/В/g, 'D'); 
	  txt = txt.replace(/А/g, 'F'); 
	  txt = txt.replace(/П/g, 'G'); 
	  txt = txt.replace(/Р/g, 'H'); 
	  txt = txt.replace(/О/g, 'J'); 
	  txt = txt.replace(/Л/g, 'K'); 
	  txt = txt.replace(/Д/g, 'L'); 
	  txt = txt.replace(/Ж/g, ':'); 
	  txt = txt.replace(/Э/g, '"'); 

	  txt = txt.replace(/я/g, 'z'); 
	  txt = txt.replace(/ч/g, 'x'); 
	  txt = txt.replace(/с/g, 'c'); 
	  txt = txt.replace(/м/g, 'v'); 
	  txt = txt.replace(/и/g, 'b'); 
	  txt = txt.replace(/т/g, 'n'); 
	  txt = txt.replace(/ь/g, 'm'); 
	  txt = txt.replace(/б/g, ','); 
	  txt = txt.replace(/ю/g, '.'); 
 
	  txt = txt.replace(/Я/g, 'Z'); 
	  txt = txt.replace(/Ч/g, 'X'); 
	  txt = txt.replace(/С/g, 'C'); 
	  txt = txt.replace(/М/g, 'V'); 
	  txt = txt.replace(/И/g, 'B'); 
	  txt = txt.replace(/Т/g, 'N'); 
	  txt = txt.replace(/Ь/g, 'M'); 
	  txt = txt.replace(/Б/g, '<'); 
	  txt = txt.replace(/Ю/g, '>'); 
	  txt = txt.replace(/,/g, '?');
 
	  txt = txt.replace(/ё/g, '`'); 
	  txt = txt.replace(/Ё/g, '~'); 
	  txt = txt.replace(/"/g, '@'); 
	  txt = txt.replace(/№/g, '#'); 
	  txt = txt.replace(/\;/g, '$;'); 
	  txt = txt.replace(/\:/g, '^'); 
	  txt = txt.replace(/\?/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>,<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>ю<th>.<th>ё<th>"<th>№<th>;<th>:<th>?\
	</tr>\
	<tr>\
	<td>Q<td>W<td>E<td>R<td>T<td>Y<td>U<td>I<td>O<td>P<td>{<td>}<td>A<td>S<td>D<td>F<td>G<td>H<td>J<td>K<td>L<td>:<td>"<td>Z<td>X<td>C<td>V<td>B<td>N<td>M<td><<td>><td>?<td>~<td>q<td>w<td>e<td>r<td>t<td>y<td>u<td>i<td>o<td>p<td>[<td>]<td>a<td>s<td>d<td>f<td>g<td>h<td>j<td>k<td>l<td>;<td>\'<td>z<td>x<td>c<td>v<td>b<td>n<td>m<td>,<td>.<td>/<td>`<td>@<td>#<td>$<td>^<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+" ";
	    }
	 }
  }
 
}