From 1dfc98d640339f54e98e7b19af7d21d492f17155 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6ren=20Weber?= Date: Sun, 23 Feb 2025 13:17:14 +0100 Subject: [PATCH] code: add copy-to-clipboard to pre-only elements #1036 --- layouts/partials/version.txt | 2 +- static/js/theme.js | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/layouts/partials/version.txt b/layouts/partials/version.txt index c146c13e01..47044578f4 100644 --- a/layouts/partials/version.txt +++ b/layouts/partials/version.txt @@ -1 +1 @@ -7.4.1+68220ad15a241c2305244bd51ece487a68c267ca \ No newline at end of file +7.4.1+6813ad02b4939a07d7f964c58b90d646434252aa \ No newline at end of file diff --git a/static/js/theme.js b/static/js/theme.js index 0297e2faf5..722ba81b63 100644 --- a/static/js/theme.js +++ b/static/js/theme.js @@ -646,7 +646,20 @@ function initCodeClipboard() { } }); - var codeElements = document.querySelectorAll('code'); + var preOnlyElements = document.querySelectorAll('pre > :not(code), pre:not(:has(>*))'); + for (var i = 0; i < preOnlyElements.length; i++) { + // move everything down one level so that it fits to the next selector + // and we also get copy-to-clipboard for pre-only elements + var pre = preOnlyElements[i]; + var div = document.createElement('div'); + div.classList.add('pre-only'); + while (pre.firstChild) { + div.appendChild(pre.firstChild); + } + pre.appendChild(div, pre); + } + + var codeElements = document.querySelectorAll('code, .pre-only'); for (var i = 0; i < codeElements.length; i++) { var code = codeElements[i]; var text = getCodeText(code);