From 7290399240a6f068e00753e5dc7f053a2cd89652 Mon Sep 17 00:00:00 2001
From: Cunninger <1803912219@qq.com>
Date: Tue, 14 Jan 2025 20:10:32 +0800
Subject: [PATCH] fix: resolve copy issue in recognition history interface
---
worker.js | 64 +++++++++++++++++++++++++++++++++++++++----------------
1 file changed, 46 insertions(+), 18 deletions(-)
diff --git a/worker.js b/worker.js
index 38fc9ca..a25f1b4 100644
--- a/worker.js
+++ b/worker.js
@@ -1135,7 +1135,7 @@ function getHTML() {
'
',
@@ -1285,6 +1285,12 @@ function getHTML() {
' }',
' const result = recognizeData.result || \'识别失败\';',
+ ' // 保存原始文本到属性中,确保 LaTeX 格式完整',
+ ' const formattedResult = result',
+ ' .replace(/\$\$(.*?)\$\$/g, (_, formula) => `$${formula}$$`)',
+ ' .replace(/\$([^$]+)\$/g, (_, formula) => `$${formula}$`);',
+
+ ' resultDiv.setAttribute(\'data-original-text\', formattedResult);',
' resultDiv.innerHTML = result;',
' waitForMathJax(() => {',
' try {',
@@ -1414,11 +1420,14 @@ function getHTML() {
' const copyBtn = document.getElementById(\'copyBtn\');',
- ' // 复制结果功能',
+ ' // 修改复制结果功能,保持完整的 LaTeX 格式',
' copyBtn.addEventListener(\'click\', async () => {',
- ' const result = resultDiv.textContent;',
- ' toggleBase64.textContent = \'隐藏Base64输入\';',
+ ' // 获取原始文本(包含完整的 LaTeX 格式)',
+ ' const result = resultDiv.getAttribute(\'data-original-text\');',
+ ' if (!result) return;',
+
' try {',
+ ' // 直接复制包含 LaTeX 标记的文本',
' await navigator.clipboard.writeText(result);',
' copyBtn.textContent = \'已复制\';',
' copyBtn.classList.add(\'copied\');',
@@ -1430,10 +1439,12 @@ function getHTML() {
' console.error(\'复制失败:\', err);',
' }',
' });',
+
' // 添加关闭侧边栏的功能',
' document.getElementById("closeSidebar").addEventListener("click", () => {',
' sidebar.classList.remove("open");',
' });',
+
' // Base64 输入相关功能',
' const base64Input = document.getElementById(\'base64Input\');',
' const toggleBase64 = document.getElementById(\'toggleBase64\');',
@@ -1496,29 +1507,46 @@ function getHTML() {
' }',
' });',
- ' // 复制历史记录结果',
- ' async function copyHistoryResult(index) {',
- ' const history = historyManager.loadHistory(currentToken);',
- ' const result = history[index]?.result;',
-
- ' if (!result) {',
- ' alert(\'无法复制:结果为空\');',
- ' return;',
- ' }',
-
+ ' // 复制历史记录结果,保持完整的 LaTeX 格式',
+ ' async function copyHistoryResult(index, btn) {',
' try {',
- ' await navigator.clipboard.writeText(result);',
- ' const btn = event.target;',
+ ' const history = historyManager.loadHistory(currentToken);',
+ ' const result = history[index]?.result;',
+
+ ' if (!result) {',
+ ' throw new Error(\'无法复制:结果为空\');',
+ ' }',
+
+ ' // 使用临时输入框来执行复制',
+ ' const tempInput = document.createElement(\'textarea\');',
+ ' tempInput.value = result;',
+ ' document.body.appendChild(tempInput);',
+ ' tempInput.select();',
+
+ ' // 尝试使用 execCommand 作为后备方案',
+ ' if (!navigator.clipboard) {',
+ ' document.execCommand("copy");',
+ ' tempInput.remove();',
+ ' } else {',
+ ' // 优先使用 clipboard API',
+ ' await navigator.clipboard.writeText(result);',
+ ' tempInput.remove();',
+ ' }',
+
+ ' // 更新按钮状态 - 使用传入的按钮元素',
' btn.textContent = \'已复制\';',
' btn.classList.add(\'copied\');',
-
+
' setTimeout(() => {',
' btn.textContent = \'复制结果\';',
' btn.classList.remove(\'copied\');',
' }, 2000);',
+
+ ' return true;',
' } catch (err) {',
' console.error(\'复制失败:\', err);',
- ' alert(\'复制失败,请手动复制\');',
+ ' alert(\'复制失败: \' + err.message);',
+ ' return false;',
' }',
' }',