Перейти к контенту

Модифицированная форма быстрого ответа от SLAED CMS


Рекомендуемые сообщения

Предлагаем Вашему вниманию модифицированную форму быстрого ответа для форума Invision Power Board.

 

Основные отличия данной формы, это транслит латинского алфавита в русский и обратно. Форма имеет функцию автоматического транслита, на лету. Учитываются BB и HTML теги, которые игнорируются при переводе. Дополнительно ко всему предложены кнопки для установки основных BB тег.

 

http://www.slaed.net/modules/Files/Bilder/...ply_for_IPB.gif

 

Установка

 

1. Разархивируйте все файлы из скачанного архива

2. Импортируйте файл Translit.js в Вашу директорию форума jscripts/

3. Войдите в панель администратора форума

4. Внешний вид >> Менеджер стилей >> Изменить HTML фрагменты >> skin_topic (Просмотр темы) >> quick_reply_box_open

5. Обновите прежний на новый код и сохраните изменения

 

Новый код:

<script language='JavaScript'>
function AddSelectedText(BBOpen, BBClose) {
if (document.REPLIER.Post.caretPos) document.REPLIER.Post.caretPos.text = BBOpen + document.REPLIER.Post.caretPos.text + BBClose;
else document.REPLIER.Post.value += BBOpen + BBClose;
document.REPLIER.Post.focus()
}
function InsertBBCode(BBcode) {
AddSelectedText('[' + BBcode + ']','[/' + BBcode + ']');
}
function storeCaret(textEl) {
if (textEl.createTextRange) textEl.caretPos = document.selection.createRange().duplicate();
}
</script>
<script type="text/javascript">
<!--
var emowindow = '';
function emo_pop(){
emowindow = window.open("index.{ipb.vars['php_ext']}?act=legends&CODE=emoticons&s={ipb.session_id}","Legends","width=250,height=500,resizable=yes,scrollbars=yes"); 
}
-->
</script>
<div id="qr_open" style="display: $show; position: relative;">
<br />
<form name="REPLIER" action="{ipb.script_url}" method="post">
<input type="hidden" name="act" value="Post" />
<input type="hidden" name="CODE" value="03" />
<input type="hidden" name="f" value="$fid" />
<input type="hidden" name="t" value="$tid" />
<input type="hidden" name="st" value="{ipb.input['st']}" />
<input type="hidden" name="auth_key" value="$key" />
<input type="hidden" name="fast_reply_used" value="1" />
<!-- TITLE DIV -->
<div class="borderwrap">
<div class="maintitle"><{CAT_IMG}> {ipb.lang['qr_title']}</div>
<div style='padding:6px' align="center">
<textarea name="Post" onkeypress="transliteFeld(this,event);" onmouseover='checkselection()' id='fastreplyarea' cols="70" rows="8" class="textarea" tabindex="1" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);"></textarea>
<script language="JavaScript" type="text/javascript" src="jscripts/Translit.js"></script><script language="JavaScript">TxtFeld=document.REPLIER.Post; language=1; richtung=1;</script>
<div align='center' >
<input type="button" class="button" value=" B " style="font-weight:bold; width: 40px" onClick="InsertBBCode('b')" />
<input type="button" class="button" value=" i " style="font-style:italic; width: 40px" onClick="InsertBBCode('i')" />
<input type="button" class="button" value=" u " style="text-decoration: underline; width: 40px" onClick="InsertBBCode('u')" />
<input type="button" class="button" value="Quote" style="width: 50px" onClick="InsertBBCode('quote')" />
<input type="button" class="button" value="Code" style="width: 40px" onClick="InsertBBCode('code')" />
<input type="button" class="button" value="Img" style="width: 40px"  onClick="InsertBBCode('img')" />
<input type="button" class="button" value="URL" style="text-decoration: underline; width: 40px" onClick="InsertBBCode('url')" />
<input type="button" class="button" value="Rus" style="width: 40px" onClick="translateAlltoCyrillic();" />
<input type="button" class="button" value="Lat" style="width: 40px" onClick="translateAlltoLatin();" />
</div>
<!-- HIDDEN PASTE SELECTION QUESTION --> 
<div id='fastreply-pastesel' align='center' style='display:none;'>
<br /><input type="button" name="pastesel" onclick="pasteselection();" value="{ipb.lang['add_selected_text']}" class="button" /><br />
</div>
<!-- / HIDDEN PASTE SELECTION QUESTION -->
<br />
<input type="checkbox" id="translitSchalter" name="translit" onClick="changelanguage();" class="checkbox" /> Автоматический перевод текста 
<if="ipb.member['auto_track'] == "" or ipb.member['auto_track'] == '0'">
<input type="checkbox" name="enabletrack" value="1" class="checkbox" /> {ipb.lang['qr_add_email']}  
</if>
<else>
<input type="checkbox" name="enabletrack" value="1" class="checkbox" checked="checked" /> {ipb.lang['qr_add_email']}  
</else>
<input type="checkbox" name="enableemo" value="yes" class="checkbox" checked="checked" /> <a href="java script:emo_pop();">{ipb.lang['qr_add_smilie']}</a>  
<input type="checkbox" name="enablesig" value="yes" class="checkbox" checked="checked" /> {ipb.lang['qr_add_sig']}
<br /><br />
<input type="submit" name="submit" value="{ipb.lang['qr_submit']}" class="button" tabindex="2" accesskey="s" /> <input type="submit" name="preview" value="{ipb.lang['qr_more_opts']}" class="button" /> <input type="button" name="qrc" onclick="ShowHide('qr_open','qr_closed');" value="{ipb.lang['qr_closeit']}" class="button" />
</div></div></form></div>

 

