\n
\n
\n
')]
print(f"Extracted relations block: chars {start_idx} - {end_idx}")
print(f"Relations block starts with: {relations_block[:80]!r}")
print(f"Relations block ends with: {relations_block[-60:]!r}")
# ── 2. Remove the relations block + spacers from inner-left-col ──────────────
content = content[:start_idx] + content[end_idx:]
print("Removed relations + spacers from inner-left-col")
# ── 3. Insert relations into inner-center-col (before ROW 3: Files) ──────────
insert_before = ' '
insert_idx = content.find(insert_before)
if insert_idx == -1:
print("ERROR: Could not find ROW 3 insertion point")
exit(1)
relations_in_center = '\n \n' + relations_block + '\n\n'
content = content[:insert_idx] + relations_in_center + content[insert_idx:]
print(f"Inserted relations before ROW 3 at char {insert_idx}")
# ── 4. Add updateInnerColumnVisibility() after updateRightColumnVisibility() ─
old_js = """ function updateRightColumnVisibility() {
const rightColumn = document.getElementById('case-right-column');
const leftColumn = document.getElementById('case-left-column');
if (!rightColumn || !leftColumn) return;
const visibleRightModules = rightColumn.querySelectorAll('.right-module-card:not(.d-none)');
if (visibleRightModules.length === 0) {
rightColumn.classList.add('d-none');
rightColumn.classList.remove('col-lg-4');
leftColumn.classList.remove('col-lg-8');
leftColumn.classList.add('col-12');
} else {
rightColumn.classList.remove('d-none');
rightColumn.classList.add('col-lg-4');
leftColumn.classList.add('col-lg-8');
leftColumn.classList.remove('col-12');
}
}"""
new_js = """ function updateRightColumnVisibility() {
const rightColumn = document.getElementById('case-right-column');
const leftColumn = document.getElementById('case-left-column');
if (!rightColumn || !leftColumn) return;
const visibleRightModules = rightColumn.querySelectorAll('.right-module-card:not(.d-none)');
if (visibleRightModules.length === 0) {
rightColumn.classList.add('d-none');
rightColumn.classList.remove('col-lg-4');
leftColumn.classList.remove('col-lg-8');
leftColumn.classList.add('col-12');
} else {
rightColumn.classList.remove('d-none');
rightColumn.classList.add('col-lg-4');
leftColumn.classList.add('col-lg-8');
leftColumn.classList.remove('col-12');
}
}
function updateInnerColumnVisibility() {
const leftCol = document.getElementById('inner-left-col');
const centerCol = document.getElementById('inner-center-col');
if (!leftCol || !centerCol) return;
// Tæl synlige moduler i venstre kolonnen (mb-3 wrappers der ikke er skjulte)
const visibleLeftModules = leftCol.querySelectorAll('.mb-3:not(.d-none) [data-module]');
const hasVisibleLeft = visibleLeftModules.length > 0;
if (!hasVisibleLeft) {
// Ingen synlige moduler i venstre - udvid center til fuld bredde
leftCol.classList.add('d-none');
centerCol.classList.remove('col-xl-8');
centerCol.classList.add('col-xl-12');
} else {
// Gendan 4/8 split
leftCol.classList.remove('d-none');
centerCol.classList.remove('col-xl-12');
centerCol.classList.add('col-xl-8');
}
}"""
if old_js in content:
content = content.replace(old_js, new_js)
print("Added updateInnerColumnVisibility() function")
else:
print("ERROR: Could not find updateRightColumnVisibility() for JS patch")
exit(1)
# ── 5. Call updateInnerColumnVisibility() from applyViewLayout ───────────────
old_call = ' updateRightColumnVisibility();\n }'
new_call = ' updateRightColumnVisibility();\n updateInnerColumnVisibility();\n }'
if old_call in content:
content = content.replace(old_call, new_call, 1)
print("Added updateInnerColumnVisibility() call in applyViewLayout")
else:
print("ERROR: Could not find updateRightColumnVisibility() call")
exit(1)
# ── Write file ────────────────────────────────────────────────────────────────
with open('app/modules/sag/templates/detail.html', 'w', encoding='utf-8') as f:
f.write(content)
print("\n✅ Done! Lines written:", content.count('\n'))