Показать сообщение отдельно
  #21 (permalink)  
Старый 04.08.2012, 07:46
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

<script type="text/javascript">

function LatRus(TxtTrans1,a){TxtTrans1=='lat'? TxtTrans1='rus':TxtTrans1='lat';
lat0='qwertyuiopasdfghjkl;\'zxcvbnm\,QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>`~[].'.split('');
lat='qwertyuiopasdfghjkl;\'zxcvbnm\,QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>`~'.split('');
lat.push('\\[');lat.push('\\]');lat.push('\\.');
rus=('йцукенгшщзфывапролджэячсмитьбЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮёЁхъю').split('');
function transF(p){ar1=lat;ar2=rus;if(TxtTrans1=='lat'){ar2=lat0;ar1=rus}for(var i=0; i<ar1.length; i++){trans='/'+ar1[i]+'/gm';p=p.replace(eval(trans), ar2[i])}return p;} return transF(a);
}

var is_chrome = false, chrome_version = false;
if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1) {
        is_chrome = true;
}

function getSelectionStart(o) {
  if (o.createTextRange) {
    // IE, Opera
    var r = document.selection.createRange().duplicate();
    r.moveEnd('character', o.value.length);
    if (r.text == '') {
      return o.value.length;
    }
    return o.value.lastIndexOf(r.text);
  } else { if(is_chrome)return o.selectionStart+1;
    // FF
    return o.selectionStart;
  }
  return true;
}

function setSelectionStart(o,n) {

	if(!document.all) 
	{
		var end = o.value.length;  
		o.setSelectionRange(n,n);  
		o.focus();  
	}
	else
	{      
		var r = o.createTextRange();      
		r.collapse(true);
        r.moveStart("character", n);
        r.moveEnd("character", 0);
        r.select();
	}

  return true;
}

function correctInTag (tx) {
  var Thistext = tx.value;
  var CaretPos = getSelectionStart(tx);

  var rega = /\[math\]([\s\S]*?)\[\/math\]/gm;

function replacer (str, p1, offset, s) {
 var a = '[math]'; var b = '[/math]';
 var St = offset + a.length;
 var End = offset + str.length - b.length;
 if(CaretPos >= St &&CaretPos<=End){
    var Sstr = s.substring(St,End)
    if(Sstr.indexOf(a)!=-1) return str;
    var S = LatRus('rus',Sstr);/*alert(S)*/;
    return a+S+b;
 } else return str;

}
  var str2 = Thistext.replace(rega,replacer)
  tx.value = str2;
  setSelectionStart(tx,CaretPos);
} 
</script>



<textarea oninput="correctInTag (this)" id="abcd" style="width: 300px; height: 100px">
Наберите что-либо на русском внутри
 Наберите что-либо 
на русском внутри [math].

[/math].
И в этом [math].

[/math]
</textarea>
Можно вставлять даже копированием -осталось запретить позицию курсора наезда на теги и запрет их удаления или порчи

Последний раз редактировалось Deff, 04.08.2012 в 16:25.
Ответить с цитированием