Код файла Translit.js:

var DOM = document.getElementById ? 1 : 0, 
opera = window.opera && DOM ? 1 : 0, 
IE = !opera && document.all ? 1 : 0, 
NN6 = DOM && !IE && !opera ? 1 : 0; 

var ablauf = new Date();
var jahr = ablauf.getTime() + (365 * 24 * 60 * 60 * 1000);
ablauf.setTime(jahr);
var richtung=1;
var isChat=false;
NoHtml=true;
NoScript=true;
NoStyle=true;
NoBBCode=true;
NoBefehl=false;
function setZustand(){
transHtmlPause=false;
transScriptPause=false;
transStylePause=false;
transBefehlPause=false;
transBBPause=false;

}
setZustand();
function keks(Name,Wert){
document.cookie = Name+"="+Wert+"; expires=" + ablauf.toGMTString();
}
function changeNoTranslit(Nr){
if(document.trans.No_translit_HTML.checked)NoHtml=true;else{NoHtml=false}
if(document.trans.No_translit_BBCode.checked)NoBBCode=true;else{NoBBCode=false}
keks("NoHtml",NoHtml);keks("NoScript",NoScript);keks("NoStyle",NoStyle);keks("NoBBCode",NoBBCode);
}
function changeRichtung(r){
richtung=r;keks("TransRichtung",richtung);setFocus()
}
function changelanguage(){  
if (language==1) {language=0;}
else {language=1;}
keks("autoTrans",language);
setFocus();
setZustand();
}
function setFocus(){
TxtFeld.focus();
}
function repl(t,a,b){
var w=t,i=0,n=0;
while((i=w.indexOf(a,n))>=0){
	t=t.substring(0,i)+b+t.substring(i+a.length,t.length);	
	w=w.substring(0,i)+b+w.substring(i+a.length,w.length);
	n=i+b.length;
	if(n>=w.length){
		break;
	}
}
return t;
}
var rus_lr2 = ('Е-е-О-о-Ё-Ё-Ё-Ё-Ж-Ж-Ч-Ч-Ш-Ш-Щ-Щ-Ъ-Ь-Э-Э-Ю-Ю-Я-Я-Я-Я-ё-ё-ж-ч-ш-щ-э-ю-я-я').split('-');
var lat_lr2 = ('/E-/e-/O-/o-ЫO-Ыo-ЙO-Йo-ЗH-Зh-ЦH-Цh-СH-Сh-ШH-Шh-ъ'+String.fromCharCode(35)+'-ь'+String.fromCharCode(39)+'-ЙE-Йe-ЙU-Йu-ЙA-Йa-ЫA-Ыa-ыo-йo-зh-цh-сh-шh-йe-йu-йa-ыa').split('-');
var rus_lr1 = ('А-Б-В-Г-Д-Е-З-И-Й-К-Л-М-Н-О-П-Р-С-Т-У-Ф-Х-Х-Ц-Щ-Ы-Я-а-б-в-г-д-е-з-и-й-к-л-м-н-о-п-р-с-т-у-ф-х-х-ц-щ-ъ-ы-ь-я').split('-');
var lat_lr1 = ('A-B-V-G-D-E-Z-I-J-K-L-M-N-O-P-R-S-T-U-F-H-X-C-W-Y-Q-a-b-v-g-d-e-z-i-j-k-l-m-n-o-p-r-s-t-u-f-h-x-c-w-'+String.fromCharCode(35)+'-y-'+String.fromCharCode(39)+'-q').split('-');
var rus_rl = ('А-Б-В-Г-Д-Е-Ё-Ж-З-И-Й-К-Л-М-Н-О-П-Р-С-Т-У-Ф-Х-Ц-Ч-Ш-Щ-Ъ-Ы-Ь-Э-Ю-Я-а-б-в-г-д-е-ё-ж-з-и-й-к-л-м-н-о-п-р-с-т-у-ф-х-ц-ч-ш-щ-ъ-ы-ь-э-ю-я').split('-');
var lat_rl = ('A-B-V-G-D-E-JO-ZH-Z-I-J-K-L-M-N-O-P-R-S-T-U-F-H-C-CH-SH-SHH-'+String.fromCharCode(35)+String.fromCharCode(35)+'-Y-'+String.fromCharCode(39)+String.fromCharCode(39)+'-JE-JU-JA-a-b-v-g-d-e-jo-zh-z-i-j-k-l-m-n-o-p-r-s-t-u-f-h-c-ch-sh-shh-'+String.fromCharCode(35)+'-y-'+String.fromCharCode(39)+'-je-ju-ja').split('-');
var transAN=true;
function transliteText(txt){
vorTxt=txt.length>1?txt.substr(txt.length-2,1):"";
buchstabe=txt.substr(txt.length-1,1);
txt=txt.substr(0,txt.length-2);
return txt+translitBuchstabeCyr(vorTxt,buchstabe);
}
function translitBuchstabeCyr(vorTxt,txt){
var zweiBuchstaben = vorTxt+txt;
var code = txt.charCodeAt(0);

if (txt=="<")transHtmlPause=true;else if(txt==">")transHtmlPause=false;
if (txt=="<script")transScriptPause=true;else if(txt=="</script>")transScriptPause=false;
if (txt=="<style")transStylePause=true;else if(txt=="</style>")transStylePause=false;
if (txt=="[")transBBPause=true;else if(txt=="]")transBBPause=false;
if (txt=="/")transBefehlPause=true;else if(txt==" ")transBefehlPause=false;

if (
	(transHtmlPause==true &&   NoHtml==true)||
	(transScriptPause==true &&   NoScript==true)||
	(transStylePause==true &&   NoStyle==true)||
	(transBBPause==true &&   NoBBCode==true)||
	(transBefehlPause==true &&   NoBefehl==true)||

	!(((code>=65) && (code<=123))||(code==35)||(code==39))) return zweiBuchstaben;

for (x=0; x<lat_lr2.length; x++){
	if (lat_lr2[x]==zweiBuchstaben) return rus_lr2[x];
}
for (x=0; x<lat_lr1.length; x++){
	if (lat_lr1[x]==txt) return vorTxt+rus_lr1[x];
}
return zweiBuchstaben;
}
function translitBuchstabeLat(buchstabe){
for (x=0; x<rus_rl.length; x++){
	if (rus_rl[x]==buchstabe)
	return lat_rl[x];
}
return buchstabe;
}
function translateAlltoLatin(){
if (!IE){
	var txt=TxtFeld.value;
	var txtnew = "";
	var symb = "";
	for (y=0;y<txt.length;y++){
		symb = translitBuchstabeLat(txt.substr(y,1));
		txtnew += symb;
	}
	TxtFeld.value = txtnew;
	setFocus()
} else {
	var is_selection_flag = 1;
	var userselection = document.selection.createRange();
	var txt = userselection.text;

	if (userselection==null || userselection.text==null || userselection.parentElement==null || userselection.parentElement().type!="textarea"){
		is_selection_flag = 0;
		txt = TxtFeld.value;
	}
	txtnew="";
	var symb = "";
	for (y=0;y<txt.length;y++){
		symb = translitBuchstabeLat(txt.substr(y,1));
		txtnew +=  symb;
	}
	if (is_selection_flag){
		userselection.text = txtnew; userselection.collapse(); userselection.select();
	}else{
		TxtFeld.value = txtnew;
		setFocus()
	}
}
return;
}
function transliteFeld(object,evnt){
if (language==1 || opera) return;
if (NN6){
	var code=void 0;
	var code =  evnt.charCode; 
	var textareafontsize = 14; 
	var textreafontwidth = 7;
	if(code == 13){
		return;
	}
	if ( code && (!(evnt.ctrlKey || evnt.altKey))){
		pXpix = object.scrollTop;
		pYpix = object.scrollLeft;
		evnt.preventDefault();
		txt=String.fromCharCode(code);
		pretxt = object.value.substring(0, object.selectionStart);
		result = transliteText(pretxt+txt);
		object.value = result+object.value.substring(object.selectionEnd);
		object.setSelectionRange(result.length,result.length);
		object.scrollTop=100000;
		object.scrollLeft=0;

		cXpix = (result.split("\n").length)*(textareafontsize+3);
		cYpix = (result.length-result.lastIndexOf("\n")-1)*(textreafontwidth+1);
		taXpix = (object.rows+1)*(textareafontsize+3);
		taYpix = object.clientWidth;

		if ((cXpix>pXpix)&&(cXpix<(pXpix+taXpix))) object.scrollTop=pXpix;
		if (cXpix<=pXpix) object.scrollTop=cXpix-(textareafontsize+3);
		if (cXpix>=(pXpix+taXpix)) object.scrollTop=cXpix-taXpix;

		if ((cYpix>=pYpix)&&(cYpix<(pYpix+taYpix))) object.scrollLeft=pYpix;
		if (cYpix<pYpix) object.scrollLeft=cYpix-(textreafontwidth+1);
		if (cYpix>=(pYpix+taYpix)) object.scrollLeft=cYpix-taYpix+1;
	}
	return true;
} else if (IE){
	if (isChat){
		var code = frames['input'].event.keyCode;
		if(code == 13){
			return;
		}
		txt=String.fromCharCode(code);
		cursor_pos_selection = frames['input'].document.selection.createRange();
		cursor_pos_selection.text="";
		cursor_pos_selection.moveStart("character",-1);
		vorTxt = cursor_pos_selection.text;
		if (vorTxt.length>1){
			vorTxt="";
		}
		frames['input'].event.keyCode = 0;
		if (richtung==2){
			result = vorTxt+translitBuchstabeLat(txt)
		}else{
			result = translitBuchstabeCyr(vorTxt,txt)
		}
		if (vorTxt!=""){
			cursor_pos_selection.select(); cursor_pos_selection.collapse();
		}
		with(frames['input'].document.selection.createRange()){
			text = result; collapse(); select()
		}	
	} else {
		var code = event.keyCode;
		if(code == 13){
			return;
		}
		txt=String.fromCharCode(code);
		cursor_pos_selection = document.selection.createRange();
		cursor_pos_selection.text="";
		cursor_pos_selection.moveStart("character",-1);
		vorTxt = cursor_pos_selection.text;
		if (vorTxt.length>1){
			vorTxt="";
		}
		event.keyCode = 0;
		if (richtung==2){
			result = vorTxt+translitBuchstabeLat(txt)
		}else{
			result = translitBuchstabeCyr(vorTxt,txt)
		}
		if (vorTxt!=""){
			cursor_pos_selection.select(); cursor_pos_selection.collapse();
		}
		with(document.selection.createRange()){
			text = result; collapse(); select()
		}	
	}
	return;
  }
}
function translateAlltoCyrillic(){
if (!IE){
	txt = TxtFeld.value;
	var txtnew = translitBuchstabeCyr("",txt.substr(0,1));
	var symb = "";
	for (kk=1;kk<txt.length;kk++){
		symb = translitBuchstabeCyr(txtnew.substr(txtnew.length-1,1),txt.substr(kk,1));
		txtnew = txtnew.substr(0,txtnew.length-1) + symb;
	}
	TxtFeld.value = txtnew;
	setFocus()
}else{
	var is_selection_flag = 1;
	var userselection = document.selection.createRange();
	var txt = userselection.text;
	if (userselection==null || userselection.text==null || userselection.parentElement==null || userselection.parentElement().type!="textarea"){
		is_selection_flag = 0;
		txt = TxtFeld.value;
	}
	var txtnew = translitBuchstabeCyr("",txt.substr(0,1));
	var symb = "";
	for (kk=1;kk<txt.length;kk++){
		symb = translitBuchstabeCyr(txtnew.substr(txtnew.length-1,1),txt.substr(kk,1));
		txtnew = txtnew.substr(0,txtnew.length-1) + symb;
	}
	if (is_selection_flag){
		userselection.text = txtnew; userselection.collapse(); userselection.select();
	}else{
		TxtFeld.value = txtnew;
		setFocus()
	}
}
return;
}

 

Скачать данную модификацию при использовании со SLAED CMS можно по адресу: http://www.slaed.net/index.php?name=Files&...ile&lid=295

Изменено пользователем Eduard
Ссылка на комментарий
Поделиться на других сайтах

  • 1 месяц спустя...

Обнаружил 2 бага в этой форме ответа:

1. Не работает транслит в Опере 9.1. (до решения проблемы это отключил);

2. Некорректно работают бб-коды в Мозилле и Мозилле Файрфоксе- они вставляются в конец текста.

Изменено пользователем revizor
Ссылка на комментарий
Поделиться на других сайтах

Корректная работа только с IE.

 

Проблемы браузеров Моцила, Опера с работой JavaScript.

Смотрим скрипты, ищим решения.

Ссылка на комментарий
Поделиться на других сайтах

Проблемы браузеров Моцила, Опера с работой JavaScript.
Это не проблемы браузеров, это проблема скрипта. Скрипт- сырой :D, ставить не рекомендую. Изменено пользователем revizor
Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...
  • 3 месяца спустя...
  • 4 месяца спустя...
  • 2 недели спустя...

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.