ui: named FCI block holds the metadata; hide the empty content pane (v2.7.13)

- pysimFsInfoHtml puts the FID/type/size line inside the fieldset, so the
  selected file is one bordered block with its symbolic name in the border;
  files without an FCI keep the plain borderless line.
- The content pane starts hidden and is synced after every mutation
  (selection clears it, read success shows it, read failure keeps it hidden,
  edit/cancel re-sync): no empty box before a read or edit.
- tests: FCI ordering assertions; new fs_read.test.js (visibility helper,
  read success/failure/throw, markup + call sites); fs_edit extraction.
This commit is contained in:
2026-09-20 23:45:12 +03:00
parent f966276217
commit 93ed870f75
7 changed files with 155 additions and 18 deletions
+5 -3
View File
@@ -776,9 +776,11 @@ test('pysimFsInfoHtml shows FID, type, size and the decoded FCI', () => {
// the short file identifier is merged into the file identifier row
assert.ok(out.includes('6F4F · Short file identifier: 22'), out);
assert.ok(!out.includes('<div>Short file identifier:'), out);
// the FCI sits in a bordered container whose legend is the symbolic name,
// below the metadata line
assert.ok(out.indexOf('FID: 6F4F') < out.indexOf('<fieldset'), out);
// the metadata line and the FCI rows share one bordered container whose
// legend is the symbolic name
assert.ok(out.indexOf('<fieldset') < out.indexOf('<legend'), out);
assert.ok(out.indexOf('<legend') < out.indexOf('FID: 6F4F'), out);
assert.ok(out.indexOf('FID: 6F4F') < out.indexOf('File descriptor'), out);
assert.ok(out.includes('<legend class="px-1 text-xs font-mono font-medium text-gray-500 dark:text-slate-400">EF.SAMPLE</legend>'), out);
delete global.t;
});