From c0c89fe50afb74b50bcea8978e940a84b813950e Mon Sep 17 00:00:00 2001 From: Franzz Date: Wed, 9 Aug 2023 22:58:23 +0200 Subject: [PATCH] Fix link in edited messages --- inc/databap.php | 8 +++-- masks/chat.html | 95 +++++++++++++++++++++++++------------------------ 2 files changed, 53 insertions(+), 50 deletions(-) diff --git a/inc/databap.php b/inc/databap.php index 743ad5f..d64b620 100755 --- a/inc/databap.php +++ b/inc/databap.php @@ -216,7 +216,6 @@ class Databap extends PhpObject header('Content-Type: text/html; charset='.Settings::TEXT_ENC); mb_internal_encoding(Settings::TEXT_ENC); mb_http_output(Settings::TEXT_ENC); - mb_http_input(Settings::TEXT_ENC); mb_language('uni'); mb_regex_encoding(Settings::TEXT_ENC); @@ -2272,12 +2271,15 @@ class Databap extends PhpObject else //Normal message { //Internal links - $asMessages['messages'][$iMessageId]['message'] = Toolbox::findReplaceLinks($asMessages['messages'][$iMessageId]['message']); + $sFormatedMsg = Toolbox::findReplaceLinks($asMessages['messages'][$iMessageId]['message']); //Dynamic chan link $asPatterns = '/(^|\s)#(\w*[^\s]+\w*)/u'; $asLinks = '\1#\2'; - $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; } } diff --git a/masks/chat.html b/masks/chat.html index f82bf0f..acf5036 100755 --- a/masks/chat.html +++ b/masks/chat.html @@ -945,19 +945,16 @@ function getMessage(message_info, bReset) $Msg.find('a').addClass('img_box').append($Banner); } - if(message_info.edited) { - - } - //Adding message to channel panel $Message = $('

', {'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($('', {'class':'time'}).text(((message_info.date==databap.consts.cur_date)?'':message_info.date+' - ')+message_info.time)) .append($Msg) .append($('', {'class':'status'}).text('modifié')); $Message.find('.chan_link').click(function(){joinChan($(this).find('.chan_text').text());}); $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(); } @@ -998,6 +995,7 @@ function addMessage(message_info, bReset) { let oOrigMsg = databap.tmp(['messages', message_info.id_message_ref]); if(oOrigMsg) { oOrigMsg.message = message_info.message; + oOrigMsg.message_original = message_info.message_original || message_info.message; oOrigMsg.msg_class = message_info.msg_class; oOrigMsg.edited = true; @@ -1039,61 +1037,64 @@ function addMessage(message_info, bReset) { } } -function toggleEditButton() +function toggleEditButton(eEvent) { let $Editable = $(this); //.editable - let $EditBtn = $Editable.next('.edit-btn'); - if($EditBtn.length > 0) $EditBtn.remove(); - else $Editable.after($('', {'class':'text edit-btn'}).append($('', {'class': 'fa fa-fw fa-c-edit'}))); + let $EditBtn = $Editable.next('.edit-btn') + if(eEvent.type == 'mouseleave' && $EditBtn.length > 0) $EditBtn.remove(); + if(eEvent.type == 'mouseenter' && $EditBtn.length == 0) $Editable.after($('', {'class':'text edit-btn'}).append($('', {'class': 'fa fa-fw fa-c-edit'}))); } -function onMessageEditClick() +function onMessageEditClick(eClick) { let $Editable = $(this); let $Message = $Editable.parents('p'); let bPrivate = $Message.hasClass('P'); - let sDisplayedMsg = $Editable.text(); + let sDisplayedMsg = $Message.data('disp_msg'); let sOriginalMsg = $Message.data('orig_msg'); + let bEditing = ($Editable.prop('contenteditable') == 'true'); - $Editable - .prop('contenteditable', 'true') - .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(); + if(!bEditing && !eClick.ctrlKey) { + $Editable + .prop('contenteditable', 'true') + .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); - } - }) - .on('focusout keydown', function(e) { - let $This = $(this); - if(e.type == 'focusout' || e.which == 13) { - e.preventDefault(); - let $Message = $Editable.parents('p'); - let sOldMsg = $Message.data('orig_msg'); - let sNewMsg = $This.text(); + $Editable + .off('focusout keydown keyup') + .keyup(function(e) { + if(e.keyCode == 9) { + e.preventDefault(); + keyController(e, this); + } + }) + .on('focusout keydown', function(e) { + let $This = $(this); + if(e.type == 'focusout' || e.which == 13) { + e.preventDefault(); + let $Message = $Editable.parents('p'); + let sOldMsg = $Message.data('orig_msg'); + let sNewMsg = $This.text(); - if(sOldMsg != sNewMsg) { $This.prop('contenteditable', 'false'); - editMessage($This.parents('p').data('id'), sNewMsg); + if(sOldMsg != sNewMsg) { + editMessage($This.parents('p').data('id'), sNewMsg); + } + else { + $This.html($Message.data('disp_msg')); + $Message.find('.console').show(); + } } - else { - $This.text($This.data('disp_msg')); - $Message.find('.console').show(); - } - } - else if(e.keyCode == 9) e.preventDefault(); - }); + else if(e.keyCode == 9) e.preventDefault(); + }); + } } function editMessage(iMsgId, sNewMsg)