Browse Source

fix buttons

bug-fixes for ui
main
Silberengel 4 weeks ago
parent
commit
a375a4bff2
  1. 14
      src/app.css
  2. 35
      src/lib/components/NavBar.svelte
  3. 22
      src/lib/services/messaging/event-forwarder.ts
  4. 8
      src/lib/services/messaging/preferences-storage.ts
  5. 4
      src/routes/repos/+page.svelte

14
src/app.css

@ -251,13 +251,13 @@ button:disabled, .button:disabled { @@ -251,13 +251,13 @@ button:disabled, .button:disabled {
cursor: not-allowed;
}
.btn-primary, .login-button, .save-button, .view-button, .search-button, .create-file-button, .create-branch-button, .create-tag-button, .create-issue-button, .create-pr-button, .add-comment-btn, .reply-btn {
.btn-primary, .login-button, .save-button, .search-button, .create-file-button, .create-branch-button, .create-tag-button, .create-issue-button, .create-pr-button, .add-comment-btn, .reply-btn {
background: var(--button-primary);
color: white;
border: none;
}
.btn-primary:hover:not(:disabled), .login-button:hover:not(:disabled), .save-button:hover:not(:disabled), .view-button:hover, .search-button:hover:not(:disabled), .create-file-button:hover, .create-branch-button:hover, .create-tag-button:hover, .create-issue-button:hover, .create-pr-button:hover, .add-comment-btn:hover, .reply-btn:hover {
.btn-primary:hover:not(:disabled), .login-button:hover:not(:disabled), .save-button:hover:not(:disabled), .search-button:hover:not(:disabled), .create-file-button:hover, .create-branch-button:hover, .create-tag-button:hover, .create-issue-button:hover, .create-pr-button:hover, .add-comment-btn:hover, .reply-btn:hover {
background: var(--button-primary-hover);
}
@ -1287,7 +1287,15 @@ label.filter-checkbox > span, @@ -1287,7 +1287,15 @@ label.filter-checkbox > span,
.register-button {
background: var(--accent);
color: var(--accent-text, white);
border-color: var(--accent);
border: 1px solid var(--accent);
padding: 0.5rem 1rem;
border-radius: 0.375rem;
font-size: 0.875rem;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
text-decoration: none;
display: inline-block;
}
.register-button:hover {

35
src/lib/components/NavBar.svelte

@ -105,7 +105,31 @@ @@ -105,7 +105,31 @@
<div class="auth-section">
<ThemeToggle />
{#if userPubkey}
{@const userNpub = (() => {
try {
// Check if it's already an npub
if (userPubkey.startsWith('npub')) {
return userPubkey;
}
// Try to decode first (might already be npub)
try {
const decoded = nip19.decode(userPubkey);
if (decoded.type === 'npub') {
return userPubkey;
}
} catch {
// Not an npub, continue to encode
}
// Convert hex pubkey to npub
return nip19.npubEncode(userPubkey);
} catch {
// If all fails, return as-is (will be handled by route)
return userPubkey;
}
})()}
<a href={`/users/${userNpub}`} class="user-badge-link">
<UserBadge pubkey={userPubkey} />
</a>
<button onclick={logout} class="logout-button">Logout</button>
{:else}
<button onclick={login} class="login-button" disabled={!isNIP07Available()}>
@ -217,6 +241,17 @@ @@ -217,6 +241,17 @@
flex-shrink: 0;
}
.user-badge-link {
text-decoration: none;
color: inherit;
display: flex;
align-items: center;
}
.user-badge-link:hover {
text-decoration: none;
}
.mobile-menu-toggle {
display: none;
background: transparent;

22
src/lib/services/messaging/event-forwarder.ts

@ -6,10 +6,23 @@ @@ -6,10 +6,23 @@
import logger from '../logger.js';
import type { NostrEvent } from '../../types/nostr.js';
import { getPreferences } from './preferences-storage.js';
import { getCachedUserLevel } from '../security/user-level-cache.js';
import { KIND } from '../../types/nostr.js';
// Lazy import to avoid importing Node.js crypto in browser
let getPreferences: typeof import('./preferences-storage.js').getPreferences;
async function getPreferencesLazy() {
if (typeof window !== 'undefined') {
// Browser environment - event forwarding should be done server-side
return null;
}
if (!getPreferences) {
const module = await import('./preferences-storage.js');
getPreferences = module.getPreferences;
}
return getPreferences;
}
// ============================================================================
// Types & Interfaces
// ============================================================================
@ -584,7 +597,12 @@ export async function forwardEventIfEnabled( @@ -584,7 +597,12 @@ export async function forwardEventIfEnabled(
return;
}
const preferences = await getPreferences(userPubkeyHex);
const getPreferencesFn = await getPreferencesLazy();
if (!getPreferencesFn) {
// Browser environment - forwarding should be done server-side via API
return;
}
const preferences = await getPreferencesFn(userPubkeyHex);
if (!preferences || !preferences.enabled) {
return;
}

8
src/lib/services/messaging/preferences-storage.ts

@ -8,8 +8,16 @@ @@ -8,8 +8,16 @@
* - Per-user key derivation (master key + pubkey + salt)
* - AES-256-GCM authenticated encryption
* - Random IV per encryption
*
* NOTE: This module uses Node.js crypto and should only be used server-side.
* It will throw an error if imported in browser/client code.
*/
// Ensure this is only used server-side
if (typeof window !== 'undefined') {
throw new Error('preferences-storage.ts uses Node.js crypto and cannot be imported in browser code. Use API endpoints instead.');
}
import {
createCipheriv,
createDecipheriv,

4
src/routes/repos/+page.svelte

@ -462,7 +462,7 @@ @@ -462,7 +462,7 @@
<p class="description">{getRepoDescription(repo)}</p>
{/if}
</div>
<a href="/repos/{item.npub}/{item.repoName}" class="view-button">
<a href="/repos/{item.npub}/{item.repoName}" class="register-button">
View & Edit →
</a>
</div>
@ -524,7 +524,7 @@ @@ -524,7 +524,7 @@
{/if}
</div>
<div class="repo-actions">
<a href="/repos/{item.npub}/{item.repoName}" class="view-button">
<a href="/repos/{item.npub}/{item.repoName}" class="register-button">
View & Edit →
</a>
{#if canDelete}

Loading…
Cancel
Save