code copy & lines
<script>
(function () {
function codeText(code) {
var ln = code.querySelectorAll(".hljs-ln .hljs-ln-code");
if (ln.length) {
var parts = [];
for (var i = 0; i < ln.length; i++) parts.push(ln[i].textContent);
return parts.join("\n");
}
return code.textContent;
}
document.querySelectorAll("#content pre").forEach(function (pre) {
if (pre.classList.contains("code-processed")) return;
var code = pre.querySelector("code");
if (!code) return;
pre.classList.add("code-processed");
var btn = document.createElement("button");
btn.className = "code-copy-btn";
btn.type = "button";
btn.textContent = "Copy";
btn.addEventListener("click", function (e) {
e.stopPropagation();
var text = codeText(code);
function copied() {
btn.textContent = "Copied!";
setTimeout(function () { btn.textContent = "Copy"; }, 1500);
}
if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText(text).then(copied);
} else {
var ta = document.createElement("textarea");
ta.value = text;
document.body.appendChild(ta);
ta.select();
document.execCommand("copy");
document.body.removeChild(ta);
copied();
}
});
pre.appendChild(btn);
});
})();
</script>