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

🔒 Готовые решения для чатов (новая версия без фреймов)

 

458
ridz @ridz
В разработке ...

0
458
ridz @ridz
Просмотр веб-камеры с подтверждением по теме Вебкамеры в чат (только для платников с внесенным взносом)
Для статуса 98 синее
/* Включаем вебкамеры, прописываем статус 99 и загружаем модуль */
var webcam=1;
stn2[99] ="<img src=http://mpchat.com/blank/img/status/webcam.gif title='нажмите для просмотра вещания' style='border:0;'>";
icqtxt[99]='меняю статус на -> вещаю <img src=http://mpchat.com/blank/img/status/webcam.gif>';
stn2[98] ="<img src=http://mpchat.com/blank/img/status/webcam.gif title='нажмите для просмотра вещания' style='border:0;'>";
icqtxt[98]='меняю статус на -> вещаю для всех<img src=http://mpchat.com/blank/img/status/webcam.gif>';


document.write("<"+"script src=http://mpchat.com/blank/webcam.js></"+"script>");




В селектор статусов

<script>if(webcam) document.write("<option value=98>вещаю для всех");</script>

Админка -=Модерация=- Скрипты в чате - /* [Функции - формирования никлиста] */ /* Добавление ника в таблицу участников */
if(webcam) {
if(stat2==99||stat2==98) {

if( admin=='1'||stat2==98) icqst="<a href=# onclick='loadvideo(\"webcam"+nick+"\",\""+webcamhost+"\",\""+nick+"\",0);return false;'>"+icqst+"</a>";

else
icqst="<a href=# onclick='parent.hidden.location.href = \"index.php?inc=write&"+ parent.yourkey+"&text=/privat "+ nick +" webcam_access\";return false;'>"+icqst+"</a>";
if(nick==mynick && loaded) loadvideo("mywebcam",webcamhost,nick,1);
}
else if(nick==mynick && loaded) loadvideo("mywebcam","");
}

Добавлено зелёным просмотр вещания без подтверждения для админов -- ставить по желанию
Р.S. Нарушением тайны связи признаётся ознакомление с сообщением какого-либо лица кроме отправителя и получателя )))
Синим добавлено вещаю без подтверждения

Далее /* [Функция - вывода сообщений и команд] */


if(tonick==mynick) {
text = text.replace("webcam_ok","<a href=# onclick='parent.loadvideo(\"webcam"+nick+"\",\""+webcamhost+"\",\""+nick+"\",0);return false;'>Нажмите для просмотра</a>");
text = text.replace("webcam_access","Разрешить просмотр <a href=# onclick='parent.hidden.location.href = \"index.php?inc=write&"+ parent.yourkey+"&text=/privat "+ nick +" webcam_ok\";return false;'>да</a>/<a href=# onclick='parent.hidden.location.href = \"index.php?inc=write&"+ parent.yourkey+"&text=/privat "+ nick +" webcam_no\";return false;'>нет</a>?")}
else {text = text.replace("webcam_access","Разрешите просмотр?");
text = text.replace("webcam_ok","Просмотр разрешаю");
};
text = text.replace("webcam_no","Просмотр отклонён");



/* Добавление граф ников, градиента и формат времени */

Поставить/заменить отмеченное красным!

Отредактировано ridz - 29.05.2011
0
458
ridz @ridz
Автоматическое Создание/Скрытие приватного фрейма
Админка -=Шаблоны=- Чат внутри
Заменить
<script><!--
/* Показываем фрейм привата если включен */
if(privatok==1) {
var obj1=document.getElementById("leftdiv");
var obj2=document.getElementById("privatdiv");
obj1.style.bottom=(parseInt(obj1.style.bottom)+parseInt(obj2.style.height))+5+"px";
obj2.style.display="block";
}
// --></script>

на

<script><!--
/* Показываем фрейм привата если включен */
var leftdiv_bottom;
function do_privat() {
var obj1 = document.getElementById("leftdiv");
var obj2 = document.getElementById("privatdiv");
if (!leftdiv_bottom) leftdiv_bottom = parseInt(obj1.style.bottom);
if (privatok == 1) {
obj1.style.bottom = (parseInt(obj1.style.bottom) + parseInt(obj2.style.height)) + 5 + "px";
obj2.style.display = "block";
} else {
obj1.style.bottom = leftdiv_bottom + "px";
obj2.style.display = "none";
}
}
do_privat()
// --></script>

Кнопка в любое место
<input type="button" class="ok" name="" value="privat" onclick="parent.privatok^=1;parent.do_privat();parent.loadframes();"/>

или ссылка
<a href=# onclick="parent.privatok^=1;parent.do_privat();parent.loadframes();return false;" title='Создание/Скрытие приватного фрейма'>Приват</a>

0
458
ridz @ridz
Запрет на вещание для незарегистрированных или по статусу
заменить/дополнить скрипт в селекторе выбора статуса
запрет на статусы прописать через && и !=
<script>if(webcam&&mystatus != '0' &&mystatus != '1' ) document.write("<option value=99>вещаю");</script>

или запрет для незарегистрированных
<script>if(webcam&&regist== '1' ) document.write("<option value=99>вещаю");</script>

тоже самое и для фреймовой системы но дополняя parent -- parent.webcam parent.regist parent.mystatus

0
458
ridz @ridz
Использование одного field для установки и запоминания состояний множеста чекбоксов и радиобутонов (идея BETEPAH)
Для всех версий чата.
Добавить в таблицу шаблона настроек код
<tr id="stat"><td colspan="2">
<input name="field15" type="hidden" value="%field15%"/>
<input type="radio" name="name_r" value="0" />1 год<br />
<input type="radio" name="name_r" value="1" />2 года<br />
<input type="radio" name="name_r" value="2" />3 года<br />
<input type="checkbox" name="" />Русский<br />
<input type="checkbox" name="" />Украинский<br />
<input type="checkbox" name="" />Немецкий<br />
<input type="radio" name="name_r1" value="0" />да<br />
<input type="radio" name="name_r1" value="1" />нет<br />
<input type="radio" name="name_r1" value="2" />незнаю<br />

</td></tr>

