From 4e50205364597bd4ff012bc26b8b7dc44920709b Mon Sep 17 00:00:00 2001
From: Julian Leucker <leuckerj@gmail.com>
Date: Sun, 20 Mar 2022 22:53:43 +0100
Subject: [PATCH] Implement iCal url copy button

---
 aleksis/core/static/js/ical_urls.js           | 41 +++++++++++++++++++
 .../core/templates/core/ical/ical_list.html   |  1 +
 2 files changed, 42 insertions(+)
 create mode 100644 aleksis/core/static/js/ical_urls.js

diff --git a/aleksis/core/static/js/ical_urls.js b/aleksis/core/static/js/ical_urls.js
new file mode 100644
index 000000000..14f312b3d
--- /dev/null
+++ b/aleksis/core/static/js/ical_urls.js
@@ -0,0 +1,41 @@
+$(".copy-button").click((e) => {
+    const target = $(e.currentTarget);
+    const input = $("#" + target.data("target"));
+    const icon = target.children("svg")[0];
+
+    if (!Iconify.iconExists("mdi:content-copy")) {
+        Iconify.loadIcon("mdi:content-copy");
+    }
+    const copy = Iconify.renderSVG("mdi:content-copy");
+    copy.classList.add("material-icons");
+
+    if (!Iconify.iconExists("mdi:check")) {
+        Iconify.loadIcon("mdi:check");
+    }
+    const check = Iconify.renderSVG("mdi:check");
+    check.classList.add("material-icons");
+
+    console.log(copy);
+
+    if (navigator.clipboard) {
+        console.log("Copying to clipboard");
+        navigator.clipboard.writeText(input.val()).then(r => {
+            icon.replaceWith(check);
+            // target.children("svg")[0].classList.add("material-icons");
+            setTimeout(() => {
+                target.children("svg")[0].replaceWith(copy);
+                // target.children("svg")[0].classList.add("material-icons");
+            }, 1000);
+        });
+    } else {
+        console.log("Clipboard API not supported");
+        input.select();
+        document.execCommand("copy");
+        input.blur();
+        icon.replaceWith(check);
+        // target.children("svg")[0].classList.add("material-icons");
+        setTimeout(() => {
+            icon.innerHTML = copy.body;
+        }, 1000);
+    }
+});
diff --git a/aleksis/core/templates/core/ical/ical_list.html b/aleksis/core/templates/core/ical/ical_list.html
index abd3d9b25..035998f06 100644
--- a/aleksis/core/templates/core/ical/ical_list.html
+++ b/aleksis/core/templates/core/ical/ical_list.html
@@ -36,4 +36,5 @@
       </div>
     {% endfor %}
   </div>
+  <script src="{% static "js/ical_urls.js" %}" type="text/javascript"></script>
 {% endblock content %}
-- 
GitLab