Увага: Після публікування слід очистити кеш браузера, щоб побачити зміни.

  • Firefox / Safari: тримайте Shift, коли натискаєте Оновити, або натисніть Ctrl-F5 чи Ctrl-Shift-R (⌘-R на Apple Mac)
  • Google Chrome: натисніть Ctrl-Shift-R (⌘-Shift-R на Apple Mac)
  • Internet Explorer / Edge: тримайте Ctrl, коли натискаєте Оновити, або натисніть Ctrl-F5
  • Opera: натисніть Ctrl-F5
//Создание викиссылки из слова, на котором находится курсор
//Автор: X-romix
 
var XRomix_WordWikify_CantWork = 'Скрипт WordWikify не может работать в вашем браузере.\n\Script WordWikify cannot work in your browser' // английский текст для тех, кто не видит русские буквы
var XRomix_WordWikify_FullText = 'Эта кнопка предназначена для викификации выделенного слова. Выберите фрагмент текста.';
 

if (/edit|submit/.test(wgAction)){
  mwCustomEditButtons['wordwikify'] = [XRomix_WordWikify,  'http://upload.wikimedia.org/wikipedia/ru/c/c1/Button-Found.PNG', 'Український WikiLinker. Шукає вікі-посилання для обраного слова або словосполучення']
}

//Этот код выполняется в начале.
// if (wgAction == 'edit' || wgAction == 'submit'){
//  addOnloadHook(add_XRomix_WordWikify_Button)
// }


//Добавляет кнопку
function add_XRomix_WordWikify_Button(){
	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/c/c1/Button-Found.PNG'
	//i.src = 'http://upload.wikimedia.org/wikipedia/ru/7/75/Button-Test.PNG'
 
	i.alt = i.title = 'Викификация слова'
	i.onclick = XRomix_WordWikify
	i.style.cursor = 'pointer'
	toolbar.appendChild(i)
 
}  
 
