From 1dd0d17ba59a6a0392a53462846b13efc18df914 Mon Sep 17 00:00:00 2001 From: Daan Sprenkels Date: Sun, 5 Apr 2020 18:14:02 +0200 Subject: [PATCH] Add copy-to-clipboard button to meta page Fixes #42. --- assets/css/main.css | 8 +++++ assets/js/copyclipboard.js | 39 +++++++++++++++++++++++ assets/templates/html/pasteMeta.html.tmpl | 7 ++++ 3 files changed, 54 insertions(+) create mode 100644 assets/js/copyclipboard.js diff --git a/assets/css/main.css b/assets/css/main.css index 54f9979..a8d8cf4 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -19,4 +19,12 @@ body { pre { padding-left: 4ex; /* approx 4 monospaced spaces */ +} + +.success { + color: #008000; +} + +.fail { + color: #800000; } \ No newline at end of file diff --git a/assets/js/copyclipboard.js b/assets/js/copyclipboard.js new file mode 100644 index 0000000..033c9f2 --- /dev/null +++ b/assets/js/copyclipboard.js @@ -0,0 +1,39 @@ +"use strict"; + +const COPY_TO_CLIPBOARD_STATUS_ID = "copyToClipboardStatus"; +let copyToClipboardCtr = 0; + +function copyToClipboardSuccess() { + let statusElem = document.getElementById(COPY_TO_CLIPBOARD_STATUS_ID); + statusElem.innerText = "URL copied!"; + statusElem.classList.remove("fail"); + statusElem.classList.add("success"); +} + +function copyToClipboardFail(cause) { + let statusElem = document.getElementById(COPY_TO_CLIPBOARD_STATUS_ID); + if (!cause) cause = "unknown error"; + statusElem.innerText = "copy failed: " + cause; + statusElem.classList.remove("success"); + statusElem.classList.add("fail"); +} + +function copyToClipboard(url) { + let copyEventIdx = ++copyToClipboardCtr; + + if (!window.navigator.clipboard) { + let msg = "could not access clipboard"; + if (window.location.protocol !== "https:") { + msg += ": website not using HTTPS" + } + copyToClipboardFail(msg); + return; + } + window.navigator.clipboard.writeText(url).then(() => { + if (copyToClipboardCtr !== copyEventIdx) return; + copyToClipboardSuccess(); + }, () => { + if (copyToClipboardCtr !== copyEventIdx) return; + copyToClipboardFail(); + }); +} diff --git a/assets/templates/html/pasteMeta.html.tmpl b/assets/templates/html/pasteMeta.html.tmpl index e697c30..6037c1c 100644 --- a/assets/templates/html/pasteMeta.html.tmpl +++ b/assets/templates/html/pasteMeta.html.tmpl @@ -2,8 +2,15 @@ '{{.Paste.Key}}{{.FileExt}}' metadata - rushlink {{end}} +{{define "head-append"}} + +{{end}} + {{define "body"}}
+ 
+
+
 {{.RootURL}}/{{.Paste.Key}}{{.FileExt}}
 ---
 {{if and (ne .Paste.State.String "deleted") .CanDeleteBool}}