diff options
-rw-r--r-- | assets/css/main.css | 19 | ||||
-rw-r--r-- | assets/css/vars.css | 1 | ||||
-rw-r--r-- | layouts/_default/baseof.html | 49 | ||||
-rw-r--r-- | static/js/copy-code.js | 33 |
4 files changed, 78 insertions, 24 deletions
diff --git a/assets/css/main.css b/assets/css/main.css index 61eca0a..c25d741 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -74,7 +74,26 @@ a { /* Code blocks */ +.copy-code-button { + background-color: var(--background); + font-family: var(--font-mono); + padding: 3px 6px; + font-size: 0.8em; + border-radius: var(--copy-code-button-border-radius); + position: absolute; + top: 10px; + right: 10px; + z-index: 1; + display: none; + border: 1px solid var(--code-border); +} + +pre:hover .copy-code-button { + display: block; +} + pre { + position: relative; padding: var(--code-padding); border: 1px solid var(--code-border); overflow: scroll; diff --git a/assets/css/vars.css b/assets/css/vars.css index 995cf2e..b28df63 100644 --- a/assets/css/vars.css +++ b/assets/css/vars.css @@ -44,6 +44,7 @@ /* Code */ --code-padding: 1.5rem; --code-border-radius: 10px; + --copy-code-button-border-radius: 7px; /* Social section */ --social-icons-bottom-margin: 3rem; diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html index 462b2e8..52a6767 100644 --- a/layouts/_default/baseof.html +++ b/layouts/_default/baseof.html @@ -2,39 +2,39 @@ <html lang="{{ or site.Language.LanguageCode site.Language.Lang }}" dir="{{ or site.Language.LanguageDirection `ltr` }}"> - <head> - {{ partial "head.html" . }} - </head> +<head> + {{ partial "head.html" . }} +</head> - {{ $theme := "auto"}} +{{ $theme := "auto"}} - {{ with .Param "theme" }} - {{ $theme = .}} - {{ end }} +{{ with .Param "theme" }} +{{ $theme = .}} +{{ end }} - <body class="{{ $theme }}"> +<body class="{{ $theme }}"> - <div class="content"> - <header> - {{ partial "header.html" . }} - </header> + <div class="content"> + <header> + {{ partial "header.html" . }} + </header> - <main class="main"> - {{ block "main" . }}{{ end }} - </main> - </div> + <main class="main"> + {{ block "main" . }}{{ end }} + </main> + </div> - <footer> - {{ partial "footer.html" . }} - </footer> + <footer> + {{ partial "footer.html" . }} + </footer> - {{ if .Param "math" }} - {{ partialCached "math.html" . }} - {{ end }} + {{ if .Param "math" }} + {{ partialCached "math.html" . }} + {{ end }} - </body> +</body> - <script> +<script> function isAuto() { return document.body.classList.contains("auto"); @@ -67,4 +67,5 @@ </script> +<script defer src="{{ "js/copy-code.js" | relURL }}"></script> </html>
\ No newline at end of file diff --git a/static/js/copy-code.js b/static/js/copy-code.js new file mode 100644 index 0000000..67fd936 --- /dev/null +++ b/static/js/copy-code.js @@ -0,0 +1,33 @@ +document.addEventListener("DOMContentLoaded", function () { + const codeBlocks = document.querySelectorAll("pre"); + + codeBlocks.forEach((codeBlock) => { + const copyButton = document.createElement("button"); + copyButton.className = "copy-code-button"; + copyButton.textContent = "copy"; + + // Insert the button inside the <pre> block + codeBlock.appendChild(copyButton); + + copyButton.addEventListener("click", function () { + const code = codeBlock.querySelector("code"); + // Get the code content + const textToCopy = code.textContent || code.innerText; + + // Use the Clipboard API to copy the text + navigator.clipboard + .writeText(textToCopy) + .then(() => { + // Change button text to "Copied" + copyButton.textContent = "copied"; + + setTimeout(() => { + copyButton.textContent = "copy"; + }, 2000); // Reset the button text after 2 seconds + }) + .catch((err) => { + console.error("Unable to copy text:", err); + }); + }); + }); +}); |