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

Модифицированная форма быстрого ответа от 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 недели спустя...

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

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

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

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

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

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

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

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

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