Участник:Ak5271/monobook.js

Материал из свободной русской энциклопедии «Традиция»
Перейти к: навигация, поиск

Замечание: Чтобы после сохранения вступили в силу изменения стилей, перезагрузите файл //traditio.wiki/w/load.php?debug=false&lang=ru&modules=site&only=styles&skin=vector&*, если используете скин Vector, или //traditio.wiki/w/load.php?debug=false&lang=ru&modules=site&only=styles&skin=common&*, если используете скин Common.

Чтобы вступили в силу изменения скриптов, перезагрузите файл //traditio.wiki/w/load.php?debug=false&lang=ru&modules=site&only=scripts&skin=vector&*, если используете скин Vector, или //traditio.wiki/w/load.php?debug=false&lang=ru&modules=site&only=scripts&skin=common&*, если используете скин Common.

Гаджеты и импортируемые скрипты загружаются отдельными файлами.

an class="k">return true; //JavaScript не проверяем }else if (document.URL.match(/\.css&action=(edit|submit)/)){ return true; //CSS не проверяем }else if (wgTitle.match (/(Шаблон|Template)\:/)){ return true; //Шаблоны не проверяем }else if ('code'.replace(/d/g, 'r') != 'core'){ //Проверяем, поддерживает ли браузер регулярные выражения (RegExp) return true; } var wpTextbox1 = document.editform.wpTextbox1; if(!wpTextbox1) return true; var txt = wpTextbox1.value; var ok=replaceTags(/<nowiki>/, "</nowiki>"); if(!ok) return false; var ok=replaceTags(/<\!\-\-/, "-->"); if(!ok) return false; var ok=replaceTags(/<math>/, "</math>"); if(!ok) return false; var ok=replaceTags(/<source[\s>]/, "</source>"); if(!ok) return false; var ok=replaceTags(/<pre[\s>]/, "</pre>"); if(!ok) return false; var arrPos = new Array(); var arrTags= new Array(); var arr = txt.match(/(<[\/]?[A-Za-z][^>]*>|\[\[|\]\]|\{\{|\}\})/g); if(arr==null) return true; //Нет тегов для проверки - возврат if(arr){ for(var i=0; i<arr.length; i++){ var w=arr[i]; var pos=txt.indexOf(w); //Запоминаем позицию и текст тега arrPos.push(pos); arrTags.push(w); //Заменяем тег на пробелы replace1Tag(w); } } var arrStackTags = new Array(); var arrStackPos = new Array(); for(var i=0; i<arrTags.length; i++){ var TagName=arrTags[i]; var TagPos=arrPos[i]; if (TagName.search(/(\/[\s]*>|<hr>|<br>)/) >=0 ){ // <тег/> continue; //пропускаем такие теги, поскольку они не требуют закрытия }else if(TagName.search(/<[a-zA-Z][^>]*>/) >=0){ //открывающий <тег ...> //помещаем тег и его позицию в стек arrStackTags.push(TagName); arrStackPos.push(TagPos); }else if(TagName.search(/<\/[^>]+>/) >=0){ //Закрывающий </тег> var TagNameN=TagName.replace(/[<>\/]/g, ""); TagNameN=TagNameN.toLowerCase(); //Нормализованное имя тега - без угловых скобок и / if (arrStackTags.length==0){ setRedWindow('Неожиданный закрывающий тег '+htmlEncode(TagName)+'.') xSelectionStart=TagPos; xSelectionEnd=TagPos+TagName.length; return false; }else{ var TagName2=arrStackTags.pop(); var TagPos2=arrStackPos.pop(); var TagName2N=TagName2.replace(/[\s][^>]*/, ""); //убираем все после первого пробела TagName2N=TagName2N.replace(/[<>\/]/g, "");//убираем </> TagName2N=TagName2N.toLowerCase(); if(TagNameN!=TagName2N){ setRedWindow('Неожиданный закрывающий тег '+htmlEncode(TagName)+' после открывающего тега '+htmlEncode(TagName2)+'.'); xSelectionStart=TagPos; xSelectionEnd=TagPos+TagName.length; return false; } } }else if(TagName=="[["){ arrStackTags.push(TagName); arrStackPos.push(TagPos); }else if(TagName=="{{"){ arrStackTags.push(TagName); arrStackPos.push(TagPos); }else if(TagName=="]]"){ if (arrStackTags.length==0){ setRedWindow('Неожиданный закрывающий элемент '+htmlEncode(TagName)+'.'); xSelectionStart=TagPos; xSelectionEnd=TagPos+TagName.length; return false; }else{ var TagName2=arrStackTags.pop(); var TagPos2=arrStackPos.pop(); if(TagName2!="[["){ setRedWindow('Неожиданный закрывающий тег '+htmlEncode(TagName)+' после открывающего тега '+htmlEncode(TagName2)+'.'); xSelectionStart=TagPos; xSelectionEnd=TagPos+TagName.length; return false; } } }else if(TagName=="}}"){ if (arrStackTags.length==0){ setRedWindow('Неожиданный закрывающий элемент '+htmlEncode(TagName)+'.'); xSelectionStart=TagPos; xSelectionEnd=TagPos+TagName.length; return false; }else{ var TagName2=arrStackTags.pop(); var TagPos2=arrStackPos.pop(); if(TagName2!="{{"){ setRedWindow('Неожиданный закрывающий тег '+htmlEncode(TagName)+' после открывающего тега '+htmlEncode(TagName2)+'.'); xSelectionStart=TagPos; xSelectionEnd=TagPos+TagName.length; return false; } } } }//for if(arrStackTags.length>0){ var TagName=arrStackTags.pop() var TagPos=arrStackPos.pop(); setRedWindow('Имеется незакрытый элемент '+htmlEncode(TagName)+'.'); xSelectionStart=TagPos; xSelectionEnd=TagPos+TagName.length; return false; }//if return true; //нет ошибок }//function //подсчитывает концы строк в фрагменте текста function countCrlf(str){ str=""+str; var arr=str.match(/\n/g); //Теперь массив содержит концы строк - возвращаем его длину if (arr) return arr.length; return 0; } //Извлекает первую строку (до \n или \r) из строки function get1string(text){ var p=text.indexOf("\n"); var p1=text.indexOf("\r"); if(p1!=-1 && p!=-1){ if(p>p1) p=p1; } if(p!=-1){ text=text.substr(0, p); } return text; } //Браузеро-независимый setSelectionRange - изменяет начало и конец //выделенного фрагмента в поле ввода input function setSelectionRange(input, start, end){ if(!input) return; if(!input.value) return; var text=input.value.substring(start, end); text=get1string(text); if (input.setSelectionRange) {//Mozilla/Opera //Попытаемся спозиционировать курсор на нужный текст if (self.find) {//Mozilla, в Опере не работает input.focus(); input.setSelectionRange(start, start); var caseSensitive = false var backwards = false var wrapAround = false self.find(text, caseSensitive, backwards, wrapAround); } //Выделим диапазон input.focus(); input.setSelectionRange(start, end); }else if (document.selection && document.selection.createRange) { //Internet Explorer //IE проглючивает с началом и концом выделенного фрагмента - вносим исправление var cnt1=countCrlf(input.value.substring(0, start)); var cnt2=countCrlf(input.value.substring(start, end)); var range = input.createTextRange(); if(range.findText){ input.focus(); range.collapse(true); range.moveStart("character", start - cnt1); range.moveEnd("character", start - cnt1); range.select(); range.findText(text); range.collapse(true); } var range = input.createTextRange(); //Выделяем диапазон в IE input.focus(); range.collapse(true); range.moveStart("character", start - cnt1); range.moveEnd("character", end - start - cnt2); range.select(); } } //Кодирование спецсимволов HTML function htmlEncode(s){ s=s.replace(/[\&]/g, "&amp;"); s=s.replace(/[<]/g, "&lt;"); s=s.replace(/[>]/g, "&gt;"); return s; } } //Форматирует таблицу, скопированную из Excel, по правилам вики-разметки. //Часть кода позаимствована из http://ru.wikipedia.org/wiki/MediaWiki:Wikificator.js //Автор: X-romix var XRomix_Tablify_CantWork1 = 'Таблификатор не может работать в вашем браузере.\n\nTablificator cannot work in your browser' // английский текст для тех, кто не видит русские буквы var XRomix_Tablify_FullText1 = 'Эта кнопка предназначена для форматирования табличного текста, скопированного из табличного редактора (например, из Excel). Чтобы функция заработала, сначала выделите нужный фрагмент текста в окне редактирования.' //Добавляет кнопку function addTablifikatorButton1(){ 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-tablifikator.PNG' i.alt = i.title = 'Таблификатор' i.onclick = XRomix_Tablify1 i.style.cursor = 'pointer' toolbar.appendChild(i) } //Этот код выполняется в начале. if (wgAction == 'edit' || wgAction == 'submit'){ addOnloadHook(addTablifikatorButton1) } //Функция для оформления таблицы function XRomix_Tablify1(){ //Проверяем, поддерживает ли браузер регулярные выражения (RegExp) if (('code'.replace(/d/g, 'r') != 'core') || (navigator.appName=='Netscape' && navigator.appVersion.substr (0, 1) < 5)) { alert(XRomix_Tablify_CantWork1); return } setWpSummary(); 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(XRomix_Tablify_FullText1); 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 var range = document.selection.createRange() txt = range.text if (txt == '') {alert(XRomix_Tablify_FullText1); 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(XRomix_Tablify_CantWork1); return } document.documentElement.scrollTop = winScroll // scroll back, for IE/Opera //Здесь производим замену в переменной txt - это отразится на выделенном фрагменте текста function processText(){ var col1hdr=0; if (confirm('Вы хотите оформить первую колонку как заголовок?')) col1hdr=1; txt = txt.replace(/^\s+|\s+$/g, '') //Обрезаем пробелы слева и справа var arr1=txt.split("\n") txt='\n{| class="standard"\n' for (var i=0; i<arr1.length; i++){ txt = txt+"|-\n" s1=arr1[i]; var arr2=s1.split("\t") for (var j=0; j<arr2.length; j++){ var s2=arr2[j]; if ((col1hdr==1 && j==0)||i==0){ txt = txt+"! "+s2+"\n" }else{ txt = txt+"| "+s2+"\n" } } } txt = txt+"|}" } 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/tablifikator.js|tablifikator.js]] - таблица из Excel/Calc"; } } }
Источник — «https://traditio.wiki/w/index.php?title=Участник:Ak5271/monobook.js&oldid=197837»