From c8e7d34509a93c6ef09a7cc229ab346ad624308b Mon Sep 17 00:00:00 2001 From: Silberengel Date: Sun, 22 Feb 2026 07:41:29 +0100 Subject: [PATCH] bug-fixes Nostr-Signature: 6fd5146b5f5980987adc5e6b93a1bcb31cfbb6a2e4fce6f1dbe5c7fdf54b717a 573634b648634cbad10f2451776089ea21090d9407f715e83c577b4611ae6edc 41422b07b63fc494c0aba22b85f1b56a6a5527f9df48d49816f7be417ad74608f8d1dff8302f562b2f47690720c089aab76db948f5bf1ecdda68741b256d7a2b --- nostr/commit-signatures.jsonl | 1 + src/app.css | 237 +- src/lib/components/RepoHeaderEnhanced.svelte | 9 +- src/lib/styles/components.css | 12 +- src/lib/styles/repo.css | 2190 ++++------------- .../repos/[npub]/[repo]/download/+server.ts | 2 + src/routes/repos/[npub]/[repo]/+page.svelte | 171 +- 7 files changed, 829 insertions(+), 1793 deletions(-) diff --git a/nostr/commit-signatures.jsonl b/nostr/commit-signatures.jsonl index 253737b..ef2225a 100644 --- a/nostr/commit-signatures.jsonl +++ b/nostr/commit-signatures.jsonl @@ -46,3 +46,4 @@ {"kind":1640,"pubkey":"573634b648634cbad10f2451776089ea21090d9407f715e83c577b4611ae6edc","created_at":1771690183,"tags":[["author","Silberengel","silberengel7@protonmail.com"],["message","get rid of tabs on repo page"]],"content":"Signed commit: get rid of tabs on repo page","id":"d34fb23385a23f479c683e76f5676356a11d63bcd0ecf71d25f1b85dbb0cfe57","sig":"1f6454f9961b9245d1e32f4a903ee9636201670491145d0185e95e7b7d33bf1027ac5b8e370070640e103740ab19e9915baa7755c6008fd32fe41e9cb86d33b8"} {"kind":1640,"pubkey":"573634b648634cbad10f2451776089ea21090d9407f715e83c577b4611ae6edc","created_at":1771691277,"tags":[["author","Silberengel","silberengel7@protonmail.com"],["message","fix docs"]],"content":"Signed commit: fix docs","id":"4671648712f19537cbf0fd00cf19e254eae4a1ac9c1274ea396e62dac193b88c","sig":"49a3e89e312ec4caebfeacdaade3e4cc6d027ab9c50d8e6aa1998f120a81d8d51235ae397df6e42b9efca4147497b8881731dda6d58fee7d28d2ac07cec295ec"} {"kind":1640,"pubkey":"573634b648634cbad10f2451776089ea21090d9407f715e83c577b4611ae6edc","created_at":1771705699,"tags":[["author","Silberengel","silberengel7@protonmail.com"],["message","bug-fixes"]],"content":"Signed commit: bug-fixes","id":"59d0c409196dccb8109a29829002df69dbca43c5e95c1fdc1e7baa0b88ee5927","sig":"af8726a86e30c64b098ad13946d5bc84cb08d5ea8b75f08641c03fbdd8b9c91683e8091b206159dde2239ea8964cb3589bcb4ec2892541d2980f186a0fb09af9"} +{"kind":1640,"pubkey":"573634b648634cbad10f2451776089ea21090d9407f715e83c577b4611ae6edc","created_at":1771708933,"tags":[["author","Silberengel","silberengel7@protonmail.com"],["message","bug-fixes"]],"content":"Signed commit: bug-fixes","id":"6d8832125b76095b2e7ed57b71e26a6c05d9b19a14dfa76724c71f392147fe95","sig":"6ddebfa995b5b3f469db5f3cdbd7d13fa2307d7988c2667479015d6bc2ff442be357ee97e51340a944eb34fed73522db3930016d343810927486bdbcabddae5c"} diff --git a/src/app.css b/src/app.css index 47f8e56..48ed565 100644 --- a/src/app.css +++ b/src/app.css @@ -639,42 +639,80 @@ textarea:disabled::placeholder { } /* Make icon images theme-aware using filters */ +/* Target both img inside .icon and img with icon classes */ +img.icon, +.icon img, +img.icon-small, .icon-small img, +img.icon-inline, .icon-inline img, .hamburger-icon img, .platform-icon img, .repo-badge-icon img, .btn-icon img { - filter: var(--icon-filter, brightness(0) saturate(100%) invert(var(--icon-invert, 0))); - transition: filter 0.3s ease; - opacity: 0.9; -} - -/* Theme icons - handled separately for better control */ -.theme-icon img:not(.theme-toggle .theme-icon img), -.theme-icon-option img:not(.theme-option .theme-icon-option img) { - filter: var(--icon-filter, brightness(0) saturate(100%) invert(var(--icon-invert, 0))); - transition: filter 0.3s ease; - opacity: 0.9; + filter: brightness(0) saturate(100%) invert(1) !important; /* Default white for dark themes */ + opacity: 1 !important; + transition: filter 0.3s ease, opacity 0.3s ease; } /* Light theme: icons should be dark (black) */ -:root, -[data-theme="light"] { - --icon-filter: brightness(0) saturate(100%); - --icon-invert: 0; +[data-theme="light"] img.icon, +[data-theme="light"] .icon img, +[data-theme="light"] img.icon-small, +[data-theme="light"] .icon-small img, +[data-theme="light"] img.icon-inline, +[data-theme="light"] .icon-inline img, +[data-theme="light"] .hamburger-icon img, +[data-theme="light"] .platform-icon img, +[data-theme="light"] .repo-badge-icon img, +[data-theme="light"] .btn-icon img { + filter: brightness(0) saturate(100%) !important; /* Black in light theme */ + opacity: 1 !important; } -/* Dark theme: icons should be light (white/light gray) */ -[data-theme="dark"] { - --icon-filter: brightness(0) saturate(100%) invert(1); - --icon-invert: 1; +/* Dark theme (Purple): icons should be light (white/light gray) */ +[data-theme="dark"] img.icon, +[data-theme="dark"] .icon img, +[data-theme="dark"] img.icon-small, +[data-theme="dark"] .icon-small img, +[data-theme="dark"] img.icon-inline, +[data-theme="dark"] .icon-inline img, +[data-theme="dark"] .hamburger-icon img, +[data-theme="dark"] .platform-icon img, +[data-theme="dark"] .repo-badge-icon img, +[data-theme="dark"] .btn-icon img { + filter: brightness(0) saturate(100%) invert(1) !important; /* White in dark/purple theme */ + opacity: 1 !important; } /* Black theme: icons should be light (white/light gray) */ -[data-theme="black"] { - --icon-filter: brightness(0) saturate(100%) invert(1); - --icon-invert: 1; +[data-theme="black"] img.icon, +[data-theme="black"] .icon img, +[data-theme="black"] img.icon-small, +[data-theme="black"] .icon-small img, +[data-theme="black"] img.icon-inline, +[data-theme="black"] .icon-inline img, +[data-theme="black"] .hamburger-icon img, +[data-theme="black"] .platform-icon img, +[data-theme="black"] .repo-badge-icon img, +[data-theme="black"] .btn-icon img { + filter: brightness(0) saturate(100%) invert(1) !important; /* White in black theme */ + opacity: 1 !important; +} + +/* Theme icons - handled separately for better control */ +.theme-icon img:not(.theme-toggle .theme-icon img), +.theme-icon-option img:not(.theme-option .theme-icon-option img) { + filter: brightness(0) saturate(100%) invert(1) !important; /* Default white for dark backgrounds */ + opacity: 1 !important; + transition: filter 0.3s ease, opacity 0.3s ease; +} + +/* Light theme: theme icons should be dark */ +[data-theme="light"] .theme-icon img:not(.theme-toggle .theme-icon img), +[data-theme="light"] .theme-icon-option img:not(.theme-option .theme-icon-option img) { + filter: brightness(0) saturate(100%) !important; /* Black in light theme */ + opacity: 1 !important; } .icon-inline { @@ -692,11 +730,71 @@ textarea:disabled::placeholder { } /* Ensure icons in buttons and interactive elements have proper contrast */ +button img.icon, +button .icon img, +button img.icon-inline, button .icon-inline img, +button img.icon-small, button .icon-small img, +.button img.icon, +.button .icon img, +.button img.icon-inline, .button .icon-inline img, +.button img.icon-small, .button .icon-small img { - filter: var(--icon-filter, brightness(0) saturate(100%) invert(var(--icon-invert, 0))); + filter: brightness(0) saturate(100%) invert(1) !important; /* Default white for dark themes */ + opacity: 1 !important; +} + +/* Light theme: button icons should be dark */ +[data-theme="light"] button img.icon, +[data-theme="light"] button .icon img, +[data-theme="light"] button img.icon-inline, +[data-theme="light"] button .icon-inline img, +[data-theme="light"] button img.icon-small, +[data-theme="light"] button .icon-small img, +[data-theme="light"] .button img.icon, +[data-theme="light"] .button .icon img, +[data-theme="light"] .button img.icon-inline, +[data-theme="light"] .button .icon-inline img, +[data-theme="light"] .button img.icon-small, +[data-theme="light"] .button .icon-small img { + filter: brightness(0) saturate(100%) !important; /* Black in light theme */ + opacity: 1 !important; +} + +/* Dark theme (Purple): button icons should be light */ +[data-theme="dark"] button img.icon, +[data-theme="dark"] button .icon img, +[data-theme="dark"] button img.icon-inline, +[data-theme="dark"] button .icon-inline img, +[data-theme="dark"] button img.icon-small, +[data-theme="dark"] button .icon-small img, +[data-theme="dark"] .button img.icon, +[data-theme="dark"] .button .icon img, +[data-theme="dark"] .button img.icon-inline, +[data-theme="dark"] .button .icon-inline img, +[data-theme="dark"] .button img.icon-small, +[data-theme="dark"] .button .icon-small img { + filter: brightness(0) saturate(100%) invert(1) !important; /* White in dark/purple theme */ + opacity: 1 !important; +} + +/* Black theme: button icons should be light */ +[data-theme="black"] button img.icon, +[data-theme="black"] button .icon img, +[data-theme="black"] button img.icon-inline, +[data-theme="black"] button .icon-inline img, +[data-theme="black"] button img.icon-small, +[data-theme="black"] button .icon-small img, +[data-theme="black"] .button img.icon, +[data-theme="black"] .button .icon img, +[data-theme="black"] .button img.icon-inline, +[data-theme="black"] .button .icon-inline img, +[data-theme="black"] .button img.icon-small, +[data-theme="black"] .button .icon-small img { + filter: brightness(0) saturate(100%) invert(1) !important; /* White in black theme */ + opacity: 1 !important; } /* Icons on accent backgrounds should be white */ @@ -705,7 +803,8 @@ button[class*="primary"] .icon-small img, .button[class*="primary"] .icon-inline img, .button[class*="primary"] .icon-small img, .theme-toggle:hover .theme-icon img { - filter: brightness(0) saturate(100%) invert(1); + filter: brightness(0) saturate(100%) invert(1) !important; + opacity: 1 !important; } /* Theme toggle icons - ensure high contrast with maximum specificity */ @@ -1330,30 +1429,33 @@ button.theme-option.active img.theme-icon-option, color: var(--error-text); } -/* Code blocks - consistent dark-gray background in both themes */ -code { - background: var(--bg-secondary); +/* Unified code styling - all code uses highlight.js standard theme with dark-gray background */ + +/* Inline code - matches highlight.js theme */ +code:not(pre code) { + background: #1e1e1e !important; + color: #d4d4d4 !important; padding: 0.125rem 0.25rem; border-radius: 0.25rem; font-family: 'IBM Plex Mono', monospace; font-size: 0.875em; - color: var(--text-primary); + border: 1px solid #3a3a3a; } +/* Pre wrappers are transparent - only code.hljs has styling */ pre { - background: #1e1e1e; /* Consistent dark-gray background */ - color: #d4d4d4; /* Light gray text for good contrast */ - padding: 1rem; - border-radius: 0.5rem; - overflow-x: auto; - margin: 1rem 0; - border: 1px solid #3a3a3a; + margin: 0; + padding: 0; + background: transparent; + border: none; + overflow: visible; } -pre code { - background: transparent; - padding: 0; - color: inherit; +/* Code blocks - highlight.js handles everything */ +pre code.hljs { + display: block; + width: 100%; + box-sizing: border-box; } .clone-urls { @@ -1365,14 +1467,14 @@ pre code { .clone-urls code { display: block; - background: var(--bg-secondary); + background: #1e1e1e !important; /* Dark-gray background - theme independent */ + color: #d4d4d4 !important; /* Light gray text - theme independent */ padding: 0.5rem; border-radius: 0.25rem; margin: 0.25rem 0; font-family: 'IBM Plex Mono', monospace; font-size: 0.875rem; - color: var(--text-primary); - border: 1px solid var(--border-light); + border: 1px solid #3a3a3a; word-break: break-all; overflow-wrap: break-word; } @@ -1806,93 +1908,98 @@ label.filter-checkbox > span, /* All pages use the same container width for consistency */ -/* Highlight.js Syntax Highlighting - Consistent dark-gray background */ +/* Highlight.js - unified code block styling - theme independent */ .hljs { - background: #1e1e1e !important; /* Consistent dark-gray background in both themes */ - color: #d4d4d4 !important; /* Light gray text for good contrast */ - border: 1px solid #3a3a3a; - border-radius: 4px; - padding: 1rem; + display: block; + background: #1e1e1e !important; + color: #d4d4d4 !important; + border: 1px solid #3a3a3a !important; + border-radius: 4px !important; + padding: 1rem !important; overflow-x: auto; + margin: 0; + font-family: 'IBM Plex Mono', monospace; + font-size: 0.875rem; + line-height: 1.5; } -/* Syntax highlighting colors - high contrast for dark-gray background */ +/* Syntax highlighting colors - high contrast for dark-gray background - theme independent */ .hljs-comment, .hljs-quote { - color: #6a9955; /* Green comments - good contrast */ + color: #6a9955 !important; /* Green comments - good contrast */ font-style: italic; } .hljs-keyword, .hljs-selector-tag, .hljs-subst { - color: #c586c0; /* Purple/magenta keywords - good contrast */ + color: #c586c0 !important; /* Purple/magenta keywords - good contrast */ font-weight: 500; } .hljs-number, .hljs-literal { - color: #b5cea8; /* Light green numbers - good contrast */ + color: #b5cea8 !important; /* Light green numbers - good contrast */ font-weight: 500; } .hljs-variable, .hljs-template-variable, .hljs-tag .hljs-attr { - color: #9cdcfe; /* Light blue variables - good contrast */ + color: #9cdcfe !important; /* Light blue variables - good contrast */ } .hljs-string, .hljs-doctag { - color: #ce9178; /* Orange strings - good contrast */ + color: #ce9178 !important; /* Orange strings - good contrast */ } .hljs-title, .hljs-section, .hljs-selector-id { - color: #dcdcaa; /* Yellow titles - good contrast */ + color: #dcdcaa !important; /* Yellow titles - good contrast */ font-weight: 600; } .hljs-type, .hljs-class .hljs-title { - color: #4ec9b0; /* Cyan types - good contrast */ + color: #4ec9b0 !important; /* Cyan types - good contrast */ font-weight: 500; } .hljs-tag, .hljs-name, .hljs-attribute { - color: #569cd6; /* Blue tags - good contrast */ + color: #569cd6 !important; /* Blue tags - good contrast */ } .hljs-regexp, .hljs-link { - color: #d16969; /* Red regexp - good contrast */ + color: #d16969 !important; /* Red regexp - good contrast */ } .hljs-symbol, .hljs-bullet { - color: #dcdcaa; /* Yellow symbols - good contrast */ + color: #dcdcaa !important; /* Yellow symbols - good contrast */ } .hljs-built_in, .hljs-builtin-name { - color: #4ec9b0; /* Cyan built-ins - good contrast */ + color: #4ec9b0 !important; /* Cyan built-ins - good contrast */ } .hljs-meta { - color: #808080; /* Gray meta - good contrast */ + color: #808080 !important; /* Gray meta - good contrast */ } .hljs-deletion { - background: #4a1f1f; /* Dark red background */ - color: #ff8a8a; /* Light red text */ + background: #4a1f1f !important; /* Dark red background */ + color: #ff8a8a !important; /* Light red text */ } .hljs-addition { - background: #1a3a2a; /* Dark green background */ - color: #6aff9a; /* Light green text */ + background: #1a3a2a !important; /* Dark green background */ + color: #6aff9a !important; /* Light green text */ } .hljs-emphasis { diff --git a/src/lib/components/RepoHeaderEnhanced.svelte b/src/lib/components/RepoHeaderEnhanced.svelte index f975b4a..65ecf5d 100644 --- a/src/lib/components/RepoHeaderEnhanced.svelte +++ b/src/lib/components/RepoHeaderEnhanced.svelte @@ -41,6 +41,7 @@ hasUnlimitedAccess?: boolean; needsClone?: boolean; allMaintainers?: Array<{ pubkey: string; isOwner: boolean }>; + onCopyEventId?: () => void; } let { @@ -80,7 +81,8 @@ deletingAnnouncement = false, hasUnlimitedAccess = false, needsClone = false, - allMaintainers = [] + allMaintainers = [], + onCopyEventId }: Props = $props(); let showCloneMenu = $state(false); @@ -184,6 +186,11 @@ Create New Branch {/if} + {#if onCopyEventId} + + {/if} {#if onDeleteAnnouncement}
{#if pathStack.length > 0 || currentPath} @@ -4148,7 +4275,7 @@ readOnly={needsClone} /> {:else} -
+
{#if highlightedFileContent} {@html highlightedFileContent} {:else} @@ -5078,3 +5205,39 @@
{/if}
+ +