ОсновноеRadiotalkПользовательское
MPCHAT - CMS хостинг чатов для профессионалов
90   •   Посмотреть все темы

Правописание

 

68
JIocT @JIocT
Есть ли возможность прикрутить к стандартной форме отправки сообщений (в нижнем фрейме) корректировку/подчеркивание грамматических ошибок? Как в форме комментов в галерее или гостевой или как тут (чтобы подчеркивало волнистой красной линией, если что-то неправильно). Если такое возможно реализовать, подскажите пожалуйста как..)

2970
удалён @Foggy
Подчёркивает оно не от функций чата, а от функций браузера. А он проверяет грамматику только в теге textarea.
Понятия не имею, можно ли заменить, инпут на текстареа, но считаю это не слишком практичным. Разница в том, что если текстареа сделать маленьким полем, то появится прокрутка, да и будет неудобно. А если сделать текстареа большим полем, то он будет занимать пол чата, что тоже не круто. А ещё не факт, что скрипты будут работать нормально при такой замене. На форуме уже пытались менять инпут на текстареа. Но я не помню, достигли ли они чего-то. В общем, я бы ответил, что это нельзя реализовать.

1007
BETEPAH @BETEPAH
Foggy пишет:

Понятия не имею, можно ли заменить, инпут на текстареа

Можно. У меня есть две формы отправки: обычная однострочная и многострочная, включающаяся пользователем при необходимости.
Да и здесь на форуме был похожий скрипт от ridz.
Но в инпуте проверки нет, поэтому если не собираетесь менять инпут на текстареа, проверки правописания не будет.

2970
удалён @Foggy
BETEPAH, поделись, пожалуйста, решениями. своим и ридза покажи, плиз, а-то я его решения не видел, а тем с подобной тематикой немало.
особенно нравится часть твоего сообщения "включающаяся пользователем при необходимости".

1410
Антон @tonik
BETEPAH Тоже было бы интересно!

1007
BETEPAH @BETEPAH
Foggy пишет:

BETEPAH, поделись, пожалуйста, решениями. своим и ридза покажи, плиз, а-то я его решения не видел, а тем с подобной тематикой немало.
особенно нравится часть твоего сообщения "включающаяся пользователем при необходимости".

Не вопрос. Вот мой код, стоит у меня во фрейме участников внизу. Выглядит вот так:

Учтите только, что у меня фреймовая система, в некоторых местах на это надо обратить внимание. В нефреймовых чатах скорее всего надо убрать parent.chat. и на что-то там заменить parent.write.
<center>
<a href=# onclick="obj=document.getElementById('hide1'); if(obj.style.display=='none') {obj.style.display='block'; document.getElementById('quote').focus();} else obj.style.display='none'; return false;">Многострочная форма</a>
<div id=hide1 style="display:none;">
<form name="form" onkeypress="count()" onkeyup="count()" onclick="count()">
<p>Текст<span id=whom>&nbsp;</span>(<span id=howmany>0</span>/1000)<br>
<textarea id="quote" name="quote" rows="10" cols="30" onkeypress="if(event.keyCode==10||(event.ctrlKey && event.keyCode==13)) {if (document.form.stringi.value.length<1001) sendi(); else alert('Не более 1000!');} else count()"></textarea></p>
<p>ctrl+Enter = отправить</p>
<p><input class="pros" id="l2" name="othe" type="checkbox" title="Оформить как цитату"><input name="avtor" type="text" style="width: 250px" value="Автор цитаты или ссылка" readOnly></p>
<p><input type="button" value="Отправить" onclick="if (document.form.stringi.value.length<1001) sendi(); else alert('Не более 1000!');" /><input type="reset" value="Очистить" /></p>
<input name="stringi" type="hidden" value="">
<script>
/*<![CDATA[*/
function count(){
var form = document.form;
if (form.othe.checked) form.avtor.readOnly = false; else {form.avtor.readOnly = true; form.avtor.value="Автор цитаты или ссылка"};
var html = '';
html += parent.chat.document.fmsg.tonick.value;
if (form.avtor.value=='Автор цитаты или ссылка') autor=''; else autor=form.avtor.value;
if (form.othe.checked) html+='[quote= '+autor+' ]'; else html+='{br}';
html+=form.quote.value;
if (form.othe.checked) html+='[/quote]
';
html=html.replace(/\r\n|\r|\n/g,"{br}");
var c=html.length;
document.getElementById("howmany").innerHTML=c;
form.stringi.value=html;
if (parent.chat.document.fmsg.tonick.value=='') document.getElementById("whom").innerHTML='&nbsp;'; else document.getElementById("whom").innerHTML='&nbsp;для&nbsp;'+parent.chat.document.fmsg.tonick.value+' ';
return false
}

