index.php
- Pfad:
src/View/prompts/index.php - Namespace: -
- Zeilen: 134 | Größe: 5,031 Bytes
- Geändert: 2025-12-27 14:07:02 | Gescannt: 2025-12-31 10:22:15
Code Hygiene Score: 100
- Dependencies: 100 (25%)
- LOC: 100 (20%)
- Methods: 100 (20%)
- Secrets: 100 (15%)
- Classes: 100 (10%)
- Magic Numbers: 100 (10%)
Keine Issues gefunden.
Versionen 3
-
v3
2025-12-27 14:07 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v2
2025-12-27 11:46 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v1
2025-12-27 11:30 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
Code
<?php ob_start(); ?>
<h1>Prompts verwalten</h1>
<div class="stats-grid">
<div class="stat-card">
<span class="stat-card__value"><?= $stats['total'] ?? 0 ?></span>
<span class="stat-card__label">Gesamt</span>
</div>
<div class="stat-card stat-card--success">
<span class="stat-card__value"><?= $stats['active'] ?? 0 ?></span>
<span class="stat-card__label">Aktiv</span>
</div>
<div class="stat-card stat-card--muted">
<span class="stat-card__value"><?= $stats['inactive'] ?? 0 ?></span>
<span class="stat-card__label">Inaktiv</span>
</div>
<div class="stat-card stat-card--info">
<span class="stat-card__value"><?= $stats['linked_to_critics'] ?? 0 ?></span>
<span class="stat-card__label">Mit Critics verknüpft</span>
</div>
</div>
<div class="page-actions">
<a href="/prompts/new" class="btn btn--primary">Neuer Prompt</a>
<a href="/critics" class="btn btn--secondary">Critics verwalten</a>
</div>
<h2>Prompts</h2>
<p class="text-muted">Prompt-Templates für Content-Generierung, Kritik und Revision.</p>
<div class="filters">
<input type="search" id="prompts-search" class="form-input" placeholder="Durchsuchen...">
</div>
<table id="prompts-table" data-sortable>
<thead>
<tr>
<th data-sort="id">ID</th>
<th data-sort="name">Name</th>
<th data-sort="version">Version</th>
<th>Typ</th>
<th data-sort="is_active">Status</th>
<th>Verknüpfte Critics</th>
<th data-sort="updated_at">Aktualisiert</th>
<th>Aktionen</th>
</tr>
</thead>
<tbody>
<?php if (!empty($prompts)): ?>
<?php foreach ($prompts as $prompt): ?>
<?php
// Detect prompt type from name
$type = 'other';
if (str_starts_with($prompt['name'], 'critic-')) {
$type = 'critic';
} elseif (str_starts_with($prompt['name'], 'content-generate')) {
$type = 'generate';
} elseif (str_starts_with($prompt['name'], 'content-revise')) {
$type = 'revise';
} elseif (str_contains($prompt['name'], 'system')) {
$type = 'system';
}
?>
<tr>
<td><a href="/prompts/<?= $prompt['id'] ?>"><?= $prompt['id'] ?></a></td>
<td><a href="/prompts/<?= $prompt['id'] ?>"><?= htmlspecialchars($prompt['name']) ?></a></td>
<td>v<?= htmlspecialchars($prompt['version']) ?></td>
<td><span class="badge badge--type-<?= $type ?>"><?= $promptTypes[$type] ?? $type ?></span></td>
<td>
<?php if ($prompt['is_active']): ?>
<span class="badge badge--success">Aktiv</span>
<?php else: ?>
<span class="badge badge--muted">Inaktiv</span>
<?php endif; ?>
</td>
<td>
<?php if ($prompt['critic_count'] > 0): ?>
<span class="badge badge--info"><?= $prompt['critic_count'] ?> Critic(s)</span>
<?php else: ?>
<span class="text-muted">-</span>
<?php endif; ?>
</td>
<td><?= substr($prompt['updated_at'], 0, 16) ?></td>
<td class="actions">
<a href="/prompts/<?= $prompt['id'] ?>/edit" class="btn btn--small">Bearbeiten</a>
<button class="btn btn--small btn--secondary"
hx-post="/prompts/<?= $prompt['id'] ?>/duplicate"
hx-headers='{"X-CSRF-TOKEN": "<?= $csrfToken ?>"}'
hx-swap="none"
hx-disabled-elt="this">Duplizieren</button>
</td>
</tr>
<?php endforeach; ?>
<?php else: ?>
<tr><td colspan="8" class="empty-state empty-state--small">Keine Prompts vorhanden</td></tr>
<?php endif; ?>
</tbody>
</table>
<script type="module">
import { init } from '/js/components/data-table.js';
const dataTable = init({
clock: { now_epoch_ms_utc: () => Date.now() },
logger: console,
ui: {
showMessage: (msg) => { console.log(msg.type + ': ' + msg.text); },
disableFeature: (key) => { console.warn('Feature disabled: ' + key); },
offerRetry: () => Promise.resolve(false)
},
runId: crypto.randomUUID()
});
dataTable.create('prompts-table', {
searchInput: 'prompts-search',
pageSize: 20
});
</script>
<style>
.actions { white-space: nowrap; }
.actions form { display: inline; margin-left: 0.25rem; }
.badge--type-critic { background: #6366f1; color: white; }
.badge--type-generate { background: #10b981; color: white; }
.badge--type-revise { background: #f59e0b; color: white; }
.badge--type-system { background: #ec4899; color: white; }
.badge--type-other { background: #6b7280; color: white; }
</style>
<?php $content = ob_get_clean(); ?>
<?php require VIEW_PATH . '/layout.php'; ?>