//Функция по преобразованию текста
function XRomix_WordWikify()
{
   alert('1')
  //Проверяем, поддерживает ли браузер регулярные выражения (RegExp)	
 if (('code'.replace(/d/g, 'r') != 'core') || (navigator.appName=='Netscape' && navigator.appVersion.substr (0, 1) < 5))
 { 
   alert(XRomix_RefConv2_CantWork); 
   return 
}
 
alert('2')
 var txt, hidden = [], hidIdx = 0, wpTextbox1 = document.editform.wpTextbox1
 
 wpTextbox1.focus();
 
 var winScroll=getScrollTop(wpTextbox1)//remember window scroll
 var startPos = getSelectionStart(wpTextbox1) 
 var startPos1 = startPos;
 var endPos = startPos+getSelectionLength(wpTextbox1)
 
 // Для браузеров, которые не умеют возвращать выделенный фрагмент, выдаем ошибку
 if (startPos==-2) { alert(XRomix_RefConv2_CantWork); return }
 
 var str=wpTextbox1.value;

if (startPos==endPos)
{ 
// видаляємо  
	  while (1==1)
          {
		if (startPos==0) break;
		startPos--;
		var ch = str.charAt(startPos);
		if (!ch.match(/[a-zA-Zа-яА-Я0-9Ёё]/))
                {
		  startPos++;
		  break;
		}
	  }
	  var str1= str.substr(startPos);
	  endPos=str1.search(/[^a-zA-Zа-яА-Я0-9Ёё]/);
	  if (endPos==-1) {endPos=startPos}
	  else{endPos=endPos+startPos} 
 
	  if(endPos<=startPos1){
	    alert('В текущей позиции курсора не найдено слово или число');
		return;
	  }
	}
 
	//alert("+++"+startPos+" "+endPos);
 
    txt = str.substring(startPos, endPos)
    if (txt == '') {alert(XRomix_RefConv2_FullText); return}
else
{
alert('3')
     processText()
     wpTextbox1.value = wpTextbox1.value.substring(0, startPos) + txt + wpTextbox1.value.substring(endPos)
 }
 alert('4')
   setSelectionRange(wpTextbox1, startPos, startPos + txt.length)
   setScrollTop(wpTextbox1, winScroll)//scroll back
 
//Здесь производим замену в переменной txt - это отразится на выделенном фрагменте текста 
function processText(){
      var searchInput=document.getElementById('searchInput');
	  txt="[["+searchInput.value+"|"+txt+"]]";
}
 
//подсчитывает концы строк в фрагменте текста
function countCrlf(str){
  var cnt=0;
  for(var i=0; i<str.length; i++){
    var c=str.charCodeAt(i);
	if (c==13){
	  cnt++;
	}
  }
  return cnt;
}
 
//Браузеро-независимый setSelectionRange - изменяет начало и конец
//выделенного фрагмента в поле ввода input
function setSelectionRange(input, start, end) {
  if (typeof wpTextbox1.selectionStart != 'undefined' 
    && (navigator.productSub > 20031000 || is_safari)) { 
	//Mozilla/Opera/Safari3
	input.setSelectionRange(start, end);
  }else if (document.selection && document.selection.createRange) { 
 	 //Internet Explorer
		var range = input.createTextRange();
		range.collapse(true);
		range.moveStart("character", start - countCrlf(input.value.substring(0, start)));
		range.moveEnd("character", end - start - countCrlf(input.value.substring(start, end)));
		range.select();
  }	 
};
 
//Браузеро-независимое получение длины
//выделенного фрагмента в поле ввода input
function getSelectionLength(input) {
  if (typeof wpTextbox1.selectionStart != 'undefined' 
    && (navigator.productSub > 20031000 || is_safari)) { 
	//Mozilla/Opera/Safari3
	return input.selectionEnd-input.selectionStart;
  }else if (document.selection && document.selection.createRange) { 
 	 //Internet Explorer
	 input.focus()
	 var range = document.selection.createRange()
	 return range.text.length
  }	else 
     return -2;
};
 
//Браузеро-независимый getSelectionStart - возвращает позицию начала 
//выделенного фрагмента в поле ввода input, или позицию курсора в поле ввода
function getSelectionStart(input) 
{
  if (typeof wpTextbox1.selectionStart != 'undefined' && (navigator.productSub > 20031000 || is_safari)) 
  { 
	//Mozilla/Opera/Safari3
	return input.selectionStart;
  } 
  else if (document.selection && document.selection.createRange) 
  { 
 	 //Internet Explorer
	 input.focus()
	 //return Math.abs(document.selection.createRange().moveStart("character", -1000000));
 
 
	var temp = input.value; 
	input.focus()
	var range = document.selection.createRange()
	var length = range.text.length 
        var txt = range.text
        range.text="{50E9CD6A-BC3E-4B44-9107-FFF6A65DC28E}" //фтыкаем гуид чтобы найти положение курсора в IE
	 //Статья http://www.bazon.net/mishoo/articles.epl?art_id=1292 
	 //рекомендует фтыкать тильду, но гуид лучше, потому что он гарантированно не встретится в тексте
	 var vv=input.value;
	 var startPos = vv.search("{50E9CD6A-BC3E-4B44-9107-FFF6A65DC28E}") //ищем этот гуид
	 input.value=temp //восстанавливаем текст, который был в поле ввода
	 setSelectionRange(input, startPos, startPos+length) //восстанавливаем выделение
	 return startPos
 
  }	
  else
  { 
     return -2;
  }
};
 
 
//Браузеро-независимый getScrollTop - возвращает позицию прокрутки
//в поле ввода input
function getScrollTop(input) {
  if (typeof wpTextbox1.selectionStart != 'undefined' 
    && (navigator.productSub > 20031000 || is_safari)) { 
	//Mozilla/Opera/Safari3
	return input.scrollTop
  }else if (document.selection && document.selection.createRange) { 
 	 //Internet Explorer
	input.focus()
	return document.documentElement.scrollTop
  }	else 
     return -2;
};
 
//Браузеро-независимый setScrollTop - устанавливает позицию прокрутки
//в поле ввода input
function setScrollTop(input, top) {
  if (typeof wpTextbox1.selectionStart != 'undefined' 
    && (navigator.productSub > 20031000 || is_safari)) { 
	//Mozilla/Opera/Safari3
	input.scrollTop=top
  }else if (document.selection && document.selection.createRange) { 
 	 //Internet Explorer
	input.focus()
	document.documentElement.scrollTop=top
  }
};
}