MediaWiki:Wordwikify.js
Вы находитесь на сайте "Архив статей из ЭЕЭ и статей на еврейские темы из Википедии"
Замечание: Чтобы после сохранения увидеть сделанные изменения, очистите кеш своего браузера: Mozilla / Firefox: Ctrl+Shift+R, IE: Ctrl+F5, Safari: Cmd+Shift+R, Konqueror: F5, Opera: через меню Tools→Preferences.
//Создание викиссылки из слова, на котором находится курсор //Автор: X-romix var XRomix_WordWikify_CantWork = 'Скрипт WordWikify не может работать в вашем браузере.\n\Script WordWikify cannot work in your browser' // английский текст для тех, кто не видит русские буквы var XRomix_WordWikify_FullText = 'Эта кнопка предназначена для викификации выделенного слова. Выберите фрагмент текста.'; //Добавляет кнопку 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) } //Этот код выполняется в начале. if (wgAction == 'edit' || wgAction == 'submit'){ addOnloadHook(add_XRomix_WordWikify_Button) } //Функция по преобразованию текста function XRomix_WordWikify(){ //Проверяем, поддерживает ли браузер регулярные выражения (RegExp) if (('code'.replace(/d/g, 'r') != 'core') || (navigator.appName=='Netscape' && navigator.appVersion.substr (0, 1) < 5)) { alert(XRomix_RefConv2_CantWork); return } 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{ processText() wpTextbox1.value = wpTextbox1.value.substring(0, startPos) + txt + wpTextbox1.value.substring(endPos) } 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 } }; }