function sendi(){
var form = document.form;
var str=form.stringi.value;
parent.write.location.href = 'index.php?inc=write&'+ parent.yourkey+'&text= '+form.stringi.value;
form.avtor.value='';
form.quote.value='';
document.getElementById("howmany").innerHTML='0';
}
/*]]>*/
</script>
</form>
</div>
</center>

Форум почему-то разбивает строку:
if (form.othe.checked) html+='[/qu ote]
';

надо в одну строку писать
if (form.othe.checked) html+='[/qu ote]'; (уберите пробел в теге).

В фильтрацию чата добавить (это перенос строки в логе сообщений)
{br}^ <br> ^
В скрипты, где-нибудь перед /* Добавление граф ников, градиента и формат времени */ (это оформление цитаты - настраивайте стили по своему усмотрению)
text=text.replace(/\[quote=(.*?)\](.*?)\[\/quote\]/g,'<div style="-moz-background-clip:border;-moz-background-inline-policy:continuous;-moz-background-origin:padding;background:#cecece none repeat scroll 0 0;border-color:#BEBEBE #BEBEBE -moz-use-text-color;border-style:dotted dotted none;border-width:1px 1px 0;color:#222222;font-size:10px;font-weight:bold;margin:8px auto 0;padding:3px;"><b>Цитата: $1</b><div style="-x-system-font:none;background-color:dbdbdb;border:1px dotted #BEBEBE;color:#000000;font-family:Verdana;font-size:10pt;font-size-adjust:none;font-stretch:normal;font-style:normal;font-variant:normal;font-weight:normal;line-height:normal;padding:5px;text-align:justify;">$2</div></div>');
Цитата с приведенным кодом выглядит так:

Немного пояснений.
Первая строка - это ссылка-кнопка, которая показывает/скрывает многострочную форму.
Под текстареай есть чек-бокс, который в выбранном положении обрамляет текст в цитатный тег quote. Рядом с ним поле для указания автора цитаты
Скрипт подсчитывает количество символов, приплюсовывая символы в нике получателя сообщения и символы в теге, поэтому не удивляйтесь, если изначально это число не будет нулевым. У меня в чате стоит лимит 1000 символов на сообщение, под него и подстроен скрипт.
Код стоит уже несколько месяцев, поэтому претензии о неработоспособности не принимаются 😉 и да, я знаю, что его можно оптимизировать, но у меня грядет редизайн и эту форму я планирую разместить в нижнем фрейме во всплывающем div'е, поэтому лень два раза проделывать одну и ту же работу.
Будут вопросы - спрашивайте.

PS скрипт ridz'a не нашел, возможно это было в личной переписке. На форуме есть только часть, касающаяся выделения цитаты.

Отредактировано BETEPAH - 24.11.2011
297
Александр @SmoL
BETEPAH, спасибо, интересный скрипт, воспользуюсь.
Вы упустили закрывашки только 😉

1007
BETEPAH @BETEPAH
SmoL пишет:

BETEPAH, спасибо, интересный скрипт, воспользуюсь.
Вы упустили закрывашки только 😉

недоскопировал 😉
Спасибо, поправил.

68
JIocT @JIocT
ВЕТЕРАН, просто превосходный скрипт, но почему-то не желает у меня работать. Сделал все в точности так, как Вы и сказали.

