Участник:Adama/tablifikator.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.

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

//Форматирует таблицу, скопированную из Excel, по правилам вики-разметки.
//Часть кода позаимствована из http://ru.wikipedia.org/wiki/MediaWiki:Wikificator.js
//Автор: Adama
 
var Adama_Tablify_CantWork1 = 'Таблификатор не может работать в вашем браузере.\n\nTablificator cannot work in your browser' // английский текст для тех, кто не видит русские буквы
var Adama_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 = Adama_Tablify1
	i.style.cursor = 'pointer'
	toolbar.appendChild(i)
 
} 

 
 
//Этот код выполняется в начале.
if (wgAction == 'edit' || wgAction == 'submit'){
  addOnloadHook(addTablifikatorButton1)
}
 
 
//Функция для оформления таблицы
function Adama_Tablify1(){
 
 //Проверяем, поддерживает ли браузер регулярные выражения (RegExp)	
 if (('code'.replace(/d/g, 'r') != 'core') 
    || (navigator.appName=='Netscape' && navigator.appVersion.substr (0, 1) < 5))
  { alert(Adama_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(Adama_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(Adama_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(Adama_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:Adama/tablifikator.js|tablifikator.js]] - таблица из Excel/Calc";
	    }
	 }
  } 
 
}