<?php
/**
* Обработка взаимодействий с сообщением в DOM.
* Предполагается, что этот скрипт подключен к странице, содержащей указанный HTML.
* Реализует функции копирования текста, регенерации и удаления сообщений.
*/
// Функция копирования текста из элемента по его ID
function copyText(string $elementId): void
{
echo "<script>
function copyTextToClipboard(id) {
const textElement = document.getElementById(id);
if (textElement) {
const range = document.createRange();
range.selectNodeContents(textElement);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
alert('Текст скопирован!');
} catch (err) {
alert('Не удалось скопировать текст.');
}
// Очистить выделение
selection.removeAllRanges();
}
}
copyTextToClipboard('$elementId');
</script>";
}
// Функция регенерации сообщения (обычно запрос к серверу для получения нового контента)
function regenerateMessage(string $messageId): void
{
// Здесь должен быть AJAX-запрос к серверу для получения нового текста сообщения
// Ниже пример простого отображения. Реально это нужно реализовать по API.
echo "<script>
function regenerate(messageId) {
// Пример: отправка AJAX-запроса и обновление содержимого
fetch('regenerate.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ id: messageId })
})
.then(response => response.json())
.then(data => {
if (data.success) {
document.getElementById('ai-text-' + messageId).innerHTML = data.newContent;
} else {
alert('Не удалось regenerate сообщение.');
}
})
.catch(error => {
console.error('Ошибка:', error);
alert('Произошла ошибка при regeneration.');
});
}
regenerate('$messageId');
</script>";
}
// Функция удаления сообщения
function deleteMessage(string $messageId): void
{
// В реале нужно отправить запрос на сервер для удаления
echo "<script>
function deleteMsg(messageId) {
if (confirm('Вы уверены, что хотите удалить сообщение?')) {
fetch('delete_message.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ id: messageId })
})
.then(response => response.json())
.then(data => {
if (data.success) {
// Удалить элемент из DOM
const elem = document.getElementById('msg-pair-' + messageId);
if (elem) {
elem.remove();
}
} else {
alert('Ошибка при удалении сообщения.');
}
})
.catch(error => {
console.error('Ошибка:', error);
alert('Произошла ошибка при удалении.');
});
}
}
deleteMsg('$messageId');
</script>";
}
/**
* Использование: вставите вызовы функций в обработчики событий кнопок
* Примеры:
* <button onclick="copyText('ai-text-e7211a4b-32dc-4a2f-b485-5f3a6d54d0f7')">Копировать</button>
* <button onclick="regenerateMessage('e7211a4b-32dc-4a2f-b485-5f3a6d54d0f7')">Регенерировать</button>
* <button onclick="deleteMessage('e7211a4b-32dc-4a2f-b485-5f3a6d54d0f7')">Удалить</button>
*/
?>
Пояснение:
- В коде реализованы JavaScript функции, вызываемые по onclick кнопок.
- Функции используют fetch API для взаимодействия с сервером (подразумеваемые скрипты
regenerate.phpиdelete_message.php). - Для копирования текста используется
document.execCommand('copy')внутри функцииcopyTextToClipboard. - В реальной системе добавьте соответствующие серверные скрипты, обрабатывающие запросы и возвращающие JSON-ответы.