diff --git a/static/js/copy.js b/static/js/copy.js index 673ac7a..8e5c71c 100644 --- a/static/js/copy.js +++ b/static/js/copy.js @@ -1,22 +1,28 @@ -document.addEventListener('DOMContentLoaded', function() { - const codeBlocks = document.querySelectorAll('.highlight pre code[class*="language-"]::before'); +// Получаем элементы, с которыми будем работать +const codeElement = document.querySelector('.highlight code'); +const spanElement = codeElement.querySelector('span span'); - codeBlocks.forEach(codeBlock => { - codeBlock.addEventListener('click', function() { - const textToCopy = this.nextElementSibling.innerText; - copyTextToClipboard(textToCopy); - alert('Текст скопирован в буфер обмена: ' + textToCopy); - }); - }); - - function copyTextToClipboard(text) { - const tempInput = document.createElement('textarea'); - tempInput.style.position = 'absolute'; - tempInput.style.left = '-9999px'; - tempInput.value = text; - document.body.appendChild(tempInput); - tempInput.select(); - document.execCommand('copy'); - document.body.removeChild(tempInput); - } +// Добавляем обработчик события на ::before псевдоэлемент +codeElement.addEventListener('click', () => { + // Создаем временный элемент textarea + const tempTextarea = document.createElement('textarea'); + + // Устанавливаем значение текста в textarea равным тексту из span + tempTextarea.value = spanElement.textContent; + + // Добавляем textarea в документ (необходимо, чтобы метод .select() сработал) + document.body.appendChild(tempTextarea); + + // Выделяем текст в textarea + tempTextarea.select(); + + // Копируем выделенный текст в буфер обмена + document.execCommand('copy'); + + // Удаляем временный элемент textarea + document.body.removeChild(tempTextarea); + + // Можно добавить визуальную обратную связь для пользователя, например, изменить стиль ::before + // codeElement.style.setProperty('content', '"Copied!"'); + // setTimeout(() => codeElement.style.removeProperty('content'), 1000); }); \ No newline at end of file