Eduard Опубликовано 19 Июля 2006 Жалоба Поделиться Опубликовано 19 Июля 2006 (изменено) Предлагаем Вашему вниманию модифицированную форму быстрого ответа для форума 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_open5. Обновите прежний на новый код и сохраните изменения Новый код:<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 Изменено 19 Июля 2006 пользователем Eduard Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
4iX-Pblx Опубликовано 9 Сентября 2006 Жалоба Поделиться Опубликовано 9 Сентября 2006 молодец! Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
4iX-Pblx Опубликовано 9 Сентября 2006 Жалоба Поделиться Опубликовано 9 Сентября 2006 только в Опере 9.1 косяк с переводомtranslit переводит в ђ№рэёышђ , а транслит в vaRJEbYSHv Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
revizor Опубликовано 9 Сентября 2006 Жалоба Поделиться Опубликовано 9 Сентября 2006 (изменено) Обнаружил 2 бага в этой форме ответа:1. Не работает транслит в Опере 9.1. (до решения проблемы это отключил);2. Некорректно работают бб-коды в Мозилле и Мозилле Файрфоксе- они вставляются в конец текста. Изменено 9 Сентября 2006 пользователем revizor Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Haunter Опубликовано 9 Сентября 2006 Жалоба Поделиться Опубликовано 9 Сентября 2006 хм, мод вообще прикрасний, а ришения таких проблем, как-то ришаються? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Eduard Опубликовано 10 Сентября 2006 Автор Жалоба Поделиться Опубликовано 10 Сентября 2006 Корректная работа только с IE. Проблемы браузеров Моцила, Опера с работой JavaScript.Смотрим скрипты, ищим решения. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
4iX-Pblx Опубликовано 10 Сентября 2006 Жалоба Поделиться Опубликовано 10 Сентября 2006 а вот это уже не есть хорошо Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
revizor Опубликовано 10 Сентября 2006 Жалоба Поделиться Опубликовано 10 Сентября 2006 (изменено) Проблемы браузеров Моцила, Опера с работой JavaScript.Это не проблемы браузеров, это проблема скрипта. Скрипт- сырой , ставить не рекомендую. Изменено 10 Сентября 2006 пользователем revizor Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
igramnet Опубликовано 18 Сентября 2006 Жалоба Поделиться Опубликовано 18 Сентября 2006 с оперой скрипт дружит. У меня 9,1 - и всё норм. А вот firefox - минусЖдём более совершенного скрипта. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
ex-alex Опубликовано 18 Декабря 2006 Жалоба Поделиться Опубликовано 18 Декабря 2006 каким образом добавить опцию в форму расширенного ответа? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
revizor Опубликовано 1 Мая 2007 Жалоба Поделиться Опубликовано 1 Мая 2007 Никто проблемку не решил с Оперой и Мозиллой? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
wrm Опубликовано 16 Мая 2007 Жалоба Поделиться Опубликовано 16 Мая 2007 Может просто убрать возможность при детекте, что браузер не осёл? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.