Участник:Невозвращенецъ/monobook.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.
/* */ //Этот скрипт замещает на страницах сравнений версий надпись в левом верхнем углу //''(Различия между версиями)'' на кнопки быстрого отката и предупреждения участника //За инструкциями обращайтесь на страницу обсуждения. // Инструмент отката создан Lorian function getElementsByClass(searchClass,node,tag) { // Функции с сайта http://www.dustindiaz.com/getelementsbyclass/ var classElements = new Array(); if ( node == null ) node = document; if ( tag == null ) tag = '*'; var els = node.getElementsByTagName(tag); var elsLen = els.length; var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)"); for (i = 0, j = 0; i < elsLen; i++) { if ( pattern.test(els[i].className) ) { classElements[j] = els[i]; j++; } } return classElements; } // _GET code из NoGray JS Library http://www.nogray.com/new_site/ var _GET = new Array(); var _uri = location.href; var _temp_get_arr = _uri.substring(_uri.indexOf('?')+1, _uri.length).split("&"); var _temp_get_arr_1 = new Array(); for(_get_arr_i=0; _get_arr_i<_temp_get_arr.length; _get_arr_i++){ _temp_get_arr_1 = _temp_get_arr[_get_arr_i].split("="); _GET[decodeURI(_temp_get_arr_1[0])] = decodeURI(_temp_get_arr_1[1]); } delete _uri; delete _temp_get_arr; delete _temp_get_arr_1; function getMessage (where, user1, user2) { var message = prompt ('Описание правки', ''); window.location = 'http://cyclowiki.org/w/index.php?title=' + _GET['title'] + '&action=edit&oldid=' + _GET['oldid'] + '&'+where+'=2&user1='+user1+'&user2='+user2+'&message='+message; } addOnloadHook(function (){ if (location.href.match(/diff=/)) { // Get username of submitter var user1 = getElementsByClass('diff-otitle',null,'td'); user1 = user1[0].getElementsByTagName('a')[2].innerHTML; var user2 = getElementsByClass('diff-ntitle',null,'td'); user2 = user2[0].getElementsByTagName('a')[3].innerHTML; document.getElementById('contentSub').innerHTML = '(<a href="http://cyclowiki.org/w/index.php?title=' + _GET['title'] + '&action=edit&oldid=' + _GET['oldid'] + '&revert=1&user1='+user1+'&user2='+user2+'">Откатить</a> | Комментарий: <a href="http://cyclowiki.org/w/index.php?title=' + _GET['title'] + '&action=edit&oldid=' + _GET['oldid'] + '&revert=2&user1='+user1+'&user2='+user2+'">Тест</a> | <a href="http://cyclowiki.org/w/index.php?title=' + _GET['title'] + '&action=edit&oldid=' + _GET['oldid'] + '&revert=3&user1='+user1+'&user2='+user2+'">Вандализм</a> | <a href="http://cyclowiki.org/w/index.php?title=' + _GET['title'] + '&action=edit&oldid=' + _GET['oldid'] + '&revert=4&user1='+user1+'&user2='+user2+'">Спам</a> | <a href="javascript:var message = getMessage(\'revert=5\', \''+user1+'\', \''+user2+'\');">Другая причина</a>)(Предупреждения: <a href="http://cyclowiki.org/w/index.php?title=User_talk:'+user2+'&action=edit§ion=new&warn=1">Тест</a> | <a href="http://cyclowiki.org/w/index.php?title=User_talk:'+user2+'&action=edit§ion=new&warn=2">Вандализм</a> | <a href="http://cyclowiki.org/w/index.php?title=User_talk:'+user2+'&action=edit§ion=new&warn=3">Спам</a>)'; } else if (location.href.match(/revert=1/)) { document.getElementById('wpSummary').value = 'Правка [[Special:Contributions/'+_GET['user2']+'|'+_GET['user2']+']] (№' + _GET['oldid']+') откачена к версии участника [[Special:Contributions/'+_GET['user1']+'|'+_GET['user1']+']]'; document.getElementById('editform').submit(); } else if (location.href.match(/revert=2/)) { document.getElementById('wpSummary').value = 'Правка [[Special:Contributions/'+_GET['user2']+'|'+_GET['user2']+']] (№' + _GET['oldid']+') откачена к версии участника [[Special:Contributions/'+_GET['user1']+'|'+_GET['user1']+']] (тестовая правка)'; document.getElementById('editform').submit(); } else if (location.href.match(/revert=3/)) { document.getElementById('wpSummary').value = 'Правка [[Special:Contributions/'+_GET['user2']+'|'+_GET['user2']+']] (№' + _GET['oldid']+') откачена к версии участника [[Special:Contributions/'+_GET['user1']+'|'+_GET['user1']+']] (вандализм)'; document.getElementById('editform').submit(); } else if (location.href.match(/revert=4/)) { document.getElementById('wpSummary').value = 'Правка [[Special:Contributions/'+_GET['user2']+'|'+_GET['user2']+']] (№' + _GET['oldid']+') откачена к версии участника [[Special:Contributions/'+_GET['user1']+'|'+_GET['user1']+']] (спам)'; document.getElementById('editform').submit(); } else if (location.href.match(/revert=5/)) { document.getElementById('wpSummary').value = 'Правка [[Special:Contributions/'+_GET['user2']+'|'+_GET['user2']+']] (№' + _GET['oldid']+') откачена к версии участника [[Special:Contributions/'+_GET['user1']+'|'+_GET['user1']+']] ('+_GET['message']+')'; document.getElementById('editform').submit(); } else if (location.href.match(/warn=1/)) { document.getElementById('wpTextbox1').value = '{'+'{sub'+'st:тест}}—~~'+'~~'; document.getElementById('editform').submit(); } else if (location.href.match(/warn=2/)) { document.getElementById('wpSummary').value = 'Предупреждение'; document.getElementById('wpTextbox1').value = '{'+'{sub'+'st:вандализм}}—~~'+'~~'; document.getElementById('editform').submit(); } else if (location.href.match(/warn=3/)) { document.getElementById('wpTextbox1').value = '{'+'{sub'+'st:спам}}—~~'+'~~'; document.getElementById('editform').submit(); } }); /* */ // Hotcat importScript('User:Hotcat/HotCat.js'); //Скрипт для перевода текста в нижний регистр importScript('Участник:X-romix/lowercase.js'); //Скрипт показывает переполнение поля «Описание изменений». importScript('Участник:X-romix/summary show overload.js'); // По мотивам http://en.wikipedia.org/wiki/User:Mr.Z-man/refbuttons.js // CC-BY-SA function refbuttons() { if (mwCustomEditButtons) { var time = new Date(); var curday = time.getDate(); var curmonth = time.getMonth() + 1; var nowyear = time.getYear() + 1900; var nowday = curday.toString(); if (curday < 10) { nowday = "0" + nowday; } var nowmonth = curmonth.toString(); if (curmonth < 10) { nowmonth = "0" + nowmonth; } mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "http://upload.wikimedia.org/wikipedia/commons/9/91/Button_cite_web.png", "speedTip": "cite web", "tagOpen": "<ref>{{cite web\n|author=\n|authorlink=\n|datepublished=\n|url=\n|title=\n|format=\n|work=\n|publisher=\n|accessdate=" + nowyear + "-" + nowmonth + "-" + nowday + "\n|lang=\n|description=\n}}", "tagClose": "</ref>", "sampleText": "" }; mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "http://upload.wikimedia.org/wikipedia/commons/2/2c/Button_cite_news.png", "speedTip": "cite news", "tagOpen": "<ref>{{cite news\n|author=\n|title=\n|url=\n|work=\n|publisher=\n|date=\n|accessdate=" + nowyear + "-" + nowmonth + "-" + nowday + "\n}}", "tagClose": "</ref>", "sampleText": "" }; mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "http://upload.wikimedia.org/wikipedia/commons/e/ef/Button_cite_book.png", "speedTip": "книга", "tagOpen": "<ref>{{книга\n|автор=\n|заглавие=\n|ответственный=\n|ссылка=\n|место=\n|издательство=\n|год=\n|том=\n|страниц=\n|страницы=\n|isbn=\n}}", "tagClose": "</ref>", "sampleText": "" }; } } addOnloadHook(refbuttons); importScript('User:Alex_Smotrov/logpage.js'); //Скрипт для транслитерации латиницы importScript('Участник:X-romix/translit.js'); //Скрипт проверяет правильность закрытия тегов importScript('Участник:X-romix/check tags.js'); sigWarning = true //Предупреждение об отсутствии подписи на страницах дискуссий // [[ru:MediaWiki:Extraeditbuttons.js]] // <pre><nowiki> // This is based on the original code on Wikipedia:Tools/Editing tools // // The original code was on the project page and needed to be cut and paste to the user's // monobook.js page. However, this caused problems with the quote marks. So I have moved // it to its own page. // // I do not know a lot about Javascript so please do not ask for a complicated change // // See the [[:en:User:MarkS/Extra edit buttons]] for changes log function InsertButtonsToToolBar() { //Сноски mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "http://upload.wikimedia.org/wikipedia/commons/7/79/Button_reflink.png", "speedTip": "Сноски", "tagOpen": "<ref>", "tagClose": "</ref>", "sampleText": ""} //Перенаправлення mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "http://upload.wikimedia.org/wikipedia/commons/c/c8/Button_redirect.png", "speedTip": "Перенаправлення", "tagOpen": "#Redirect [[", "tagClose": "]]", "sampleText": "назва сторінки"} //Template button mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "http://upload.wikimedia.org/wikipedia/commons/3/3b/Button_template_alt.png", "speedTip": "Шаблон", "tagOpen": "{{", "tagClose": "}}", "sampleText": "Назва шаблону"} //Underline mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "http://upload.wikimedia.org/wikipedia/commons/f/fd/Button_underline.png", "speedTip": "Підкреслення", "tagOpen": "<u>", "tagClose": "</u>", "sampleText": "Підкреслений текст"} //Strike-Out Button mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "http://upload.wikimedia.org/wikipedia/commons/c/c9/Button_strike.png", "speedTip": "Закреслений текст", "tagOpen": "<s>", "tagClose": "</s>", "sampleText": "Закреслений текст"} //Наголос mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "http://upload.wikimedia.org/wikipedia/commons/0/0e/Button_acute_accent.png", "speedTip": "Наголос", "tagOpen": "́", "tagClose": "", "sampleText": ""} //Center-Text Button mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "http://upload.wikimedia.org/wikipedia/commons/5/5f/Button_center.png", "speedTip": "Вирівняти по центру", "tagOpen": "<center>", "tagClose": "</center>", "sampleText": ""} //Line break button mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "http://upload.wikimedia.org/wikipedia/commons/1/13/Button_enter.png", "speedTip": "Розрив", "tagOpen": "<br />", "tagClose": "", "sampleText": ""} //Small Text mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "http://upload.wikimedia.org/wikipedia/commons/5/58/Button_small.png", "speedTip": "Менший шрифт", "tagOpen": "<small>", "tagClose": "</small>", "sampleText": "Текст малим шрифтом"} //Gallery mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "http://upload.wikimedia.org/wikipedia/commons/1/12/Button_gallery.png", "speedTip": "Галерея", "tagOpen": "\n<center><gallery>\n", "tagClose": "\n</gallery></center>", "sampleText": "Файл:Назва_зображення1.jpg|Опис_зображення1\n\Файл:Назва_зображення2.jpg|Опис_зображення2"} //Secondary Headline mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "http://upload.wikimedia.org/wikipedia/commons/7/78/Button_head_A2.png", "speedTip": "Підзаголовок", "tagOpen": "\n===", "tagClose": "===", "sampleText": "Підзаголовок"} //Colour mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "http://upload.wikimedia.org/wikipedia/commons/9/9e/Btn_toolbar_gallery.png", "speedTip": "Кольоровий текст", "tagOpen": "<span style='color: ColorName'>", "tagClose": "</span>", "sampleText": "Кольоровий текст"} } addOnloadHook( InsertButtonsToToolBar ); // </nowiki></pre> // Russian Wiki Linker // Find link for selected text mwCustomEditButtons['wikilinker'] = [WikiLinker, 'commons/b/bd/Wikilinker.png', 'Вики-ссыльщик. Подбирает вики-ссылку для выделенного слова или словосочетания'] importScript('MediaWiki:Stemmer.js') function stemPhrase(phrase) { phrase=phrase.substr(0,100); phrase=phrase.replace(/\s/g, " "); phrase=phrase.replace(/—/g, " "); phrase=phrase.replace(/»/g, ""); phrase=phrase.replace(/«/g, ""); phrase=phrase.replace(/\%/g, ""); phrase=phrase.replace(/\'/g, ""); phrase=phrase.replace(/\"/g, ""); phrase=phrase.replace(/_/g, " "); phrase=phrase.replace(/\!/g, " "); phrase=phrase.replace(/\?/g, " "); phrase=phrase.replace(/\./g, " "); phrase=phrase.replace(/\,/g, " "); phrase=phrase.replace(/\:/g, " "); phrase=phrase.replace(/\s+/g, " "); var rustemmer = new RussianStemmer(); var arr = phrase.split(' ') var res = ''; var next_res = ''; var n = 0; for (var i in arr) { rustemmer.setCurrent(arr[i]); rustemmer.stem(); next_res = rustemmer.getCurrent(); if (next_res.length > 0) { if (next_res != arr[i] && n < 3) { res += next_res + '* '; n++; // в строке запроса может быть не более 3 звёздочек } else { res += next_res + ' '; } } } // trim string res = res.replace(/(^\s+)|(\s+$)/g, ""); return res; } function WikiLinker() { var xmlhttp; var prepWin; var CantWork = 'Сначало нужно выделить слово или словосочетание'; var range; var browserType = 0; var requestLength = 0; // длина запроса в словах var txt = ''; var wpTextbox1 = document.editform.wpTextbox1; var winScroll = document.documentElement.scrollTop; wpTextbox1.focus(); if (typeof wpTextbox1.selectionStart != 'undefined' && (navigator.productSub > 20031000 || is_safari || is_opera)) { //Mozilla/Opera/Safari3 browserType = 1; var textScroll = wpTextbox1.scrollTop; var startPos = wpTextbox1.selectionStart; var endPos = wpTextbox1.selectionEnd; txt = wpTextbox1.value.substring(startPos, endPos); // отсекаем последний пробел if (txt.slice(-1) == ' ') { txt = txt.slice(0,-1); endPos = endPos - 1; } if (txt == '') { alert(CantWork); } else { processText(); } wpTextbox1.selectionStart = startPos; wpTextbox1.selectionEnd = startPos + txt.length; wpTextbox1.scrollTop = textScroll; } else if (document.selection && document.selection.createRange) { //IE browserType = 2; range = document.selection.createRange(); txt = range.text; // отсекаем последний пробел if (txt.slice(-1) == ' ') { txt = txt.slice(0,-1); range.moveEnd('character', -1); } if (txt == '') { alert(CantWork); } else { processText(); } } else { // other browsers alert(CantWork); } document.documentElement.scrollTop = winScroll // scroll back, for IE/Opera function processText() { var preparedText = stemPhrase(txt); requestLength = preparedText.split(' ').length; loadXMLDoc('http://ru.wikipedia.org/w/api.php?action=query&list=search&srlimit=5&srprop=&srredirects=1&format=json&srsearch=' + preparedText); } function loadXMLDoc(url) { xmlhttp = GetXmlHttpObject(); if (xmlhttp == null) { alert("Your browser does not support XMLHTTP!"); return; } xmlhttp.onreadystatechange = stateChanged; xmlhttp.open("GET", url, true); xmlhttp.send(null); } function GetXmlHttpObject() { if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari return new XMLHttpRequest(); } if (window.ActiveXObject) { // code for IE6, IE5 return new ActiveXObject("Microsoft.XMLHTTP"); } return null; } // сравнение по длине строки, без учёта уточнения в скобках // чтобы для "Категори*" выдавалось "Категория (значения)", а не "Классификация" function compareStringLengths (a, b) { a = a.replace(/ \(.*\)/g, ""); b = b.replace(/ \(.*\)/g, ""); if ( a.length < b.length ) return -1; if ( a.length > b.length ) return 1; return 0; } function initialLower(str) { return str.substr(0, 1).toLowerCase() + str.substr(1); } function stateChanged() { if (xmlhttp.readyState == 4) { if (xmlhttp.status == 200) { var resp = eval('(' + xmlhttp.responseText + ')'); if (typeof resp.query.search[0] != 'undefined') { var page_name = resp.query.search[0].title; // если в запросе было только одно слово, то выбираем самое короткое название из первых трёх результатов // чтобы для "Аглией" выдавалось "Англия", а не "Англиканство" if (requestLength == 1) { var resar = []; for (var j=0;j<=4;j++) { if (typeof resp.query.search[j] != 'undefined' && txt.substr(0,3).toLowerCase() == resp.query.search[j].title.substr(0,3).toLowerCase() ) { resar.push(resp.query.search[j].title); } } resar.sort(compareStringLengths); if (typeof resar[0] != 'undefined') { page_name = resar[0] } } // для "форумы" будет "[[форум]]ы", а не "[[форум|форумы]]" if ( initialLower(txt.substr(0, page_name.length)) == initialLower(page_name) && page_name.length <= txt.length) { txt = '[[' + txt.substr(0, page_name.length) + ']]' + txt.substr(page_name.length, txt.length - page_name.length) ; } else { txt = '[[' + page_name + '|' + txt + ']]'; } } else { txt = '[[' + '|' + txt + ']]'; } if (browserType == 1) { //Mozilla/Opera/Safari3 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 (browserType == 2) { //IE range.text = txt; } else { // other browsers alert(CantWork); } } } } } //Кнопки описания изменений if (wgAction == 'edit' || wgAction == 'submit') { addOnloadHook(function(){ addSumButton('сноска', 'сносим', '') addSumButton('введение', 'вводная часть статьи', '') addSumButton('вопрос', 'вопрос', '') addSumButton('ответ', 'ответ', '') addSumButton('комментарий', 'комментарий', '') addSumButton('уточнение', 'уточнение', '') addSumButton('неоднозначность', 'разрешение неоднозначности', '') addSumButton('упрощение', 'упрощение ссылок', '') addSumButton('источник', 'источник', '') }) } //Скрипт заменяет кнопку "Найти" на выпадающий список пространств, в которых вы часто ищете // based on [[:en:User:Ilmari_Karonen/searchnsmenu.js]] и [[:tr:Участник:Afinogenoff/searchlist.js]] //var searchInNewWindow = true; if (!window.searchInNewWindow) searchInNewWindow = false; var searchNS = [ ['','найти в…'], [-5,'(в этом окне)'], [-1,'По умолчанию'], [0,'Статьи'], [1,'Статьи (обс)'], [2,'Участник'], [3,'Участник (обс)'], [4,'Викиреальность'], [5,'Викиреальность (обс)'], [6,'Изображение'], [7,'Изобр. (обс)'], [8,'Mediawiki'], [9,'Mediawiki (обс)'], [10,'Шаблон'], [11,'Шаблон (обс)'] ] addOnloadHook(searchCreateMenu); function searchCreateMenu() { searchForm = document.getElementById('searchform') //global var if (!searchForm) return; //create hidden input searchHidden = document.createElement('input'); //global var searchHidden.type = 'hidden'; searchHidden.value = '1'; searchForm.fulltext.parentNode.appendChild(searchHidden); //create select searchSel = document.createElement('select'); //global var for (var i in searchNS) searchSel.options[searchSel.options.length] = new Option(searchNS[i][1], searchNS[i][0]); searchSetTarget(); searchSel.style.margin = '0'; searchSel.style.marginTop = '2px'; searchSel.style.fontSize = '90%'; searchSel.onchange = searchOnSelect; searchForm.fulltext.parentNode.insertBefore(searchSel, searchHidden); //hide normal Search button if not IE if (is_opera || is_gecko){ searchForm.fulltext.style.display = 'none'; searchSel.style.width = '65px'; } } function searchOnSelect() { if (this.selectedIndex == 0) return; var ns = this.options[this.selectedIndex].value; if (ns == -5) { //new window switch searchInNewWindow = !searchInNewWindow; searchSetTarget(); } else { //do search if (searchForm.search.value == '') searchForm.search.value = '?'; else { searchHidden.name = (ns == -1) ? '' : 'ns' + ns; searchForm.fulltext.click(); } } this.selectedIndex = 0; } function searchSetTarget(){ if (searchInNewWindow) { searchForm.target = '_blank'; searchSel.options[1].text = '(в НОВОМ окне)'; } else { searchForm.target = ''; searchSel.options[1].text = '(в этом окне)'; } } // Список новых страниц в свернутом блоке слева. Удобнота. importScript('Участник:Hotcat/newpages.js'); //Please leave this link: [[User:ais523/editcount.js]] //<pre><nowiki> // <source lang=javascript> // Этот скрипт меняет -- на — перед вашей подписью, если вы используете верхнюю кнопку для подписей ваших сообщений. (function () { var oldAddButton = addButton; if (typeof(oldAddButton) != 'function') return; addButton = function () { if (arguments.length > 2) arguments[2] = arguments[2].replace(/^--(~+)$/, '— $1'); oldAddButton.apply(this, arguments); }; })(); // </source> if (wgNamespaceNumber >= 0) addOnloadHook(pagePortlet); function pagePortlet(){ var ul, list, obj, ii; //добавить новый портлет 'страница' beforePortlet = document.getElementById('p-tb'); if (!beforePortlet) return; var pPage = document.createElement('div'); pPage.innerHTML = '<h5>страница</h5><div class=pBody><ul></ul></div>'; pPage.className = 'portlet'; pPage.id = 'p-page'; beforePortlet.parentNode.insertBefore(pPage, beforePortlet); //переместить туда 'Ссылки сюда' и 'Связанные правки' moveLinkToPortlet('p-page', 't-whatlinkshere'); moveLinkToPortlet('p-page', 't-recentchangeslinked'); //вычислить переменные для тулсервера (например dbname=ruwiki_p) var wikilang = wgServer.split('.')[0].substring(7); var wikifam = wgServer.split('.')[1]; var dbname = (wikifam == 'wikipedia')? 'wiki' : wikifam; dbname = wikilang + dbname + '_p'; //Ссылки: addPortletLink('p-page', '/index.php/Special:PrefixIndex/' + wgPageName + '/', 'Подстраницы','', 'Подстраницы этой страницы'); addPortletLink('p-page', '/index.php/Special:Log?page='+wgPageName, 'Журналы', 'ca-logs', 'Просмотр журналов для этой страницы'); addPortletLink('p-page', '/index.php/'+wgPageName+'?action=purge', 'Очистить кеш', 'ca-purge', 'Очистка кэша сервера для этой страницы'); addPortletLink('p-page', 'http://cyclowiki.org/index.php/Special:Patrol', 'Патрулировать', 'mycontrib', 'Патрулировать свежие правки'); addPortletLink('p-page', 'http://cyclowiki.org/index.php/Special:Contributions/newbies', 'Новички','', 'Правки новичков'); } //вспомогательная функция перемещает ссылку linkId в portlet portletId function moveLinkToPortlet(portletId, linkId, newText){ var portlet, ul, link; if (!(portlet = document.getElementById(portletId))) return; if (!(ul = portlet.getElementsByTagName('ul')[0])) return; if (!(link = document.getElementById(linkId))) return; ul.appendChild(link); if (newText) link.firstChild.innerHTML = newText; } // Source: Участник:Lockal/prepend.js. CC-BY-SA var templs, prompts; // Произвольный массив с шаблонами можно создать в monobook.js if(templs == null) { var templs = ['\{\{Устарело}}', '\{\{subst:hallo|[[Участник:Hotcat|Hotcat]]}}']; } if(prompts == null) { var prompts = ['\{\{moar|']; } function prompter(qwe) { var reply = prompt(qwe+'?', ''); var actoken = (typeof autoClickToken == 'function') ? '&actoken='+autoClickToken() : ''; document.location.href = wgServer+wgScript+'?title='+wgPageName+'&action=edit&autoedit=s~^~'+qwe+reply+'}}\\n~g;&autoclick=wpSave'+actoken+'&autosummary='+qwe+reply+'}}'; } function addvariants(){ style = 'background:#C2F2FF none repeat scroll 0% 0%;border:1px solid #9BD5F5;color:#5B5B5B;cursor:pointer;font-size:80%;line-height:17px;margin:2px;padding:0px 2px;'; var text = ''; for (var j = 0; j < templs.length; j++) { var actoken = (typeof autoClickToken == 'function') ? '&actoken='+autoClickToken() : ''; text+='<a href="'+wgServer+wgScript+'?title='+wgPageName+'&action=edit&autoedit=s~^~'+templs[j]+'\\n~g;&autoclick=wpSave'+actoken+'&autosummary='+templs[j]+'" style="'+style+'">'+templs[j]+'</a>'; }; text+='<br />'; for (var j = 0; j < prompts.length; j++) { text+='<input type="button" onclick="prompter(\''+prompts[j]+'\')" value="'+prompts[j]+'">'; }; jsMsg(text, 'prepend'); } addOnloadHook(function(){ if (wgNamespaceNumber >= 0){ addPortletLink ('p-cactions', '#', 'в начало…', 'prepend'); document.getElementById('prepend').setAttribute('onclick', 'addvariants()'); } }); function getParamValue(paramName) { var cmdRe=RegExp('[&?]'+paramName+'=([^&]*)'); var h=document.location; var m; if (m=cmdRe.exec(h)) { try { return decodeURI(m[1]); } catch (someError) {} } return null; }; function substitute(data,cmdBody) { // alert('sub\nfrom: '+cmdBody.from+'\nto: '+cmdBody.to+'\nflags: '+cmdBody.flags); var fromRe=RegExp(cmdBody.from, cmdBody.flags); return data.replace(fromRe, cmdBody.to); }; function execCmds(data, cmdList) { for (var i=0; i<cmdList.length; ++i) { data=cmdList[i].action(data, cmdList[i]); } return data; } function parseCmd(str) { // returns a list of commands if (!str.length) return []; var p=false; switch (str.charAt(0)) { case 's': p=parseSubstitute(str); break; case 'j': p=parseJavascript(str); break; default: return false; } if (p) return [p].concat(parseCmd(p.remainder)); return false; }; function unEscape(str, sep) { return str.split('\\\\').join('\\') .split('\\'+sep).join(sep) .split('\\n').join('\n'); }; function runJavascript(data, argWrapper) { // flags aren't used (yet) // from the user's viewpoint, // data is a special variable may appear inside code // and gets assigned the text in the edit box // alert('eval-ing '+argWrapper.code); return eval(argWrapper.code); }; function parseJavascript(str) { // takes a string like j/code/;othercmds and parses it var tmp,code,flags; if (str.length<3) return false; var sep=str.charAt(1); str=str.substring(2); tmp=skipOver(str,sep); if (tmp) { code=tmp.segment.split('\n').join('\\n'); str=tmp.remainder; } else return false; flags=''; if (str.length) { tmp=skipOver(str,';') || skipToEnd(str, ';'); if (tmp) {flags=tmp.segment; str=tmp.remainder; } } return { action: runJavascript, code: code, flags: flags, remainder: str }; }; function parseSubstitute(str) { // takes a string like s/a/b/flags;othercmds and parses it var from,to,flags,tmp; if (str.length<4) return false; var sep=str.charAt(1); str=str.substring(2); tmp=skipOver(str,sep); if (tmp) { from=tmp.segment; str=tmp.remainder; } else return false; tmp=skipOver(str,sep); if (tmp) { to=tmp.segment; str=tmp.remainder; } else return false; flags=''; if (str.length) { tmp=skipOver(str,';') || skipToEnd(str, ';'); if (tmp) {flags=tmp.segment; str=tmp.remainder; } } return {action: substitute, from: from, to: to, flags: flags, remainder: str}; }; function skipOver(str,sep) { var endSegment=findNext(str,sep); if (endSegment<0) return false; var segment=unEscape(str.substring(0,endSegment), sep); return {segment: segment, remainder: str.substring(endSegment+1)}; } function skipToEnd(str,sep) { return {segment: str, remainder: ''}; } function findNext(str, ch) { for (var i=0; i<str.length; ++i) { if (str.charAt(i)=='\\') i+=2; if (str.charAt(i)==ch) return i; } return -1; }; function runOnLoad(f) { if (window.addEventListener) { window.addEventListener("load",f,false); } else if (window.attachEvent) { window.attachEvent("onload",f); } else { window._old_popup_autoedit_onload = window.onload; window.onload = function() { window._old_popup_autoedit_onload(); f(); } } }; window.autoEdit=function() { if (window.autoEdit.alreadyRan) return false; window.autoEdit.alreadyRan=true; var cmdString=getParamValue('autoedit'); if (cmdString) { try { var editbox=document.editform.wpTextbox1; } catch (dang) { return; } var cmdList=parseCmd(cmdString); var input=editbox.value; var output=execCmds(input, cmdList); editbox.value=output; // wikEd user script compatibility if (typeof(wikEdUseWikEd) != 'undefined') { if (wikEdUseWikEd == true) { WikEdUpdateFrame(); } } } var summary=getParamValue('autosummary'); if (summary) document.editform.wpSummary.value=summary; var minor=getParamValue('autominor'); if (minor) { switch (minor) { case '1': case 'yes': case 'true': document.editform.wpMinoredit.checked=true; break; case '0': case 'no': case 'false': document.editform.wpMinoredit.checked=false; } } var watch = getParamValue('autowatch'); if (watch) { switch (watch) { case '1': case 'yes': case 'true': document.editform.wpWatchthis.checked = true; break; case '0': case 'no': case 'false': document.editform.wpWatchthis.checked = false; } } var btn=getParamValue('autoclick'); if (btn) { if (document.editform && document.editform[btn]) { var headings=document.getElementsByTagName('h1'); if (headings) { var div=document.createElement('div'); var button=document.editform[btn]; div.innerHTML='<font size=+1><b>The "' + button.value + '" button has been automatically clicked.' + ' Please wait for the next page to load.</b></font>'; document.title='('+document.title+')'; headings[0].parentNode.insertBefore(div, headings[0]); button.click(); } } else { alert('autoedit.js\n\nautoclick: could not find button "'+ btn +'".'); } } }; runOnLoad(autoEdit); //Преобразование ссылок в читабельный вид //Часть кода позаимствована из http://ru.wikipedia.org/wiki/MediaWiki:Wikificator.js //Автор: X-romix var XRomix_RefConv_CantWork = 'RefConv не может работать в вашем браузере.\n\RefConv cannot work in your browser' // английский текст для тех, кто не видит русские буквы var XRomix_RefConv_FullText = 'Эта кнопка предназначена для преобразования ссылок в читабельный вид. Выберите фрагмент текста.'; //Добавляет кнопку function add_XRomix_RefConv_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/0/0d/Button-RefConv.png' //i.src = 'http://upload.wikimedia.org/wikipedia/ru/7/75/Button-Test.PNG' i.alt = i.title = 'Преобразование ссылки в читаемый вид' i.onclick = XRomix_RefConv1 i.style.cursor = 'pointer' toolbar.appendChild(i) } //Этот код выполняется в начале. if (wgAction == 'edit' || wgAction == 'submit'){ addOnloadHook(add_XRomix_RefConv_Button) } //Функция по преобразованию текста function XRomix_RefConv1(){ //Проверяем, поддерживает ли браузер регулярные выражения (RegExp) if (('code'.replace(/d/g, 'r') != 'core') || (navigator.appName=='Netscape' && navigator.appVersion.substr (0, 1) < 5)) { alert(XRomix_RefConv_CantWork); return } setWpSummary(); var txt, hidden = [], hidIdx = 0, wpTextbox1 = document.editform.wpTextbox1 wpTextbox1.focus(); var winScroll=getScrollTop(wpTextbox1)//remember window scroll var startPos = getSelectionStart(wpTextbox1) var endPos = startPos+getSelectionLength(wpTextbox1) if (startPos==-2) // Для браузеров, которые не умеют возвращать выделенный фрагмент, выдаем ошибку { alert(XRomix_RefConv_CantWork); return } if (startPos==endPos){ while (1==1){ if (startPos==0) break; var str= wpTextbox1.value.substring(startPos, startPos+7); if (str.search(/http\:\/\//i)!=-1) break; startPos--; } var str= wpTextbox1.value.substr(startPos); endPos=str.search(/[\s\]\t\n\<\>]/); if (endPos==-1) {endPos=wpTextbox1.value.length;} else{endPos=endPos+startPos} if(endPos<wpTextbox1.selectionStart){ alert('В текущей позиции курсора не найден интернет-адрес http:// '); return; } } txt = wpTextbox1.value.substring(startPos, endPos) if (txt == '') {alert(XRomix_RefConv_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(){ txt = txt.replace(/%D0%81/g, 'Ё'); txt = txt.replace(/%D0%90/g, 'А'); txt = txt.replace(/%D0%91/g, 'Б'); txt = txt.replace(/%D0%92/g, 'В'); txt = txt.replace(/%D0%93/g, 'Г'); txt = txt.replace(/%D0%94/g, 'Д'); txt = txt.replace(/%D0%95/g, 'Е'); txt = txt.replace(/%D0%96/g, 'Ж'); txt = txt.replace(/%D0%97/g, 'З'); txt = txt.replace(/%D0%98/g, 'И'); txt = txt.replace(/%D0%99/g, 'Й'); txt = txt.replace(/%D0%9A/g, 'К'); txt = txt.replace(/%D0%9B/g, 'Л'); txt = txt.replace(/%D0%9C/g, 'М'); txt = txt.replace(/%D0%9D/g, 'Н'); txt = txt.replace(/%D0%9E/g, 'О'); txt = txt.replace(/%D0%9F/g, 'П'); txt = txt.replace(/%D0%A0/g, 'Р'); txt = txt.replace(/%D0%A1/g, 'С'); txt = txt.replace(/%D0%A2/g, 'Т'); txt = txt.replace(/%D0%A3/g, 'У'); txt = txt.replace(/%D0%A4/g, 'Ф'); txt = txt.replace(/%D0%A5/g, 'Х'); txt = txt.replace(/%D0%A6/g, 'Ц'); txt = txt.replace(/%D0%A7/g, 'Ч'); txt = txt.replace(/%D0%A8/g, 'Ш'); txt = txt.replace(/%D0%A9/g, 'Щ'); txt = txt.replace(/%D0%AA/g, 'Ъ'); txt = txt.replace(/%D0%AB/g, 'Ы'); txt = txt.replace(/%D0%AC/g, 'Ь'); txt = txt.replace(/%D0%AD/g, 'Э'); txt = txt.replace(/%D0%AE/g, 'Ю'); txt = txt.replace(/%D0%AF/g, 'Я'); txt = txt.replace(/%D1%91/g, 'ё'); txt = txt.replace(/%D0%B0/g, 'а'); txt = txt.replace(/%D0%B1/g, 'б'); txt = txt.replace(/%D0%B2/g, 'в'); txt = txt.replace(/%D0%B3/g, 'г'); txt = txt.replace(/%D0%B4/g, 'д'); txt = txt.replace(/%D0%B5/g, 'е'); txt = txt.replace(/%D0%B6/g, 'ж'); txt = txt.replace(/%D0%B7/g, 'з'); txt = txt.replace(/%D0%B8/g, 'и'); txt = txt.replace(/%D0%B9/g, 'й'); txt = txt.replace(/%D0%BA/g, 'к'); txt = txt.replace(/%D0%BB/g, 'л'); txt = txt.replace(/%D0%BC/g, 'м'); txt = txt.replace(/%D0%BD/g, 'н'); txt = txt.replace(/%D0%BE/g, 'о'); txt = txt.replace(/%D0%BF/g, 'п'); txt = txt.replace(/%D1%80/g, 'р'); txt = txt.replace(/%D1%81/g, 'с'); txt = txt.replace(/%D1%82/g, 'т'); txt = txt.replace(/%D1%83/g, 'у'); txt = txt.replace(/%D1%84/g, 'ф'); txt = txt.replace(/%D1%85/g, 'х'); txt = txt.replace(/%D1%86/g, 'ц'); txt = txt.replace(/%D1%87/g, 'ч'); txt = txt.replace(/%D1%88/g, 'ш'); txt = txt.replace(/%D1%89/g, 'щ'); txt = txt.replace(/%D1%8A/g, 'ъ'); txt = txt.replace(/%D1%8B/g, 'ы'); txt = txt.replace(/%D1%8C/g, 'ь'); txt = txt.replace(/%D1%8D/g, 'э'); txt = txt.replace(/%D1%8E/g, 'ю'); txt = txt.replace(/%D1%8F/g, 'я'); } //подсчитывает концы строк в фрагменте текста 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 } }; 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/refconv.js|refconv.js]] - преобразование ссылок"; } } } } /** <pre> Simple Diff -- 27 April 2010. Автор: [[Edward Chernenko]] (http://absurdopedia.net/wiki/Участник:Edward_Chernenko/simple-diff.js). Лицензия: CC-BY-SA 3.0 Переписать все ссылки на диффы («пред.») в истории страниц, чтобы те были значительно короче. */ function simplify_diffs() { if(wgAction != "history") return; for(i = 0; i < document.links.length; i ++) { if(document.links[i].href.match(/diff=/)) document.links[i].href = document.links[i].href.replace(/^.*diff=(.*)&oldid=.*$/, '/?diff=$1'); } } addOnloadHook(simplify_diffs); /* </pre> */