Не считает символы, не отправляет сообщения, соответственно, ничего и не цитирует..(( Не могли бы вы посмотреть, что не так? Чат: bran.mpchat.ru

1007
BETEPAH @BETEPAH
JIocT пишет:

ВЕТЕРАН, просто превосходный скрипт, но почему-то не желает у меня работать. Сделал все в точности так, как Вы и сказали.

Не считает символы, не отправляет сообщения, соответственно, ничего и не цитирует..(( Не могли бы вы посмотреть, что не так? Чат: bran.mpchat.ru

Возможно дело в необъявленном доктайпе. Не хочет видеть у Вас функцию count. Дайте, пожалуйста, ключ от правого фрейма в ЛС.

68
JIocT @JIocT
ВЕТЕРАН, ключ в ЛС отправил) Спасибо.

1007
BETEPAH @BETEPAH
JIocT,
дело было в этом коде
if (form.othe.checked) html+='[/qu ote]
';
почему-то форум разбивает на две строчки эту строку. Надо в одну писать
if (form.othe.checked) html+='[/qu ote]'; (уберите пробел в теге).

P.S. и у вас внизу страницы лежит бесхозный </div>. Его можно убрать. Хотя мешать он не должен

Отредактировано BETEPAH - 24.11.2011
68
JIocT @JIocT
ВЕТЕРАН,

благодарю)

297
Александр @SmoL
Для безфреймового чата (4-5 версия), скрипт будет работать так:
<center>
<a href=# onclick="obj=document.getElementById('hide1'); if(obj.style.display=='none') {obj.style.display='block'; document.getElementById('quote').focus();} else obj.style.display='none'; return false;">Многострочная форма</a>
<div id=hide1 style="display:none;">
<form name="form" onkeypress="count()" onkeyup="count()" onclick="count()">
<p>Текст<span id=whom>&nbsp;</span>(<span id=howmany>0</span>/1000)<br>
<textarea id="quote" name="quote" rows="10" cols="30" onkeypress="if(event.keyCode==10||(event.ctrlKey && event.keyCode==13)) {if (document.form.stringi.value.length<1001) sendi(); else alert('Не более 1000!');} else count()"></textarea></p>
<p>ctrl+Enter = отправить</p>
<p><input class="pros" id="l2" name="othe" type="checkbox" title="Оформить как цитату"><input name="avtor" type="text" style="width: 250px" value="Автор цитаты или ссылка" readOnly></p>
<p><input type="button" value="Отправить" onclick="if (document.form.stringi.value.length<1001) sendi(); else alert('Не более 1000!');" /><input type="reset" value="Очистить" /></p>
<input name="stringi" type="hidden" value="">
<script>
/*<![CDATA[*/
function count(){
var form = document.form;
if (form.othe.checked) form.avtor.readOnly = false; else {form.avtor.readOnly = true; form.avtor.value="Автор цитаты или ссылка"};
var html = '';
html += document.fmsg.tonick.value;
if (form.avtor.value=='Автор цитаты или ссылка') autor=''; else autor=form.avtor.value;
if (form.othe.checked) html+='[quote= '+autor+' ]'; else html+='{br}';
html+=form.quote.value;
if (form.othe.checked) html+='[/quote]
';
html=html.replace(/\r\n|\r|\n/g,"{br}");
var c=html.length;
document.getElementById("howmany").innerHTML=c;
form.stringi.value=html;
if (document.fmsg.tonick.value=='') document.getElementById("whom").innerHTML='&nbsp;'; else document.getElementById("whom").innerHTML='&nbsp;для&nbsp;'+document.fmsg.tonick.value+' ';
return false
}

function sendi(){
var form = document.form;
var str=form.stringi.value;
parent.hidden.location.href = 'index.php?inc=write&'+ parent.yourkey+'&text= '+form.stringi.value;
form.avtor.value='';
form.quote.value='';
document.getElementById("howmany").innerHTML='0';
}
/*]]>*/
</script>
</form>
</div>
</center>

Тут мы делали так:
Удаляем везде parent.chat, и в строке
parent.write.location.href = 'index.php?inc=write&'+ parent.yourkey+'&text= '+form.stringi.value;
меняем write. на hidden.
Огромное спасибо ВЕТЕРАНУ (=

p/s так же не забываем перенести в одну строку, и убрать пробел.
if (form.othe.checked) html+='[/qu ote]
';
Как выше писал ВЕТЕРАН.

Отредактировано SmoL - 25.11.2011
151
Ton_Dao @Ton_Dao
Форма появилась, а не работает. Использовал код предыдущего сообщения. В чем может быть проблема?
Чат - **********

4619
Web3r @Web3r
К слову, в одиночном input'е тоже можно проверять орфографию.

<input type="text" style="padding: 10px;" spellcheck="true">

596
Сергей @Князь_Пипецкий
Что-то не получилось 🙁
1. Сама форма появляется при нажатии и скрывается при повторном.
2. Оформление цитаты и вставка автора работает
3. Количество знаков считается
4. Кнопка отправки и кнопка очистки работают
Но, поле для ввода текста не активно, хотя туда можно поставить курсор, текст все равно набирается в обычной строке сообщений.
При нажатии на кнопку "Отправить" в многострочной форме в чат уходит пустое сообщение, оформленное как цитата.

Что-то сделал не так, это понятно. Хотелось бы понять что именно?

Отредактировано Князь_Пипецкий - 08.02.2014
2615
Сергей @Pegass
блин, народ, пора бы уже привыкнуть что старые решения не работают, а поддерживать их некому)))))

151
Ton_Dao @Ton_Dao
Тогда может кто новое подскажет? Очень актуальная вещь для меня...

151
Ton_Dao @Ton_Dao
Никто не может подсказать, так понимаю? Ладно, будем-с искать ответ в других местах.... )