-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
93 lines (82 loc) · 2.91 KB
/
Copy pathapp.js
File metadata and controls
93 lines (82 loc) · 2.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
(function () {
"use strict";
const { formatGitCopy } = window.GitCopyFormatter;
const sourceText = document.querySelector("#source-text");
const resultText = document.querySelector("#result-text");
const formatButton = document.querySelector("#format-button");
const clearButton = document.querySelector("#clear-button");
const copyButton = document.querySelector("#copy-button");
const inputCount = document.querySelector("#input-count");
const inputError = document.querySelector("#input-error");
const resultStatus = document.querySelector("#result-status");
const toast = document.querySelector("#toast");
let toastTimer;
function updateCount() {
inputCount.textContent = `${sourceText.value.length} 字`;
}
function setResultState(isReady) {
copyButton.disabled = !isReady;
resultStatus.textContent = isReady ? "格式已就绪" : "等待格式化";
resultStatus.classList.toggle("is-ready", isReady);
}
function showToast(message) {
window.clearTimeout(toastTimer);
toast.textContent = message;
toast.classList.add("is-visible");
toastTimer = window.setTimeout(() => toast.classList.remove("is-visible"), 3000);
}
function formatContent() {
inputError.textContent = "";
try {
resultText.value = formatGitCopy(sourceText.value);
setResultState(true);
showToast("格式化完成,可以复制结果了。");
} catch (error) {
resultText.value = "";
setResultState(false);
inputError.textContent = error.message || "文案格式无法识别,请检查后重试。";
sourceText.focus();
}
}
async function copyResult() {
if (!resultText.value) return;
try {
if (navigator.clipboard && window.isSecureContext) {
await navigator.clipboard.writeText(resultText.value);
} else {
resultText.select();
const copied = document.execCommand("copy");
resultText.setSelectionRange(0, 0);
if (!copied) throw new Error("COPY_FAILED");
}
showToast("结果已复制到剪贴板。");
} catch {
resultText.focus();
resultText.select();
showToast("自动复制失败,已为你选中结果,请按 Ctrl+C 复制。");
}
}
function clearContent() {
sourceText.value = "";
resultText.value = "";
inputError.textContent = "";
updateCount();
setResultState(false);
sourceText.focus();
}
sourceText.addEventListener("input", () => {
updateCount();
if (inputError.textContent) inputError.textContent = "";
});
sourceText.addEventListener("keydown", (event) => {
if ((event.ctrlKey || event.metaKey) && event.key === "Enter") {
event.preventDefault();
formatContent();
}
});
formatButton.addEventListener("click", formatContent);
clearButton.addEventListener("click", clearContent);
copyButton.addEventListener("click", copyResult);
updateCount();
setResultState(false);
})();