aboutsummaryrefslogtreecommitdiff
path: root/static/js/codecopy.js
diff options
context:
space:
mode:
authorJieiku2023-08-17 12:16:18 -0700
committerJieiku2023-08-17 12:16:18 -0700
commit3e5d8a96e9eae21a799f327cd8a52adb891ebe66 (patch)
tree6a1377b5207e4e3555f65ca162014468c64d6985 /static/js/codecopy.js
parent1d9be812c25508a5dc36afb9e80669b668a47190 (diff)
parent0983915e23793c28dd0bee149fd2ec05a7e96a94 (diff)
downloadabridge-3e5d8a96e9eae21a799f327cd8a52adb891ebe66.tar.gz
abridge-3e5d8a96e9eae21a799f327cd8a52adb891ebe66.tar.bz2
abridge-3e5d8a96e9eae21a799f327cd8a52adb891ebe66.zip
resolve merge conflicts
Diffstat (limited to 'static/js/codecopy.js')
-rw-r--r--static/js/codecopy.js34
1 files changed, 34 insertions, 0 deletions
diff --git a/static/js/codecopy.js b/static/js/codecopy.js
new file mode 100644
index 0000000..9e00c79
--- /dev/null
+++ b/static/js/codecopy.js
@@ -0,0 +1,34 @@
+const changeIcon = (copyDiv, className) => {
+ copyDiv.classList.add(className);
+ setTimeout(() => copyDiv.classList.remove(className), 2500);
+};
+
+const copyCodeAndChangeIcon = async (copyDiv, block) => {
+ const code = block.querySelector('table') ? getTableCode(block) : getNonTableCode(block);
+ try {
+ await navigator.clipboard.writeText(code);
+ changeIcon(copyDiv, "yes");
+ } catch (error) {
+ changeIcon(copyDiv, "err");
+ }
+};
+
+const getNonTableCode = (block) => {
+ return [...block.querySelectorAll('code')]
+ .map(code => code.textContent)
+ .join('');
+};
+
+const getTableCode = (block) => {
+ return [...block.querySelectorAll('tr')]
+ .map(row => row.querySelector('td:last-child')?.innerText ?? '')
+ .join('');
+};
+
+document.querySelectorAll("pre").forEach((block) => {
+ const copyDiv = document.createElement("div");
+ copyDiv.className = "cc svgs svgh copy";
+ copyDiv.innerHTML = " ";
+ block.prepend(copyDiv);
+ copyDiv.addEventListener("click", () => copyCodeAndChangeIcon(copyDiv, block));;
+});