Files
databap/masks/chat.html
2014-09-02 22:41:06 +02:00

894 lines
29 KiB
HTML
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div id="chat">
<div id="chat_chan">
<p class="tab_bar"><span id="join_chan" class="chan round_top clickable"></span></p>
</div>
<div id="sidebar">
<div class="sidebar_box round">
<div class="sidebar_box_title round_top round clickable">Connect&eacute;s</div>
<div id="connected_users" class="sidebar_box_content hide"></div>
</div>
<div class="sidebar_box round">
<div class="sidebar_box_title round_top round clickable">News</div>
<div id="news" class="sidebar_box_content hide"><p class="loading"><i class="fa fa-spin fa-inline fa-c-loading"></i></p></div>
</div>
<div class="sidebar_box round">
<div class="sidebar_box_title round_top round clickable">Aide</div>
<div id="help_open" class="sidebar_box_content help_paperclip clickable hide"></div>
</div>
</div>
<div id="chat_room" class="round">
<div id="chat_container">
<div id="chat_messages_box">
<div id="chat_messages"></div>
</div>
</div>
<div id="chat_input" class="tiny_round">
<form id="chat_form" name="chat_form">
<i id="message_img" class="fa fa-fw fa-20 fa-c-comment"></i><input type="text" id="message" name="message" value="" maxlength="500" />
<input type="hidden" id="chan" name="chan" value="" maxlength="50" />
</form>
</div>
</div>
<div id="template" class="hide">
<div id="help" class="help tiny_round">
<p class="title">Manuel d'utilisation</p>
<p class="title righty">&nbsp;<span id="close_help" class="clickable"><i class="fa fa-30 fa-c-close"></i></span></p>
<p class="subtitle"><span>Message</span></p>
<p class="item"><span class="key">Echap</span>Supprime le texte en cours de r&eacute;daction</p>
<p class="item"><span class="key">Fl&egrave;che haut</span>R&eacute;p&egrave;te dernier message envoy&eacute;</p>
<p class="item"><span class="key">@X Y</span>Vous dites Y &agrave; X (pseudo de Y en rouge)</p>
<p class="item"><span class="key">/me X</span>Votre_pseudo X. Utile lorsque vous voulez parler de vous &agrave; la 3&egrave;me personne. Par exemple : /me se touche la nouille au taff</p>
<p class="item"><span class="key">/mail X Y</span>Vous envoyez &agrave; X un email contenant Y (adresse professionnelle)</p>
<p class="item"><span class="key">/news X</span>Vous annoncez le message X (votre message est ajouté à la liste des news automatiquement)</p>
<p class="item">
<span class="key">Tab</span>
Chaque hit pr&eacute;-remplie le message en faisant d&eacute;filer la liste des connect&eacute;s.
Il est possible d'&eacute;crire la/les premi&egrave;res lettres afin de faire commencer le d&eacute;filement aux pseudos commen&ccedil;ant par ces lettre-ci.
Le fonctionnement demeure le m&ecirc;me si l'on fait pr&eacute;c&eacute;der le pseudo par @
</p>
<p class="subtitle"><span>Chans</span></p>
<p class="item">Les chans sont divis&eacute;s en trois cat&eacute;gories : les chans priv&eacute;s (PM, pour deux personnes seulement), les chans entreprise (pour toutes les personnes d'une m&ecirc;me entreprise) et les autres (chans publiques)</p>
<p class="item"><span class="key">/join #X</span>Vous rejoignez le chan X (si autoris&eacute;)</p>
<p class="item"><span class="key">/invite X</span>Vous invitez X à rejoindre le chan (si autoris&eacute;)</p>
<p class="item"><span class="key">/pm #X</span>Vous rejoignez le chan priv&eacute; (vous et X)</p>
<p class="item"><span class="key">/quit #X</span>Vous quittez le chan X</p>
<p class="item"><span class="key">/chans</span>Liste des chans publiques disponibles (aussi accessible via /channels et /list)</p>
<p class="subtitle"><span>Options</span></p>
<p class="item"><span class="key">/nick X</span>Vous changez votre peudo en X</p>
<p class="item"><span class="key">/mission X</span>Vous changez votre affectation de mission</p>
<p class="subtitle"><span>Broutilles</span></p>
<p class="item"><span class="key">/9gag X</span>Vous postez le lien 9gag X (URL) dans le chat (utilisable comme proxy)</p>
<p class="item"><span class="key">/img X</span>Vous postez l'image X (URL) dans le chat (utilisable comme proxy)</p>
<p class="item"><span class="key">/now</span>Horloge parlante</p>
<p class="item"><span class="key">/like</span>Vous plussoyez</p>
<p class="item"><span class="key">/slap X</span>Vous foutez une grosse tarte &agrave; X</p>
<p class="item"><span class="key">/bs X</span>Vous bitch-slappez X</p>
<p class="item"><span class="key">/kick X</span>Vous mettez un coup de pied au cul &agrave; X</p>
<p class="item"><span class="key">/mean</span>Vous dites une insulte au hasard</p>
</div>
</div>
</div>
<script type="text/javascript">
databap.pageInit = function()
{
//Page constant
databap.consts.chanPrefix = 'chan_';
databap.consts.chanQuitPrefix = 'quit_chan_';
databap.consts.chanUnreadPrefix = 'unread_chan_';
//Page variables
self.tmp('sending_msg', 'boolean');
self.tmp('refresh', 'boolean');
self.vars2('unread_msg', 'object');
self.tmp('news_period', 10*60*1000);
self.tmp('get_news', false);
self.tmp('last_message_id', '0');
self.tmp('scrolling', 'boolean');
//Main elements
$MsgInput = databap.getMainElem('#message');
$MsgInputBox = databap.getMainElem('#chat_input');
//Bind message box key events
databap.getMainElem('#chat_form').submit(function(e){e.preventDefault();});
$MsgInput.bind('keydown', function(e){if(e.which == 9)e.preventDefault();});
$MsgInput.keyup(function(event){add_message(event);});
//Loading the chat
self.initScrollBar('#chat_container', '#chat_messages_box', '#chat_messages');
$('#chat_container').find('.thumb')
.mousedown(function(){self.tmp('scrolling', true);})
.mouseup(function(){self.tmp('scrolling', false);});
//Loading Chans
setChanButton();
databap.vars.chans_list[databap.consts.all_chan_id] = databap.consts.all_chan_text;
databap.vars.unread_msg[databap.consts.all_chan_text] = 0;
joinChan(databap.consts.default_chan, true);
//window focus
$(window).focus(onPageFocus);
$(window).blur(onPageBlur);
//Message Input Focus
$MsgInput.focus();
//Init sidebar events
initSideBar();
//Init's end
databap.setInitEnd(true);
};
//On resize
databap.onResize = function()
{
self.setScrollBarSize('maximize');
//Message Input
$('#message').width($('#chat_input').width() - $('#message_img').outerWidth(true)- 1);
};
//Disconnect from the chat
databap.onQuit = function()
{
if(databap.tmp('refresh') == false) databap.getSyncInfo('disconnect_chat');
databap.vars.chans_list = {};
if(typeof oChatTimer != "undefined") clearTimeout(oChatTimer);
if(typeof oUserTimer != "undefined") clearTimeout(oUserTimer);
return true;
};
databap.onKeyDown = function(e)
{
if(e.keyCode == 116) databap.tmp('refresh', true);
else databap.tmp('refresh', false);
};
function initSideBar()
{
//Sidebar Events
$('#sidebar').find('.sidebar_box_title').click
(
function()
{
$This = $(this);
if(!$This.closest('.sidebar_box').find('.sidebar_box_content').is(":visible"))
{
$('#sidebar').find('.sidebar_box_title').not($This)
.addClass('round')
.closest('.sidebar_box').find('.sidebar_box_content')
.hide('fast');
$This
.toggleClass('round')
.closest('.sidebar_box').find('.sidebar_box_content')
.toggle('fast', function()
{
databap.resizeMain('true');
switch($(this).attr('id'))
{
case 'help_open': $('#help_open').click(); break;
case 'news': getNews(); break;
}
});
}
}
);
$('#sidebar').find('.sidebar_box_title').eq(0).click();
//Help
databap.getMainElem('#help_open').click(displayHelp);
}
function getNews()
{
if(typeof databap.tmp('news_timer') != "undefined") clearTimeout(databap.tmp('news_timer'));
var $NewsBox = $('#news');
if($NewsBox.is(':visible'))
{
databap.getInfo
(
'news',
function(asNews)
{
if(Object.keys(asNews.news).length>0)
{
$.each(asNews.news, function(ikey, asNew)
{
$('<div>', {'class':'new'}).hide()
.append($('<p>')
.append($('<i>', {'class':'fa fa-inline fa-30 fa-c-news'}))
.append($('<span>').text(asNew.message)))
.append($('<p>', {'class':'signature'})
.text('—'+asNew.nickname)
.append('<br />')
.append($('<span>', {'class':'news_time'}).text(asNew.time_desc)))
.appendTo($NewsBox);
});
}
else $('<div>', {'class':'new'}).hide().text('Aucune news.').appendTo($NewsBox);
$NewsBox.find('.loading').hide();
$NewsBox.find('.new').toggle();
$NewsBox.find('.new:hidden').remove();
//Request in 10mins
databap.tmp('news_timer', setTimeout(getNews, databap.tmp('news_period')));
},
{},
'json'
);
}
}
function onPageFocus()
{
databap.vars.focus=true;
//iUnreadMessages -= databap.vars.unread_msg[currentChan()];
//databap.setTitle();
//debug('focused '+databap.vars.focus);
switchChan();
}
function onPageBlur()
{
databap.vars.focus = false;
//debug('blured '+databap.vars.focus);
}
function setChanButton()
{
$('#join_chan')
//.click(function(){$('#join_chan_button').click();})
.append
(
$('<span>', {id:'join_chan_button'})
.click(function()
{
$(this).hide();
$('#join_chan_input').css('display', '');
$('#join_chan').addClass('active').find('#input_chan').focus();
})
.append('&nbsp;')
.append($('<i>', {'class':'fa fa-c-plus'}))
.append('&nbsp;')
)
.append
(
$('<span>', {id:'join_chan_input'})
.text('#')
.append
(
$('<input>', {type:'text', id:'input_chan', 'class':'round'})
.keyup(function(e)
{
if(e.keyCode == 13)
{
var $This = $(this);
joinChan($This.val());
$This.val('');
}
if(typeof e.keyCode == 'undefined' || e.keyCode == 13)
{
$('#join_chan_input').css('display', 'none');
$('#join_chan_button').show();
$('#join_chan').removeClass('active');
}
})
.blur(function(){$(this).keyup();})
).hide()
);
}
function getChanKeyName(sChanName)
{
var sChanKeyName = false;
//$.each(databap.vars.chans_list, function(sConnChanKeyName, sConnChanName){if(sConnChanName==sChanName) sChanKeyName=sConnChanKeyName;});
for(var i in databap.vars.chans_list) {if(databap.vars.chans_list[i]==sChanName){sChanKeyName=i;break;}}
return sChanKeyName;
}
function getChanName(sChanKeyName)
{
return (typeof databap.vars.chans_list[sChanKeyName] == 'undefined')?false:databap.vars.chans_list[sChanKeyName];
}
function joinPmChan()
{
var iTargetId = $(this).attr('id');
if(iTargetId!=databap.vars.user_id)
{
var sPmChan = (databap.vars.user_id < iTargetId)?databap.vars.user_id+databap.consts.pm_separator+iTargetId:iTargetId+databap.consts.pm_separator+databap.vars.user_id;
joinChan(sPmChan, false, [iTargetId]);
}
}
function joinChan(sChanName, bFirstConn, asAttendees, bSwitchOnJoin)
{
bFirstConn = bFirstConn || false;
asAttendees = asAttendees || [];
bSwitchOnJoin = (typeof bSwitchOnJoin === 'undefined')?true:bSwitchOnJoin;
var sChanName = ucwords(sChanName);
if(sChanName!='')
{
//Join for the first time
if(!getChanKeyName(sChanName))
{
//Check accessibility & bring back messages
databap.getInfo
(
'join_chan',
function(data)
{
if(data.result == databap.consts.error) databap.feedback('error', data.desc);
else
{
//Add to channels list
var sConnectedChanKeyName = '';
$.each
(
data.channels,
function(iChanId, sReturnedChanName)
{
//Add tab if not already there
if(!getChanName(iChanId)) addChanTab(iChanId, sReturnedChanName, data.channel_tab_names[iChanId], !bSwitchOnJoin);
}
);
//Full reload of messages
refresh_chat(true);
//Switch to the right chan
switchChan(bSwitchOnJoin?data.current_chan_id:null);
}
},
{chan:sChanName, first_conn:(bFirstConn?1:0), attendees:asAttendees},
'json',
function()
{
databap.addFailIcon('Chan non autoris&eacute;');
},
true
);
}
else
{
//Switch to the right chan
switchChan(bSwitchOnJoin?getChanKeyName(sChanName):null);
}
}
//Focus input bar
$('#message').focus();
}
function currentChan(sChanName)
{
return (!sChanName)?$('#chan').val():$('#chan').val(sChanName).val();
}
function switchChan(sChanKeyName)
{
var sChanName = currentChan(getChanName(sChanKeyName));
sChanKeyName = sChanKeyName || getChanKeyName(sChanName);
//Unread msg
if(databap.vars.focus)
{
databap.vars.unread_msg[sChanName] = 0;
databap.vars.unread_msg[databap.consts.all_chan_text] = 0;
}
syncUnreadMsg();
//Switch current channel button to active
$('#chat_chan').find('span[id^="'+databap.consts.chanPrefix+'"]').removeClass('active').addClass('clickable');
$('#'+databap.consts.chanPrefix+sChanKeyName).addClass('active').removeClass('clickable');
//Show current channel messages
databap.getMainElem('#chat_messages').find('p').hide();
databap.getMainElem('#chat_messages').find('p.class_'+sChanKeyName+', p.class_'+databap.consts.all_chan_id).show();
databap.updateScrollBar(self.tmp('scrolling')?'relative':'bottom');
//Show Current channel members
databap.getMainElem('#connected_users').find('p').hide();
databap.getMainElem('#connected_users').find('p.class_'+sChanKeyName).show();
}
function syncUnreadMsg()
{
//Global unread messages
var iCountUnread = 0;
$.each
(
databap.vars.unread_msg,
function(sChanName, iUnreadMsg)
{
iCountUnread += iUnreadMsg;
}
);
databap.setTitle((iCountUnread>0)?iCountUnread+' msg':'');
//Chan unread messages
var sChanUnreadId = '';
var sUnreadText = '';
iCountUnread = 0;
$.each
(
databap.vars.chans_list,
function(sChanKeyName, sChanName)
{
sChanUnreadId = databap.consts.chanUnreadPrefix+sChanKeyName;
iCountUnread = databap.vars.unread_msg[sChanName];
sUnreadText = (iCountUnread > 0 && sChanName != currentChan())?'('+iCountUnread+')':'';
databap.getMainElem('#'+sChanUnreadId).text(sUnreadText);
}
);
}
function addChanTab(sChanKeyName, sChanName, sChanTabName, bLightUp)
{
//Add channel to list
sChanTabName = sChanTabName || sChanName;
databap.vars.chans_list[sChanKeyName] = sChanName;
databap.vars.unread_msg[sChanName] = 0;
//Add channel tab
var sChanId = databap.consts.chanPrefix+sChanKeyName;
if(!$('#'+sChanId).length)
{
//Prepare clickable chan button
var sChanQuitId = databap.consts.chanQuitPrefix+sChanKeyName;
var sChanUnreadId = databap.consts.chanUnreadPrefix+sChanKeyName;
var $ChanButton = $('<span id="'+sChanId+'" class="chan clickable inc_border round_top'+(bLightUp?' light_up':'')+'">#</span>')
.click(function(){$(this).removeClass('light_up');joinChan(databap.vars.chans_list[$(this).attr('id').substr(databap.consts.chanPrefix.length)]);})
.append('<span class="chan_title">'+sChanTabName+'</span>')
.append('<span class="chan_unread" id="'+sChanUnreadId+'"></span>')
.append($('<a id="'+sChanQuitId+'" class="quit_chan clickable"><i class="fa fa-c-close"></i></a>').click(function(e){e.stopPropagation();quitChan($(this).attr('id').substr(databap.consts.chanQuitPrefix.length));}));
//Add channel tab name and bind delete button
$('#join_chan').before($ChanButton);
}
}
function quitChan(sChanKeyName)
{
var sChanName = databap.vars.chans_list[sChanKeyName];
if(typeof sChanName != 'undefined' && Object.keys(databap.vars.chans_list).length > 1)
{
//delete on server
databap.getInfo
(
'quit_chan',
function(result){},
{chan:sChanName},
'text',
function(textStatus)
{
debug('Error chat.html quit channel');
databap.showError(textStatus);
}
);
//Delete tab
$('#'+databap.consts.chanPrefix+sChanKeyName).fadeOut('fast', function(){$(this).remove();});
//Delete from list
delete databap.vars.chans_list[sChanKeyName];
//Switch back to another chan
if(sChanName == currentChan()) switchChan(Object.keys(databap.vars.chans_list)[1]);
//Delete messages
databap.getMainElem('#chat_messages').find('p.class_'+sChanKeyName).remove();
}
else databap.addFailIcon('Ceci est le dernier chan');
}
function add_message(e)
{
switch(e.keyCode)
{
case 13 : //enter
$this = databap.getMainElem('#message');
var chat_message = $this.val();
if(chat_message.substr(0, 7) == '/join #') joinChan(chat_message.substr(7));
else if(chat_message.substr(0, 7) == '/quit #') quitChan(getChanKeyName(chat_message.substr(7)));
else if(chat_message == '/help') displayHelp();
else if(chat_message != '' && databap.tmp('sending_msg') == false) //send
{
databap.tmp('sending_msg', true);
databap.saveForm
(
'add_message',
databap.getMainElem('#chat_form'),
function(id)
{
databap.tmp('sending_msg', false);
refresh_chat();
},
true
);
}
databap.vars.prev_chat_value = chat_message;
$this.val('');
break;
case 27 : //echap
databap.getMainElem('#message').val('');
break;
case 38 : //arrow up
$this = databap.getMainElem('#message');
var chat_message = $this.val();
if(chat_message=='' && typeof databap.vars.prev_chat_value !== 'undefined' && databap.vars.prev_chat_value!='')
{
$this.val(databap.vars.prev_chat_value);
}
break;
case 40 : //arrow down
$this = databap.getMainElem('#message');
var chat_message = $this.val();
if(typeof databap.vars.prev_chat_value !== 'undefined' && databap.vars.prev_chat_value==chat_message)
{
$this.val('');
}
break;
case 9 : //tab
/* Action Plan
- Detect current caret position : $this.getCursorPosition()
- Find word wrapped around cursor : while loop until non alphanum char before and after caret position
-
*/
//Init
$this = databap.getMainElem('#message');
var chat_message = $.trim($this.val());
if(!e.altKey && chat_message.length>0)
{
var user_name = "";
var index = 0;
//Finding last word
var last_word = (chat_message.lastIndexOf(" ")==-1)?chat_message:chat_message.substr(chat_message.lastIndexOf(" ") + 1);
//debug(last_word);
if(last_word.substr(0, 1)=='@') last_word = last_word.substr(1);
var last_word_len = last_word.length;
var approx_nick = last_word.toLowerCase();
//Tabbing through positive results
var existing_nick = false;
var userIndex = $.inArray(last_word, users_list);
if(userIndex==-1)
{
//Recording first search keyword
//debug('buffering approx nick : "'+last_word+'"');
prev_approx_nick = approx_nick;
prev_approx_nick_len = last_word_len;
userIndex = users_list.length - 1;
}
else existing_nick = true;
//debug('last word : "'+last_word+'"');
//debug('existing_nick : '+existing_nick);
//Next nickname in the list
index = (userIndex+1)%users_list.length;
count = 0;
//loop on the nickname list
while(count<users_list.length)
{
//debug('index: '+index);
var nick = users_list[index];
var lower_nick = nick.toLowerCase();
if
(
!existing_nick && lower_nick.substr(0, last_word_len) == approx_nick ||
existing_nick && lower_nick.substr(0, prev_approx_nick_len) == prev_approx_nick
)
{
user_name = nick;
break;
}
index = (index+1)%users_list.length;
count++;
}
//debug('chat message : '+chat_message);
if(user_name!='') $this.val(chat_message.substr(0, chat_message.length - last_word_len)+user_name+' ');
}
break;
/*default:debug(e.keyCode);break;*/
/*
default:
$this = databap.getMainElem('#message');
$copy = databap.getMainElem('#copy_message');
$copy.text($this.val());
var maxSize = databap.getMainElem('#chat_input').width() - 16;
var iInputSize = $copy.width();
if(iInputSize < 100)
{
$this.width(100);
}
else if(iInputSize > maxSize)
{
$this.width(maxSize);
}
else
{
$this.width(iInputSize);
}
*/
}
}
function refresh_chat(bReset)
{
var bReset = (typeof bReset != 'undefined' && bReset == true);
if(typeof oChatTimer != "undefined") clearTimeout(oChatTimer);
if(databap.vars.current_page == 'chat')
{
if(!databap.vars.loading)
{
if(bReset)
{
self.tmp('last_message_id', 0);
databap.getMainElem('#chat_messages').empty();
}
databap.getInfo
(
'messages',
function(result)
{
var prevLastMsgId = self.tmp('last_message_id');;
updateUsersList = false;
if(prevLastMsgId < result.last_message_id || bReset)
{
//Update last read message id
self.tmp('last_message_id', Math.max(result.last_message_id, prevLastMsgId));
//Display messages
$.each
(
result.messages,
function(id_message, message_info)
{
addMessage(message_info, bReset);
if(!bReset && message_info.msg_class!='C' /* && message_info.id_user!=databap.vars.user_id */)
{
databap.vars.unread_msg[getChanName(message_info.id_chan)]++;
}
}
);
//News
if(databap.tmp('get_news') === true && !bReset) getNews();
databap.tmp('get_news', false);
//Nicknames changes
if(updateUsersList === true || bReset)
{
refresh_users(); //which execute switchChan()
updateUsersList = false;
}
else switchChan();
}
},
{message_id:self.tmp('last_message_id')},
'json',
function(textStatus)
{
debug('Error chat.html 155');
databap.showError(textStatus);
}
);
oChatTimer = setTimeout(refresh_chat, databap.vars.focus?2000:5000);
}
else
{
oChatTimer = setTimeout(function(){refresh_chat(bReset);}, 500);
}
}
}
function addMessage(message_info, bReset)
{
message_info.nickname = message_info.nickname || '';
var sChanKeyName = message_info.id_chan;
var sMsgPrefix = '<a class="user clickable" title="Ecrire un PM &agrave; '+message_info.nickname+'">'+message_info.nickname+'</a><span class="console">&gt;</span>';
var msg_body = '';
switch(message_info.msg_class)
{
case 'U':
msg_body = sMsgPrefix+'<span class="text">'+message_info.message+'</span>';
break;
case 'NW':
databap.tmp('get_news', true);
msg_body = '<span class="text action">'+message_info.nickname+' a une news : <span class="news"><i class="fa fa-30 fa-c-news"></i> '+message_info.message+' <i class="fa fa-30 fa-c-news"></i></span></span>';
break;
case 'A':
var url = databap.getInternalLink('code', message_info.message);
msg_body = '<span class="text">'+message_info.nickname+' a ajout&eacute; un nouveau code : <a href="'+url+'" target="_blank">'+message_info.description+'</a></span>';
break;
case 'E':
var url = databap.getInternalLink('code', message_info.message);
msg_body = '<span class="text">'+message_info.nickname+' a modifi&eacute; le code <a href="'+url+'" target="_blank">'+message_info.description+'</a></span>';
break;
case 'PA':
var url = databap.getInternalLink('proc', message_info.message);
msg_body = '<span class="text">'+message_info.nickname+' a ajout&eacute; une nouvelle proc&eacute;dure : <a href="'+url+'" target="_blank">'+message_info.description+'</a></span>';
break;
case 'PE':
var url = databap.getInternalLink('proc', message_info.message);
msg_body = '<span class="text">'+message_info.nickname+' a modifi&eacute; la proc&eacute;dure <a href="'+url+'" target="_blank">'+message_info.description+'</a></span>';
break;
case 'M':
msg_body = '<span class="text action">'+message_info.nickname+' '+message_info.message+'</span>';
break;
case 'P':
slicePos = message_info.message.indexOf(' ');
msgTargetUser = message_info.message.substr(1, slicePos - 1);
var msg = message_info.message.slice(slicePos + 1);
msg_body = '<a class="user clickable" title="Ecrire un PM &agrave; '+message_info.nickname+'">'+message_info.nickname+'</a><span class="console"> <span class="highlight">&#64;'+msgTargetUser+'</span>&gt;</span><span class="text">'+msg+'</span>';
break;
case 'N':
msg_body = '<span class="text">'+message_info.message+' ('+message_info.name+')</span>';
updateUsersList = true;
break;
case 'C':
updateUsersList = true;
msg_body = (self.vars2('opt_console')==self.consts.opt_console_no)?'':'<span class="text action">'+message_info.nickname+' '+message_info.message+'</span>';
break;
case 'I':
var msg = '<a href="'+message_info.message[3]+'" target="_blank"><img src="'+message_info.message[0]+'" width="'+message_info.message[1]+'" height="'+message_info.message[2]+'" class="proxy"></a>';
msg_body = sMsgPrefix+'<span class="text">'+msg+'</span>';
break;
case '9':
var msg = '<a href="'+message_info.message.url+'" target="_blank" title="'+message_info.message.title+'"><img src="'+message_info.message.url_img+'" width="'+message_info.message.width+'" height="'+message_info.message.height+'" class="proxy" /></a>';
msg_body = sMsgPrefix+'<span class="text">'+msg+'</span>';
break;
case 'R':
if(!bReset)
{
msg_body = '<span class="text action">'+message_info.message+'</span>';
setTimeout(databap.refresh, databap.consts.reboot_delay*1000);
}
break;
case 'V':
if(!bReset) joinChan(sChanKeyName, false, [], false);
break;
case 'B':
var url = databap.getInternalLink('a', message_info.message);
msg_body = '<span class="text action">Nouvel article sur un blog BI ('+message_info.domain+') : <a href="'+url+'" target="_blank">'+message_info.art_title+'</a> ';
msg_body+= 'par <a title="Lien vers la page de l\'auteur" href="'+message_info.link_auth+'" target="_blank">'+message_info.name+'</a> ('+message_info.art_date+')'+'</span>';
break;
case 'S':
updateUsersList = true;
databap.tmp('get_news', true);
msg_body = '<span class="text action">'+message_info.nickname+' '+message_info.message+'</span>';
break;
case 'DA':
var url = databap.getInternalLink('doc', message_info.message);
msg_body = '<span class="text">'+message_info.nickname+' a ajout&eacute; une nouvelle documentation : <a href="'+url+'" target="_blank">'+message_info.description+'</a></span>';
break;
case 'DE':
var url = databap.getInternalLink('doc', message_info.message);
msg_body = '<span class="text">'+message_info.nickname+' a modifi&eacute; la documentation <a href="'+url+'" target="_blank">'+message_info.description+'</a></span>';
break;
case 'TA':
var url = databap.getInternalLink('table', message_info.message);
msg_body = '<span class="text">'+message_info.nickname+' a ajout&eacute; une nouvelle table : <a href="'+url+'" target="_blank">'+message_info.description+'</a></span>';
break;
case 'TE':
var url = databap.getInternalLink('table', message_info.message);
msg_body = '<span class="text">'+message_info.nickname+' a modifi&eacute; la table <a href="'+url+'" target="_blank">'+message_info.description+'</a></span>';
break;
}
if(msg_body != '')
{
$Message = $('<p class="'+message_info.msg_class+' class_'+sChanKeyName+' hide round_right"></p>').append('<span class="time">'+message_info.time+'</span>', msg_body);
$Message.find('.chan_link').click(function(){joinChan($(this).find('.chan_text').text());});
$Message.find('.user').click(setPm);
databap.getMainElem('#chat_messages').append($Message);
}
}
function refresh_users()
{
if(typeof oUserTimer != "undefined") clearTimeout(oUserTimer);
if(databap.vars.current_page == 'chat')
{
var delay = databap.consts.keep_alive / 10; //seconds
databap.getInfo
(
'connected_users',
function(result)
{
//empty current users list
databap.getMainElem('#connected_users').empty();
users_list = [];
$.each
(
result,
function(sChankeyName, chan_info)
{
$.each
(
chan_info,
function(key, user_info)
{
var sNickName = user_info.nickname.replace('"', '\'');
users_list.push(sNickName);
var profileLink = databap.getInternalLink('profil', user_info.id_user);
var mission = 'Mission actuelle : '+(user_info.status || 'Aucune');
var pm = 'Cliquez pour lancer un channel privé avec '+user_info.name+' ('+user_info.company+')';
var $user = $('<p>', {'class':'connected_user class_'+sChankeyName})
.append($('<a>', {'class':'connected_user_logo', href:profileLink, title:mission, target:'_blank'})
.append($('<img>', {src:databap.consts.app_image_folder+user_info.logo}))
.append((user_info.afk=='1')?$('<i>', {class:'fa fa-c-afk afk'}):''))
.append($('<a>', {'class':'connected_user_name clickable '+sNickName, id:user_info.id_user, title:pm}).text(sNickName));
$user.find('.connected_user_name').click(joinPmChan);
databap.getMainElem('#connected_users').append($user);
}
);
}
);
switchChan();
},
{},
'json',
function(textStatus)
{
delay = 10;
}
);
//re-scheddule
oUserTimer = setTimeout(refresh_users, delay*1000);
}
}
function setPm()
{
var name = $(this).text();
//PM
var msg='';
var prevMsg = databap.getMainElem('#message').val();
if(prevMsg.substr(0, 1) == '@')
{
msg = prevMsg.substr(prevMsg.indexOf(' ')+1);
}
else
{
msg = prevMsg;
}
databap.getMainElem('#message').val('@'+name+' '+msg).focus();
}
function displayHelp()
{
//Get template
$Help = $('#help').clone().attr('id', 'help_'+Math.floor((Math.random()*1000)));
//Visible on all channels
$Help.find('p').addClass('class_'+databap.consts.all_chan_id);
$Help.appendTo('#chat_messages').slideDown('fast', function()
{
databap.updateScrollBar('bottom');
});
//Close button activation
$Help.find('#close_help').click(function()
{
$(this).closest('.help').slideUp('fast', function()
{
databap.updateScrollBar('bottom');
});
});
}
</script>