Fix link in edited messages

This commit is contained in:
2023-08-09 22:58:23 +02:00
parent 5c629e9bf6
commit c0c89fe50a
2 changed files with 53 additions and 50 deletions

View File

@@ -216,7 +216,6 @@ class Databap extends PhpObject
header('Content-Type: text/html; charset='.Settings::TEXT_ENC); header('Content-Type: text/html; charset='.Settings::TEXT_ENC);
mb_internal_encoding(Settings::TEXT_ENC); mb_internal_encoding(Settings::TEXT_ENC);
mb_http_output(Settings::TEXT_ENC); mb_http_output(Settings::TEXT_ENC);
mb_http_input(Settings::TEXT_ENC);
mb_language('uni'); mb_language('uni');
mb_regex_encoding(Settings::TEXT_ENC); mb_regex_encoding(Settings::TEXT_ENC);
@@ -2272,12 +2271,15 @@ class Databap extends PhpObject
else //Normal message else //Normal message
{ {
//Internal links //Internal links
$asMessages['messages'][$iMessageId]['message'] = Toolbox::findReplaceLinks($asMessages['messages'][$iMessageId]['message']); $sFormatedMsg = Toolbox::findReplaceLinks($asMessages['messages'][$iMessageId]['message']);
//Dynamic chan link //Dynamic chan link
$asPatterns = '/(^|\s)#(\w*[^\s]+\w*)/u'; $asPatterns = '/(^|\s)#(\w*[^\s]+\w*)/u';
$asLinks = '\1<span class="chan_link clickable">#<span class="chan_text">\2</span></span>'; $asLinks = '\1<span class="chan_link clickable">#<span class="chan_text">\2</span></span>';
$asMessages['messages'][$iMessageId]['message'] = preg_replace($asPatterns, $asLinks, $asMessages['messages'][$iMessageId]['message']); $sFormatedMsg = preg_replace($asPatterns, $asLinks, $sFormatedMsg);
if($asMessages['messages'][$iMessageId]['message'] != $sFormatedMsg) $asMessages['messages'][$iMessageId]['message_original'] = $asMessages['messages'][$iMessageId]['message'];
$asMessages['messages'][$iMessageId]['message'] = $sFormatedMsg;
} }
} }

View File

@@ -945,19 +945,16 @@ function getMessage(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_original || message_info.message)
.data('disp_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'}).text('modifié')); .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);
$Message.find('.editable').hover(toggleEditButton).click(onMessageEditClick); $Message.find('.editable').on('mouseenter', toggleEditButton).on('mouseleave', toggleEditButton).click(onMessageEditClick);
if(message_info.edited) $Message.find('.status').show(); if(message_info.edited) $Message.find('.status').show();
} }
@@ -998,6 +995,7 @@ function addMessage(message_info, bReset) {
let oOrigMsg = databap.tmp(['messages', message_info.id_message_ref]); let oOrigMsg = databap.tmp(['messages', message_info.id_message_ref]);
if(oOrigMsg) { if(oOrigMsg) {
oOrigMsg.message = message_info.message; oOrigMsg.message = message_info.message;
oOrigMsg.message_original = message_info.message_original || message_info.message;
oOrigMsg.msg_class = message_info.msg_class; oOrigMsg.msg_class = message_info.msg_class;
oOrigMsg.edited = true; oOrigMsg.edited = true;
@@ -1039,32 +1037,34 @@ function addMessage(message_info, bReset) {
} }
} }
function toggleEditButton() function toggleEditButton(eEvent)
{ {
let $Editable = $(this); //.editable let $Editable = $(this); //.editable
let $EditBtn = $Editable.next('.edit-btn'); let $EditBtn = $Editable.next('.edit-btn')
if($EditBtn.length > 0) $EditBtn.remove(); if(eEvent.type == 'mouseleave' && $EditBtn.length > 0) $EditBtn.remove();
else $Editable.after($('<span>', {'class':'text edit-btn'}).append($('<i>', {'class': 'fa fa-fw fa-c-edit'}))); if(eEvent.type == 'mouseenter' && $EditBtn.length == 0) $Editable.after($('<span>', {'class':'text edit-btn'}).append($('<i>', {'class': 'fa fa-fw fa-c-edit'})));
} }
function onMessageEditClick() function onMessageEditClick(eClick)
{ {
let $Editable = $(this); let $Editable = $(this);
let $Message = $Editable.parents('p'); let $Message = $Editable.parents('p');
let bPrivate = $Message.hasClass('P'); let bPrivate = $Message.hasClass('P');
let sDisplayedMsg = $Editable.text(); let sDisplayedMsg = $Message.data('disp_msg');
let sOriginalMsg = $Message.data('orig_msg'); let sOriginalMsg = $Message.data('orig_msg');
let bEditing = ($Editable.prop('contenteditable') == 'true');
if(!bEditing && !eClick.ctrlKey) {
$Editable $Editable
.prop('contenteditable', 'true') .prop('contenteditable', 'true')
.data('disp_msg', sDisplayedMsg)
.focus(); .focus();
if(sDisplayedMsg != sOriginalMsg) { if(sDisplayedMsg != sOriginalMsg) {
let iCaretPos = getCaretPosition($Editable[0]); //let iCaretPos = getCaretPosition($Editable[0]);
$Editable.text(sOriginalMsg); $Editable.text(sOriginalMsg);
setCaretPosition($Editable[0], iCaretPos + sOriginalMsg.indexOf(sDisplayedMsg)); //setCaretPosition($Editable[0], iCaretPos + sOriginalMsg.indexOf(sDisplayedMsg));
} }
if(bPrivate) $Message.find('.console').hide(); if(bPrivate) $Message.find('.console').hide();
$Editable $Editable
@@ -1083,18 +1083,19 @@ function onMessageEditClick()
let sOldMsg = $Message.data('orig_msg'); let sOldMsg = $Message.data('orig_msg');
let sNewMsg = $This.text(); let sNewMsg = $This.text();
if(sOldMsg != sNewMsg) {
$This.prop('contenteditable', 'false'); $This.prop('contenteditable', 'false');
if(sOldMsg != sNewMsg) {
editMessage($This.parents('p').data('id'), sNewMsg); editMessage($This.parents('p').data('id'), sNewMsg);
} }
else { else {
$This.text($This.data('disp_msg')); $This.html($Message.data('disp_msg'));
$Message.find('.console').show(); $Message.find('.console').show();
} }
} }
else if(e.keyCode == 9) e.preventDefault(); else if(e.keyCode == 9) e.preventDefault();
}); });
} }
}
function editMessage(iMsgId, sNewMsg) function editMessage(iMsgId, sNewMsg)
{ {