<script type="text/javascript">
var stat = document.getElementById('stat'),
input = stat.getElementsByTagName('input'),
check = input[0].value;
for (var i = 0; i < check.length; i++) {
input[i + 1].checked = (check.charAt(i) == '1') ? !0 : !1;
}
stat.onclick = function () {
check = "";
for (var i = 1; i < input.length; i++) {
check += input[i].checked ? '1' : '0'
}
input[0].value = check
}
</script>

Тоже самое добавить в шаблон анкеты в таблицу в удобное для вас место, красное желательно убрать .
Номер фиелда можно менять если 15 уже занят.
В радиобутонах незабывайте указывать разные имена для соотвествующей группы, но одинаковые внутри группы.
Пример возможного оформления

0
458
ridz @ridz
Запрет вещания во всех комнатах кроме одной, двух и тд

Админка -=Модерация=- Скрипты в чате - /* [Функции - нижнего фрейма] */ добавить красное
/* Функция ручного изменения статуса */
function setstatus(status) {
if (myroom!=0&&(status==99||status==98)) status = 0;// добавлено запрет вещания кроме комнаты 0
laststatus=status;
parent.hidden.location.href='index.php?inc=write&'+parent.yourkey+'&text=/status '+status+'&r='+Math.random();
document.getElementsByName("setstatus")[0].value=status;
document.fmsg.text0.focus();
}

/* Функция ручного изменения комнаты */
function setmyroom(room) {
if(myroom==room) return false;
if(!parent.rooms[room][3]) {alert('У Вас нет доступа в эту комнату!'); return false;}
setstatus(0);// добавлено сброс статуса при переходе по комнатам
parent.hidden.location.href='index.php?inc=write&'+parent.yourkey+'&text=/room '+room+'&r='+Math.random();
gettime=new Date().getTime();
document.fmsg.text0.focus();
}

Пример строки для запрета вещания кроме комнаты 0 и комнаты 3
if (myroom!=0&&myroom!=3&&(status==99||status==98)) status = 0;// добавлено запрет вещания кроме комнаты 0 комнаты 3

Точно также можно добавить эти строки для фреймовой системы.

0
2970
удалён @Foggy
Продолжим тему...

Только сам невидимка видит свой ник в никлисте, больше никто.
Для всех версий чатов.
Будет не только виден ник, будут видны все действия, разумеется, только самому инвизеру.

находишь в скриптах /* скрыть ник невидимки */, там заменяешь строку
  1. if(invisible[nick]) return;

на следующую
  1. if (invisible[nick] && nick!=mynick) return;

Далее добавляем иконку себе, чтоб знать, что инвиз работает. ПОСЛЕ
  1. set_nick=set_nick+set_love+set_clan;

добавляем
  1. if(invisible[nick]) set_nick+="<img src='https://cdn0.iconfinder.com/data/icons/fatcow/16/qip_invisible.png' width='16' height='16' alt='invisible'>"

Вставить, разумеется, можно любую другую картинку. Можно сделать иной класс для всей строки (это уже иначе реализуется) или как угодно иначе выделить свой ник.

Админ видит всех невидимок не заходя в любую из админок
по сути это может быть кто угодно кроме админа.
  1. if (invisible[nick] && nick!=mynick && mynick!='Foggy') return;

заменяете Foggy на свой ник. Если надо, чтоб модеры видели инвизеров, заменяем mynick!='Foggy' на admin==0

0
2615
Сергей @Pegass
Звук на сообщения

-=Чат внутри=-
сразу после <body>
добавляем
  1. <audio id="Sound"></audio>

и в нужное место добавить чекбокс
Если по умолчанию звук включен то такой
  1. <input type=checkbox checked="checked" onclick="zvukmsgno=this.checked?1:0;" title="вкл/откл звуки входящих сообщений" >

если выключен такой
  1. <input type=checkbox onclick="zvukmsgno=this.checked?1:0;" title="вкл/откл звуки входящих сообщений" >

с запоминанием через куки - такой
  1. <script language="JavaScript" type="text/javascript">
  2. var checked='';
  3. if (getcookie("zvukmsg")) {checked=getcookie("zvukmsg")==1?"checked":"";}
  4. else checked='checked';
  5. document.write('<input type=checkbox name="zvukmsg" onclick="if(this.checked) {setcookie(this.name,1);zvukmsgno=1;} else {setcookie(this.name,0);zvukmsgno=0;}" title="вкл/откл звуки входящих сообщений" '+checked+'>')
  6. </script>

-=Скрипты в чате=-

/* [Функции - общие] */

  1. var zvukmsgno=1; //для кнопки вкл/откл по умол 1- вкл 0 -выкл
  2. if (getcookie("zvukmsg")) zvukmsgno=getcookie("zvukmsg");
  3. function sound_msg_play(cmd)
  4. {
  5. if(zvukmsgno!=1 || !loaded) return;
  6. var sound='';
  7. switch(cmd)
  8. {
  9. case 0: sound='link_to_mp3'; break;
  10. case 1: sound='link_to_mp3'; break;
  11. case 2: sound='link_to_mp3'; break;
  12. case 3: sound='link_to_mp3'; break;
  13. case 4: sound='link_to_mp3'; break;
  14. case 5: sound='link_to_mp3'; break;
  15. case 6: sound='link_to_mp3'; break;
  16. case 7: sound='link_to_mp3'; break;
  17. case 8: sound='link_to_mp3'; break;
  18. case 9: sound='link_to_mp3'; break;
  19. case 10: sound='link_to_mp3'; break;
  20. case 11: sound='link_to_mp3'; break;
  21. default: return;
  22. }
  23. var t=document.getElementById("Sound");
  24. if(t){
  25. t.src=sound+"?"+(new Date).getTime();
  26. t.play();
  27. }
  28. }


