Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти

 
Расширенный поиск

800784 Сообщений в 11254 Тем- от 88239 Пользователей - Последний пользователь: Zonova_Ekat

06 Декабрь 2019, 23:05:12
ADSL.Kirov.RuСообществаПрограммированиеВеб-программированиеТема: Разработка чата на JS+PHP
Страниц: 1 2 3 [4]  Все   Вниз
Печать
Автор Тема: Разработка чата на JS+PHP  (Прочитано 2075 раз)
Nikitian
Ветеран
*****
Пол: Мужской
Сообщений: 1342



WWW
« Ответ #45 : 12 Июнь 2007, 16:32:47 »

Мдя... Не привык к таким выкрутасам Улыбка
Записан

В отъезде бессрочно
Не вынесла душа поэта
Устал залатывать он брешь
Орать«Карету мне,карету!»
Не поваляешь–не поешь
Кто чище лучше всех на свете
Тот всех больнее и мертвей
А кто румяней и белей,
Тот всех живее и подлей
Nikitian
Ветеран
*****
Пол: Мужской
Сообщений: 1342



WWW
« Ответ #46 : 12 Июнь 2007, 22:55:32 »

Всё, разобрался. Тестирую дальше....
« Последнее редактирование: 13 Июнь 2007, 03:09:36 от Nikitian » Записан

В отъезде бессрочно
Не вынесла душа поэта
Устал залатывать он брешь
Орать«Карету мне,карету!»
Не поваляешь–не поешь
Кто чище лучше всех на свете
Тот всех больнее и мертвей
А кто румяней и белей,
Тот всех живее и подлей
Nikitian
Ветеран
*****
Пол: Мужской
Сообщений: 1342



WWW
« Ответ #47 : 14 Июнь 2007, 01:59:17 »

Подготовил версию. Комменты где-то там есть. Смайлы не стал выкладывать - это из пака этого или этого или этого или этого
Впринципе можно что угодно, главное подогнать под смысл обозначения и имена файлов.
Записан

В отъезде бессрочно
Не вынесла душа поэта
Устал залатывать он брешь
Орать«Карету мне,карету!»
Не поваляешь–не поешь
Кто чище лучше всех на свете
Тот всех больнее и мертвей
А кто румяней и белей,
Тот всех живее и подлей
Redisko
Новичок
*
Пол: Мужской
Сообщений: 46


« Ответ #48 : 14 Июнь 2007, 11:39:52 »

Отлично, молоток! вроде все работает.
У мну будет несколько пожеланий:
оформление кода. отступы лесенкой и все такое. а так приходится тратить время на причесывание. те кому надо сами пропустят код через сжималку/обфускатор. или класть нежатое отдельным каталогом как у ДК.
И насчет замены текстовых смайлов на картинки, вот два примера как это можно сделать, первый заточен под твой набор, второй универсальный, но чуть медленнее (в теории) за счет неоптимизированного регэкспа.
Первый:
Код:
<style>img{font:10px/120% Verdana}</style>
<script>
//
// Вариант "заточенный" под определенный набор смайлов
//

var testMessage = '*HI!**BYE*:)0:-)8):(;):P:D:-[:`(:-X:-/]:&gt*KISSED**KISSING**KISSING*???@}-&gt--*THUMBS UP**DRINK*%)*HELP**ROFL**YAHOO**KILL ALL**SUICIDE1**SUICIDE2**NOSPAM**LAW*';

var smileTable = {
    '0:-)'       : 'aa.gif',
    '8)'         : 'ai.gif',
    ':)'         : 'ab.gif',
    ':('         : 'ac.gif',
    ';)'         : 'ad.gif',
    ':P'         : 'ae.gif',
    ':D'         : 'ag.gif',
    ':-['        : 'ah.gif',
    ':`('        : 'ak.gif',
    ':-X'        : 'al.gif',
    ':|'         : 'an.gif',
    ':-/'        : 'ao.gif',
    ']:&gt;'     : 'aq.gif',
    '*KISSED*'   : 'as.gif',
    '*KISSING*'  : 'aw.gif',
    '???'        : 'huh.gif',
    '@}-&gt;--'  : 'ax.gif',
    '*THUMBS UP*': 'ay.gif',
    '*DRINK*'    : 'az.gif',
    '%)'         : 'be.gif',
    '*HELP*'     : 'bc.gif',
    '*HELP*'     : 'bc.gif',
    '*ROFL*'     : 'bj.gif',
    '*YAHOO*'    : 'bp.gif',
    '*BYE*'      : 'bs.gif',
    '*HI!*'      : 'bt.gif',
    '*KILL ALL*' : 'fb.gif',
    '*SUICIDE1*' : 'fo.gif',
    '*SUICIDE2*' : 'ga.gif',
    '*NOSPAM*'   : 'gj.gif',
    '*LAW*'      : 'hm.gif'
}

