Помогите с auto_bb для разных textarea

995
.
как вариант, не идеален, но лучше я пока не придумал
function pastTags(text1, text2){

    var elrms = document.getElementsByTagName('textarea');
    if(elrms.length > 1){
        var curr = 0;
        for(i=0; i<elrms.length; i++){
            if(document.getElementsByTagName('textarea')[i].selectionEnd > 0){
                curr = i;
            }
        }
    }else{
        curr = 0;
    }

    var Textarea = document.getElementsByTagName('textarea')[curr];
    var rangeStart = Textarea.selectionStart;
    var rangeEnd = Textarea.selectionEnd;
    var formText = Textarea.value;
    var selectionLenght = rangeEnd - rangeStart;
    if(text2!=' '){
        var newText = formText.substr(0, rangeStart)+text1+formText.substr(rangeStart, selectionLenght)+text2+formText.substr(rangeStart + selectionLenght);
    }else{
        var newText = formText.substr(0, rangeEnd)+text1+text2+formText.substr(rangeEnd + selectionLenght);
    }
    Textarea.value = newText;
    var  moveRange = 0;
       moveRange = rangeEnd+text1.length+text2.length;

    Textarea.setSelectionRange(moveRange, moveRange);
}

работает точно лучше чем местный ужас
.
ramzes
сорри, накосячил мальца с обрезкой
исправленный вариант, годится для тегов и смайлов
function pastTags(text1, text2){
    var elrms = document.getElementsByTagName('textarea');
    if(elrms.length > 1){
        var curr = 0;
        for(i=0; i<elrms.length; i++){
            if(document.getElementsByTagName('textarea')[i].selectionEnd > 0){
                curr = i;
            }
        }
    }else{
        curr = 0;
    }

    var Textarea = document.getElementsByTagName('textarea')[curr];
    var rangeStart = Textarea.selectionStart;
    var rangeEnd = Textarea.selectionEnd;
    var formText = Textarea.value;
    var selectionLenght = rangeEnd - rangeStart;
    if(text2!=' ' && text2!=''){
        var newText = formText.substr(0, rangeStart)+text1+formText.substr(rangeStart, selectionLenght)+text2+formText.substr(rangeStart + selectionLenght);
    }else{
        var newText = formText.substr(0, rangeEnd)+text1+text2+formText.substr(rangeEnd);
    }
    Textarea.value = newText;
    if(text2.length > 1 && selectionLenght == 0){
        var moveRange = rangeStart+text1.length+selectionLenght;
    }else{
        var moveRange = rangeEnd+text1.length+text2.length;
    }
    Textarea.setSelectionRange(moveRange, moveRange);
}
.
# venom (11.01.2014 / 00:46)
Это более для Джона подходит , да и адаптация не сложная
http://www.sceditor.com/
После его установки. Все работает отлично. Тоесть все как нужно.

Но есть одно НО!!!

После двух раз обновлений страницы на форуме к примеру где стоит этот редактор прикрепленный к форуму.

Срабатывает постоянно защита на то Что превышено колличество запросов к сайту!

Понять не могу почему она срабатывает. Ведь скрипт не должен давать сильной нагрузки на сайт?!
.
Люди берегите воду - пейте пиво...
blackvj, Честно не замечал такого , писал еще на Version 1.4.2 , щас не знаю что и сказать...
.
venom, Просто срабатывает защита от нагрузки почему-то...

Использую сейчас WysiBB.
.
ramzes, поставил твой код... как было так и осталось. Нечего не изменилось
.
WysiBB - тоже херня... кодеры забросили его и куча мелких багов это ппц.
.
blackvj, как ты ставил и как используешь? он работает, как я написал
.
ramzes, Функция вот

function test($form, $field){ 

<script language="JavaScript" type="text/javascript">

function tag(text1, text2){
var elrms = document.getElementsByTagName(\'textarea\');
if(elrms.length > 1){
var curr = 0;
for(i=0; i<elrms.length; i++){
if(document.getElementsByTagName(\'textarea\').selectionEnd > 0){
curr = i;
}
}
}else{
curr = 0;
}

var Textarea = document.getElementsByTagName(\'textarea\')[curr];
var rangeStart = Textarea.selectionStart;
var rangeEnd = Textarea.selectionEnd;
var formText = Textarea.value;
var selectionLenght = rangeEnd - rangeStart;
if(text2!=\' \' && text2!=\'\'){
var newText = formText.substr(0, rangeStart)+text1+formText.substr(rangeStart, selectionLenght)+text2+formText.substr(rangeStart + selectionLenght);
}else{
var newText = formText.substr(0, rangeEnd)+text1+text2+formText.substr(rangeEnd);
}
Textarea.value = newText;
if(text2.length > 1 && selectionLenght == 0){
var moveRange = rangeStart+text1.length+selectionLenght;
}else{
var moveRange = rangeEnd+text1.length+text2.length;
}
Textarea.setSelectionRange(moveRange, moveRange);
}

</script>
                               
<a href="javascript:tag(\'[url=http://]\', \'название[/url]\', \'\')"><img src="../images/bb/link.png" border="0" alt="url" title="Ссылка" /></a>                               
<a href="javascript:tag(\'\', \'\', \'\')"><img src="../images/bb/b.png" border="0" alt="b" title="Жирный"/></a>
<a href="javascript:tag(\'[i]\', \'\', \'\')"><img src="../images/bb/i.png" border="0" alt="i" title="Наклонный"/></a>
<a href="javascript:tag(\'\', \'\', \'\')"><img src="../images/bb/u.png" border="0" alt="u" title="Подчёркнутый"/></a>
<a href="javascript:tag(\'\', \'\', \'\')"><img src="../images/bb/s.png" border="0" alt="s" title="Перечёркнутый"/></a>
<a href="javascript:tag(\'
\', \'
\', \'\')"><img src="../images/bb/quote.png" border="0" alt="quote" title="Цитата"/></a> return $out . '<br />'; }


Вывод вот

echo '<form name = "add" action="?act=editpost&amp;id=' . $id . '&amp;start=' . $start . '" method="post">';

echo '<textarea cols="' . $set_forum['farea_w'] . '" rows="' . $set_forum['farea_h'] . '" name="msg">' . htmlentities($res['text'], ENT_QUOTES, 'UTF-8') . '</textarea><br/>';

echo test('add', 'msg');

echo '<textarea cols="' . $set_forum['farea_w'] . '" rows="' . $set_forum['farea_h'] . '" name="er">' . htmlentities($res['text'], ENT_QUOTES, 'UTF-8') . '</textarea><br/>';

echo test('add', 'er');
.
Пробывал также textarea менять на параметр field тоже не работает.
Всего: 63