ищем
  1. /* Вывод простого сообщения */
  2. if(cmd==0) {
  3. symbol=symbols[0];if(nick==mynick) symbol=symbols[1];if(tonick==mynick || text.split(" "+mynick+":").length>1) symbol=symbols[2];

меняем на
  1. /* Вывод простого сообщения */
  2. if(cmd==0) {
  3. symbol=symbols[0];if(nick==mynick) symbol=symbols[1];if(tonick==mynick || text.split(" "+mynick+":").length>1) {symbol=symbols[2];if(nick!=nick_r)sound_msg_play(cmd);}


ищем
  1. if(nick==nick_r && loaded==1) {window.setTimeout("wr('"+towr.split("'").join("\\'")+"');",delay_r*1000);}

меняем на
  1. if(nick==nick_r && loaded==1) {window.setTimeout("wr('"+towr.split("'").join("\\'")+"');if('"+tonick+"'=='"+mynick+"')sound_msg_play(0);",delay_r*1000);}


ищем
  1. if(cmd==1 && privatok==1) {var obj=document.getElementById("privatdiv"); obj.innerHTML+="<div>"+towr+"</div>";obj.scrollTop=1000000;}

меняем на
  1. if(cmd==1 && privatok==1) {var obj=document.getElementById("privatdiv"); var newDiv = document.createElement('div'); newDiv.innerHTML = towr; obj.appendChild(newDiv); obj.scrollTop=1000000;}


ищем
  1. /* Вывод приватных сообщений */
  2. if(cmd==1 || cmd==2) {
  3. symbol=symbols[0];if(nick==mynick) symbol=symbols[3];if(tonick==mynick) symbol=symbols[4];

меняем на
  1. /* Вывод приватных сообщений */
  2. if(cmd==1 || cmd==2) {
  3. symbol=symbols[0];if(nick==mynick) symbol=symbols[3];if(tonick==mynick) {symbol=symbols[4];sound_msg_play(cmd);}


ищем
  1. /* Вывод выделенного сообщения '/me' или '/msg' */
  2. if(cmd==3) {

меняем на
  1. /* Вывод выделенного сообщения '/me' или '/msg' */
  2. if(cmd==3) {sound_msg_play(cmd);


ищем
  1. /* Вывод сообщения о вызове и сам вызов окном с музыкой '/call nick' */
  2. if(cmd==4) {
  3. if(tonick==mynick && loaded==1) alert("Вас вызывает в чат "+nick+"!");

меняем на
  1. /* Вывод сообщения о вызове и сам вызов окном с музыкой '/call nick' */
  2. if(cmd==4) {
  3. if(tonick==mynick && loaded==1){sound_msg_play(cmd); setTimeout("alert('Вас вызывает в чат "+nick+"!')",1000);}


ищем
  1. /* Вывод сообщения об удалении '/kill nick' и сам процесс */
  2. if(cmd==5) {

меняем на
  1. /* Вывод сообщения об удалении '/kill nick' и сам процесс */
  2. if(cmd==5) {sound_msg_play(cmd);


ищем
  1. /* Вывод входа юзера в чат и добавление в нклист через add() */
  2. if(cmd==6) {
  3. if(inchat=='0' && room==myroom) {

меняем на
  1. /* Вывод входа юзера в чат и добавление в нклист через add() */
  2. if(cmd==6) {
  3. if(inchat=='0' && room==myroom) {sound_msg_play(cmd);


ищем
  1. /* Вывод выхода юзера из чата и удаление из никлиста через del() */
  2. if(cmd==7) {
  3. if(inchat=='1' && room==myroom) {

меняем на
  1. /* Вывод выхода юзера из чата и удаление из никлиста через del() */
  2. if(cmd==7) {
  3. if(inchat=='1' && room==myroom) {sound_msg_play(cmd);


ищем
  1. /* Сообщение о смене статуса участника и его изменение */
  2. if(cmd==8) {
  3. status=text;
  4. for(var i=0;i<us.length;i++) if(us[i]!= null && us[i][0]==nick) {
  5. us[i][5]=status;
  6. if(icqtxt[status]) wr(set_time+"<font size=2 color="+colornick+"><b>"+set_nick+":</b></font> <i>"+icqtxt[status]+"</i><br>");

меняем на
  1. /* Сообщение о смене статуса участника и его изменение */
  2. if(cmd==8) {
  3. status=text;
  4. for(var i=0;i<us.length;i++) if(us[i]!= null && us[i][0]==nick) {
  5. us[i][5]=status;
  6. if(icqtxt[status]) {sound_msg_play(cmd);wr(set_time+"<font size=2 color="+colornick+"><b>"+set_nick+":</b></font> <i>"+icqtxt[status]+"</i><br>");}


ищем
  1. /* Функция обработки сообщений викторины */
  2. if(cmd==9) {
  3. if(text=="end") text1="это слово уже угаданно или время вышло";
  4. else if(text=="") text1="вы не угадали это слово";
  5. else {

меняем на
  1. /* Функция обработки сообщений викторины */
  2. if(cmd==9) {
  3. if(text=="end") text1="это слово уже угаданно или время вышло";
  4. else if(text=="") text1="вы не угадали это слово";
  5. else {sound_msg_play(cmd);


ищем
  1. /* Функция перехода в комнаты */
  2. if(cmd==10) {

меняем на
  1. /* Функция перехода в комнаты */
  2. if(cmd==10) {sound_msg_play(cmd);


ищем
  1. if(cmd==11) {

меняем на
  1. if(cmd==11) {sound_msg_play(cmd);

0
2615
Сергей @Pegass
Автоматическое уменьшение размера загружаемых изображений в чат через кнопку обзор (если размер превышает заданный вами)
не актуально для современных браузеров
1часть В скрипты чата
в /* [Функции - общие] */
добавить
/* Функция изменения загружаемой картинки */
var id_img = 0;
function imgminimum(obj){
var imgmax = 300; // максимальный размер картинки
var h = obj.height;
var w = obj.width;
if (h>imgmax||w>imgmax){if (h>w) {obj.height=imgmax}else {obj.width=imgmax}}; 
if (!obj.id){var scr=document.getElementById("leftdiv");
scr.scrollTop=scr.scrollHeight;
obj.id=id_img++;}
}

Красным добавлен скролинг(прокрутка лога сообщений вниз) после загрузки картинки

2 часть И после
/* [Функция - вывода сообщений и команд] */

var pu = new Array;
var pt = new Array;
function f(room,cmd,nick,tonick,text,time,colornick,color,var9,var10,var11,var12,var13,var14,userid) {
if(ign_ok(nick) && cmd!=6 && cmd!=7) return;
if(nick==nick_r && room!=room_r) return;

добавить строку

text=text.replace("<img src=tmp","<img onload=imgminimum(this) src=tmp");

Картинка будет в логе пропорциональна и размер по ширине и высоте не превысит указанный вами.

или добавить так

text=text.replace(/.br..img.src.(tmp.(.+\.(gif|jpg|jpeg|bmp|png|tif|tiff))).border.0..br./igm, "<img onload=imgminimum(this) src=$1 border=0>");

тогда картинка будет в одной строке с ником.



ЗЫ ответы на вопросы
1- max-hight, max-width не особо кросбраузерно)))
2 - использование up - надо подумать, это ж древний скрипт

0
2615
Сергей @Pegass
Универсальный тег [media] для загрузки картинок музыки и видео с различных сервисов (от ВЕТЕРАН оригинальный пост)
Внимание, данный скрипт может быть использован против вас
В Администрация - Скрипты в чате.
/* [НАСТРОЙКИ] */
  1. /* 1 - картинки не отображаются, 0 - отображаются */
  2. var img_no = 0;

/* [Функции - общие] */ - если не ставили предыдущее решение
  1. /* Функция изменения загружаемой картинки */
  2. var id_img = 0;
  3. function imgminimum(obj){
  4. var imgmax = 300; // максимальный размер картинки
  5. var h = obj.height;
  6. var w = obj.width;
  7. if (h>imgmax||w>imgmax){if (h>w) {obj.height=imgmax}else {obj.width=imgmax}};
  8. if (!obj.id){var scr=document.getElementById("leftdiv");
  9. scr.scrollTop=scr.scrollHeight;
  10. obj.id=id_img++;}}

/* [Функция - вывода сообщений и команд] */
после
var pu = new Array;
var pt = new Array;
function f(room,cmd,nick,tonick,text,time,colornick,color,var9,var10,var11,var12,var13,var14,userid) {
if(ign_ok(nick) && cmd!=6 && cmd!=7) return;
if(nick==nick_r && room!=room_r) return;

  1. // начало обработки тега media
  2. if (img_no == 0) {
  3. text = text.replace(/\[media\]((?:http|https):\/\/(.*?)\.(gif|jpg|jpeg|bmp|png|tif|tiff))\[\/media\]/mig, '<br><a href="$1" target="_blank" ><img onload=parent.imgminimum(this) src=$1 title="открыть в новом окне" alt="" border=0></a> ')
  4. } else {
  5. text = text.replace(/\[media\]((?:http|https):\/\/(.*?)\.(gif|jpg|jpeg|bmp|png|tif|tiff))\[\/media\]/mig, '<a href="$1" target=_blank><img src=http://mpchat.com/blank/img/ftp/img.gif border=0 alt=""> $2.$3</a>')
  6. };
  7. if (img_no == 1) {
  8. text = text.replace(/\[media\](http:\/\/(.*?))\[\/media\]/mig, '<a href="$1" target=_blank>$1</a>')
  9. };
  10. text = text.replace(/\[media\](http:\/\/zoom\.it\/(.*?))\[\/media\]/mig, '<script src="$1.js?width=auto&height=400px"></script><a href="$1" target="_blank" title="ссылка откроется в новом окне">link</a>');
  11. text = text.replace(/\[media\](http:\/\/www\.divshare\.com\/download\/(.*?))\[\/media\]/mig, '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="335" height="28" id="divplaylist">' + '<param name="movie" value="http://www.divshare.com/flash/playlist?myId=$2" />' + '<param name="allowScriptAccess" value="always" />' + '<embed src="http://www.divshare.com/flash/playlist?myId=$2" width="335" height="28" allowScriptAccess="always" name="divplaylist" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>' + '</object>');
  12. text = text.replace(/\[media\](http:\/\/prostopleer\.com\/tracks\/(.*?))\[\/media\]/mig, '<object width="411" height="28"><param name="movie" value="http://embed.prostopleer.com/track?id=$2"></param><embed src="http://embed.prostopleer.com/track?id=$2" type="application/x-shockwave-flash" width="411" height="28"></embed></object>');
  13. text = text.replace(/\[media\](http:\/\/pleer\.com\/tracks\/(.*?))\[\/media\]/mig, '<object width="411" height="28"><param name="wmode" value="transparent"><param name="movie" value="http://embed.prostopleer.com/track?id=$2"></param><embed src="http://embed.prostopleer.com/track?id=$2" wmode="transparent" type="application/x-shockwave-flash" width="411" height="28"></embed></object>');
  14. text = text.replace(/\[media\](http:\/\/muzebra\.com\/l\/(.*?)\/)\[\/media\]/mig, '<object width="395" height="42"><param name="movie" value="http://embed.muzebra.com/player?id=$2"></param><embed src="http://embed.muzebra.com/player?id=$2" type="application/x-shockwave-flash" width="395" height="42"></embed><param name="wmode" value="transparent"/><param name="scale" value="noscale" /></object>');
  15. text = text.replace(/\[media\]http:\/\/music\.yandex\.ru\/#!\/track\/(.*?)\/album\/(.*?)\[\/media\]/mig, '<object width="350" height="28"><param name="muz" value="http://music.yandex.ru/embed/$1/track.swf"/><param value="noscale" name="scale"/><param value="bg-color=%23D8D8D8&amp;text-color=%23555555&amp;hover-text-color=%23000000" name="flashvars"/><embed type="application/x-shockwave-flash" width="350" height="28" scale="noscale" flashvars="bg-color=%23D8D8D8&amp;text-color=%23555555&amp;hover-text-color=%23000000" src="http://music.yandex.ru/embed/$1/track.swf"/></object>');
  16. text = text.replace(/\[media\](http:\/\/.*mp3)\[\/media\]/mig, '<embed type="application/x-shockwave-flash" src="http://mpchat.com/blank/player.swf" allowfullscreen="false" flashvars="file=$1&autostart=false" width="250" height="20">');
  17. var vidregxp = []; //через запятую - название, регэксп, реплэйс, метод внедрения (1 - embed, 2 - iframe, 3 - embed через x-mplayer2)
  18. vidregxp[0] = ["videofile", "(http:\/\/(.*\\.)(rmi|wmv|midi|mid|mpg|wav|snd|wma|mpeg|avi|mpe|m1v|mpa|aifc|aiff|au|aif|swf))", "$1", 3];
  19. vidregxp[1] = ["flv", "(http:\/\/.*\\.flv)", '"http://mpchat.com/blank/player.swf" flashvars="file=$1&autostart=false"', 1];
  20. vidregxp[2] = ["rutube.ru", "(http:\/\/)(rutube\.ru\/)\\S+\\?v=(\\S+)", "$1video.$2$3", 1];
  21. vidregxp[3] = ["youtube.com", "(https?:\/\/www\.youtube\.com\/)\\S+(\\?v|&amp;v)=(\\S+)", "$1v/$3&hl=ru_RU&fs=1", 1];
  22. vidregxp[4] = ["youtu.be", "(https?:\/\/youtu\.be\/)(\\S+)", "http://www.youtube.com/embed/$2", 2];
  23. vidregxp[5] = ["lovi.tv", "(http:\/\/lovi\.tv\/video\/)\\S+?Code=(\\S+)", "$1sharer.php?Code=$2&Width=280&Height=224", 2];
  24. vidregxp[6] = ["lovi.tv2", "(http:\/\/loovi\.tv\/)video\/(\\S+)\/", "$1flash/player5.swf?config=/video/config.php?Code=$2", 1];
  25. vidregxp[7] = ["vimeo.com", "(http:\/\/vimeo\.com\/)(\\S+)", "$1moogaloop.swf?clip_id=$2&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1", 1];
  26. vidregxp[8] = ["metacafe.com", "(http:\/\/www\.metacafe\.com\/)watch(\\S+)\/?", "$1fplayer$2.swf", 1];
  27. vidregxp[9] = ["vids.myspace.com", "http:\/\/vids\.(myspace\.com\/)\\S+videoid=(\\S+)", "http://mediaservices.$1services/media/embed.aspx/m=$2,t=1,mt=video", 1];
  28. vidregxp[10] = ["video.google.com", "(http:\/\/video\.google\.com\/)\\S+docid=(\\S+)&\\S+", "$1googleplayer.swf?docid=$2&hl=ru&fs=true", 1];
  29. vidregxp[11] = ["dailymotion.com", "(http:\/\/www\.dailymotion\.com\/)video\/([^_+]+)\\S+", "$1swf/$2", 1];
  30. vidregxp[12] = ["5min.com", "http:\/\/www\.(5min\.com\/)\\S+-(\\d+)", "http://embed.$1$2/", 1];
  31. vidregxp[13] = ["video.mail.ru", "http:\/\/(video\.mail\.ru)\/(\\S+)\/(\\S+)\/(\\S+)\/(\\S+)\.html", "http://img.mail.ru/r/video2/player_v2.swf?par=http://content.$1/$2/$3/$4/$$$5$$0$39&imaginehost=$1&perlhost=$1&alias=$2&username=$3&albumid=$4&id=$5&catalogurl=http://video.mail.ru/themes/clips", 1];
  32. vidregxp[14] = ["gametrailers.com", "(http:\/\/www\.gametrailers\.com)\/\\S+\/(\\d+)", "$1/remote_wrap.php?umid=$2", 1];
  33. vidregxp[15] = ["video.yahoo.com", "(http:\/\/video\.yahoo\.com)\/watch\/(\\d+)\/(\\d+)", '"http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.2.46" flashVars="id=$3&vid=$2&lang=en-us&intl=us"', 1];
  34. vidregxp[16] = ["video.libero.it", "(http:\/\/video\.libero\.it)\/app\/\\S+id=(\\S+)", '"$1/static/swf/eltvplayer.swf?id=$2.flv&ap=0"', 1];
  35. vidregxp[17] = ["play.ukr.net", "(http:\/\/play\.ukr\.net)\/videos\/show\/(\\S+)\/", '"$1/player.swf?key=$2&StopAsking=0&self=0"', 1];
  36. vidregxp[18] = ["video.online.ua", "(http:\/\/video\.online\.ua)\/(\\S+)\/", '"http://i.online.ua/mplayer/player_logo.swf?file=$1/playlist/$2.xml&autostart=false&javascriptid=media_player&enablejs=true"', 1];
  37. vidregxp[19] = ["vision.rambler.ru", "(http:\/\/vision\.rambler\.ru)\/users\/(\\S+)\/", '"$1/i/e.swf?id=$2&logo=1&where=home"', 1];
  38. vidregxp[20] = ["video.bigmir.net", "(http:\/\/video\.bigmir\.net)\/show\/(\\S+)\/", '"$1/extplayer/$2/"', 1];
  39. vidregxp[21] = ["sibnet.ru", "http:\/\/(video\.sibnet\.ru)\/\\S*?video(\\d+)\/", '"http://$1/mediaplayer.swf" flashvars="file=http%3A%2F%2F$1%2Fupload%2Fvideo%2F$2.flv&amp;image=http%3A%2F%2F$1%2Fupload%2Fcover%2Fvideo_$2_0.jpg"', 1];
  40. vidregxp[22] = ["irc.lv", "(http:\/\/irc\.lv)\/video\\?(id=.*)", "$1/player.swf?$2", 1];
  41. vidregxp[23] = ["veoh.com", "(http:\/\/www\.veoh\.com\/)\\S+watch\/?%?3?D?(v\\S+)", "$1static/swf/webplayer/WebPlayer.swf?version=AFrontend.5.4.9.1006&permalinkId=$2&player=videodetailsembedded&videoAutoPlay=0&id=anonymous", 1];
  42. vidregxp[24] = ["gamestar.de", "(http:\/\/www\.gamestar\.de\/)\\S+=(\\d+)", "$1emb/player.swf?config=$1emb/getVideoData.cfm?vid=$2", 1];
  43. vidregxp[25] = ["spike.com", "(http:\/\/www\.spike\.com\/)video\/\\S+\/(\\S+)", '"$1efp" flashvars="flvbaseclip=$2"', 1];
  44. vidregxp[26] = ["sostav.ru", "(http:\/\/(?:www\.)?videosostav\.ru\/)video\/(\\S+)\/", "$1swf/hplayer.swf?fname=$2", 1];
  45. vidregxp[27] = ["vkontakte.ru", "(https?:\/\/vkontakte\.ru\/video\\S+hash=\\w+)", "$1", 2];
  46. vidregxp[28] = ["vk.com", "(https?:\/\/vk\.com\/video\\S+hash=\\w+)", "$1", 2];
  47. vidregxp[29] = ["smotri.com", "http:\/\/smotri\.com\/video\/\\S+id=(\\S+)", "http://pics.smotri.com/player.swf?file=$1&bufferTime=3&autoStart=false&str_lang=rus&xmlsource=http%3A%2F%2Fpics.smotri.com%2Fcskins%2Fblue%2Fskin_color.xml&xmldatasource=http%3A%2F%2Fpics.smotri.com%2Fskin_ng.xml", 1];
  48. t = text.split('[media]');
  49. if (t[1]) {
  50. var viwidth = 280, //ширина видеоокна
  51. viheight = 224, //высота видеоокна
  52. viwindow = document.getElementById('mediains');
  53. t2 = t[1].split('[/media]');
  54. if (t2[0]) {
  55. var src = t2[0];
  56. var expr;
  57. for (var i = 0; i < vidregxp.length; i++) {
  58. expr = new RegExp(vidregxp[i][1]);
  59. if (src.match(expr)) {
  60. src = src.replace(expr, vidregxp[i][2]);
  61. viwindow.style.display = 'block';
  62. if (vidregxp[i][3] == 1) { //грузим в embed через x-shockwave-flash
  63. text = text.replace('[media]' + t2[0] + '[/media]', '<a href="' + t2[0] + '" target="_blank" title="ссылка откроется в новом окне">Видеоролик загружен!</a>');
  64. viwindow.innerHTML = '<embed width=' + viwidth + ' height=' + viheight + ' src=' + src + ' type="application/x-shockwave-flash" allowscriptaccess=always allowfullscreen=true></embed>';
  65. }
  66. if (vidregxp[i][3] == 2) { //грузим в iframe
  67. text = text.replace('[media]' + t2[0] + '[/media]', '<a href="' + t2[0] + '" target="_blank" title="ссылка откроется в новом окне">Видеоролик загружен!</a>');
  68. viwindow.innerHTML = '<iframe width=' + viwidth + ' height=' + viheight + ' src=' + src + ' frameborder=0 allowfullscreen></iframe>';
  69. }
  70. if (vidregxp[i][3] == 3) { //грузим в embed через x-mplayer2
  71. text = text.replace('[media]' + t2[0] + '[/media]', '<a href="' + t2[0] + '" target="_blank" title="ссылка откроется в новом окне">Видеоролик загружен!</a>');
  72. viwindow.innerHTML = '<embed width=' + viwidth + ' height=' + viheight + ' src=' + src + ' type="application/x-mplayer2" allowscriptaccess=always allowfullscreen=true></embed>';
  73. }
  74. }
  75. }
  76. text = text.replace('[media]' + t2[0] + '[/media]', '<a href="' + t2[0] + '" target="_blank" title="ссылка откроется в новом окне">' + t2[0] + '</a>');
  77. } else {
  78. text = 'Просмотр выключен';
  79. viwindow.innerHTML = '';
  80. viwindow.style.display = 'none';
  81. }
  82. }
  83. // конец обработки тега media
  84. t = text.split('&lt;iframe src=&quot;');
  85. if (t[1]) {
  86. t2 = t[1].split('&quot; width=&quot;607&quot; height=&quot;360&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;');
  87. if (t2[0].substr(0, 19) == 'http://vk.com/video' || t2[0].substr(0, 20) == 'https://vk.com/video') {
  88. text = text.replace('&lt;iframe src=&quot;' + t2[0] + '&quot; width=&quot;607&quot; height=&quot;360&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;', '<a href="' + t2[0] + '" target="_blank" title="ссылка откроется в новом окне">Видеоролик загружен!</a> ');
  89. document.getElementById('mediains').innerHTML = '<iframe src="' + t2[0] + '" width="280" height="224" frameborder="0"></iframe>';
  90. }
  91. }

Окно видео-вывода ставится обычно под ник-листом <div id=users></div>сюда
<div id="mediains"></div>

Кнопку тега удобнее всего ставить рядом со строкой сообщения (спасибо, ridz):
<script>
function htags(t1,t2){
var mess=document.fmsg.text0.value;
if(mess.search("http")!=-1){mess = mess.replace(/(http\S+)/mig, " "+t1+"$1"+t2+" ")} else {mess+=" "+t1+t2+" "};
document.fmsg.text0.value=mess;
document.fmsg.text0.focus();
}
</script>

Оформление - зависит от вашей фантазии, основное - это код онклик. У меня так
<div class="abcabc_in" style="cursor:pointer" onclick="htags('[media]','[/media]')" title="Показать в чате картинку, видео или музыку"></div>

0
2615
Сергей @Pegass
как сделать подсчет сообщений написанных в чате с выводом картинкой на титульнике
  1. <script>
  2. var x=i_msg;
  3. var i = "";
  4. do
  5. {
  6. x=x/10;
  7. i="<img src='http://radiofull.ru/Style_god/img/numb/"+(x*10-Math.floor(x)*10)+".png'>"+i;
  8. x=Math.floor(x);
  9. }
  10. while (x > 0);
  11. document.write(i);
  12. </script>

В папке 'http://radiofull.ru/Style_god/img/numb лежат картинки 1.png 2.png .... 0.png

0
2615
Сергей @Pegass
спойлер для форума

в head
  1. <script>
  2. function spoiler(o)
  3. {
  4. var obj=o.childNodes[1].style; var obj2=o.childNodes[0].childNodes[0];
  5. if(obj.display=='block')
  6. {
  7. obj.display='none';
  8. obj2.innerHTML='<img src=http://radiofull.ru/Style_god/img/forum/plus.png width=10 height=10>';
  9. }
  10. else
  11. {
  12. obj.display='block';
  13. obj2.innerHTML='<img src=http://radiofull.ru/Style_god/img/forum/minus.png width=10 height=10>';
  14. }
  15. }
  16. </script>

в соответствующие места кода

  1. etags[i]=new Array(/\[spoiler=([^\] ]{2,30})\](.*?)\[\/spoiler\]/g,'<blockquote style="margin-bottom:0px;padding:5px;"><div class="incqbox" style="cursor:pointer;" onclick="spoiler(this.parentNode); return false;"><span><img src="http://radiofull.ru/Style_god/img/forum/plus.png" width="10" height="10"></span><b> $1</b></div><div style="margin-top: 10px; display: none; ">$2</div></blockquote>',1);i++;
  2. tags+="<input type='button' class='button2' accesskey='c' value='[+]' style='width: 40px' onclick=ftags('[spoiler]','[/spoiler]') title='Код: [spoiler=заголовок]текст под спойлер[/spoiler]'> ";

0
2615
Сергей @Pegass
Функция вызова в чат админов и модеров


Скрипты в чате

/* [НАСТРОЙКИ] */
var alert_mod_replay=0;

/* Проверка пользовательских команд для простого сообщения */
if(cmd==0) {

if(text.substr(0,5)=="/ping" && nick == mynick && loaded==1) {
var ping=(new Date().getTime()-gettime)/1000; text="<font color=red><i>ping: "+ping+" sec</i></font> "; }

if(text.substr(0,6)=="/clear" && clearer[nick]) {
if(loaded==1) document.getElementById("leftdiv").innerHTML="";text="очищаю фрейм сообщений";}

if(text.substr(0,7)=="/reload" && reloader[nick]) {
if(loaded==1) parent.location.reload(); text="перезагружаю чат";}

if(text.substr(0,6)=="/alert" && alerter[nick]) {
text=text.substr(text.indexOf(": ")+2);
if(loaded==1 && mynick==tonick) alert(text); if(nick!=mynick) return;
text=tonick+": отправленна команда алерт";}

if(text.substr(0,7)=="/ignore" && ignorer[nick]){
if(tonick && mynick!=tonick && loaded==1) ign_sel(tonick); if(nick!=mynick || !tonick) return;
if(ign_ok(tonick)) text="Вы поставили полный игнор на ник "+tonick; else text="Вы сняли полный игнор с ника "+tonick;
}

if(text.replace(tonick+": ","").substr(0,9)=="/modalert"){
text="Вызываю модераторов"
tonick='';
if(admin==1&& loaded==1 && alert_mod_replay==0) //вместо admin==1 можно указать любой статус или несколько статусов mystatus=='3'
{
alert_mod_replay=1;
window.setTimeout('alert(nick+" вызвал(а) в чат модераторов");',1000);
alert_mod_replay=0;
}
}


}

Чат внутри

<script>
document.write("<input type=hidden name=nick value="+parent.mynick+">");
document.write("<input type=hidden name=id value="+parent.myid+">");
document.write("<select name=cmd class=text>");
document.write("<option value=''>-=в общем=-");
document.write("<option value='/privat '>приватно");
document.write("<option value='/privat2 '>приват окно");
document.write("<option value='/modalert '>Вызвать модератора");
if(parent.alerter[parent.mynick]) document.write("<option value='/alert '>алерт-вызов");
if(parent.clearer[parent.mynick]) document.write("<option value='/clear '>очистить");
if(parent.reloader[parent.mynick]) document.write("<option value='/reload '>перезагрузить");
if(parent.ignorer[parent.mynick]) document.write("<option value='/ignore '>полный игнор");
if(parent.admin==1) {
document.write("<option value=''>-=модерация=-");
document.write("<option value='/kick '>кикнуть");
document.write("<option value='/warn '>предупредить");
}
document.write("</select>");
</script>

0
2615
Сергей @Pegass
Викторина в строго отведённой комнате

-=Скрипты в чате=-


/* [Функции - нижнего фрейма] */

добавляем (зелёным - номера комнат с викториной)
/* комнаты с викториной */
var gameroom= new Array();//для бесполых
gameroom[1]=true;
gameroom[5]=true;
gameroom[10]=true;

/* [Функции - нижнего фрейма] */

ищем
/* Загружает викторину в верхушку чата */
var gameon=0;
function startgame(){
if(gameon==0){
gameframe.location.href='http://'+engine_host+':'+engine_port+'/?chat='+chatlogin;
gameon=1; document.getElementById('gamediv').style.display="block";
}
else {
gameframe.location.href='start.html';
gameon=0; document.getElementById('gamediv').style.display="none";
}
}

меняем на
/* Загружает викторину в верхушку чата */
function startgame(dd){
if(dd==1 && gameroom[myroom]){
gameframe.location.href='http://'+engine_host+':'+engine_port+'/?chat='+chatlogin; document.getElementById('gamediv').style.display="block";
}
else {
gameframe.location.href='start.html'; document.getElementById('gamediv').style.display="none";
}
}

/* [Подготовка фреймов и загрузка сообщений] */

добавляем синее
function loadframes() {
/* Последняя стадия загрузки */
if(interval) window.clearTimeout(interval);
/* Подготовка фрейма привата */
if(parent.privatok==1) {document.getElementById("privatdiv").innerHTML='';}
/* Обнуление переменных */
loaded=0;
scrolled=0;
/* myhistory=myhistory1;*/
for(var i=0;i<rooms.length;i++) rooms[i][1]=0;
/* Подготовка таблицы никлиста */
uc = 0;
us = new Array();
ucc= new Array();
document.getElementById('users').innerHTML=userlist;
/* Проверка непрерывного соединения */
interval=window.setTimeout(
'if(engine_on!="ajax" && !ajaxon) {wr("<font color=red>Проблема подключения к потоковому движку на порту "+engine_port+". Пробуем подключиться через <b>ajax</b> движок ...</font>"); window.setTimeout("engine_on=\\"ajax\\"; loadframes();",10000);} ' +
'else wr("<font color=red>Не удалось подключиться к движку чата, вероятно Ваш браузер просто не поддерживает новые технологии.<br>Попробуйте использовать новый современный браузер <a href=http://google.com/chrome target=_blank>Google Chrome</a>.</font>");'
,1000*20); /* Время для проверки потокового движка 10 сек */
/* Загрузка движка сообщений */
document.getElementById("leftdiv").innerHTML='Загрузка ...';
/* Загрузка викторины */
if(gameroom[myroom]) startgame(1); else startgame(0);

loadengine();
}

0
2615
Сергей @Pegass
Ограничение на повторный вызов одного и того же человека

Особенности реализации: инфа о всех вызовах запишется в лог, зато её нельзя обойти и заперт работает для всех, т.е. если Петя вызвал Васю то в течении N минуть Васю не смогут вызвать ни Петя, ни Коля, хотя попытки вызовов будут отображаться в логе чата(который админский)

-=Скрипты в чате=-

/* [Функции - общие] */

Добавляем

  1. /* Задержка вызова одного и того же ника */
  2. var time_call = new Array();
  3. time_call['adm']=0;
  4. var time_call_who = new Array();
  5. time_call_who['adm']='';
  6. var time_call_delay=1000*60*5;//5 минут
  7. function timeCall(){
  8. var m = new Date();
  9. var tmp=m.getTime();
  10. return tmp;
  11. }
  12. function timetxt(mmin){
  13. var textmin='у';
  14. var dmmin=Math.round((mmin/10-Math.floor(mmin/10))*10)
  15. if((mmin>4 && mmin<21) || (dmmin==0) || ((dmmin>4) && (dmmin<10)))
  16. textmin='';
  17. else if ((dmmin>1) && (dmmin<5))
  18. textmin='ы';
  19. else textmin='у';
  20. return textmin;
  21. }
  22. var nton="";
  23. var ndelay=0;
  24. function countdown(mms,ttonick){
  25. var ssec=Math.floor(mms/1000);
  26. var mmin=Math.floor(ssec/60);
  27. ssec=ssec-mmin*60;
  28. if(!document.forms.count) return;
  29. if(mmin==0&&ssec==1){
  30. document.forms.count.count2.value='можно';
  31. var p_fans=document.getElementById('p_fans');
  32. if(p_fans) p_fans.parentNode.removeChild(p_fans);
  33. return;
  34. }
  35. else
  36. document.forms.count.count2.value=""+mmin+" минут"+timetxt(mmin)+" "+ssec+" секунд"+timetxt(ssec)+". "
  37. nton=ttonick;
  38. ndelay=time_call_delay-timeCall()+time_call[ttonick];
  39. setTimeout("countdown(ndelay,nton)",1000)
  40. }
  41. function ChatAlert(html,w,h) {
  42. var s=(w?'width:'+w+';':'')+(h?'height:'+h+';':'');
  43. var p_fans=document.getElementById('p_fans');
  44. if(!p_fans)
  45. {
  46. p_fans=document.createElement('div');
  47. p_fans.id='p_fans';
  48. }
  49. p_fans.innerHTML='';
  50. var p_fans_bg=document.createElement('div');
  51. p_fans_bg.className='p_fans_bg';
  52. p_fans_bg.onclick=function()
  53. {
  54. p_fans.parentNode.removeChild(p_fans);
  55. }
  56. var p_fans_helper=document.createElement('div');
  57. p_fans_helper.className='p_fans_helper';
  58. var p_fans_img=document.createElement('div');
  59. p_fans_img.setAttribute('style',s);
  60. p_fans_img.innerHTML=html;
  61. p_fans_img.className='p_fans_img';
  62. p_fans.appendChild(p_fans_bg);
  63. p_fans.appendChild(p_fans_helper);
  64. p_fans.appendChild(p_fans_img);
  65. document.body.appendChild(p_fans);
  66. };

/* Вывод сообщения о вызове и сам вызов окном с музыкой '/call nick' */
Заменяем весь раздел
  1. if(cmd==4) {
  2. if(loaded==1){
  3. if(!time_call[tonick]) time_call[tonick]=0;
  4. if(timeCall()-time_call[tonick]>time_call_delay)
  5. {
  6. time_call[tonick]=timeCall();
  7. time_call_who[tonick]=set_nick;
  8. if(tonick==parent.mynick && loaded==1) ChatAlert("Вас вызывает в чат "+nick+"!");
  9. if(!invisible[nick]) wr(set_time+"<i>"+set_nick+" вызывает "+tonick+".</i><br>");
  10. }
  11. else
  12. if(set_nick==parent.mynick && tonick!=parent.mynick && loaded==1)
  13. {
  14. var call_alert_txt="<font>Пользователь с ником \""+tonick+"\" уже был вызван</font>";
  15. if(time_call_who[tonick]==parent.mynick) call_alert_txt+="<font> вами!</font>";
  16. else call_alert_txt+="<font>.</font><br><font>Вызывал пользователь с ником \""+time_call_who[tonick]+"\".</font>";
  17. call_alert_txt+="<br><div style='margin-top:20px;'><font>Повторный вызов возможен через: </font>";
  18. ChatAlert(call_alert_txt+"<form name='count' style='display: inline-block;'><input type='text' size='20' name='count2' class='count2' readonly></form></div>");
  19. countdown(parent.time_call_delay-parent.timeCall()+parent.time_call[tonick],tonick);
  20. }
  21. }
  22. }

-=Стили=-
добавляем (требуют наведения красоты, ибо реализованы в минимальном варианте, для управления шириной и высотой всплывающего окна используйте параметры функции ChatAlert())
  1. #p_fans
  2. {
  3. position:fixed;
  4. top:0px;
  5. bottom:0px;
  6. left:0px;
  7. right:0px;
  8. z-index:2147483647;
  9. text-align: center;
  10. /*overflow:auto;*/
  11. }
  12. #p_fans .p_fans_bg
  13. {
  14. position:absolute;
  15. top:0px;
  16. bottom:0px;
  17. left:0px;
  18. right:0px;
  19. background:rgba(0, 0, 0, 0.7);
  20. }
  21. #p_fans .p_fans_helper
  22. {
  23. display:inline-block;
  24. vertical-align:middle;
  25. height:100%;
  26. width:0px;
  27. }
  28. #p_fans .p_fans_img
  29. {
  30. max-height:90%;
  31. max-width:90%;
  32. vertical-align:middle;
  33. position: relative;
  34. display: inline;
  35. }

0

В закрытой теме нельзя отправлять сообщения.

Согласие на обработку данных на нашем сайте

Продолжая просматривать страницу, вы соглашаетесь с использованием файлов «Cookie» и с Политикой конфиденциальности «Privacy».
Наверху или внизу страницы вы можете изменить валюту и язык по умолчанию. Английская версия сайта ещё находится в доработке и доступна не полностью.