#20 Cross-Mindmap: lesbarere Defaults und Quote-Theme-Tags optional
- cross-claim-erweitert (282 Linien) ist mit Abstand der dichteste Strang; default off, damit die Erkenntnis-fokussierten Signale (debates, widerspricht, belegt, answers) nicht ueberdeckt werden. - Neuer Quote-Theme-Tag-Layer analog zur Single-Mindmap aus #19: jeder Top-Quote bekommt zusaetzliche Verbindungen zu allen Theme-Tags aus seinem themes-Array, default off, per Toggle einblendbar. - Force-Layout: Quote-Theme-Links bekommen sehr niedrige Strength (0.03), damit sie das Layout nicht ueber die Hierarchie kippen. Effekt: Default-Sichtbarkeit von 1422 auf 835 Linien reduziert; per Toggle laesst sich gezielt die jeweilige Erkenntnisachse einblenden. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
7019a7a04e
commit
226fd8db31
@ -1536,9 +1536,10 @@ const CrossMindmapView = {
|
|||||||
'cross-debate': true,
|
'cross-debate': true,
|
||||||
'cross-claim-belegt': true,
|
'cross-claim-belegt': true,
|
||||||
'cross-claim-widerspricht': true,
|
'cross-claim-widerspricht': true,
|
||||||
'cross-claim-erweitert': false,
|
'cross-claim-erweitert': false, // 282 Stueck — visuell zu dicht, opt-in
|
||||||
'cross-answer': true,
|
'cross-answer': true,
|
||||||
'cross-similarity': false,
|
'cross-similarity': false,
|
||||||
|
'quote-theme': false, // Quote-Tags zu allen Themen, opt-in
|
||||||
},
|
},
|
||||||
activeClusterId: null,
|
activeClusterId: null,
|
||||||
_refs: null,
|
_refs: null,
|
||||||
@ -1550,6 +1551,7 @@ const CrossMindmapView = {
|
|||||||
'cross-claim-erweitert': { stroke: '#60a5fa', dash: null, width: 1.2, opacity: 0.7 },
|
'cross-claim-erweitert': { stroke: '#60a5fa', dash: null, width: 1.2, opacity: 0.7 },
|
||||||
'cross-answer': { stroke: '#fb923c', dash: null, width: 1.4, opacity: 0.8 },
|
'cross-answer': { stroke: '#fb923c', dash: null, width: 1.4, opacity: 0.8 },
|
||||||
'cross-similarity': { stroke: '#7dd3fc', dash: '4,4', width: 0.7, opacity: 0.4 },
|
'cross-similarity': { stroke: '#7dd3fc', dash: '4,4', width: 0.7, opacity: 0.4 },
|
||||||
|
'quote-theme': { stroke: '#a3a3a3', dash: '1,3', width: 0.5, opacity: 0.3 },
|
||||||
},
|
},
|
||||||
|
|
||||||
async show(fromUrl = false) {
|
async show(fromUrl = false) {
|
||||||
@ -1661,18 +1663,26 @@ const CrossMindmapView = {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// 4. Top-Quote-Knoten
|
// 4. Top-Quote-Knoten + optionale Quote-Theme-Tag-Links
|
||||||
(d.top_quotes || []).forEach(q => {
|
(d.top_quotes || []).forEach(q => {
|
||||||
const epK = epIndex[`${q.podcast_id}:${q.episode_id}`];
|
const epK = epIndex[`${q.podcast_id}:${q.episode_id}`];
|
||||||
if (!epK) return;
|
if (!epK) return;
|
||||||
const ep = nodes.find(n => n.id === epK);
|
const ep = nodes.find(n => n.id === epK);
|
||||||
|
const qK = `q-${q.podcast_id}-${q.id}`;
|
||||||
nodes.push({
|
nodes.push({
|
||||||
id: `q-${q.podcast_id}-${q.id}`, type: 'quote',
|
id: qK, type: 'quote',
|
||||||
podcast_id: q.podcast_id, episode_id: q.episode_id, quote_id: q.id,
|
podcast_id: q.podcast_id, episode_id: q.episode_id, quote_id: q.id,
|
||||||
text: q.text, speaker: q.speaker, start_time: q.start_time,
|
text: q.text, speaker: q.speaker, start_time: q.start_time,
|
||||||
r: 3 * sc, color: ep ? ep.color : '#aaa',
|
r: 3 * sc, color: ep ? ep.color : '#aaa',
|
||||||
});
|
});
|
||||||
links.push({ source: epK, target: `q-${q.podcast_id}-${q.id}`, type: 'episode-quote' });
|
links.push({ source: epK, target: qK, type: 'episode-quote' });
|
||||||
|
// Quote ↔ Theme-Tags (default off)
|
||||||
|
(q.themes || []).forEach(tid => {
|
||||||
|
const tK = `t-${q.podcast_id}-${tid}`;
|
||||||
|
if (nodes.find(n => n.id === tK)) {
|
||||||
|
links.push({ source: qK, target: tK, type: 'quote-theme' });
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// 5. Cross-Links (debates, claim_*, answers, similarity)
|
// 5. Cross-Links (debates, claim_*, answers, similarity)
|
||||||
@ -1696,12 +1706,14 @@ const CrossMindmapView = {
|
|||||||
if (l.type === 'cluster-theme') return 100 * sc;
|
if (l.type === 'cluster-theme') return 100 * sc;
|
||||||
if (l.type === 'theme-episode') return 70 * sc;
|
if (l.type === 'theme-episode') return 70 * sc;
|
||||||
if (l.type === 'episode-quote') return 18 * sc;
|
if (l.type === 'episode-quote') return 18 * sc;
|
||||||
|
if (l.type === 'quote-theme') return 50 * sc;
|
||||||
if (l.type && l.type.startsWith('cross-')) return 220 * sc;
|
if (l.type && l.type.startsWith('cross-')) return 220 * sc;
|
||||||
return 60 * sc;
|
return 60 * sc;
|
||||||
}).strength(l => {
|
}).strength(l => {
|
||||||
if (l.type === 'cluster-theme') return 0.4;
|
if (l.type === 'cluster-theme') return 0.4;
|
||||||
if (l.type === 'theme-episode') return 0.2;
|
if (l.type === 'theme-episode') return 0.2;
|
||||||
if (l.type === 'episode-quote') return 0.4;
|
if (l.type === 'episode-quote') return 0.4;
|
||||||
|
if (l.type === 'quote-theme') return 0.03;
|
||||||
if (l.type && l.type.startsWith('cross-')) return 0.04;
|
if (l.type && l.type.startsWith('cross-')) return 0.04;
|
||||||
return 0.2;
|
return 0.2;
|
||||||
}))
|
}))
|
||||||
@ -1816,6 +1828,7 @@ const CrossMindmapView = {
|
|||||||
'cross-claim-erweitert': 'Erweiterung (Claims)',
|
'cross-claim-erweitert': 'Erweiterung (Claims)',
|
||||||
'cross-answer': 'Frage→Antwort',
|
'cross-answer': 'Frage→Antwort',
|
||||||
'cross-similarity': 'semantische Ähnlichkeit',
|
'cross-similarity': 'semantische Ähnlichkeit',
|
||||||
|
'quote-theme': 'Quote-Theme-Tags',
|
||||||
};
|
};
|
||||||
panel.innerHTML = `<div style="font-weight:600;color:var(--text-muted);margin-bottom:2px">Cross-Verbindungen</div>`;
|
panel.innerHTML = `<div style="font-weight:600;color:var(--text-muted);margin-bottom:2px">Cross-Verbindungen</div>`;
|
||||||
Object.keys(labels).forEach(t => {
|
Object.keys(labels).forEach(t => {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user