document.write(testMessage + "<hr>");

var smileRegExp = /(?:0\:\-\)|8\)|\]\:&gt;?|\;\)|\%\)|\@\}\-\&gt;?\-\-|\?{3})|(?:\:(?:[\)PD]|\-[\[X\/]|\`\(|\||\())|(?:\*(?:(?:KI(?:LL\sALL|(?:SS(?:ED|ING))))|THUMBS\sUP|DRINK|(?:H(?:ELP|I\!))|ROFL|YAHOO|BYE|(?:S(?:OS|UICIDE[12]))|NOSPAM|LAW)\*)/g;

var textHtml = testMessage.replace(
    smileRegExp,
    function(k){
        return '<img src="'
            + smileTable[k]
            + '" title="'
            + k
            + '" alt="'
            + k
            + '">\n'
    }
)

alert(textHtml)
document.write(textHtml)

</script>
Второй:
Код:
<style>img{font:10px/120% Verdana}</style>
<script>
//
// Универсальный вариант, регэксп генерится на основе
// таблицы смайлов, что позволяет легко добавлять новые сиайлы
//

// тестовый текст
var testMessage = '*HI!**BYE*:)0:-)8):(;):P:D:-[:`(:-X:-/]:&gt;*KISSED**KISSING**KISSING*???@}-&gt;--*THUMBS UP**DRINK*%)*HELP**ROFL**YAHOO**KILL ALL**SUICIDE1**SUICIDE2**NOSPAM**LAW*';

var smileTable = {
    '0:-)'       : 'aa.gif',
    '8)'         : 'ai.gif',
    ':)'         : 'ab.gif',
    ':('         : 'ac.gif',
    ';)'         : 'ad.gif',
    ':P'         : 'ae.gif',
    ':D'         : 'ag.gif',
    ':-['        : 'ah.gif',
    ':`('        : 'ak.gif',
    ':-X'        : 'al.gif',
    ':|'         : 'an.gif',
    ':-/'        : 'ao.gif',
    ']:&gt;'     : 'aq.gif',
    '*KISSED*'   : 'as.gif',
    '*KISSING*'  : 'aw.gif',
    '???'        : 'huh.gif',
    '@}-&gt;--'  : 'ax.gif',
    '*THUMBS UP*': 'ay.gif',
    '*DRINK*'    : 'az.gif',
    '%)'         : 'be.gif',
    '*HELP*'     : 'bc.gif',
    '*HELP*'     : 'bc.gif',
    '*ROFL*'     : 'bj.gif',
    '*YAHOO*'    : 'bp.gif',
    '*BYE*'      : 'bs.gif',
    '*HI!*'      : 'bt.gif',
    '*KILL ALL*' : 'fb.gif',
    '*SUICIDE1*' : 'fo.gif',
    '*SUICIDE2*' : 'ga.gif',
    '*NOSPAM*'   : 'gj.gif',
    '*LAW*'      : 'hm.gif'
}

// Создадим регэксп для ключей smileTable
var smileURegExp = '';

// сгенерить строку с текстом регэкспа
for(var k in smileTable){
    smileURegExp += '(?:' + k.replace(/[\*\!\?\:\[\]\(\)\.\|]/g,"\\$&") + ')|';
}

// создать регэксп
var smileRegExp = new RegExp(
    smileURegExp.substr(0, smileURegExp.length - 1), 'g'
)

// Замена текстовых смайлов на изображения
var textHtml = testMessage.replace(
    smileRegExp,
    function(s){
        return '<img src="' + smileTable[s]
            + '" title="' + s
            + '" alt="'   + s + '">\n'
    }
)

alert(textHtml)
document.write(textHtml)

</script>
Записан
Nikitian
Ветеран
*****
Пол: Мужской
Сообщений: 1342



WWW
« Ответ #49 : 14 Июнь 2007, 18:30:14 »

Не люблю я лесенку, особенно в окончательном варианте. Код написан для того, чтобы его не правили, а если надо править, то не проблема разобраться. Улыбка
За алгоритмы замены спасибо, т.к. я в регулярках не силён, то писал как умею. Как смогу - поправлю.

В чате был один косяк, который видимо удалось-таки обойти: если сообщение посылается менее чем за секунду до планового обновления, то оно постилось дважды (только на клиенте - на серваке, а следовательно и остальные клиенты, виделось только одно сообщение). я пытался это обойти конструкцией:
Код:
message=result["message"].replace(lastmess,'');
lastmess=message;
Вроде получилось Обеспокоенный


