summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--assets/css/main.css19
-rw-r--r--assets/css/vars.css1
-rw-r--r--layouts/_default/baseof.html49
-rw-r--r--static/js/copy-code.js33
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);
+ });
+ });
+ });
+});