Add copy-to-clipboard button to meta page #44
@ -20,3 +20,11 @@ body {
|
|||||||
pre {
|
pre {
|
||||||
padding-left: 4ex; /* approx 4 monospaced spaces */
|
padding-left: 4ex; /* approx 4 monospaced spaces */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.success {
|
||||||
|
color: #008000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fail {
|
||||||
|
color: #800000;
|
||||||
|
}
|
39
assets/js/copyclipboard.js
Normal file
39
assets/js/copyclipboard.js
Normal file
@ -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();
|
||||||
|
});
|
||||||
|
}
|
@ -2,8 +2,15 @@
|
|||||||
'{{.Paste.Key}}{{.FileExt}}' metadata - rushlink
|
'{{.Paste.Key}}{{.FileExt}}' metadata - rushlink
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|
||||||
|
{{define "head-append"}}
|
||||||
|
<script type="text/javascript" src="/js/copyclipboard.js" defer></script>
|
||||||
|
{{end}}
|
||||||
|
|
||||||
{{define "body"}}
|
{{define "body"}}
|
||||||
<pre>
|
<pre>
|
||||||
|
<button onclick="copyToClipboard('{{.RootURL}}/{{.Paste.Key}}{{.FileExt}}')">Copy URL to clipboard</button> <span id="copyToClipboardStatus"></span>
|
||||||
|
</pre>
|
||||||
|
<pre>
|
||||||
<a href="{{.RootURL}}/{{.Paste.Key}}{{.FileExt}}">{{.RootURL}}/{{.Paste.Key}}{{.FileExt}}</a>
|
<a href="{{.RootURL}}/{{.Paste.Key}}{{.FileExt}}">{{.RootURL}}/{{.Paste.Key}}{{.FileExt}}</a>
|
||||||
---
|
---
|
||||||
{{if and (ne .Paste.State.String "deleted") .CanDeleteBool}}
|
{{if and (ne .Paste.State.String "deleted") .CanDeleteBool}}
|
||||||
|
Loading…
Reference in New Issue
Block a user