Новая версия с модулем аутентификации и стилями (я их в прошлой части забыл Обеспокоенный)
« Последнее редактирование: 15 Июнь 2007, 20:06:30 от Nikitian » Записан

В отъезде бессрочно
Не вынесла душа поэта
Устал залатывать он брешь
Орать«Карету мне,карету!»
Не поваляешь–не поешь
Кто чище лучше всех на свете
Тот всех больнее и мертвей
А кто румяней и белей,
Тот всех живее и подлей
Nikitian
Ветеран
*****
Пол: Мужской
Сообщений: 1342



WWW
« Ответ #50 : 17 Июнь 2007, 01:21:48 »

Ну вот, теперь пользователи изъявили желание, чтобы при приходе сообщения именно этому пользователю или вообще любого сообщения проигрывался звуковой сигнал. Опять-таки нужна помощь, т.к. я понятия не имею как можко на JS звук запустить. Лучше миди, но можно и вообще что угодно.
Блин! Скоро и видео-чат захотят Улыбка

Отлов обращения сделал так:
Код:
flag=false;
for(loop=0;loop<message.length-ChatUserName.length;loop++)
{if(ChatUserName==message.substring(loop,loop+ChatUserName.length)){flag=true;break;}}
if(flag){alert('Вам написали');flag=false;}
Может и есть более быстрый способ, но я его не знаю Грустный
« Последнее редактирование: 17 Июнь 2007, 02:13:06 от Nikitian » Записан

В отъезде бессрочно
Не вынесла душа поэта
Устал залатывать он брешь
Орать«Карету мне,карету!»
Не поваляешь–не поешь
Кто чище лучше всех на свете
Тот всех больнее и мертвей
А кто румяней и белей,
Тот всех живее и подлей
Redisko
Новичок
*
Пол: Мужской
Сообщений: 46


« Ответ #51 : 17 Июнь 2007, 20:44:01 »

В ие раньше работало такое:
<bgsound id="sound"/>
document.all.sound.src="name.wav"
но это плохой совет, правильно наверное создавать динамически HTMLElement object с нужными аттрибутами. Как-то никогда таким вопросом не задавался ))
« Последнее редактирование: 17 Июнь 2007, 21:29:40 от DenVdmj » Записан
Redisko
Новичок
*
Пол: Мужской
Сообщений: 46


« Ответ #52 : 17 Июнь 2007, 21:58:30 »

шоб другие браузеры не ругались оформить это так:
Код:
var bgs = document.createElement('bgsound');
bgs.setAttribute('src','oe.wav')
document.getElementsByTagName('body')[0].appendChild(bgs)
А вообще я понял так, что кроссбраузерно -- это только flash юзать ((
Записан
Nikitian
Ветеран
*****
Пол: Мужской
Сообщений: 1342



WWW
« Ответ #53 : 18 Июнь 2007, 01:04:11 »

Во как я выкрутился!
Код:
<div style='display:none;'><iframe id='soundframe' src='' border='0' height='0' width='0' ></iframe>
<bgsound id='sound_id' loop=1 src=''></div>
<script type="text/javascript">
function playSound(){
try{
soundurl='mes.wav';
<?php if(eregi("MSIE",$_SERVER["HTTP_USER_AGENT"]))echo"document.getElementById('sound_id').src=soundurl;";
if(!
eregi("MSIE",$_SERVER["HTTP_USER_AGENT"]))echo"document.getElementById('soundframe').src=soundurl;";?>

}catch (e){}
<?php if(!eregi("MSIE",$_SERVER["HTTP_USER_AGENT"]))echo"document.getElementById('soundframe').src='';";?>
}
</script>
Работает только в Опере и IE.
Для ИЕ bgsound, для оперы ссылка в irfame на звук. Жаль, что ФФ вообще звуки никак воспроизводить не хочет Грустный
И ещё, при воспроизведении звука в Опере остаётся прогрессбар загрузки, хотя ничего не грузится...
Записан

В отъезде бессрочно
Не вынесла душа поэта
Устал залатывать он брешь
Орать«Карету мне,карету!»
Не поваляешь–не поешь
Кто чище лучше всех на свете
Тот всех больнее и мертвей
А кто румяней и белей,
Тот всех живее и подлей
Страниц: 1 2 3 [4]  Все   Вверх
Печать
ADSL.Kirov.RuСообществаПрограммированиеВеб-программированиеТема: Разработка чата на JS+PHP
Перейти в: