summaryrefslogtreecommitdiffstats
path: root/src/main/resources/clipboard/gitblit-ctcbtn.js
diff options
context:
space:
mode:
authorFlorian Zschocke <f.zschocke+git@gmail.com>2022-12-03 14:34:03 +0100
committerFlorian Zschocke <f.zschocke+git@gmail.com>2022-12-03 14:34:03 +0100
commit60df2321a6f5c5ea18f1d38b4d26291f0ece6012 (patch)
tree6db83a55d77dcdddaa6ac003a0ff0392b229d09c /src/main/resources/clipboard/gitblit-ctcbtn.js
parentc84179a751da1e4bb84e7d30ff848c0d197ec6a2 (diff)
parentc04ddf554f3f2c77e268468a43dd645a8b565074 (diff)
downloadgitblit-60df2321a6f5c5ea18f1d38b4d26291f0ece6012.tar.gz
gitblit-60df2321a6f5c5ea18f1d38b4d26291f0ece6012.zip
Merge branch 'clipboardjs' into master
This replaces clippy.sfw with Javascript for issue #1241
Diffstat (limited to 'src/main/resources/clipboard/gitblit-ctcbtn.js')
-rw-r--r--src/main/resources/clipboard/gitblit-ctcbtn.js74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/main/resources/clipboard/gitblit-ctcbtn.js b/src/main/resources/clipboard/gitblit-ctcbtn.js
new file mode 100644
index 00000000..ddb2ddad
--- /dev/null
+++ b/src/main/resources/clipboard/gitblit-ctcbtn.js
@@ -0,0 +1,74 @@
+// Instantiate the clipboarding
+var clipboard = new ClipboardJS('.ctcbtn');
+
+clipboard.on('success', function (e) {
+ showTooltip(e.trigger, "Copied!");
+});
+
+clipboard.on('error', function (e) {
+ showTooltip(e.trigger, fallbackMessage(e.action));
+});
+
+// Attach events to buttons to clear tooltip again
+var btns = document.querySelectorAll('.ctcbtn');
+for (var i = 0; i < btns.length; i++) {
+ btns[i].addEventListener('mouseleave', clearTooltip);
+ btns[i].addEventListener('blur', clearTooltip);
+}
+
+
+function findTooltipped(elem) {
+ do {
+ if (elem.classList.contains('tooltipped')) return elem;
+ elem = elem.parentElement;
+ } while (elem != null);
+ return null;
+}
+
+// Show or hide tooltip by setting the tooltipped-active class
+// on a parent that contains tooltipped. Since the copy button
+// could be and image, or be hidden after clicking, the tooltipped
+// element might be higher in the hierarchy.
+var ttset;
+function showTooltip(elem, msg) {
+ let ttelem = findTooltipped(elem);
+ if (ttelem != null) {
+ ttelem.classList.add('tooltipped-active');
+ ttelem.setAttribute('data-tt-text', msg);
+ ttset=Date.now();
+ }
+ else {
+ console.warn("Could not find any tooltipped element for clipboard button.", elem);
+ }
+}
+
+function clearTooltip(e) {
+ let ttelem = findTooltipped(e.currentTarget);
+ if (ttelem != null) {
+ let now = Date.now();
+ if (now - ttset < 500) {
+ // Give the tooltip some time to display
+ setTimeout(function(){ttelem.classList.remove('tooltipped-active')}, 1000)
+ }
+ else {
+ ttelem.classList.remove('tooltipped-active');
+ }
+ }
+ else {
+ console.warn("Could not find any tooltipped element for clipboard button.", e.currentTarget);
+ }
+}
+
+// If the API is not supported, at least fall back to a message saying
+// that now that the text is selected, Ctrl-C can be used.
+// This is still a problem in the repo URL dropdown. When it is hidden, Ctrl-C doesn't work.
+function fallbackMessage(action) {
+ var actionMsg = "";
+ if (/Mac/i.test(navigator.userAgent)) {
+ actionMsg = "Press ⌘-C to copy";
+ }
+ else {
+ actionMsg = "Press Ctrl-C to copy";
+ }
+ return actionMsg;
+}