123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- {{ $lang := .Get 0 }}
- <style>
- .code-block-container {
- position: relative;
- margin: 1em 0;
- border: 1px solid #5E5E5E;
- border-radius: 1px;
- overflow: hidden;
- }
- .code-header {
- position: absolute;
- top: 8px;
- right: 8px;
- z-index: 999;
- }
- .copy-button {
- display: inline-flex;
- align-items: center;
- background: #2d2d2d;
- color: white;
- border: 1px solid #404040;
- border-radius: 4px;
- padding: 4px 8px;
- font-size: 0.8em;
- cursor: pointer;
- transition: all 0.2s ease;
- }
- .copy-button:hover {
- background: #404040;
- }
- .copy-button svg {
- width: 14px;
- height: 14px;
- margin-right: 4px;
- }
- .tooltip {
- position: absolute;
- top: -30px;
- left: 50%;
- transform: translateX(-50%);
- background: black;
- color: white;
- padding: 4px 8px;
- border-radius: 4px;
- font-size: 12px;
- display: none;
- }
- .tooltip::after {
- content: "";
- position: absolute;
- top: 100%;
- left: 50%;
- transform: translateX(-50%);
- border: 5px solid transparent;
- border-top-color: black;
- }
- .copy-button.copied .tooltip {
- display: block;
- }
- .code-content {
- margin: 0;
- padding: 0;
- }
- .code-content pre {
- margin: 0;
- padding: 10px;
- }
- </style>
- <div class="code-block-container" data-lang="{{ $lang }}">
- <div class="code-header">
- <button class="copy-button" onclick="copyCodeBlock(this)" aria-label="Copy code">
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
- <path d="M8 4v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7.242a2 2 0 0 0-.602-1.43L16.083 2.57A2 2 0 0 0 14.685 2H10a2 2 0 0 0-2 2z"/>
- <path d="M16 18v2a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h2"/>
- </svg>
- <span>Copy</span>
- <div class="tooltip">Copied!</div>
- </button>
- </div>
- <div class="code-content">
- {{ highlight (trim .Inner "\n") $lang "" }}
- </div>
- </div>
- <script>
- function copyCodeBlock(button) {
- const container = button.closest('.code-block-container');
- const codeContent = container.querySelector('.code-content pre');
- const code = codeContent.textContent;
-
- navigator.clipboard.writeText(code.trim()).then(() => {
- button.classList.add('copied');
- setTimeout(() => {
- button.classList.remove('copied');
- }, 2000);
- }).catch(err => {
- console.error('Failed to copy:', err);
- // Fallback
- const textarea = document.createElement('textarea');
- textarea.value = code.trim();
- document.body.appendChild(textarea);
- textarea.select();
- try {
- document.execCommand('copy');
- button.classList.add('copied');
- setTimeout(() => {
- button.classList.remove('copied');
- }, 2000);
- } catch (e) {
- console.error('Fallback failed:', e);
- }
- document.body.removeChild(textarea);
- });
- }
- </script>
|