story-summary: facts UI split + relationships from facts
This commit is contained in:
@@ -1862,52 +1862,39 @@ CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860", "--workers", "
|
||||
|
||||
|
||||
function renderFacts(facts) {
|
||||
summaryData.facts = facts || [];
|
||||
summaryData.facts = facts || [];
|
||||
|
||||
const container = $('facts-list');
|
||||
if (!container) return;
|
||||
const container = $('facts-list');
|
||||
if (!container) return;
|
||||
|
||||
const activeFacts = (facts || []).filter(f => !f.retracted);
|
||||
const isRelation = f => /^对.+的/.test(f.p);
|
||||
const stateFacts = (facts || []).filter(f => !f.retracted && !isRelation(f));
|
||||
|
||||
if (!activeFacts.length) {
|
||||
setHtml(container, '<div class="empty">暂无事实记录</div>');
|
||||
return;
|
||||
}
|
||||
if (!stateFacts.length) {
|
||||
setHtml(container, '<div class="empty">暂无状态记录</div>');
|
||||
return;
|
||||
}
|
||||
|
||||
const relations = activeFacts.filter(f => /^对.+的/.test(f.p));
|
||||
const states = activeFacts.filter(f => !/^对.+的/.test(f.p));
|
||||
const grouped = new Map();
|
||||
for (const f of stateFacts) {
|
||||
if (!grouped.has(f.s)) grouped.set(f.s, []);
|
||||
grouped.get(f.s).push(f);
|
||||
}
|
||||
|
||||
let html = '';
|
||||
|
||||
if (states.length) {
|
||||
html += `<div class="fact-group">
|
||||
<div class="fact-group-title">状态/属性</div>
|
||||
${states.map(f => `
|
||||
let html = '';
|
||||
for (const [subject, items] of grouped) {
|
||||
html += `<div class="fact-group">
|
||||
<div class="fact-group-title">${h(subject)}</div>
|
||||
${items.map(f => `
|
||||
<div class="fact-item">
|
||||
<span class="fact-subject">${h(f.s)}</span>
|
||||
<span class="fact-predicate">${h(f.p)}</span>
|
||||
<span class="fact-object">${h(f.o)}</span>
|
||||
<span class="fact-since">#${(f.since || 0) + 1}</span>
|
||||
</div>
|
||||
`).join('')}
|
||||
</div>`;
|
||||
}
|
||||
}
|
||||
|
||||
if (relations.length) {
|
||||
html += `<div class="fact-group">
|
||||
<div class="fact-group-title">人物关系</div>
|
||||
${relations.map(f => `
|
||||
<div class="fact-item">
|
||||
<span class="fact-subject">${h(f.s)}</span>
|
||||
<span class="fact-predicate">${h(f.p)}</span>
|
||||
<span class="fact-object">${h(f.o)}</span>
|
||||
${f.trend ? `<span class="fact-trend ${TREND_CLASS[f.trend] || ''}">${h(f.trend)}</span>` : ''}
|
||||
<span class="fact-since">#${(f.since || 0) + 1}</span>
|
||||
</div>
|
||||
`).join('')}
|
||||
</div>`;
|
||||
setHtml(container, html);
|
||||
}
|
||||
|
||||
setHtml(container, html);
|
||||
}
|
||||
})();
|
||||
|
||||
Reference in New Issue
Block a user