Skip to content

Commit f10f0a6

Browse files
committed
Add copy-to-clipboard
1 parent 560424d commit f10f0a6

File tree

4 files changed

+117
-0
lines changed

4 files changed

+117
-0
lines changed

_config/site.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ semantic_ui_css_url: https://cdn.jsdelivr.net/npm/[email protected]/dist/semant
4242
slick_js_url: https://cdn.jsdelivr.net/npm/[email protected]/slick/slick
4343
slick_js_url_integrity: "sha384-wBo76R9TGH6DxuCcambHkpxJKY96xJq59OwZONC0A2v0rlNK9Kb75uRdSgxK5j9+"
4444
slick_css_url: https://cdn.jsdelivr.net/npm/[email protected]/slick/slick
45+
clipboard_js_url: https://cdn.jsdelivr.net/npm/[email protected]/dist/clipboard
46+
clipboard_js_url_integrity: "sha256-4XodgW4TwIJuDtf+v6vDJ39FVxI0veC/kSCCmnFp7ck="
4547

4648
jborg_fonts_url: https://static.jboss.org/theme/fonts
4749
jborg_images_url: https://static.jboss.org/theme/images
@@ -773,6 +775,7 @@ profiles:
773775
jquery_js_url_integrity: "sha384-VC7EHu0lDzZyFfmjTPJq+DFyIn8TUGAJbEtpXquazFVr00Q/OOx//RjiZ9yU9+9m"
774776
semantic_ui_js_url_integrity: "sha384-/OCHdyuUZjDPStDj7ti/VaVeGQ4U9HxuJhh0FNfMTf0eO1VeBLAam8EiKCIK+jso"
775777
slick_js_url_integrity: "sha384-vIgLoBvIiHAJ0ttXa/pf/vpP9JgaN/9dCH6zbhDPEF3H8fvQXE0wHjS/LauoTNF1"
778+
clipboard_js_url_integrity: "sha256-ul94Jn0MBOijGuvXhgx/1/wjaJHN3Ud6TH/cGaDrF24="
776779
base_url: http://0.0.0.0:4242
777780
news_feed_root_url: https://staging.in.relation.to/feeds
778781
test:
@@ -783,6 +786,7 @@ profiles:
783786
jquery_js_url_integrity: "sha384-VC7EHu0lDzZyFfmjTPJq+DFyIn8TUGAJbEtpXquazFVr00Q/OOx//RjiZ9yU9+9m"
784787
semantic_ui_js_url_integrity: "sha384-/OCHdyuUZjDPStDj7ti/VaVeGQ4U9HxuJhh0FNfMTf0eO1VeBLAam8EiKCIK+jso"
785788
slick_js_url_integrity: "sha384-vIgLoBvIiHAJ0ttXa/pf/vpP9JgaN/9dCH6zbhDPEF3H8fvQXE0wHjS/LauoTNF1"
789+
clipboard_js_url_integrity: "sha256-ul94Jn0MBOijGuvXhgx/1/wjaJHN3Ud6TH/cGaDrF24="
786790
base_url: http://0.0.0.0:4242
787791
news_feed_root_url: https://in.relation.to/feeds
788792
staging:

