feat: Info-Button mit Tooltip (Typ, Sprache, Ausrichtung) in Quellenverwaltung
- DB-Migration: language und bias Spalten zur sources-Tabelle hinzugefuegt - Alle 254 Quellen mit Metadaten befuellt (Sprache, politische Ausrichtung) - SourceResponse-Modell um language/bias Felder erweitert - Info-Icon (i) mit Hover-Tooltip nach source-group-name eingefuegt - Tooltip zeigt Typ, Sprache und Ausrichtung der jeweiligen Quelle Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Dieser Commit ist enthalten in:
@@ -127,6 +127,8 @@ class SourceResponse(BaseModel):
|
|||||||
article_count: int = 0
|
article_count: int = 0
|
||||||
last_seen_at: Optional[str] = None
|
last_seen_at: Optional[str] = None
|
||||||
created_at: str
|
created_at: str
|
||||||
|
language: Optional[str] = None
|
||||||
|
bias: Optional[str] = None
|
||||||
is_global: bool = False
|
is_global: bool = False
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -581,11 +581,25 @@ const UI = {
|
|||||||
? `<span class="source-feed-count">${feedCount} Feed${feedCount !== 1 ? 's' : ''}</span>`
|
? `<span class="source-feed-count">${feedCount} Feed${feedCount !== 1 ? 's' : ''}</span>`
|
||||||
: '';
|
: '';
|
||||||
|
|
||||||
|
// Info-Button mit Tooltip (Typ, Sprache, Ausrichtung)
|
||||||
|
let infoButtonHtml = '';
|
||||||
|
const firstFeed = feeds[0] || {};
|
||||||
|
const hasInfo = firstFeed.language || firstFeed.bias;
|
||||||
|
if (hasInfo) {
|
||||||
|
const typeMap = { rss_feed: 'RSS-Feed', web_source: 'Web-Quelle', telegram_channel: 'Telegram-Kanal' };
|
||||||
|
const lines = [];
|
||||||
|
lines.push('Typ: ' + (typeMap[firstFeed.source_type] || firstFeed.source_type || 'Unbekannt'));
|
||||||
|
if (firstFeed.language) lines.push('Sprache: ' + firstFeed.language);
|
||||||
|
if (firstFeed.bias) lines.push('Ausrichtung: ' + firstFeed.bias);
|
||||||
|
const tooltipText = this.escape(lines.join('\n'));
|
||||||
|
infoButtonHtml = ` <span class="info-icon tooltip-below" data-tooltip="${tooltipText}">i</span>`;
|
||||||
|
}
|
||||||
|
|
||||||
return `<div class="source-group">
|
return `<div class="source-group">
|
||||||
<div class="source-group-header" ${toggleAttr}>
|
<div class="source-group-header" ${toggleAttr}>
|
||||||
${toggleIcon}
|
${toggleIcon}
|
||||||
<div class="source-group-info">
|
<div class="source-group-info">
|
||||||
<span class="source-group-name">${this.escape(displayName)}</span>
|
<span class="source-group-name">${this.escape(displayName)}</span>${infoButtonHtml}
|
||||||
</div>
|
</div>
|
||||||
<span class="source-category-badge cat-${feeds[0]?.category || 'sonstige'}">${catLabel}</span>
|
<span class="source-category-badge cat-${feeds[0]?.category || 'sonstige'}">${catLabel}</span>
|
||||||
${feedCountBadge}
|
${feedCountBadge}
|
||||||
|
|||||||
In neuem Issue referenzieren
Einen Benutzer sperren