feat: Enhance creator info display and add Civitai view functionality in ModelModal

This commit is contained in:
Will Miao
2025-07-22 17:43:33 +08:00
parent c82fabb67f
commit 29d2b5ee4b
2 changed files with 68 additions and 16 deletions

View File

@@ -436,12 +436,13 @@
display: flex; display: flex;
align-items: center; align-items: center;
gap: 10px; gap: 10px;
margin-bottom: var(--space-1); padding: 2px 10px;
padding: 6px 10px;
background: rgba(0, 0, 0, 0.03); background: rgba(0, 0, 0, 0.03);
border: 1px solid rgba(0, 0, 0, 0.1); border: 1px solid rgba(0, 0, 0, 0.1);
border-radius: var(--border-radius-sm); border-radius: var(--border-radius-sm);
max-width: fit-content; max-width: fit-content;
cursor: pointer;
transition: all 0.2s;
} }
[data-theme="dark"] .creator-info { [data-theme="dark"] .creator-info {
@@ -482,8 +483,43 @@
color: var(--text-color); color: var(--text-color);
} }
/* Optional: add hover effect for creator info */ /* Add hover effect for creator info */
.creator-info:hover { .creator-info:hover {
background: oklch(var(--lora-accent-l) var(--lora-accent-c) var(--lora-accent-h) / 0.1); background: oklch(var(--lora-accent-l) var(--lora-accent-c) var(--lora-accent-h) / 0.1);
border-color: var(--lora-accent); border-color: var(--lora-accent);
transform: translateY(-1px);
}
.creator-actions {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: var(--space-1);
flex-wrap: wrap;
}
.civitai-view-btn {
display: flex;
align-items: center;
gap: 6px;
padding: 6px 12px;
background: var(--lora-accent);
color: white;
border: none;
border-radius: var(--border-radius-sm);
cursor: pointer;
font-size: 0.9em;
transition: all 0.2s;
}
.civitai-view-btn:hover {
opacity: 0.9;
transform: translateY(-1px);
}
.civitai-view-btn i {
font-size: 20px;
display: flex;
align-items: center;
justify-content: center;
} }

View File

@@ -1,4 +1,4 @@
import { showToast } from '../../utils/uiHelpers.js'; import { showToast, openCivitai } from '../../utils/uiHelpers.js';
import { modalManager } from '../../managers/ModalManager.js'; import { modalManager } from '../../managers/ModalManager.js';
import { import {
toggleShowcase, toggleShowcase,
@@ -95,8 +95,14 @@ export function showModelModal(model, modelType) {
</button> </button>
</div> </div>
<div class="creator-actions">
${model.from_civitai ? `
<button class="civitai-view-btn" title="View on Civitai" data-action="view-civitai" data-filepath="${model.file_path}">
<i class="fas fa-globe"></i> View on Civitai
</button>` : ''}
${model.civitai?.creator ? ` ${model.civitai?.creator ? `
<div class="creator-info"> <div class="creator-info" data-username="${model.civitai.creator.username}" data-action="view-creator" title="View Creator Profile">
${model.civitai.creator.image ? ${model.civitai.creator.image ?
`<div class="creator-avatar"> `<div class="creator-avatar">
<img src="${model.civitai.creator.image}" alt="${model.civitai.creator.username}" onerror="this.onerror=null; this.src='static/icons/user-placeholder.png';"> <img src="${model.civitai.creator.image}" alt="${model.civitai.creator.username}" onerror="this.onerror=null; this.src='static/icons/user-placeholder.png';">
@@ -107,6 +113,7 @@ export function showModelModal(model, modelType) {
} }
<span class="creator-username">${model.civitai.creator.username}</span> <span class="creator-username">${model.civitai.creator.username}</span>
</div>` : ''} </div>` : ''}
</div>
${renderCompactTags(model.tags || [], model.file_path)} ${renderCompactTags(model.tags || [], model.file_path)}
</header> </header>
@@ -269,6 +276,15 @@ function setupEventHandlers(filePath) {
case 'scroll-to-top': case 'scroll-to-top':
scrollToTop(target); scrollToTop(target);
break; break;
case 'view-civitai':
openCivitai(target.dataset.filepath);
break;
case 'view-creator':
const username = target.dataset.username;
if (username) {
window.open(`https://civitai.com/user/${username}`, '_blank');
}
break;
} }
} }