Allow message type edition
This commit is contained in:
@@ -1902,12 +1902,11 @@ class Databap extends PhpObject
|
|||||||
return $iConnId;
|
return $iConnId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function addChatMessage($sMessage, $sChanName)
|
private function parseChatMessage($sMessage, $sChanName) {
|
||||||
{
|
|
||||||
$sMessage = htmlspecialchars($sMessage);
|
$sMessage = htmlspecialchars($sMessage);
|
||||||
$sType = self::MESSAGE_USER;
|
$sType = self::MESSAGE_USER;
|
||||||
$bSuccess = true;
|
$bSuccess = true;
|
||||||
$sDesc = '';
|
|
||||||
if(mb_substr($sMessage, 0, 1) == '/')
|
if(mb_substr($sMessage, 0, 1) == '/')
|
||||||
{
|
{
|
||||||
if(mb_substr($sMessage, 0, 4) == '/me ')
|
if(mb_substr($sMessage, 0, 4) == '/me ')
|
||||||
@@ -2076,11 +2075,19 @@ class Databap extends PhpObject
|
|||||||
$sType = self::MESSAGE_PRIVATE;
|
$sType = self::MESSAGE_PRIVATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Storing message
|
return array('message'=>$sMessage, 'type'=>$sType, 'chan_name'=>$sChanName, 'success'=>$bSuccess);
|
||||||
if($bSuccess)
|
}
|
||||||
|
|
||||||
|
public function addChatMessage($sMessage, $sChanName)
|
||||||
{
|
{
|
||||||
$sChanId = $this->getChanId($sChanName);
|
$sDesc = '';
|
||||||
$bSuccess = $this->addMessage($sMessage, $sType, $sChanId);
|
$asMessage = $this->parseChatMessage($sMessage, $sChanName);
|
||||||
|
|
||||||
|
//Storing message
|
||||||
|
if($asMessage['success'])
|
||||||
|
{
|
||||||
|
$sChanId = $this->getChanId($asMessage['chan_name']);
|
||||||
|
$bSuccess = $this->addMessage($asMessage['message'], $asMessage['type'], $sChanId);
|
||||||
if(!$bSuccess) $sDesc = self::FAIL_INSERT;
|
if(!$bSuccess) $sDesc = self::FAIL_INSERT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2091,9 +2098,19 @@ class Databap extends PhpObject
|
|||||||
{
|
{
|
||||||
$bSuccess = false;
|
$bSuccess = false;
|
||||||
$sDesc = '';
|
$sDesc = '';
|
||||||
|
|
||||||
$asRefMsg = $this->oMySql->selectRow(self::MSG_TABLE, $iRefMsgId);
|
$asRefMsg = $this->oMySql->selectRow(self::MSG_TABLE, $iRefMsgId);
|
||||||
if(($asRefMsg['type'] == self::MESSAGE_USER || $asRefMsg['type'] == self::MESSAGE_PRIVATE) && $asRefMsg[$this->oMySql::getId(self::USER_TABLE)] == $this->getUserId()) {
|
$iChanId = $asRefMsg[MySqlManager::getId(self::CHAN_TABLE)];
|
||||||
$bSuccess = $this->addMessage($sMessage, $asRefMsg['type'], $asRefMsg['id_channel'], $this->getUserId(), $iRefMsgId);
|
$sChanName = $this->oMySql->selectValue(self::CHAN_TABLE, MySqlManager::getText(self::CHAN_TABLE), $iChanId);
|
||||||
|
$asNewMsg = $this->parseChatMessage($sMessage, $sChanName);
|
||||||
|
if(
|
||||||
|
($asRefMsg['type'] == self::MESSAGE_USER || $asRefMsg['type'] == self::MESSAGE_PRIVATE)
|
||||||
|
&&
|
||||||
|
($asNewMsg['type'] == self::MESSAGE_USER || $asNewMsg['type'] == self::MESSAGE_PRIVATE)
|
||||||
|
&&
|
||||||
|
$asRefMsg[$this->oMySql::getId(self::USER_TABLE)] == $this->getUserId()
|
||||||
|
) {
|
||||||
|
$bSuccess = $this->addMessage($sMessage, $asNewMsg['type'], $iChanId, $this->getUserId(), $iRefMsgId);
|
||||||
}
|
}
|
||||||
else $sDesc = 'Wrong user ID';
|
else $sDesc = 'Wrong user ID';
|
||||||
|
|
||||||
|
|||||||
52
jquery/common.js
vendored
52
jquery/common.js
vendored
@@ -754,3 +754,55 @@ function utf8_encode(argString)
|
|||||||
|
|
||||||
return utftext;
|
return utftext;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getCaretPosition(editableDiv) {
|
||||||
|
var caretPos = 0, sel, range;
|
||||||
|
if(window.getSelection) {
|
||||||
|
sel = window.getSelection();
|
||||||
|
if(sel.rangeCount) {
|
||||||
|
range = sel.getRangeAt(0);
|
||||||
|
if(range.commonAncestorContainer.parentNode == editableDiv) {
|
||||||
|
caretPos = range.endOffset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(document.selection && document.selection.createRange) {
|
||||||
|
range = document.selection.createRange();
|
||||||
|
if (range.parentElement() == editableDiv) {
|
||||||
|
var tempEl = document.createElement("span");
|
||||||
|
editableDiv.insertBefore(tempEl, editableDiv.firstChild);
|
||||||
|
var tempRange = range.duplicate();
|
||||||
|
tempRange.moveToElementText(tempEl);
|
||||||
|
tempRange.setEndPoint("EndToEnd", range);
|
||||||
|
caretPos = tempRange.text.length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return caretPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setCaretPosition(el, pos) {
|
||||||
|
// Loop through all child nodes
|
||||||
|
for(var node of el.childNodes) {
|
||||||
|
if(node.nodeType == 3){ // we have a text node
|
||||||
|
if(node.length >= pos) {
|
||||||
|
// finally add our range
|
||||||
|
var range = document.createRange(), sel = window.getSelection();
|
||||||
|
range.setStart(node,pos);
|
||||||
|
range.collapse(true);
|
||||||
|
sel.removeAllRanges();
|
||||||
|
sel.addRange(range);
|
||||||
|
return -1; // we are done
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pos -= node.length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pos = setCaretPosition(node,pos);
|
||||||
|
if(pos == -1) {
|
||||||
|
return -1; // no need to finish the for loop
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return pos; // needed because of recursion stuff
|
||||||
|
}
|
||||||
213
masks/chat.html
213
masks/chat.html
@@ -88,17 +88,19 @@ databap.pageInit = function()
|
|||||||
self.tmp('news_period', 10*60*1000);
|
self.tmp('news_period', 10*60*1000);
|
||||||
self.tmp('get_news', false);
|
self.tmp('get_news', false);
|
||||||
self.tmp('last_message_id', '0');
|
self.tmp('last_message_id', '0');
|
||||||
|
self.tmp('messages', 'object');
|
||||||
self.tmp('scrolling', 'boolean');
|
self.tmp('scrolling', 'boolean');
|
||||||
databap.tmp('tab_info', 'object');
|
databap.tmp('tab_info', 'object');
|
||||||
|
|
||||||
//Main elements
|
//Main elements
|
||||||
$MsgInput = databap.getMainElem('#message');
|
$MsgInput = databap.getMainElem('#message');
|
||||||
$MsgInputBox = databap.getMainElem('#chat_input');
|
$MsgInputBox = databap.getMainElem('#chat_input');
|
||||||
|
$MsgBox = databap.getMainElem('#chat_messages');
|
||||||
|
|
||||||
//Bind message box key events
|
//Bind message box key events
|
||||||
databap.getMainElem('#chat_form').submit(function(e){e.preventDefault();});
|
databap.getMainElem('#chat_form').submit(function(e){e.preventDefault();});
|
||||||
$MsgInput.bind('keydown', function(e){if(e.which == 9)e.preventDefault();});
|
$MsgInput.bind('keydown', function(e){if(e.which == 9)e.preventDefault();});
|
||||||
$MsgInput.keyup(function(e){keyController(e);});
|
$MsgInput.keyup(keyController);
|
||||||
|
|
||||||
//Loading the chat
|
//Loading the chat
|
||||||
self.initScrollBar('#chat_container', '#chat_messages_box', '#chat_messages');
|
self.initScrollBar('#chat_container', '#chat_messages_box', '#chat_messages');
|
||||||
@@ -466,8 +468,8 @@ function switchChan(sChanKeyName)
|
|||||||
$('#'+databap.consts.chanPrefix+sChanKeyName).addClass('active').removeClass('clickable');
|
$('#'+databap.consts.chanPrefix+sChanKeyName).addClass('active').removeClass('clickable');
|
||||||
|
|
||||||
//Show current channel messages
|
//Show current channel messages
|
||||||
databap.getMainElem('#chat_messages').find('p').hide();
|
$MsgBox.find('p').hide();
|
||||||
databap.getMainElem('#chat_messages').find('p.class_'+sChanKeyName+', p.class_'+databap.consts.all_chan_id).show();
|
$MsgBox.find('p.class_'+sChanKeyName+', p.class_'+databap.consts.all_chan_id).show();
|
||||||
|
|
||||||
//Update scrollbar
|
//Update scrollbar
|
||||||
databap.updateScrollBar(self.tmp('scrolling')?'relative':'bottom');
|
databap.updateScrollBar(self.tmp('scrolling')?'relative':'bottom');
|
||||||
@@ -563,7 +565,7 @@ function quitChan(sChanKeyName)
|
|||||||
if(sChanName == currentChan()) switchChan(Object.keys(databap.vars.chans_list)[1]);
|
if(sChanName == currentChan()) switchChan(Object.keys(databap.vars.chans_list)[1]);
|
||||||
|
|
||||||
//Delete messages
|
//Delete messages
|
||||||
databap.getMainElem('#chat_messages').find('p.class_'+sChanKeyName).remove();
|
$MsgBox.find('p.class_'+sChanKeyName).remove();
|
||||||
}
|
}
|
||||||
else databap.addFailIcon('Ceci est le dernier chan');
|
else databap.addFailIcon('Ceci est le dernier chan');
|
||||||
}
|
}
|
||||||
@@ -603,48 +605,49 @@ function postMessage(sMsg)
|
|||||||
return bSuccess;
|
return bSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
function keyController(e)
|
function keyController(e, elem)
|
||||||
{
|
{
|
||||||
|
let $This = $(elem || this); console.log($This);
|
||||||
|
let sType = $This.is('input')?'input':'regular';
|
||||||
if(e.keyCode != 9) databap.tmp('tab_info', {}); //See case 9, tab
|
if(e.keyCode != 9) databap.tmp('tab_info', {}); //See case 9, tab
|
||||||
switch(e.keyCode)
|
switch(e.keyCode)
|
||||||
{
|
{
|
||||||
case 13 : //enter
|
case 13 : //enter
|
||||||
var chat_message = $MsgInput.val();
|
var chat_message = $This.val();
|
||||||
var bSuccess = true;
|
var bSuccess = true;
|
||||||
if(chat_message.substr(0, 7) == '/join #') joinChan(chat_message.substr(7));
|
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.substr(0, 7) == '/quit #') quitChan(getChanKeyName(chat_message.substr(7)));
|
||||||
else if(chat_message == '/help') displayHelp();
|
else if(chat_message == '/help') displayHelp();
|
||||||
else if(chat_message.substr(0, 8) == '/invite ') invite($.trim(chat_message.substr(8)), currentChan());
|
else if(chat_message.substr(0, 8) == '/invite ') invite($.trim(chat_message.substr(8)), currentChan());
|
||||||
else if(chat_message != '' && $MsgInput.data('orig_msg_id')) editMessage($MsgInput.data('orig_msg_id'), chat_message);
|
else if(chat_message != '' && $This.data('orig_msg_id')) editMessage($This.data('orig_msg_id'), chat_message);
|
||||||
else if(chat_message != '') bSuccess = postMessage();
|
else if(chat_message != '') bSuccess = postMessage();
|
||||||
|
|
||||||
if(bSuccess)
|
if(bSuccess)
|
||||||
{
|
{
|
||||||
$MsgInput.val('');
|
$This.val('');
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 27 : //echap
|
case 27 : //echap
|
||||||
$MsgInput.val('');
|
$This.val('');
|
||||||
$MsgInput.data('orig_msg_id', '');
|
$This.data('orig_msg_id', '');
|
||||||
break;
|
break;
|
||||||
case 38 : //arrow up
|
case 38 : //arrow up
|
||||||
var $LastMsg = databap.getMainElem('#chat_messages').find('p.U[data-id-user='+databap.vars.user_id+'], p.P[data-id-user='+databap.vars.user_id+']').last();
|
var $LastMsg = $MsgBox.find('p.U[data-id-user='+databap.vars.user_id+'], p.P[data-id-user='+databap.vars.user_id+']').last();
|
||||||
if($MsgInput.val()=='' && $LastMsg.length)
|
if($This.val()=='' && $LastMsg.length)
|
||||||
{
|
{
|
||||||
$MsgInput.val($LastMsg.data('orig_msg'));
|
$This.val($LastMsg.data('orig_msg'));
|
||||||
$MsgInput.data('orig_msg_id', $LastMsg.data('id'));
|
$This.data('orig_msg_id', $LastMsg.data('id'));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 40 : //arrow down
|
case 40 : //arrow down
|
||||||
if($MsgInput.data('orig_msg_id'))
|
if($This.data('orig_msg_id'))
|
||||||
{
|
{
|
||||||
$MsgInput.val('');
|
$This.val('');
|
||||||
$MsgInput.data('orig_msg_id', '');
|
$This.data('orig_msg_id', '');
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 9 : //tab
|
case 9 : //tab
|
||||||
$This = databap.getMainElem('#message');
|
var sChatMsg = (sType=='input')?$This.val():$This.text();
|
||||||
var sChatMsg = $This.val();
|
|
||||||
var iChatMsgLen = sChatMsg.length;
|
var iChatMsgLen = sChatMsg.length;
|
||||||
|
|
||||||
if(!e.altKey && iChatMsgLen>0)
|
if(!e.altKey && iChatMsgLen>0)
|
||||||
@@ -663,7 +666,7 @@ function keyController(e)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
//Find word in chat message input box
|
//Find word in chat message input box
|
||||||
iCurPos = $This.getCursorPosition();
|
iCurPos = (sType=='input')?$This.getCursorPosition():getCaretPosition($This[0]);
|
||||||
iFirstPos = sChatMsg.substr(0, iCurPos).lastIndexOf(' ') + 1;
|
iFirstPos = sChatMsg.substr(0, iCurPos).lastIndexOf(' ') + 1;
|
||||||
iOffset = sChatMsg.substr(iFirstPos).indexOf(' ');
|
iOffset = sChatMsg.substr(iFirstPos).indexOf(' ');
|
||||||
sWord = sChatMsg.substr(iFirstPos, (iOffset==-1)?iChatMsgLen:iOffset);
|
sWord = sChatMsg.substr(iFirstPos, (iOffset==-1)?iChatMsgLen:iOffset);
|
||||||
@@ -713,8 +716,16 @@ function keyController(e)
|
|||||||
var sAfterWord = sChatMsg.substr(iFirstPos+sWordLen);
|
var sAfterWord = sChatMsg.substr(iFirstPos+sWordLen);
|
||||||
var sSafeNickName = asSafeUserList[iIndex];
|
var sSafeNickName = asSafeUserList[iIndex];
|
||||||
var sNickName = asUserList[sSafeNickName];
|
var sNickName = asUserList[sSafeNickName];
|
||||||
$This.val(sBeforeWord+sNickName+sAfterWord);
|
var sText = sBeforeWord+sNickName+sAfterWord;
|
||||||
$This.setCursorPosition((sBeforeWord+sNickName).length);
|
var sCaretPos = (sBeforeWord+sNickName).length;
|
||||||
|
if(sType=='input'){
|
||||||
|
$This.val(sText);
|
||||||
|
$This.setCursorPosition(sCaretPos);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$This.text(sText);
|
||||||
|
setCaretPosition($This[0], sCaretPos);
|
||||||
|
}
|
||||||
|
|
||||||
//Save value for tab-loops
|
//Save value for tab-loops
|
||||||
if(bLooping) databap.tmp(['tab_info', 'safe_nickname'], sSafeNickName); //not saving index in case of user list refresh
|
if(bLooping) databap.tmp(['tab_info', 'safe_nickname'], sSafeNickName); //not saving index in case of user list refresh
|
||||||
@@ -764,7 +775,7 @@ function refresh_chat(bReset)
|
|||||||
if(bReset)
|
if(bReset)
|
||||||
{
|
{
|
||||||
self.tmp('last_message_id', 0);
|
self.tmp('last_message_id', 0);
|
||||||
databap.getMainElem('#chat_messages').empty();
|
$MsgBox.empty();
|
||||||
}
|
}
|
||||||
databap.getInfo
|
databap.getInfo
|
||||||
(
|
(
|
||||||
@@ -822,36 +833,25 @@ function refresh_chat(bReset)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function addMessage(message_info, bReset)
|
function getMessage(message_info, bReset)
|
||||||
{
|
{
|
||||||
|
bReset = bReset || false;
|
||||||
message_info.nickname = message_info.nickname || '';
|
message_info.nickname = message_info.nickname || '';
|
||||||
|
|
||||||
var sChanKeyName = message_info.id_chan;
|
var sChanKeyName = message_info.id_chan;
|
||||||
var sMsgPrefix = '<a class="user clickable" title="Ecrire un PM à '+message_info.nickname+'">'+message_info.nickname+'</a><span class="console"></span>';
|
var sMsgPrefix = '<a class="user clickable" title="Ecrire un PM à '+message_info.nickname+'">'+message_info.nickname+'</a><span class="console"></span>';
|
||||||
var msg_body = '';
|
var msg_body = '';
|
||||||
var sUnreadChanName, iUnreadCount;
|
var sUnreadChanName, iUnreadCount;
|
||||||
var bSystemMsg = false;
|
|
||||||
var bImage = false;
|
var bImage = false;
|
||||||
var sNotif = '';
|
|
||||||
|
|
||||||
switch(message_info.msg_class)
|
switch(message_info.msg_class)
|
||||||
{
|
{
|
||||||
case databap.consts.msg_types.user:
|
case databap.consts.msg_types.user:
|
||||||
if(message_info.id_message_ref) { //edit user message
|
|
||||||
let $Msg = databap.getMainElem('#chat_messages').find('p[data-id='+message_info.id_message_ref+']');
|
|
||||||
$Msg.find('.msg_txt').text(message_info.message);
|
|
||||||
$Msg.find('.status').show().text('modifié');
|
|
||||||
$Msg.data('orig_msg', message_info.message);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
msg_body = sMsgPrefix+'<span class="msg_txt text'+(message_info.id_user==databap.vars.user_id?' editable':'')+'">'+message_info.message+'</span>';
|
msg_body = sMsgPrefix+'<span class="msg_txt text'+(message_info.id_user==databap.vars.user_id?' editable':'')+'">'+message_info.message+'</span>';
|
||||||
sNotif = message_info.nickname+' : '+message_info.message;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case databap.consts.msg_types.news:
|
case databap.consts.msg_types.news:
|
||||||
databap.tmp('get_news', true);
|
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>';
|
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>';
|
||||||
sNotif = message_info.nickname+' a une news : '+message_info.message;
|
|
||||||
break;
|
break;
|
||||||
case databap.consts.msg_types.add.code:
|
case databap.consts.msg_types.add.code:
|
||||||
var url = databap.getInternalLink('code', message_info.message);
|
var url = databap.getInternalLink('code', message_info.message);
|
||||||
@@ -876,17 +876,7 @@ function addMessage(message_info, bReset)
|
|||||||
var slicePos = message_info.message.indexOf(' ');
|
var slicePos = message_info.message.indexOf(' ');
|
||||||
var msgTargetUser = message_info.message.substr(1, slicePos - 1);
|
var msgTargetUser = message_info.message.substr(1, slicePos - 1);
|
||||||
var msg = message_info.message.slice(slicePos + 1);
|
var msg = message_info.message.slice(slicePos + 1);
|
||||||
if(message_info.id_message_ref) { //edit user message
|
|
||||||
let $Msg = databap.getMainElem('#chat_messages').find('p[data-id='+message_info.id_message_ref+']');
|
|
||||||
$Msg.find('.highlight').text(msgTargetUser);
|
|
||||||
$Msg.find('.msg_txt').text(msg);
|
|
||||||
$Msg.find('.status').show().text('modifié');
|
|
||||||
$Msg.data('orig_msg', message_info.message);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
msg_body = '<a class="user clickable" title="Ecrire un PM à '+message_info.nickname+'">'+message_info.nickname+'</a><span class="console"><span class="highlight">'+msgTargetUser+'</span></span><span class="msg_txt text'+(message_info.id_user==databap.vars.user_id?' editable':'')+'">'+msg+'</span>';
|
msg_body = '<a class="user clickable" title="Ecrire un PM à '+message_info.nickname+'">'+message_info.nickname+'</a><span class="console"><span class="highlight">'+msgTargetUser+'</span></span><span class="msg_txt text'+(message_info.id_user==databap.vars.user_id?' editable':'')+'">'+msg+'</span>';
|
||||||
sNotif = message_info.nickname+' @'+msgTargetUser+' : '+msg;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case databap.consts.msg_types.nick:
|
case databap.consts.msg_types.nick:
|
||||||
msg_body = '<span class="text">'+message_info.message+' (<a href="'+databap.getInternalLink('profil', message_info.id_user)+'" target="_blank"><i class="fa fa-c-profile fa-inline"></i>'+message_info.name+'</a>)</span>';
|
msg_body = '<span class="text">'+message_info.message+' (<a href="'+databap.getInternalLink('profil', message_info.id_user)+'" target="_blank"><i class="fa fa-c-profile fa-inline"></i>'+message_info.name+'</a>)</span>';
|
||||||
@@ -895,7 +885,6 @@ function addMessage(message_info, bReset)
|
|||||||
case databap.consts.msg_types.conn:
|
case databap.consts.msg_types.conn:
|
||||||
updateUsersList = true;
|
updateUsersList = true;
|
||||||
msg_body = (!self.vars2('opt_console'))?'':'<span class="text action">'+message_info.nickname+' '+message_info.message+'</span>';
|
msg_body = (!self.vars2('opt_console'))?'':'<span class="text action">'+message_info.nickname+' '+message_info.message+'</span>';
|
||||||
bSystemMsg = true;
|
|
||||||
break;
|
break;
|
||||||
case databap.consts.msg_types.img:
|
case databap.consts.msg_types.img:
|
||||||
message_info.message = {url:message_info.message[3], title:'Source : '+message_info.message[3], url_img:message_info.message[0], width:message_info.message[1], height:message_info.message[2]};
|
message_info.message = {url:message_info.message[3], title:'Source : '+message_info.message[3], url_img:message_info.message[0], width:message_info.message[1], height:message_info.message[2]};
|
||||||
@@ -903,19 +892,16 @@ function addMessage(message_info, bReset)
|
|||||||
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>';
|
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>';
|
msg_body = sMsgPrefix+'<span class="text">'+msg+'</span>';
|
||||||
bImage = true;
|
bImage = true;
|
||||||
sNotif = message_info.nickname+' a posté une image';
|
|
||||||
break;
|
break;
|
||||||
case databap.consts.msg_types.reboot:
|
case databap.consts.msg_types.reboot:
|
||||||
if(!bReset)
|
if(!bReset)
|
||||||
{
|
{
|
||||||
msg_body = '<span class="text action">'+message_info.message+'</span>';
|
msg_body = '<span class="text action">'+message_info.message+'</span>';
|
||||||
setTimeout(databap.refresh, databap.consts.reboot_delay*1000);
|
setTimeout(databap.refresh, databap.consts.reboot_delay*1000);
|
||||||
bSystemMsg = true;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case databap.consts.msg_types.invite:
|
case databap.consts.msg_types.invite:
|
||||||
if(!bReset) joinChan(sChanKeyName, false, [], false);
|
if(!bReset) joinChan(sChanKeyName, false, [], false);
|
||||||
bSystemMsg = true;
|
|
||||||
break;
|
break;
|
||||||
case databap.consts.msg_types.article:
|
case databap.consts.msg_types.article:
|
||||||
var url = databap.getInternalLink('a', message_info.message);
|
var url = databap.getInternalLink('a', message_info.message);
|
||||||
@@ -959,28 +945,88 @@ function addMessage(message_info, bReset)
|
|||||||
$Msg.find('a').addClass('img_box').append($Banner);
|
$Msg.find('a').addClass('img_box').append($Banner);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(message_info.edited) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
//Adding message to channel panel
|
//Adding message to channel panel
|
||||||
$Message = $('<p>', {'class':message_info.msg_class+' class_'+sChanKeyName+' hide round_right', 'data-id':message_info.id, 'data-id-user':message_info.id_user})
|
$Message = $('<p>', {'class':message_info.msg_class+' class_'+sChanKeyName+' hide round_right', 'data-id':message_info.id, 'data-id-user':message_info.id_user})
|
||||||
.data('orig_msg', message_info.message)
|
.data('orig_msg', message_info.message)
|
||||||
.append($('<span>', {'class':'time'}).text(((message_info.date==databap.consts.cur_date)?'':message_info.date+' - ')+message_info.time))
|
.append($('<span>', {'class':'time'}).text(((message_info.date==databap.consts.cur_date)?'':message_info.date+' - ')+message_info.time))
|
||||||
.append($Msg)
|
.append($Msg)
|
||||||
.append($('<span>', {'class':'status'}));
|
.append($('<span>', {'class':'status'}).text('modifié'));
|
||||||
$Message.find('.chan_link').click(function(){joinChan($(this).find('.chan_text').text());});
|
$Message.find('.chan_link').click(function(){joinChan($(this).find('.chan_text').text());});
|
||||||
$Message.find('.user').click(setPm);
|
$Message.find('.user').click(setPm);
|
||||||
databap.getMainElem('#chat_messages').append($Message);
|
|
||||||
|
|
||||||
//Edit own message
|
|
||||||
$Message.find('.editable').hover(toggleEditButton).click(onMessageEditClick);
|
$Message.find('.editable').hover(toggleEditButton).click(onMessageEditClick);
|
||||||
|
|
||||||
|
if(message_info.edited) $Message.find('.status').show();
|
||||||
|
}
|
||||||
|
else $Message = null;
|
||||||
|
|
||||||
|
databap.tmp(['messages', message_info.id], message_info);
|
||||||
|
|
||||||
|
return $Message;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getNotif(message_info) {
|
||||||
|
let sNotif = '';
|
||||||
|
|
||||||
|
switch(message_info.msg_class)
|
||||||
|
{
|
||||||
|
case databap.consts.msg_types.user:
|
||||||
|
sNotif = message_info.nickname+' : '+message_info.message;
|
||||||
|
break;
|
||||||
|
case databap.consts.msg_types.news:
|
||||||
|
sNotif = message_info.nickname+' a une news : '+message_info.message;
|
||||||
|
break;
|
||||||
|
case databap.consts.msg_types['private']:
|
||||||
|
var slicePos = message_info.message.indexOf(' ');
|
||||||
|
sNotif = message_info.nickname+' @'+message_info.message.substr(1, slicePos - 1)+' : '+message_info.message.slice(slicePos + 1);
|
||||||
|
break;
|
||||||
|
case databap.consts.msg_types.img:
|
||||||
|
case databap.consts.msg_types['9gag']:
|
||||||
|
sNotif = message_info.nickname+' a posté une image';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sNotif;
|
||||||
|
}
|
||||||
|
|
||||||
|
function addMessage(message_info, bReset) {
|
||||||
|
let bNotif = false;
|
||||||
|
if(message_info.id_message_ref) {
|
||||||
|
let oOrigMsg = databap.tmp(['messages', message_info.id_message_ref]);
|
||||||
|
if(oOrigMsg) {
|
||||||
|
oOrigMsg.message = message_info.message;
|
||||||
|
oOrigMsg.msg_class = message_info.msg_class;
|
||||||
|
oOrigMsg.edited = true;
|
||||||
|
|
||||||
|
$MsgBox.find('p[data-id='+message_info.id_message_ref+']').after(getMessage(oOrigMsg)).remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
let $Message = getMessage(message_info, bReset);
|
||||||
|
let bSystemMsg = ($.inArray(message_info.msg_class, [databap.consts.msg_types.conn, databap.consts.msg_types.reboot, databap.consts.msg_types.invite]) >= 0);
|
||||||
|
if($Message) {
|
||||||
|
$MsgBox.append($Message);
|
||||||
|
|
||||||
//Unread messages
|
//Unread messages
|
||||||
if(!bReset && !bSystemMsg /* && message_info.id_user!=databap.vars.user_id */)
|
if(!bReset && !bSystemMsg)
|
||||||
{
|
{
|
||||||
sUnreadChanName = getChanName(message_info.id_chan);
|
sUnreadChanName = getChanName(message_info.id_chan);
|
||||||
iUnreadCount = (databap.tmp(['unread_msg', sUnreadChanName]) || 0) + 1;
|
iUnreadCount = (databap.tmp(['unread_msg', sUnreadChanName]) || 0) + 1;
|
||||||
databap.tmp(['unread_msg', sUnreadChanName], iUnreadCount);
|
databap.tmp(['unread_msg', sUnreadChanName], iUnreadCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Move to bottom if user is typing
|
||||||
|
if(message_info.id_user===databap.vars.user_id) self.tmp('scrolling', false);
|
||||||
|
bNotif = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//Desktop Notification
|
//Desktop Notification
|
||||||
if(!databap.vars.focus && sNotif != '' && Push.Permission.has()) {
|
let sNotif = getNotif(message_info);
|
||||||
|
if(bNotif && !databap.vars.focus && sNotif != '' && Push.Permission.has()) {
|
||||||
Push.create('Databap - '+message_info.nickname, {
|
Push.create('Databap - '+message_info.nickname, {
|
||||||
body: sNotif,
|
body: sNotif,
|
||||||
icon: databap.consts.app_image_folder+(databap.tmp(['logos', message_info.id_user]) || 'logo_25.png'),
|
icon: databap.consts.app_image_folder+(databap.tmp(['logos', message_info.id_user]) || 'logo_25.png'),
|
||||||
@@ -993,11 +1039,6 @@ function addMessage(message_info, bReset)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Move to bottom if user is typing
|
|
||||||
if(message_info.id_user===databap.vars.user_id) self.tmp('scrolling', false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggleEditButton()
|
function toggleEditButton()
|
||||||
{
|
{
|
||||||
let $Editable = $(this); //.editable
|
let $Editable = $(this); //.editable
|
||||||
@@ -1009,38 +1050,55 @@ function toggleEditButton()
|
|||||||
function onMessageEditClick()
|
function onMessageEditClick()
|
||||||
{
|
{
|
||||||
let $Editable = $(this);
|
let $Editable = $(this);
|
||||||
$Editable.prop('contenteditable', 'true').focus();
|
|
||||||
|
|
||||||
if($Editable.data('backup') == null)
|
|
||||||
{
|
|
||||||
let $Message = $Editable.parents('p');
|
let $Message = $Editable.parents('p');
|
||||||
let sPreContent = '';
|
let bPrivate = $Message.hasClass('P');
|
||||||
if($Message.hasClass('P')) sPreContent = '@'+$Message.find('.highlight').text()+' ';
|
let sDisplayedMsg = $Editable.text();
|
||||||
|
let sOriginalMsg = $Message.data('orig_msg');
|
||||||
|
|
||||||
$Editable
|
$Editable
|
||||||
.data('backup', $Editable.text())
|
.prop('contenteditable', 'true')
|
||||||
.data('pre', sPreContent)
|
.data('disp_msg', sDisplayedMsg)
|
||||||
|
.focus();
|
||||||
|
|
||||||
|
if(sDisplayedMsg != sOriginalMsg) {
|
||||||
|
let iCaretPos = getCaretPosition($Editable[0]);
|
||||||
|
$Editable.text(sOriginalMsg);
|
||||||
|
setCaretPosition($Editable[0], iCaretPos + sOriginalMsg.indexOf(sDisplayedMsg));
|
||||||
|
}
|
||||||
|
if(bPrivate) $Message.find('.console').hide();
|
||||||
|
|
||||||
|
$Editable
|
||||||
|
.off('focusout keydown keyup')
|
||||||
|
.keyup(function(e) {
|
||||||
|
if(e.keyCode == 9) {
|
||||||
|
e.preventDefault();
|
||||||
|
keyController(e, this);
|
||||||
|
console.log('shoot');
|
||||||
|
}
|
||||||
|
})
|
||||||
.on('focusout keydown', function(e) {
|
.on('focusout keydown', function(e) {
|
||||||
let $This = $(this);
|
let $This = $(this);
|
||||||
if(e.type == 'focusout' || e.which == 13) {
|
if(e.type == 'focusout' || e.which == 13) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
var sOldMsg = $This.data('backup');
|
let $Message = $Editable.parents('p');
|
||||||
var sNewMsg = $This.text();
|
let sOldMsg = $Message.data('orig_msg');
|
||||||
|
let sNewMsg = $This.text();
|
||||||
|
|
||||||
if(sOldMsg != sNewMsg) {
|
if(sOldMsg != sNewMsg) {
|
||||||
$This.data('backup', sNewMsg);
|
|
||||||
$This.prop('contenteditable', 'false');
|
$This.prop('contenteditable', 'false');
|
||||||
|
editMessage($This.parents('p').data('id'), sNewMsg);
|
||||||
editMessage($This.parents('p').data('id'), $This.data('pre')+sNewMsg, function(){$This.data('backup', sOldMsg);});
|
}
|
||||||
|
else {
|
||||||
|
$This.text($This.data('disp_msg'));
|
||||||
|
$Message.find('.console').show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(e.keyCode == 9) e.preventDefault();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
function editMessage(iMsgId, sNewMsg, fOnError)
|
function editMessage(iMsgId, sNewMsg)
|
||||||
{
|
{
|
||||||
fOnError = fOnError || function(){};
|
|
||||||
databap.getInfo
|
databap.getInfo
|
||||||
(
|
(
|
||||||
'edit_message',
|
'edit_message',
|
||||||
@@ -1053,7 +1111,6 @@ function editMessage(iMsgId, sNewMsg, fOnError)
|
|||||||
'json',
|
'json',
|
||||||
function(textStatus)
|
function(textStatus)
|
||||||
{
|
{
|
||||||
fOnError();
|
|
||||||
databap.showError(textStatus);
|
databap.showError(textStatus);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -740,6 +740,9 @@
|
|||||||
text-decoration:none;
|
text-decoration:none;
|
||||||
font-style:normal;
|
font-style:normal;
|
||||||
}
|
}
|
||||||
|
#chat_messages p.P span.console {
|
||||||
|
margin-left:5px;
|
||||||
|
}
|
||||||
#chat_messages p span.time {
|
#chat_messages p span.time {
|
||||||
color:$col_hover_1;
|
color:$col_hover_1;
|
||||||
font-size:$size_small;
|
font-size:$size_small;
|
||||||
|
|||||||
Reference in New Issue
Block a user