_layouts/base.html.haml

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,47 @@
5858
$('body, html').animate({scrollTop:0}, 800);
5959
});
6060
});
61+
62+
:javascript
63+
/*
64+
* This is an adapted version of https://github.com/quarkusio/quarkusio.github.io/blob/317db07ca629dc331455692d2976ecece95319cd/assets/javascript/copy.js
65+
*/
66+
const codes = document.querySelectorAll('pre.highlight > code');
67+
let index = 0;
68+
codes.forEach((code) => {
69+
70+
code.setAttribute("id", "code" + index);
71+
72+
const block = document.createElement('div');
73+
block.className = "tooltip";
74+
75+
const btn = document.createElement('i');
76+
btn.className = "btn-copy ui copy outline icon";
77+
btn.setAttribute("data-clipboard-action", "copy");
78+
btn.setAttribute("data-clipboard-target", "#code" + index);
79+
btn.setAttribute("title", "Copy to clipboard");
80+
btn.setAttribute("float-right", "true");
81+
code.before(btn);
82+
83+
const tooltip = document.createElement('div');
84+
tooltip.className = "tooltip-text";
85+
tooltip.textContent = "Copied!";
86+
code.before(tooltip);
87+
88+
index++;
89+
});
90+
91+
const clipboard = new ClipboardJS('.btn-copy');
92+
clipboard.on('success', function (e) {
93+
e.clearSelection();
94+
e.trigger.className = e.trigger.className.replace("copy outline icon", "check icon");
95+
e.trigger.setAttribute("title", "Copied!");
96+
e.trigger.nextSibling.classList.toggle("show");
97+
e.trigger.blur();
98+
99+
setTimeout(function () {
100+
e.trigger.className = e.trigger.className.replace("check icon", "copy outline icon");
101+
e.trigger.setAttribute("title", "Copy to clipboard");
102+
e.trigger.nextSibling.classList.toggle("show");
103+
}, 1500);
104+
});

_partials/head.html.haml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
%link(href="https://fonts.googleapis.com/css2?family=Inconsolata:wght@400;700&display=swap" rel="stylesheet")
4141
%script(src="#{site.jquery_js_url}#{site.minified}.js" crossorigin="anonymous" type="text/javascript" integrity="#{site.jquery_js_url_integrity}")
4242
%script(src="#{site.semantic_ui_js_url}#{site.minified}.js" crossorigin="anonymous" type="text/javascript" integrity="#{site.semantic_ui_js_url_integrity}")
43+
%script(src="#{site.clipboard_js_url}#{site.minified}.js" crossorigin="anonymous" type="text/javascript" integrity="#{site.clipboard_js_url_integrity}")
4344
- if real_page.javascripts
4445
- real_page.javascripts.each do |javascript|
4546
%script{:src=>javascript, :type=>'text/javascript'}

stylesheets/styles.scss

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1032,3 +1032,71 @@ pre .comment .conum {
10321032
}
10331033
}
10341034

1035+
// copy to clipboard:
1036+
1037+
pre.highlight {
1038+
position: relative;
1039+
1040+
.btn-copy {
1041+
cursor: pointer;
1042+
transition: opacity 0.3s ease-in-out;
1043+
opacity: 0;
1044+
padding: 2px 6px;
1045+
position: absolute;
1046+
right: 0.825rem;
1047+
top: 0.025rem;
1048+
background-color: transparent;
1049+
border: none;
1050+
1051+
&:focus {
1052+
opacity: 0.5;
1053+
}
1054+
}
1055+
}
1056+
1057+
.listingblock {
1058+
&:hover {
1059+
.btn-copy {
1060+
opacity: 0.5;
1061+
}
1062+
1063+
code[data-lang]::before {
1064+
opacity: 0.5;
1065+
}
1066+
1067+
.tooltip-text.show {
1068+
opacity: 1;
1069+
}
1070+
}
1071+
1072+
code[data-lang] {
1073+
&::before {
1074+
display: block;
1075+
content: attr(data-lang) '|';
1076+
top: .425rem;
1077+
right: 2.2rem;
1078+
transition: opacity 0.3s ease-in-out;
1079+
opacity: 0;
1080+
position: absolute;
1081+
font-size: .75em;
1082+
line-height: 1;
1083+
text-transform: uppercase;
1084+
color: inherit;
1085+
}
1086+
}
1087+
}
1088+
1089+
.tooltip-text {
1090+
display: block;
1091+
position: absolute;
1092+
top: 1.5rem;
1093+
right: 4px;
1094+
background: #444;
1095+
color: #fff;
1096+
padding: 6px 10px;
1097+
border-radius: 4px;
1098+
white-space: nowrap;
1099+
z-index: 1;
1100+
opacity: 0;
1101+
font-size: 11px;
1102+
}

0 commit comments

Comments
 (0)