Участник:Ole Førsten/qwerty.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/4/48/QWERTY-Button.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(/q/g, 'й'); 
	  txt = txt.replace(/w/g, 'ц'); 
	  txt = txt.replace(/e/g, 'у'); 
	  txt = txt.replace(/r/g, 'к'); 
	  txt = txt.replace(/t/g, 'е'); 
	  txt = txt.replace(/y/g, 'н'); 
	  txt = txt.replace(/u/g, 'г'); 
	  txt = txt.replace(/i/g, 'ш'); 
	  txt = txt.replace(/o/g, 'щ'); 
	  txt = txt.replace(/p/g, 'з');	    
	  txt = txt.replace(/\[/g, 'х'); 
	  txt = txt.replace(/\]/g, 'ъ'); 

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

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

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

	  txt = txt.replace(/z/g, 'я'); 
	  txt = txt.replace(/x/g, 'ч'); 
	  txt = txt.replace(/c/g, 'с'); 
	  txt = txt.replace(/v/g, 'м'); 
	  txt = txt.replace(/b/g, 'и'); 
	  txt = txt.replace(/n/g, 'т'); 
	  txt = txt.replace(/m/g, 'ь'); 
	  txt = txt.replace(/,/g, 'б'); 
	  txt = txt.replace(/\./g, 'ю'); 
 
	  txt = txt.replace(/Z/g, 'Я'); 
	  txt = txt.replace(/X/g, 'Ч'); 
	  txt = txt.replace(/C/g, 'С'); 
	  txt = txt.replace(/V/g, 'М'); 
	  txt = txt.replace(/B/g, 'И'); 
	  txt = txt.replace(/N/g, 'Т'); 
	  txt = txt.replace(/M/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, ':'); 
	  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+" ";
	    }
	 }
  }
 
}